數據庫漏洞的種類繁多和危害性嚴重是數據庫系統受到攻擊的主要原因,通過研究數據庫漏洞分類,有助於人們對漏洞的深入理解並加以預防和避免。
美國Verizon就“核心數據是如何丟失的”做過一次全面的市場調查,結果發現,75%的數據丟失情況是由於數據庫漏洞造成的,這說明數據庫的安全非常重要。
據CVE的數據安全漏洞統計,Oracle、SQL Server、MySQL等主流數據庫的漏洞逐年上升,以Oracle為例,當前漏洞總數已經超過了1200多個。
數據庫安全漏洞從來源上,大致可以分為四類:缺省安裝漏洞、人為使用上的漏洞、數據庫設計缺陷、數據庫產品的bug。
1. 缺省安裝漏洞
¨ 數據庫安裝後的缺省用戶名和密碼
在主流數據庫中往往存在若干缺省數據庫用戶,並且缺省密碼都是公開的,攻擊者完全可以利用這些缺省用戶登錄數據庫。
例如,Oracle中有sys、system、sysman、scott等700多個缺省用戶;MySQL本機的root用戶可以沒有口令;網絡上主機名為build的root和用戶可以沒有口令。
¨ 數據庫安裝後的缺省端口號
在主流數據庫中缺省端口號是固定的,如Oracle是1521、SQL Server是1433、MySQL是3306等。
¨ 數據庫安裝後低安全級別設置
數據庫安裝後的缺省設置,安全級別一般都較低。
如MySQL中本地用戶登錄和遠程build主機登錄不校驗用戶名密碼
如Oracle中不強制修改密碼、密碼的復雜度設置較低、不限定遠程鏈接范圍、通訊為明文等。
¨ 啟用不必要的數據庫功能
在數據庫的缺省安裝中為了便於使用和學習,提供了過量的功能和配置。如Oracle安裝後無用的示例庫、有威脅的存儲過程; MySQL的自定義函數功能。
典型數據庫洩密案例:Korea會展中心數據庫被入侵
2011年5月,黑客入侵Korea會展中心數據庫,在網上爆出其中大量的客戶資料數據,並展示數據庫操操作過程。
黑客首先通過端口掃描技術,檢測出該服務器上開放著1521端口(Oracle數據庫的缺省端口),首先探明該主機便是數據庫服務器。接著利用掃描程序,檢測到缺省系統用戶dbsnmp並未被鎖定,且保留著數據庫安裝時的缺省密碼。
之後黑客利用權限提升的漏洞,將dbsnmp用戶的權限提升至DBA,開始了數據庫訪問之旅。
2. 人為使用漏洞
¨ 過於寬泛的權限授予
在很多系統維護中,數據庫管理員並未細致地按照最小授權原則給予數據庫用戶授權,而是根據最為方便的原則給予了較為寬泛的授權。
例如,一個普通的數據庫維護人員被授予了任意表的創建和刪除、訪問權限,甚至是給予DBA角色;
例如,一個大學管理員在工作中只需要能夠更改學生的聯系信息,不過他可能會利用過高的數據庫更新權限來更改分數。
¨ 口令復雜度不高
弱口令:非默認的數據庫口令也是不安全的,通過暴力破解,攻擊者不斷地輸入用戶名和密碼組合,直到找到可以登錄的一組。暴力過程可能是靠猜想,也可能是系統地枚舉可能的用戶名/密碼組合。通常,攻擊者會使用自動化程序來加快暴力過程的速度。口令破解的工具有很多,並且通過Google搜索或sectools.org等站點就可以輕易地獲得,這樣就會連接到Cain、Abel或John the Ripper等流行的工具。
密碼曝光:一些公眾權限的存儲過程、表的調用會導致密碼曝光。例如,通過執行公眾權限的存儲過程msdb.dbo.sp_get_sqlagent_properties可以獲得SQL Agent密碼;通過查詢公眾權限的表RTblDBMProps可查看DTS密碼;Microsoft SQL Server允許本地用戶通過數據轉換服務(DTS)包屬性對話框獲得數據庫密碼。
例如,Oracle 10.1及早期版本,sysman用戶的密碼明文存儲在emoms.properties中,10.2後,雖加密存儲,但密鑰也存在該文件中,且用DES算法,很容易解密。
因此建議管理員細致地按照最小授權原則給予數據庫用戶授權;數據庫用戶口令長度應大於等於10,並且應該包括字母和數字,應該通過一個口令檢驗函數來實施這一點。
3. 數據庫設計缺陷
¨ 明文存儲引起的數據洩密
在當前的主流數據庫中,數據以明文形式放置在存儲設備中,存儲設備的丟失將引起數據洩密風險。
數據庫數據文件在操作系統中以明文形式存在,非法使用者可以通過網絡、操作系統接觸到這些文件,從而導致數據洩密風險。
通過UE這樣的文本工具即可得到部分明文的信息,通過DUL/MyDUL這樣的工具能夠完全實現將數據文件格式化導出。
典型數據庫洩密案例:7天酒店數據庫被盜
會員人數超過1650萬,酒店總數逼近600家,在美國紐約證券交易所上市的7天連鎖酒店集團無疑是國內經濟型連鎖酒店集團的龍頭企業之一,但更多人所不知道的是,從去年開始,7天酒店在國內黑客圈中成了“明星”。
黑客通過“刷庫”直接盜走整個數據庫數據。即黑客利用企業網站存在的漏洞入侵數據庫服務器,直接將整個數據庫文件拷貝,通過DUL/MyDUL這種類似的工具將所有二進制方式存儲的數據還原成清晰地格式化數據。
¨ SYSDBA、DBA等超級用戶的存在
在數據庫中,以sys和sa為代表的系統管理員,可以訪問到任何數據;除了系統管理員,以用戶數據分析人員、程序員、開發方維護人員為代表的特權用戶,在特殊的時候,也需要訪問到敏感數據,從而獲得了權限。這些都為數據的洩密留下了極大的隱患。
例如,掌握特權用戶口令的維護人員,進入了CRM系統,只需具有對數據庫的只讀性訪問權限,這樣,這個用戶就可以訪問讀取數據庫內的任何表,包括信用卡信息、個人信息。
¨ 無法鑒別應用程序的訪問是否合法
對於合法的數據庫用戶,通過合法的業務系統訪問數據是正常的行為,但是數據庫的一個缺陷在於,無法鑒別應用程序的合法性。
在現實系統維護或開發過程中,應用系統後台使用的合法數據庫用戶,常由於人為因素或管理不善,用戶名及口令很容易洩露給第三方,第三方則可以通過命令行或管理工具直接訪問密文數據,批量竊取數據。
典型數據庫洩密案例:陝西移動1400萬手機用戶個人信息洩漏
今年3月以來,周雙成利用職務之便,多次侵入陝西移動用戶數據庫,盜取手機用戶個人信息,販賣給偵探公司。
周雙成利用工作之便,能在研發和維護系統過程中獲知數據庫口令,數據庫口令洩漏後,完全可以繞開合法的業務系統,直接使用該用戶通過其他程序(自己編寫的木馬程序)定期訪問數據庫,進而竊取數據庫中的客戶隱私信息。
4. 數據庫產品bug
¨ 緩沖區溢出
這類漏洞是由於不嚴謹的編碼,使數據庫內核中存在對於過長的連接串、函數參數、SQL語句、返回數據不能嚴謹的處理,造成代碼段被覆蓋。
通過覆蓋的代碼段,黑客可以對數據庫服務器進行各種操作,最常見的是使數據庫崩潰,引起拒絕服務。
例如,SQL Server中利用緩沖區溢出,攻擊者可以通過以下函數或存儲過程執行任意代碼:RAISERROR、FORMATMESSAGE、xp_sprintf、 sp_Mscopyscriptfile、xp_sqlinventory、xp_sqlagent_monitor、sp_OACreate、sp_OAMethod、sp_OAGetProperty、sp_OASetProperty、sp_OADestroy;另外,xp_peekqueue、xp_displayparamstmt、xp_execresultset等40多個函數或擴展存儲過程也存在緩沖區溢出。
¨ 拒絕服務攻擊漏洞
數據庫中存在多種漏洞,可以導致服務拒絕訪問,如命名管道拒絕服務、拒絕登錄、RPC請求拒絕服務等。
例如Microsoft SQL 7.0服務允許一個遠程攻擊者通過不正確格式的TDS數據包引起拒絕服務;本地或遠程用戶通過向命名管道發送一個長請求引發拒絕服務。
例如MySQL中Data_format()函數在處理用戶提交的參數時存在漏洞,畸形的參數數據會導致MySQL服務器崩潰。
¨ 權限提升漏洞
黑客攻擊者可以利用數據庫平台軟件的漏洞將普通用戶的權限轉換為管理員權限。漏洞可以在存儲過程、內置函數、協議實現甚至是SQL語句中找到。
例如,Oracle中一系列系統對象如PL/SQL包,缺省賦予了Public角色的執行權限,借助這些包執行注入了” grant dba to user”的函數或過程,或直接作為參數執行即可。有PUBLIC執行權限的包共計30多個,例如:ctxsys.driload.validate_stmt()將grant語句作為參數即可完成權限提升。
例如,在SQL Server中,通過Job輸出文件覆蓋,沒有權限的用戶可以創建job並通過SQL Server代理的權限提升執行該job。
例如,一個金融機構的軟件開發人員可以利用有漏洞的函數來獲得數據庫管理權限。使用管理權限,惡意的開發人員可以禁用審計機制、開設偽造的賬戶以及轉賬。