黑客狙擊Oracle系統的八大常用套路
1.SQL注入攻擊
如今大部分的Oracle數據庫都具有為某種類(lèi)型網(wǎng)絡(luò )應用服務(wù)的后端數據存儲區,網(wǎng)頁(yè)應用使數據庫更容易成為我們的攻擊目標體現在三個(gè)方面。其一,這些應用界面非常復雜,具有多個(gè)組成成分,使數據庫管理員難以對它們進(jìn)行徹底檢查。其二,阻止程序員侵入的屏障很低,即便不是C語(yǔ)言的編程專(zhuān)家,也能夠對一些頁(yè)面進(jìn)行攻擊。下面我們會(huì )簡(jiǎn)單地解釋為什么這對我們這么重要。第三個(gè)原因是優(yōu)先級的問(wèn)題。網(wǎng)頁(yè)應用一直處于發(fā)展的模式,所以他們在不斷變化,推陳出新。這樣安全問(wèn)題就不是一個(gè)必須優(yōu)先考慮的問(wèn)題。
SQL注入攻擊是一種很簡(jiǎn)單的攻擊,在頁(yè)面表單里輸入信息,悄悄地加入一些特殊代碼,誘使應用程序在數據庫里執行這些代碼,并返回一些程序員沒(méi)有料到的結果。例如,有一份用戶(hù)登錄表格,要求輸入用戶(hù)名和密碼才能登錄,在用戶(hù)名這一欄,輸入以下代碼:
|
如果數據庫程序員沒(méi)有聰明到能夠檢查出類(lèi)似的信息并“清洗”掉我們的輸入,該代碼將在遠程數據庫系統執行,然后這些關(guān)于所有用戶(hù)名和密碼的敏感數據就會(huì )返回到我們的瀏覽器。
你可能會(huì )認為這是在危言聳聽(tīng),不過(guò)還有更絕的。David Litchfield在他的著(zhù)作《Oracle黑客手冊》(Oracle Hacker's Handbook)中把某種特殊的pl/sql注入攻擊美其名曰:圣杯(holy grail),因為它曾通殺Oracle 8到Oracle10g的所有Oracle數據庫版本。很想知道其作用原理吧。你可以利用一個(gè)被稱(chēng)為DBMS_EXPORT_EXTENSION的程序包,使用注入攻擊獲取執行一個(gè)異常處理程序的代碼,該程序會(huì )賦予用戶(hù)或所有相關(guān)用戶(hù)數據庫管理員的特權。
這就是Oracle發(fā)布的著(zhù)名安全升級補丁Security Alert 68所針對的漏洞。不過(guò)據Litchfield稱(chēng),這些漏洞是永遠無(wú)法完全修補完畢的。
防范此類(lèi)攻擊的方法
總而言之,雖說(shuō)沒(méi)有萬(wàn)能的防彈衣,但鑒于這個(gè)問(wèn)題涉及到所有面向網(wǎng)絡(luò )的應用軟件,還是要盡力防范。目前市面上有各式各樣可加以利用的SQL注入檢測技術(shù)。
還可以用不同的入侵檢測工具在不同的水平上檢測SQL注入攻擊。訪(fǎng)問(wèn)專(zhuān)門(mén)從事Oracle安全性研究的Pete Finnigan的安全網(wǎng)站http://www.petefinnigan.com/orasec.htm,在該網(wǎng)頁(yè)搜索“sql injection”,可以獲得更多相關(guān)信息。Pete Finnigan曾在其博客上報告稱(chēng)Steven Feurstein目前正在編寫(xiě)一個(gè)稱(chēng)為SQL Guard 的pl/sql程序包,專(zhuān)門(mén)用來(lái)防止SQL注入攻擊。
對于軟件開(kāi)發(fā)人員來(lái)說(shuō),很多軟件包都能夠幫助你“清洗”輸入信息。如果你調用對從頁(yè)面表單接受的每個(gè)值都調用清洗例行程序進(jìn)行處理,這樣可以更加嚴密的保護你的系統。不過(guò),最好使用SQL注入工具對軟件進(jìn)行測試和驗證,以確保萬(wàn)無(wú)一失。
2. 默認密碼
Oracle數據庫是一個(gè)龐大的系統,提供了能夠創(chuàng )建一切的模式。絕大部分的系統自帶用戶(hù)登錄都配備了預設的默認密碼。想知道數據庫管理員工作是不是夠勤奮?這里有一個(gè)方法可以找到答案??纯聪旅孢@些最常用的預設用戶(hù)名和密碼是不是能夠登錄到數據庫吧:
|
就算數據庫管理員已經(jīng)很勤奮的把這些默認配對都改了,有時(shí)候想猜出登錄密碼也不是一件困難的事情,逐個(gè)試試“oracle”、“oracle4”、“oracle8i”、“oracle11g”,看看碰巧是不是有一個(gè)能登錄上去的。
Pete Finnigan提供了一份關(guān)于缺省用戶(hù)和對應密碼的名單,該名單非常全面而且是最新的,并包括已經(jīng)加密的密碼。如果你用all_users來(lái)進(jìn)行查詢(xún),可以嘗試并比較一下這份名單。
防范此類(lèi)攻擊的方法
作為數據庫管理員,應該定期審核所有的數據庫密碼,如果某些商業(yè)方面的阻力使你不能輕易更改容易被人猜出的密碼,你可以盡量心平氣和地和相關(guān)人員解釋?zhuān)靡恍┲庇^(guān)的例子來(lái)闡明如果不修改密碼的話(huà)會(huì )有什么不好的事情發(fā)生,會(huì )有什么樣的風(fēng)險存在。
Oracle也提供了密碼安全profile,你可以激活該profile,在某種水平上加強數據庫密碼的復雜性,還可以執行定期密碼失效。要注意要把這個(gè)功能設置為只對通過(guò)網(wǎng)絡(luò )服務(wù)器或中間層應用服務(wù)器登錄的事件起作用。
3. 蠻力攻擊(Brute Force)
蠻力攻擊,就像其名字所暗示的,就是不停的撬,直到“鎖”打開(kāi)為止的方法。對于Oracle數據庫來(lái)說(shuō),就是用某種自動(dòng)執行的進(jìn)程,通過(guò)嘗試所有的字母數字組合來(lái)破解用戶(hù)名和密碼。
Unix的管理員就可以利用一款名為John the Ripper的密碼破解軟件來(lái)執行這類(lèi)的攻擊?,F在如果你下載某個(gè)補丁,你也可以利用這款軟件來(lái)對Oracle進(jìn)行蠻力攻擊,敲開(kāi)其密碼。不過(guò)根據密碼的復雜程度不同,這可能是個(gè)很費時(shí)的過(guò)程,如果你想加快這個(gè)進(jìn)程,可以事先準備一張包含所有密碼加密的表,這樣的表叫做Rainbow table,你可以為每個(gè)用戶(hù)名準備一張不同的rainbow table,因為這種密碼加密算法把用戶(hù)名作為助燃劑。在這里就不再深入介紹更多的細節問(wèn)題了,大家可以查閱http://www.antsight.com/zsl/rainbowcrack/獲得更多信息。
Oracle服務(wù)器的默認設置是,對某個(gè)特定帳戶(hù)輸錯密碼達十次就會(huì )自動(dòng)鎖定該帳戶(hù)。不過(guò)通常“sys as sysdba”權限沒(méi)有這個(gè)限制,這可能是因為如果你鎖定了管理員,那所有人都將被鎖定。這樣的設置為我們黑客破解軟件(OraBrute)如開(kāi)辟了一條生路,它們會(huì )晝夜不停地敲打你數據庫的前門(mén),直到它乖乖打開(kāi)為止。
防范此類(lèi)攻擊的方法
想要抵御此類(lèi)攻擊,可以使用之前提及的對付預設密碼攻擊的方法。不過(guò)好奇心過(guò)重的數據庫管理員也可能下載上面提到的工具侵入自己的系統。這說(shuō)明了你真正的風(fēng)險來(lái)自何方。
在安全領(lǐng)域,這個(gè)概念被稱(chēng)為數據向外滲漏(exfiltration),這個(gè)詞來(lái)自軍事術(shù)語(yǔ),其反面是向敵人內部滲透(infiltration),意思就是在不被發(fā)現的情況下偷偷潛出。對于從目標數據庫獲取數據的過(guò)程,可能就像從一些磁帶備份中挑揀數據和還原數據庫或者像從一個(gè)被毀壞的磁盤(pán)重復制一份拷貝一樣簡(jiǎn)單。不過(guò),也有可能涉及到窺探網(wǎng)絡(luò )傳輸以獲得相關(guān)的數據包。
Oracle有一個(gè)名為UTL_TCP的程序包,能夠使外部連接指向其他服務(wù)器。對它稍微改編一下,就可以利用它從數據庫發(fā)送一套低帶寬數據流到遠程主機。Oracle也附帶了一些有用的程序包來(lái)隱藏數據流里的信息,如果你在發(fā)動(dòng)潛入行動(dòng)的時(shí)候擔心入侵檢測系統會(huì )監測到你的不法活動(dòng),那么可以充分利用這些功能秘密嵌入,包括DBMS_OBFUSCATION_TOOLKIT和DBMS_CRYPTO。
防范此類(lèi)攻擊的方法
防范此類(lèi)攻擊的最佳辦法是安裝入侵檢測系統,這些系統能夠檢測網(wǎng)絡(luò )中流入和流出的數據包。有一些檢測系統還提供深入數據包檢測,可以確實(shí)檢查某些SQL,并可以通過(guò)設定規則在某種情況下觸發(fā)報警器。這些工具還能夠查找泄密跡象,例如添加的UNION、各種類(lèi)型的short- circuiting命令、利用“--”注釋進(jìn)行截斷等等。
5. 監聽(tīng)器
計算機世界最讓人覺(jué)得了不起的事情就是,不管有多么困難的事,總有辦法馴服它。尤其是在安全領(lǐng)域,一些漏洞如此的簡(jiǎn)單,而這些漏洞的出現僅僅是因為用戶(hù)(也包括我們現在扮演的角色——黑客)并沒(méi)有像軟件設計者(程序員或軟件開(kāi)發(fā)員)本來(lái)預想的那樣思考和行動(dòng)。
Oracle監聽(tīng)器的設置是為了能夠實(shí)現遠程管理。那么如果攻擊者把監聽(tīng)器的logfile設置為Unix .rhosts文件呢?這樣攻擊者就可以輕松的對.rhosts文件進(jìn)行寫(xiě)操作。Unix上的這個(gè)文件設置了什么人可以不用密碼而使用rsh、rlogin和rcp命令登錄。你可以想想將會(huì )發(fā)生什么事情。
這其實(shí)只是圍繞Oracle監聽(tīng)器安全問(wèn)題的冰山一角而已。其他的還有緩沖區溢出等一大堆問(wèn)題需要注意。事實(shí)上Litchfield的《Oracle黑客手冊》里花了一整章的內容來(lái)討論這個(gè)主題。
防范此類(lèi)攻擊的方法
從預防的角度而言,Oracle已經(jīng)做出了一定措施來(lái)更好的保障系統安全,前提是你能夠把它實(shí)施到位。首先,為監聽(tīng)器設置一個(gè)管理密碼。對于擔負著(zhù)管理不斷增加的密碼重擔的管理員而言,這看起來(lái)像是多余的,不過(guò)在你需求其他途徑來(lái)保障監聽(tīng)器安全之前,好好地想想上面提到的和沒(méi)提到的威脅。Oracle也添加了ADMIN_RESTRICTIONS,能夠阻止特定的遠程控制事件。
6. 權限提升
簡(jiǎn)單的說(shuō),“權限提升”包括使用現有的低權限帳戶(hù),利用巧取、偷竊或非法的方式獲取更高的權限,甚至是數據庫管理員的權限。
下面舉個(gè)使用CREATE ANY權限的例子。假設我能通過(guò)一個(gè)擁有CREATE ANY TRIGGER權限的用戶(hù)CYW訪(fǎng)問(wèn)數據庫,這樣我就能在任意的模式里創(chuàng )建觸發(fā)器。如果你能追蹤到一個(gè)任何用戶(hù)都能執行寫(xiě)入操作的表,你在SYSTEM里創(chuàng )建了一個(gè)能夠在低權限的你對該可寫(xiě)表進(jìn)行插入或更新操作時(shí)執行的觸發(fā)器。你編寫(xiě)的觸發(fā)器會(huì )調用一個(gè)存儲過(guò)程(也是你自己編寫(xiě)的),該存儲過(guò)程會(huì )使用AUTHID CURRENT_USER為調用者授權。這就意味著(zhù),當該觸發(fā)器運行“你”的存儲過(guò)程時(shí),擁有SYSTEM的權限?,F在你的非法存儲過(guò)程內部,包含了“EXECUTE IMMEDIATE 'GRANT DBA TO CYW'”。這樣我就可以在觸發(fā)器運行的時(shí)候插入到我的公共表里,該觸發(fā)器由SYSTEM所有,而SYSTEM會(huì )調用我的change_privileges存儲過(guò)程,這個(gè)存儲過(guò)程使用AUTHID CURRENT_USER為我授權。這樣“我”就可以在不改變我自身權限的情況下獲得并執行SYSTEM的權限。
防范此類(lèi)攻擊的方法
數據庫管理員該怎么應對這個(gè)問(wèn)題呢?首先,你應該審核數據庫的CREATE ANY權限,刪除其中不需要的那些部分。其次,看看類(lèi)似于www.securityfocus.com這類(lèi)的論壇,看看關(guān)于權限提升的最新漏洞。最后,激活對某些特定類(lèi)型數據庫活動(dòng)的審計功能并沒(méi)有什么壞處,這樣數據庫就能讓你實(shí)現自我保護。當數據庫自行審核類(lèi)似于GRANT DBA這樣的事件時(shí),你可以通過(guò)查看審計日志知道有沒(méi)有出現惡意或突發(fā)的活動(dòng)
7. 操作系統指令和安全
黑客并不總是通過(guò)shell命令行提示符登錄到你的系統的。 不過(guò),通過(guò)誘使Oracle數據庫運行操作系統水平的指令,我們的確給黑客提供了一條運行指令的有效途徑。這些指令能夠刪除和破壞文件、改寫(xiě)日志(以便隱藏他們的行蹤)、創(chuàng )建帳戶(hù),以及其他一些能通過(guò)命令行輸入指令達成的操作。他們是怎么做到的呢?盡管方法有很多,最容易的一種就是通過(guò)Java和PL/SQL這些程序語(yǔ)言。通??梢岳脛?chuàng )建外部存儲過(guò)程的能力,使之執行一個(gè)具備系統調用功能的存儲程序。這個(gè)系統調用指令能夠以首次安裝時(shí)使用的oracle帳戶(hù)權限執行。
防范此類(lèi)攻擊的方法
雖然Oracle在保護用戶(hù)免受此類(lèi)攻擊上已經(jīng)取得了一定進(jìn)展,不過(guò)你最好還是把希望寄托在你的預防監測工作上。嚴密留意你的系統內部有沒(méi)有出現這類(lèi)活動(dòng),當有攻擊者試圖對你使用此類(lèi)惡意攻擊時(shí),你最好能夠事先掌握主動(dòng)權。
8. 文件系統安全
對文件系統(filesystem)的訪(fǎng)問(wèn)是一個(gè)讓你頭大的棘手問(wèn)題。“oracle”操作系統用戶(hù)擁有所有Oracle軟件和數據庫數據文件的訪(fǎng)問(wèn)權限,所以如果數據庫內部的某些用戶(hù)利用UTL_FILE包訪(fǎng)問(wèn)filesystem上的文件時(shí),他們就可以訪(fǎng)問(wèn)之前由于權限和角色限制而無(wú)權訪(fǎng)問(wèn)的很多數據庫內部文件。
防范此類(lèi)攻擊的方法
Oracle引入DIRECTORY對象在防止此類(lèi)攻擊上也有一定作用。在10g系統中,必須通過(guò)DIRECTORY對象來(lái)定義某些類(lèi)型的讀寫(xiě)操作。這意味著(zhù)用戶(hù)必須擁有CREATE DIRECTORY權限,而在前面介紹的權限提升問(wèn)題中,我們已經(jīng)看到可以通過(guò)很多方法獲取這種權限。即使這些也被解決了,還是有很多方法可以通過(guò)PL/SQL或Java語(yǔ)言來(lái)獲取對filesystem的訪(fǎng)問(wèn)權限和對文件的讀寫(xiě)權限。
總論:
就像上面討論的一樣,Oracle數據庫產(chǎn)品有很多漏洞,有時(shí)候看起來(lái)就像由一些聰明透頂的工程師建造的一所豪宅,工程師固然聰明,但比那些覬覦此宅的黑客們忠厚老實(shí)多了。因此,他們沒(méi)有預料到有人會(huì )利用這種種方法來(lái)偷磚竊瓦削弱豪宅的根基。黑客可以通過(guò)很多不同的方法進(jìn)行攻擊,侵入到目標數據庫。
不過(guò),只要數據庫管理員能夠花點(diǎn)時(shí)間和精力來(lái)解決,其中很多問(wèn)題都是可以避免的。Oracle已經(jīng)針對很多漏洞在數據庫內部打上了補丁,而且入侵監測系統能體構額外的安全保障。所以數據庫管理員應該對每一種漏洞都銘記在心,警惕性才是防范的關(guān)鍵,盡量執行好自己制定的安全計劃。
評論