聊聊不大靠譜的數(shù)據(jù)庫安全掃描
前陣子就有朋友留言說讓我吐槽吐槽數(shù)據(jù)庫安全掃描,此言正合我意。這些年,企業(yè)安全事故頻發(fā),勒索病毒事故多出,再加上安全對(duì)抗演練的進(jìn)行,讓數(shù)據(jù)庫安全在企業(yè)里的地位與日俱增,安全掃描也變成了頭等大事。也經(jīng)常有客戶發(fā)安全掃描結(jié)果過來,讓我們幫助分析如何優(yōu)化,其中大多數(shù)是Oracle數(shù)據(jù)庫的。
有時(shí)候我們分析了安全漏洞,給客戶建議了一個(gè)數(shù)據(jù)庫升級(jí)的方案??蛻舭凑瘴覀兊姆桨干?jí)后,掃描結(jié)果并沒有什么變化,安全漏洞告警并未消失。以我們的經(jīng)驗(yàn)來看,這些漏洞肯定是在PSU中已經(jīng)解決了,不過安全掃描工具就是不認(rèn)。
為什么會(huì)出現(xiàn)這種情況呢?經(jīng)過一番分析,我們發(fā)現(xiàn)出現(xiàn)這種情況是因?yàn)镺racle的安全補(bǔ)丁體系太復(fù)雜了,而漏掃工具無論是登錄掃描還是非登錄掃描,都僅僅是根據(jù)特征去發(fā)現(xiàn)漏洞,而做漏掃的特征庫的人員在數(shù)據(jù)庫補(bǔ)丁方面的專業(yè)性不夠。
MySQL、PostgreSQL還好,比較少發(fā)布單獨(dú)的安全補(bǔ)丁,或者說補(bǔ)丁體系比較簡單。MySQL每三個(gè)月出一個(gè)補(bǔ)丁版,直接更新就行了。但是Oracle數(shù)據(jù)庫太復(fù)雜了,一些安全補(bǔ)丁與功能性補(bǔ)丁之間存在十分復(fù)雜的關(guān)系,為了避免沖突,需要通過MLR等方式發(fā)行補(bǔ)丁集來解決問題,甚至有時(shí)候需要通過發(fā)布一個(gè)CPU來解決問題。Oracle的補(bǔ)丁是十分復(fù)雜的體系,有PSE、MLR、bundle、CPU、SPU、PSU等多種補(bǔ)丁。各種補(bǔ)丁包之間可能還有沖突,有些PSE和MLR補(bǔ)丁之間存在沖突,還必須卸載了通過打特殊的bundle來解決問題。還有一些補(bǔ)丁有可能過了幾年就被廢掉了,用了一個(gè)新的補(bǔ)丁來替代了。
因此要想把Oracle的補(bǔ)丁分析清楚還是相當(dāng)困難的。十多年前,我們甚至給部分大客戶提供了補(bǔ)丁分析服務(wù)(Oracle官方也有補(bǔ)丁分析服務(wù),不過包含在一些收費(fèi)昂貴的服務(wù)里,用戶一般用不起),利用我們和Oracle官方良好的合作關(guān)系,幫助用戶選擇最佳的補(bǔ)丁策略。不過做這種事情還是相當(dāng)費(fèi)勁的,我們需要利用Oracle內(nèi)部的網(wǎng)站輔助,并花上很多時(shí)間去分析資料才能完成。
不同客戶的數(shù)據(jù)庫運(yùn)維人員,數(shù)據(jù)庫升級(jí)策略差別很大,因?yàn)橐粋€(gè)安全漏洞可能有數(shù)十種方法可以解決,而做漏掃的公司的特征庫很可能無法覆蓋這些方面,哪怕就是漏了你解決問題的那一條,你的系統(tǒng)漏掃就過不去。
遇到這種情況,有些客戶比較好說話,只要把問題講清楚就行了,比如說Oracle的某個(gè)PSU已經(jīng)解決了這個(gè)問題,官方文檔里有明確的說法,只要寫個(gè)報(bào)告就可以了。不過有些領(lǐng)導(dǎo)就是公事公辦,非要以漏掃的結(jié)果為準(zhǔn)。我遇到過一個(gè)十分奇葩的領(lǐng)導(dǎo),要求必須在漏掃時(shí)0缺陷,其他材料一概不認(rèn)。最終的解決方案是把已經(jīng)安裝的PSU先卸載了,然后打上安全掃描軟件認(rèn)可的獨(dú)立補(bǔ)丁,才搞定這個(gè)事情。
也有一些漏掃廠商認(rèn)為掃描結(jié)果不準(zhǔn)的主要原因是采用了盲掃的方式,沒有采用登錄掃描的方式。如果采用登錄掃描模式,結(jié)果會(huì)很準(zhǔn)確,實(shí)際上我遇到的案例也有很多是登錄掃描的案例。登錄掃描也是一種特征掃描的方式,而不是功能掃描,通過一個(gè)Oracle權(quán)限賬號(hào)取補(bǔ)丁信息或者通過OPatch命令抓取補(bǔ)丁信息。不過根據(jù)風(fēng)險(xiǎn)庫采用特征比對(duì)的方式來進(jìn)行分析對(duì)于Oracle來說十分困難。因?yàn)橐粋€(gè)漏洞可能有數(shù)種甚至數(shù)十種補(bǔ)丁可以解決,而漏掃工具的規(guī)則庫里可能不會(huì)很完整。這種情況下出現(xiàn)掃描結(jié)果不準(zhǔn)確就很正常了。只有采用功能掃描或者滲透掃描的方法替代特征掃描,模擬出某個(gè)安全風(fēng)險(xiǎn),以抓取到漏洞特征為準(zhǔn),這種方式可能會(huì)比較靠譜。不過有些漏洞滲透是有風(fēng)險(xiǎn)的操作,也有些漏洞是在某些特殊的復(fù)雜場(chǎng)景下才可能觸發(fā)的,漏掃工具很難實(shí)現(xiàn)模擬。
這個(gè)問題雖然無法徹底解決,但是還是可以改進(jìn)的。Oracle每個(gè)季度會(huì)出PSU,大部分的已知安全漏洞都會(huì)在下次PSU上解決,每個(gè)漏洞被解決的PSU也大多數(shù)被Oracle公布了(記住是大多數(shù),不是全部)。另外一個(gè)方面,大部分用戶解決Oracle安全漏洞的最常用方式就是打PSU。因此數(shù)據(jù)庫漏掃廠家可以通過加強(qiáng)PSU補(bǔ)丁解決安全問題的采集來優(yōu)化特征庫,就可以很大程度上避免用戶打了很新的PSU還報(bào)較早的漏洞的問題。另外漏掃工具也可以明確的指出解決該問題的最低PSU號(hào),從而讓運(yùn)維人員不需要像猜盲盒一樣面對(duì)漏掃報(bào)告(Oracle的PSU包含從上一個(gè)升級(jí)包到目前為止的所有補(bǔ)丁的全集,因此PSU不會(huì)漏掉任何之前發(fā)布的安全漏洞補(bǔ)?。?/p>
因?yàn)檫@些年用戶在這方面遇到了麻煩,我們也想寫個(gè)小工具來幫助用戶解決一些問題,因此在D-SMART里我們也增加了一個(gè)小工具,這個(gè)工具在免費(fèi)的D-SMART社區(qū)版里面也是免費(fèi)提供的。
有些用戶剛剛看到這個(gè)功能的時(shí)候覺得相當(dāng)高興,這可是個(gè)好工具啊,是不是我可以用它來輔助漏掃后的補(bǔ)丁更新?不過我馬上就會(huì)給他潑一盆涼水,這個(gè)工具也僅僅是通過我們預(yù)先定義好的漏洞規(guī)則庫,通過OPatch工具抓取的一些數(shù)據(jù)庫配置信息進(jìn)行簡單的掃描和分析,列出一個(gè)大體需要打補(bǔ)丁的清單而已。要想維護(hù)這個(gè)庫工作量也很大,因此我們定期更新特征庫的頻率也不高,大概三個(gè)月更新一次。
對(duì)于Oracle來說,這個(gè)表格里給出的升級(jí)補(bǔ)丁建議也只是一個(gè)十分簡單的根據(jù)規(guī)則的建議,并不能自動(dòng)分析針對(duì)你的系統(tǒng)該如何打補(bǔ)丁。這個(gè)工具最重要的功能是可以方便地導(dǎo)出一個(gè)表格,給領(lǐng)導(dǎo)交差而已。表格中的升級(jí)補(bǔ)丁列會(huì)列出一大堆我們已知的可能可以解決此問題的補(bǔ)丁號(hào),但并不全,因此不一定能夠在你的運(yùn)維環(huán)境中幫到你。
不過如果你如果能把Excel生成出來交給領(lǐng)導(dǎo),可以讓領(lǐng)導(dǎo)感到你的工作很用心,僅此而已。如果真的要打補(bǔ)丁,還是需要通過人工分析,大部分情況,我們就直接建議用戶打一個(gè)比較新的PSU就可以了。如果領(lǐng)導(dǎo)再不認(rèn),那也沒辦法了,只好說,數(shù)據(jù)庫廠商提供的最新補(bǔ)丁集都打了,還能掃出漏洞,那么也沒辦法了。