Oracle的銷售在向客戶兜售其數據庫系統一直把它吹捧爲牢不可破的,耍嘴皮子容易,兌現起來可就不那麼容易了。無論什麼計算機系統,人們總可以找到***它的方法,Oracle也不例外。本文將和你們從***的角度討論***是用哪些方法把黑手伸向了你原覺得他們不能觸及的數據,但願做爲Oracle的數據庫管理員可以清楚的闡明本身基礎架構的哪些區域比較容易受到***。同時咱們也會討論保護系統防範***的方法。程序員
1.SQL注入***算法
現在大部分的Oracle數據庫都具備爲某種類型網絡應用服務的後端數據存儲區,網頁應用使數據庫更容易成爲咱們的***目標體如今三個方面。其一,這些應用界面很是複雜,具備多個組成成分,使數據庫管理員難以對它們進行完全檢查。其二,阻止程序員侵入的屏障很低,即使不是C語言的編程專家,也可以對一些頁面進行***。下面咱們會簡單地解釋爲何這對咱們這麼重要。第三個緣由是優先級的問題。網頁應用一直處於發展的模式,因此他們在不斷變化,推陳出新。這樣安全問題就不是一個必須優先考慮的問題。sql
SQL注入***是一種很簡單的***,在頁面表單裏輸入信息,悄悄地加入一些特殊代碼,誘使應用程序在數據庫裏執行這些代碼,並返回一些程序員沒有料到的結果。例如,有一份用戶登陸表格,要求輸入用戶名和密碼才能登陸,在用戶名這一欄,輸入如下代碼:shell
cyw’);selectusername,passwordfromall_users;–數據庫
若是數據庫程序員沒有聰明到可以檢查出相似的信息並「清洗」掉咱們的輸入,該代碼將在遠程數據庫系統執行,而後這些關於全部用戶名和密碼的敏感數據就會返回到咱們的瀏覽器。編程
你可能會認爲這是在危言聳聽,不過還有更絕的。DavidLitchfield在他的著做《Oracle***手冊》(OracleHacker’sHandbook)中把某種特殊的pl/sql注入***美其名曰:聖盃(holygrail),由於它曾通殺Oracle8到Oracle10g的全部Oracle數據庫版本。很想知道其做用原理吧。你能夠利用一個被稱爲DBMS_EXPORT_EXTENSION的程序包,使用注入***獲取執行一個異常處理程序的代碼,該程序會賦予用戶或全部相關用戶數據庫管理員的特權。後端
這就是Oracle發佈的著名安全升級補丁SecurityAlert68所針對的漏洞。不過據Litchfield稱,這些漏洞是永遠沒法徹底修補完畢的。瀏覽器
防範此類***的方法sass
總而言之,雖然說沒有萬能的防彈衣,但鑑於這個問題涉及到全部面向網絡的應用軟件,仍是要盡力防範。目前市面上有各式各樣可加以利用的SQL注入檢測技術。安全
對於軟件開發人員來講,不少軟件包都可以幫助你「清洗」輸入信息。若是你調用對從頁面表單接受的每一個值都調用清洗例行程序進行處理,這樣能夠更加嚴密的保護你的系統。不過,最好使用SQL注入工具對軟件進行測試和驗證,以確保萬無一失。
2.默認密碼
Oracle數據庫是一個龐大的系統,提供了可以建立一切的模式。絕大部分的系統自帶用戶登陸都配備了預設的默認密碼。想知道數據庫管理員工做是否是夠勤奮?這裏有一個方法能夠找到答案。看看下面這些最經常使用的預設用戶名和密碼是否是可以登陸到數據庫吧:
UsernamePassword
applsysapps
ctxsyschange_on_install
dbsnmpdbsnmp
outlnoutln
owaowa
perfstatperfstat
scotttiger
systemchange_on_install
systemmanager
syschange_on_install
sysmanager
就算數據庫管理員已經很勤奮的把這些默認配對都改了,有時候想猜出登陸密碼也不是一件困難的事情,逐個試試「oracle」、「oracle4」、「oracle8i」、「oracle11g」,看看碰巧是否是有一個能登陸上去的。
PeteFinnigan提供了一份關於缺省用戶和對應密碼的名單,該名單很是全面並且是最新的,幷包括已經加密的密碼。若是你用all_users來進行查詢,能夠嘗試並比較一下這份名單。
防範此類***的方法
做爲數據庫管理員,應該按期審覈全部的數據庫密碼,若是某些商業方面的阻力使你不能輕易更改容易被人猜出的密碼,你能夠儘可能心平氣和地和相關人員解釋,用一些直觀的例子來闡明若是不修改密碼的話會有什麼很差的事情發生,會有什麼樣的風險存在。
Oracle也提供了密碼安全profile,你能夠激活該profile,在某種水平上增強數據庫密碼的複雜性,還能夠執行按期密碼失效。要注意要把這個功能設置爲只對經過網絡服務器或中間層應用服務器登陸的事件起做用。
3.蠻力***(BruteForce)
蠻力***,就像其名字所暗示的,就是不停的撬,直到「鎖」打開爲止的方法。對於Oracle數據庫來講,就是用某種自動執行的進程,經過嘗試全部的字母數字組合來破解用戶名和密碼。
Unix的管理員就能夠利用一款名爲JohntheRipper的密碼破解軟件來執行這類的***。如今若是你下載某個補丁,你也能夠利用這款軟件來對Oracle進行蠻力***,敲開其密碼。不過根據密碼的複雜程度不一樣,這多是個很費時的過程,若是你想加快這個進程,能夠事先準備一張包含全部密碼加密的表,這樣的表叫作Rainbowtable,你能夠爲每一個用戶名準備一張不一樣的rainbowtable,由於這種密碼加密算法把用戶名做爲助燃劑。在這裏就再也不深刻介紹更多的細節問題了。
Oracle服務器的默認設置是,對某個特定賬戶輸錯密碼達十次就會自動鎖定該賬戶。不過一般「sysassysdba」權限沒有這個限制,這多是由於若是你鎖定了管理員,那全部人都將被鎖定。這樣的設置爲咱們***破解軟件(OraBrute)如開闢了一條生路,它們會晝夜不停地敲打你數據庫的前門,直到它乖乖打開爲止。
防範此類***的方法
想要抵禦此類***,可使用以前說起的對付預設密碼***的方法。不過好奇心太重的數據庫管理員也可能下載上面提到的工具侵入本身的系統。這說明了你真正的風險來自何方。
4.從後門偷竊數據
在安全領域,這個概念被稱爲數據向外滲漏(exfiltration),這個詞來自軍事術語,其反面是向敵人內部***(infiltration),意思就是在不被發現的狀況下偷偷潛出。對於從目標數據庫獲取數據的過程,可能就像從一些磁帶備份中挑揀數據和還原數據庫或者像從一個被毀壞的磁盤重複制一份拷貝同樣簡單。不過,也有可能涉及到窺探網絡傳輸以得到相關的數據包。
Oracle有一個名爲UTL_TCP的程序包,可以使外部鏈接指向其餘服務器。對它稍微改編一下,就能夠利用它從數據庫發送一套低帶寬數據流到遠程主機。Oracle也附帶了一些有用的程序包來隱藏數據流裏的信息,若是你在發動潛入行動的時候擔憂***檢測系統會監測到你的不法活動,那麼能夠充分利用這些功能祕密嵌入,包括DBMS_OBFUSCATION_TOOLKIT和DBMS_CRYPTO。
防範此類***的方法
防範此類***的最佳辦法是安裝***檢測系統,這些系統可以檢測網絡中流入和流出的數據包。有一些檢測系統還提供深刻數據包檢測,能夠確實檢查某些SQL,並能夠經過設定規則在某種狀況下觸發報警器。這些工具還可以查找泄密跡象,例如添加的UNION、各類類型的short-circuiting命令、利用「–」註釋進行截斷等等。
5.監聽器
計算機世界最讓人以爲了不得的事情就是,無論有多麼困難的事,總有辦法馴服它。尤爲是在安全領域,一些漏洞如此的簡單,而這些漏洞的出現僅僅是由於用戶(也包括咱們如今扮演的角色——***)並無像軟件設計者(程序員或軟件開發員)原本預想的那樣思考和行動。
Oracle監聽器的設置是爲了可以實現遠程管理。那麼若是***者把監聽器的logfile設置爲Unix.rhosts文件呢?這樣***者就能夠輕鬆的對.rhosts文件進行寫操做。Unix上的這個文件設置了什麼人能夠不用密碼而使用rsh、rlogin和rcp命令登陸。你能夠想一想將會發生什麼事情。
這其實只是圍繞Oracle監聽器安全問題的冰山一角而已。其餘的還有緩衝區溢出等一大堆問題須要注意。事實上Litchfield的《Oracle***手冊》裏花了一整章的內容來討論這個主題。
防範此類***的方法
從預防的角度而言,Oracle已經作出了必定措施來更好的保障系統安全,前提是你可以把它實施到位。首先,爲監聽器設置一個管理密碼。對於擔負着管理不斷增長的密碼重擔的管理員而言,這看起來像是多餘的,不過在你需求其餘途徑來保障監聽器安全以前,好好地想一想上面提到的和沒提到的威脅。Oracle也添加了ADMIN_RESTRICTIONS,可以阻止特定的遠程控制事件。
6.權限提高
簡單的說,「權限提高」包括使用現有的低權限賬戶,利用巧取、偷竊或非法的方式獲取更高的權限,甚至是數據庫管理員的權限。
下面舉個使用CREATEANY權限的例子。假設我能經過一個擁有CREATEANYTRIGGER權限的用戶CYW訪問數據庫,這樣我就能在任意的模式裏建立觸發器。若是你能追蹤到一個任何用戶都能執行寫入操做的表,你在SYSTEM裏建立了一個可以在低權限的你對該可寫表進行插入或更新操做時執行的觸發器。你編寫的觸發器會調用一個存儲過程(也是你本身編寫的),該存儲過程會使用AUTHIDCURRENT_USER爲調用者受權。這就意味着,當該觸發器運行「你」的存儲過程時,擁有SYSTEM的權限。如今你的非法存儲過程內部,包含了「EXECUTEIMMEDIATE’GRANTDBATOCYW’」。這樣我就能夠在觸發器運行的時候插入到個人公共表裏,該觸發器由SYSTEM全部,而SYSTEM會調用個人change_privileges存儲過程,這個存儲過程使用AUTHIDCURRENT_USER爲我受權。這樣「我」就能夠在不改變我自身權限的狀況下得到並執行SYSTEM的權限。
防範此類***的方法
數據庫管理員該怎麼應對這個問題呢?首先,你應該審覈數據庫的CREATEANY權限,刪除其中不須要的那些部分。其次,看看相似於www.securityfocus.com這類的論壇,看看關於權限提高的最新漏洞。最後,激活對某些特定類型數據庫活動的審計功能並無什麼壞處,這樣數據庫就能讓你實現自我保護。當數據庫自行審覈相似於GRANTDBA這樣的事件時,你能夠經過查看審計日誌知道有沒有出現惡意或突發的活動
7.操做系統指令和安全
***並不老是經過shell命令行提示符登陸到你的系統的。不過,經過誘使Oracle數據庫運行操做系統水平的指令,咱們的確給***提供了一條運行指令的有效途徑。這些指令可以刪除和破壞文件、改寫日誌(以便隱藏他們的行蹤)、建立賬戶,以及其餘一些能經過命令行輸入指令達成的操做。他們是怎麼作到的呢?儘管方法有不少,最容易的一種就是經過Java和PL/SQL這些程序語言。一般能夠利用建立外部存儲過程的能力,使之執行一個具有系統調用功能的存儲程序。這個系統調用指令可以以首次安裝時使用的oracle賬戶權限執行。
防範此類***的方法
雖然Oracle在保護用戶免受此類***上已經取得了必定進展,不過你最好仍是把但願寄託在你的預防監測工做上。嚴密留意你的系統內部有沒有出現這類活動,當有***者試圖對你使用此類惡意***時,你最好可以事先掌握主動權。
8.文件系統安全
對文件系統(filesystem)的訪問是一個讓你頭大的棘手問題。「oracle」操做系統用戶擁有全部Oracle軟件和數據庫數據文件的訪問權限,因此若是數據庫內部的某些用戶利用UTL_FILE包訪問filesystem上的文件時,他們就能夠訪問以前因爲權限和角色限制而無權訪問的不少數據庫內部文件。
防範此類***的方法
Oracle引入DIRECTORY對象在防止此類***上也有必定做用。在10g系統中,必須經過DIRECTORY對象來定義某些類型的讀寫操做。這意味着用戶必須擁有CREATEDIRECTORY權限,而在前面介紹的權限提高問題中,咱們已經看到能夠經過不少方法獲取這種權限。即便這些也被解決了,仍是有不少方法能夠經過PL/SQL或Java語言來獲取對filesystem的訪問權限和對文件的讀寫權限。
文章如轉載,請註明轉載自【網管小王的獨立博客】:http://www.5iadmin.com/