聊聊不大靠譜的資料庫安全掃描
前陣子就有朋友留言說讓我吐槽吐槽資料庫安全掃描,此言正合我意。這些年,企業安全事故頻發,勒索病毒事故多出,再加上安全對抗演練的進行,讓資料庫安全在企業裡的地位與日俱增,安全掃描也變成了頭等大事。也經常有客戶發安全掃描結果過來,讓我們幫助分析如何優化,其中大多數是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就可以了。如果領導再不認,那也沒辦法了,只好說,資料庫廠商提供的最新補丁集都打了,還能掃出漏洞,那麼也沒辦法了。
- Spring中實現非同步呼叫的方式有哪些?
- 帶引數的全型別 Python 裝飾器
- 整理了幾個Python正則表示式,拿走就能用!
- 設計模式之狀態模式
- 如何實現資料庫讀一致性
- SOLID:開閉原則Go程式碼實戰
- React中如何引入CSS呢
- 慢查詢 MySQL 定位優化技巧,從10s優化到300ms
- 一個新視角:前端框架們都卷錯方向了?
- 編碼中的Adapter,不僅是一種設計模式,更是一種架構理念與解決方案
- 手寫程式語言-遞迴函式是如何實現的?
- 一文搞懂模糊匹配:定義、過程與技術
- 新來個阿里 P7,僅花 2 小時,做出一個多執行緒永動任務,看完直接跪了
- Puzzlescript,一種開發H5益智遊戲的引擎
- @Autowired和@Resource到底什麼區別,你明白了嗎?
- “四招”守護個人資訊保安
- CSS transition 小技巧!如何保留 hover 的狀態?
- React如此受歡迎離不開這4個主要原則
- 我是怎麼入行做風控的
- 重溫三十年前對於 NN 的批判:神經網路無法實現可解釋 AI