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