追查數(shù)據(jù)庫(kù)SQL注入30小時(shí)
事件過(guò)程
2012年10月19日上午,同事在日常巡檢時(shí)發(fā)現(xiàn)一套對(duì)外服務(wù)的電子商務(wù)系統(tǒng)后臺(tái)Oracle數(shù)據(jù)庫(kù)中出現(xiàn)了一個(gè)名為zwell的用戶,并且,該用戶具有DBA權(quán)限。
按照管理規(guī)定,所有的Oracle數(shù)據(jù)庫(kù)均有DDL觸發(fā)器,查看觸發(fā)器發(fā)現(xiàn):
1CREATE ZWELL CREATE USER zwell IDENTIFIED BY ******* WD_WEB 2012/9/7 13:53:59 11028547 FALSE SYSTEM 5 WD_WEB 57 ptserver8 10.x.x.x tcp DATABASE
1WD_WEB 12200617 ROLE PRIVILEGE GRANT 2012/10/9 15:38:20 10.0.8.10 grant dba to zwell
此用戶在2012/9/7 13:53:59,通過(guò)CREATE USER zwell IDENTIFIED BY ******* SQL語(yǔ)句創(chuàng)建,發(fā)出此SQL的服務(wù)器為WEB服務(wù)器集群第8臺(tái)(ptserver8),IP地址為WEB集群F5接口地址(10.x.x.x)。并且,在2012/10/9 15:38:20,通過(guò)grant dba to zwell SQL語(yǔ)句,將zwell用戶提升為DBA權(quán)限。
此用戶已建立了1個(gè)多月,例行檢查只檢查擁有DBA權(quán)限的用戶,導(dǎo)致此用戶被建立很長(zhǎng)時(shí)間后才被發(fā)現(xiàn)。
通過(guò)對(duì)WEB服務(wù)器的apache日志進(jìn)行檢查,在2012/9/7 13:53:59秒前后有大量的SQL注入行為,發(fā)出SQL注入入侵的源IP(113.71.184.32)屬于廣東省佛山市電信(如圖1所示)
圖1
但由于apache日志記錄時(shí)間順序問(wèn)題,導(dǎo)致當(dāng)時(shí)并未找到SQL注入的對(duì)應(yīng)日志。
10月19日下午,緊急對(duì)此電子商務(wù)網(wǎng)站進(jìn)行應(yīng)用漏洞掃描,發(fā)現(xiàn)高危漏洞。
10月19日夜間, 鑒于短時(shí)間內(nèi)無(wú)法確認(rèn)被入侵途徑及目的,經(jīng)多方商議,建議先進(jìn)行如下處理:
1.應(yīng)用系統(tǒng)數(shù)據(jù)庫(kù)用戶存在IMP_FULL_DATABASE權(quán)限,而此權(quán)限應(yīng)為過(guò)度授權(quán),擁有此權(quán)限則可創(chuàng)建用戶。進(jìn)行權(quán)限收回。
2.盡快修改數(shù)據(jù)庫(kù)賬戶密碼,以及相關(guān)操作系統(tǒng)密碼。
3.將數(shù)據(jù)庫(kù)版本由10.2.0.1升級(jí)至10.2.0.5。
4.對(duì)數(shù)據(jù)庫(kù)內(nèi)關(guān)鍵信息進(jìn)行審計(jì)。
10月20日早晨,對(duì)apache日志進(jìn)行仔細(xì)檢查后,確認(rèn)此次入侵為SQL方式入侵,入侵入口為/service/service.do盲注方式,發(fā)出SQL注入入侵的源IP(119.57.81.78)屬于北京市東四IDC機(jī)房。
2012年10月20日下午,再次檢查發(fā)出創(chuàng)建用戶SQL的ptserver8服務(wù)器的apache日志,發(fā)現(xiàn)了與創(chuàng)建用戶對(duì)應(yīng)的日志信息(如圖2所示)。
圖2
圖3
創(chuàng)建用戶操作也是通過(guò)/service/service.do進(jìn)行SQL注入,至此,整個(gè)入侵流程均已查清。
事件分析
在此次安全事件中,黑客使用WEB頁(yè)面的盲注漏洞,采用SQL注入的方式創(chuàng)建了zwell用戶,并且利用了Oracle 10.2.0.1的提權(quán)漏洞,賦予zwell用戶DBA權(quán)限。
經(jīng)驗(yàn)教訓(xùn)
1.WEB應(yīng)用應(yīng)進(jìn)行完善的代碼檢查,避免SQL注入漏洞
有很多方法可以避免SQL注入漏洞,比如,最常見的,使用綁定變量,但由于此應(yīng)用程序?yàn)橥獍_發(fā)方式,供應(yīng)商之前已開發(fā)了一套基礎(chǔ)版本,此版本為基礎(chǔ)版本的升級(jí)版本,因此,基礎(chǔ)版本存在的問(wèn)題也一并帶入了生產(chǎn)環(huán)境,導(dǎo)致此漏洞的存在。
2.未進(jìn)行完善的代碼安全檢查
目前有很多工具可以對(duì)應(yīng)用進(jìn)行安全檢查,類似的SQL注入型漏洞一般都可以檢查出來(lái),但由于倉(cāng)促上線,經(jīng)驗(yàn)也不夠豐富,因此,導(dǎo)致應(yīng)用帶著漏洞上線。
3.數(shù)據(jù)庫(kù)版本未升級(jí)
這是一個(gè)典型的問(wèn)題。數(shù)據(jù)庫(kù)版本過(guò)低導(dǎo)致存在提權(quán)漏洞,如果數(shù)據(jù)庫(kù)打了補(bǔ)丁,至少不會(huì)導(dǎo)致zwell用戶被提升權(quán)限。
4.日常檢查不夠全面
只對(duì)擁有DBA權(quán)限的用戶進(jìn)行檢查,導(dǎo)致被攻擊后很長(zhǎng)時(shí)間才發(fā)現(xiàn)攻擊行為。
5.保留日志
對(duì)于WEB應(yīng)用,日志是很有必要進(jìn)行保留的,如果日志沒(méi)有被改動(dòng),基本都可以從日志中重現(xiàn)整個(gè)安全事件的完整過(guò)程。
6.即使能夠查到來(lái)源IP,此IP往往也是肉機(jī)IP,比如,在此次事件中,兩次行為應(yīng)是同一人完成,但創(chuàng)建用戶的來(lái)源IP為廣東省佛山市電信,提權(quán)IP為北京市東四IDC機(jī)房。
啟明星辰公司數(shù)據(jù)庫(kù)審計(jì)專家點(diǎn)評(píng)
數(shù)據(jù)庫(kù)的風(fēng)險(xiǎn)主要來(lái)源于兩個(gè)方面,一個(gè)是外部攻擊,另一個(gè)是內(nèi)部人員(有權(quán)限人員)的違規(guī)操作(故意或者無(wú)意),本文案例就是外部人員攻擊的一個(gè)典型過(guò)程。具體步驟是:通過(guò)應(yīng)用系統(tǒng)漏洞進(jìn)行攻擊,建立賬戶,再利用本地漏洞提權(quán),然后利用高權(quán)限用戶進(jìn)行系列違法操作。
從上面的案例可以看到,要保證數(shù)據(jù)庫(kù)安全,除了數(shù)據(jù)庫(kù)系統(tǒng)自身安全之外,應(yīng)用系統(tǒng)的安全也需要一并考慮。不僅要對(duì)數(shù)據(jù)庫(kù)系統(tǒng)進(jìn)行安全加固和嚴(yán)格的權(quán)限控制,對(duì)于應(yīng)用系統(tǒng)也要進(jìn)行代碼漏洞檢查、入侵防護(hù),建議在安全建設(shè)時(shí),除了要進(jìn)行數(shù)據(jù)庫(kù)的權(quán)限控制、數(shù)據(jù)加密、安全審計(jì)之外,對(duì)于應(yīng)用服務(wù)器的代碼檢查、入侵防御等措施也要考慮,可適當(dāng)部署一些常用的安全產(chǎn)品,包括:數(shù)據(jù)庫(kù)加密、數(shù)據(jù)庫(kù)審計(jì)、WEB應(yīng)用防火墻、入侵檢測(cè)等。