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