一線工程師的經驗之談:ERP安全的部署和實現
原創【51CTO.com 獨家特稿】來自于維基的解釋說:ERP是企業資源規劃的英文縮寫,是基于計算機的資源管理系統,包括對有形資產、資金、材料、人力資源的企業管理軟件。廣義上的ERP涵蓋了很多內容,CRM、人力資源管理,財務管理、生產制造管理等等很多內容。不管是ERP、CRM、SRM或者是其他一些類似的商業應用管理軟件,都涉及到安全問題,因為他們存儲了非常重要的業務數據,這些應用如果存在漏洞的話,都會對企業造成重大的經濟損失。
一、ERP是安全的嗎?
關于ERP的安全,一直以來都缺少足夠的關注。在我接觸的客戶中,通常他們會對ERP安全持有三個態度:
1、第一個觀點:ERP的業務應用程序都在內部網絡里,因此是可信的。持有這種觀點的人絕大多數是業務層面的高管,而非IT部門的主管。實際情況是,除非你還在大型機時代,不然的話你一定需要和別人互聯。分支辦事處、客戶和供應商,以及銀行、銀聯都會在你的網絡里有接口,而且很多員工的辦公電腦都可以連接到互聯網,這就又多了一個高風險的互聯網通道。我們在google上輸入inrul:sap,就可以看到很多使用sap的內部頁面。再比如圖1,我們在一個shado的搜索引擎上,輸入erp,可以輕易的搜索到很多國家的erp服務器,包括他們的ip,中間件,開發語言等信息。
圖1 利用搜索引擎得到的ERP服務器信息
2、第二個觀點:ERP是開發商的問題。持有這種觀點的人認為,ERP的安全問題,開發商應該在設計之初就充分考慮到,并且確保了安全,持有這種觀點的人一般都是對安全不太了解的IT主管。從技術的角度來說,開發商應該對他程序的錯誤和架構負責。但是,默認/不安全的配置、人為因素、補丁管理、策略和過程則是用戶自己的問題。換句話說,即使代碼是百分百安全的,在實施部署、日常運維中,你還是有很多機會可以犯錯。
3、第三個觀點:業務應用是內部的,而且非常具體,黑客不可能了解結構和用途。持有這種觀點的人一般認為,系統都在公司內部運行,而且使用的平臺也不是windows這種黑客所熟知的,因此他是封閉、隱藏的世界,因此可以高枕無憂。
真的可以高枕無憂嗎?第一,越熱門的產品越容易被黑客研究,從而招致更多的攻擊,因為一旦攻擊得手,其可復制性很大,可以獲得更多戰果。大家熟知的windows就是在這種攻防對抗中慢慢健壯起來的。國內現在的ERP市場,幾個大型廠商的占用率非常高,這就提供了研究攻擊的土壤。其二,ERP在過去幾年的發展中,我們可以清楚的看到,企業發展壯大之后,不可避免的具有地域擴張的需要。所以它越來越依賴于互聯網運行,即使現在沒有,將來也會有,等到那個時候再來考慮安全問題,已經積重難返了,整改的代價會非常高。第三,不管是供應商還是用戶,對安全的防御能力還停留在3-5年前的水平,買個防火墻,裝個殺毒軟件。他們不知道攻擊早已經從2-4層轉移到應用層攻擊上了。
那么,ERP的主要安全問題是什么呢?根本原因有三個,第一就是ERP具有復雜的結構,系統越復雜,安全問題越難處理。也就是安全界常說的complexity kills security ,復雜性殺死安全。第二,安全層次覆蓋網絡、應用等各個層面。第三,管理員擔心打補丁,會造成系統出問題,所以絕大多數ERP系統里都存在著很多漏洞。所以,從erp的安全生命周期來上來說,想要保證整體安全,要從兩個方面來考慮,開發安全,實施部署的安全。
圖2 ERP安全生命周期框架#p#
二、開發安全
圖3 開發安全框架
這個圖,實際上是針對程序員來說的,開發的安全。中間是最重要的數據。開發安全分兩塊,一個是代碼漏洞,一個是前端漏洞。所謂前端漏洞,就是整個erp的前臺,與用戶交互的地方。
1、代碼安全
在代碼的漏洞上,根據常見的ERP安全問題,我們做了一個TOP10的排名。
圖4 開發代碼漏洞TOP10
例一:跨站。sap有很多跨站問題,最新發現的一個是在5月份,在RequestParts.htm頁面上,有漏洞的變量是sap-ffield,這個頁面是sap和互聯網的接口交互的地方,通過這個跨站漏洞,可以繞過sap的跨站過濾,獲取管理員的cookie。
- 提交:/sap(bD1lbiZjPTAwMA==)/bc/bsp/sap/icf/RequestParts.htm?sap-ffield=aaa=<img/src="asas"/onerror="alert('XSS')">
例子中使用簡單的onerror,一個標準的事件屬性,就可以繞過sap的過濾機制,由此可見sap的跨站過濾,應該是非常脆弱的。而且這個頁面比較關鍵,它是互聯網交互的,所以如果你google去搜這種頁面,就有機會跨站,拿到管理員cookie,也就是說,你完全可以遠程滲透sap。#p#
例二:信息泄露問題。
在Oracle財務軟件的/pls/DAD/find_web.ping和/OA_HTML/jsp/fnd/fndping.jsp這兩個頁面上都有這個問題,這兩個頁面記錄了連接的錯誤信息,而且錯誤信息非常詳細,幾點幾分,Oracle的http服務器Apache某某版本,與某IP的連接出現問題,在Apache的日志中記錄了這個問題,Apache的日志路徑是什么,可以使用哪些debug命令來調試確認等等一系列信息。
例三:錯誤的訪問控制/遍歷
這個問題是NETWAVER里的,NETWAVER是sap的基本平臺,sap所有的新產品都搭建在這個平臺上。在NETWAVER里有個rfc庫,庫里有很多函數可以被調用,但是誰可以調用這些函數,只有幾個賬戶可以調用。其中一個賬戶是SAPCPIC,他有個默認密碼是admin。這個賬戶不是在線用戶,就是說他不能直接登錄,它就是用來執行rfc兼容命令的,可以做遠程函數調用。使用這個權限你就可以獲得共享內容。然后你還可以寫idoc,這個idoc是sap的數據交換碼,比方說你的商品價格,我就可以通過這個權限,把你的商品價格取出來,或者把你的商品價格改掉放進去。這個攻擊就是利用這個賬戶,因為這個賬戶一般人根本不會用到,甚至都不知道密碼是什么。
圖5 NETWAVER中的錯誤訪問控制/遍歷漏洞
2、前端安全
圖6 開發中的前端安全漏洞TOP10
這里都是和用戶交互的地方,比如BS結構的瀏覽器頁面,信息的傳遞都在這里。所以這里的風險級別都比較高,也是很多都可以遠程去做的。#p#
例一:緩沖區溢出
該例參見宇文先生在09年的《大型企業之患!SAP安全之攻擊客戶端》這篇文章。http://netsecurity.51cto.com/art/200909/150135.htm,在第二段里,他提到了緩沖區溢出攻擊的一個實例。
例二:默認密碼
erp里因為賬戶、權限很多,也記不住,就有個很壞的習慣,把密碼寫在程序里,而且大多數也不怎么加密,嗅探就可以,而且呢,這種寫法的還大多數都是連接數據庫,你可以很容易成為他的dba。關于這點,我們在后面會詳細提到。
三、安全的部署和實現
圖7 安全的部署、實現框架圖
在這一部分,是比較通用的:底層的網絡,然后上面跑的系統,數據庫、應用,在這里,他也有前端的漏洞問題,這就比開發安全要復雜一些。
1、網絡層漏洞
圖8 網絡層漏洞TOP10
網絡漏洞,這個大家都見的多了,一般的安全加固也在做這方面的事情。
例:監聽SAP未加密的通信
在SAP網絡中,使用
tcpdump -n -i eth0 'tcp[13] & 3 != 0 and (( tcp[2:2] >= 3200
tcp[2:2] < 3300) > or 5 ( tcp[2:2] >= 3600 tcp[2:2] < > 3700))'
進行監聽,這個例子是監聽tcp的3200,3600幾個高端端口,這是NETWAVER的默認專用端口,在這個例子里,我們發現了HR系統的連接密碼,權限是最大權限,可以獲得hr系統的所有數據。#p#
2、操作系統漏洞
圖9 操作系統層漏洞TOP10
在erp里面有個很大的問題就是默認密碼,那在這一層上,實際上也有很多可利用的地方。這里列出了存儲各類密碼的不同路徑,這是從sap手冊上找到的,我相信大多數人不會改這些東西,你只要能夠訪問這些文件,你就可以拿到相關密碼。雖然有的密碼是加密的,但是他們的加密機制比較弱。
例:默認敏感文件
數據庫文件(數據,加密的Oracle、SAP密碼)
路徑:/oracle/
SAP配置文件(加密的密碼)
/usr/sap/
/usr/sap/
Configtool配置文件(加密的數據庫密碼)
\usr\sap\DM0\SYS\global\security\data\SecStope.properties
\usr\sap\DM0\SYS\global\security\data\SecStope.key
J2EE Trace文件(明文密碼)
/usr/sap/
圖10,在這個文件里抓到的用戶名和密碼
ICM(加密密碼)
\usr\sap\DM0\SYS\exe\uc\NTI386\icmauth.txt #p#
3、數據庫漏洞
圖11 數據庫漏洞TOP10
例一:Oracle開啟不必要的服務
UTL_HTTP:UTL_HTTP可以讀取Oracle里面的網頁源碼,這個參數比較危險,如果你學過oracle注入的話,這個參數是很常見的Oracle注入測試點,后來Oracle發現了這個問題,在11的版本里頭,開始提供針對這個參數的訪問控制,但是有多少人知道呢?又有多少人知道,而且會去進行訪問控制呢?我看了很多的安全加固手冊,對這個完全沒有提及。
UTL_TCP:看名字你就知道,它是建立tcpip連接的,可以跨越數據庫領域對外通信。他的出名是因為Voyager這個蠕蟲,這個蠕蟲會把dba的權限授給public,然后利用UTL_TCP去網上下載其他病毒,再然后把數據庫的密碼發送郵件給一個指定郵箱,06年1月份的時候,這個病毒大規模爆發,直到6月份,Oracle才發布了補丁。這些默認安裝的服務,都是可以利用的。
例二:MSSQL的Master..xp_dirtree _\\fakesmb\sharee'
這是列目錄,找共享,是常見的攻擊命令,也是sql注入的常見用法,可以列出你根目錄,再然后找到你的數據庫,把它down下來慢慢破解。
例三:使用低權限 Oracle 數據庫賬戶得到 OS 訪問權限
這個例子在互聯網上廣為流傳,文章名字就叫做《使用低權限 Oracle 數據庫賬戶得到 OS 訪問權限》。其原理:一般情況下,你去連接Oracle的SMB控制臺,都需要DBA權限,但是還是有辦法來獲得權限的,那么這里就利用了Oracle的一個漏洞,在Oracle里面,任何用戶都可以創建一個文本索引,并且發送文本查詢。這就是這個漏洞的利用基礎,然后你就能讀到服務器上的遠程共享,再通過遠程共享,竊取你這臺服務器的賬戶。
4、應用漏洞
圖12 應用漏洞TOP10
應用漏洞實際上就和日常運維有很大關系了,比較危險的也是前3名,補丁,默認密碼,權限設置。#p#
例一:默認密碼
圖13 默認密碼
這里的SAP和DDIC是超級管理員,TMSADM是用來做通信管理的,SAPCPIC這個說過了,是rfc遠程調用的,EARLYWATCH類似與日志審計賬戶。他們都有自己的初始密碼,除了超級管理員的密碼可能被改,其他被改的可能性不大。
5、前端漏洞
圖14 前端漏洞TOP10
例:未加密
圖15 缺少加密
sap怎么傳輸密碼的呢,他有一個自己的協議叫DIAG,把數據包走diag傳過去,因為他覺得diag是私有格式,所以認為很安全,密碼就是簡單的壓縮一下傳過去,但是這是可以被解壓的,數據加密也是這樣。那怎么解決呢?SNC,sap的一個身份驗證機制,4.0版本以上開始提供。
webgui,這個對密碼用了base64編碼,簡單的說,base64根本就不能算是個加密,它的主要作用也不是用來加密,它只能說,把密碼變成人類不可直接讀的文件,base64很容易破解。現在只有電子郵件才用它,因為它能保證數據在很多傳遞過程中不會出錯。所以這個密碼很容易就破解了,而且網上有很多工具。
RFC,這個我們說過了,遠程調用的函數庫,他的密碼加密是異或運算一個已知的值,你知道知道這個值,你就非常輕松的運算出來明文,就算你不知道這個已知的值,如果他的密鑰空間不夠大,出現重復,仍然可被破解。無線的密碼破解,其實也是和這個原理差不多,就是不斷抓包,抓到一定數量時候,他就會有重復,然后破解。
Visual admin的控制臺密碼加密,用的是自己的專有算法,不過這個算法在08年前被破了,但是不好利用。
mobile的admin控制臺:無加密。
【51CTO.com獨家特稿,非經授權謝絕轉載!合作媒體轉載請注明原文出處及出處!】
【編輯推薦】