見證歷史,被全球網(wǎng)安人吐槽,一個參數(shù)導(dǎo)致巨大災(zāi)難事故
在7月19日引發(fā)全球網(wǎng)絡(luò)動蕩的數(shù)百萬臺Windows系統(tǒng)電腦藍(lán)屏宕機(jī)后,CrowdStrike于當(dāng)?shù)貢r間8月7日發(fā)布了一份事件分析報告,從技術(shù)角度對故障原因進(jìn)行了詳細(xì)闡述。
這份長達(dá)12頁的根本原因分析 (RCA)相比于在事發(fā)5天后發(fā)布的初步事故后調(diào)查 (PIR),從調(diào)查結(jié)果、緩解措施和技術(shù)細(xì)節(jié)方面均提供了更加細(xì)致的內(nèi)容,但同時也暴露出這家網(wǎng)安巨頭企業(yè)在產(chǎn)品質(zhì)量和測試方面存在重大瑕疵和紕漏。
一句話概括:一個令人大跌眼鏡的小錯誤引發(fā)了一場巨大災(zāi)難。CrowdStrike公司調(diào)查報告發(fā)布后,不僅沒有獲得大家的諒解,反而引發(fā)全球安全人的瘋狂吐槽。
事件原因:就只是多了一個參數(shù)?
根據(jù)這份名為“通道文件 291事件”(Channel File 291 Incident)的報告內(nèi)容分析,CrowdStrike 于今年2月為識別并修復(fù)最新高級威脅的Falcon 傳感器發(fā)布了7.11版本,其中包括了用于Windows 進(jìn)程間通信 (IPC) 機(jī)制的新模板類型,該模板實例通過編號為 291 的相應(yīng)通道文件作為快速響應(yīng)內(nèi)容交付給傳感器,以便查看并檢測濫用命名管線及其他 Windows 進(jìn)程間通信(IPC)機(jī)制的新型攻擊技術(shù)。
報告截圖
但新的IPC模板類型定義了21個輸入?yún)?shù)字段,而調(diào)用帶有通道文件291模板實例的內(nèi)容解釋器的集成代碼僅提供了20個輸入值進(jìn)行匹配。CrowdStrike稱這種不匹配躲過了多層構(gòu)建驗證和測試,造成這一情況的部分原因在于測試期間和最初的 IPC 模板實例中對第 21 個輸入值使用了通配符匹配標(biāo)準(zhǔn)。
在7月19日事發(fā)當(dāng)天,CrowdStrike在更新中部署了兩個新的 IPC 模板實例,其中一個對第 21 個輸入?yún)?shù)采用了非通配符匹配標(biāo)準(zhǔn),因此需要傳感器檢查第 21 項輸入?yún)?shù)。在將此通道文件傳送給傳感器之前,原有通道版本中的 IPC 模板實例從未使用過第 21 項輸入?yún)?shù)。內(nèi)容驗證器評估了新的模板實例,但評估過程同樣以 IPC 模板類型能夠提供 21 項輸入為前提和基本預(yù)期。
因而,接收到攜帶問題內(nèi)容的新版通道文件 291 傳感器在內(nèi)容解釋器中便會存在越界讀取問題。 在操作系統(tǒng)發(fā)出下一次 IPC 通知時,對新的 IPC 模板實例進(jìn)行了評估,指定與第 21 個輸入值進(jìn)行比較,但內(nèi)容解釋器預(yù)期只能處理20 個值,在嘗試訪問第 21 個值時產(chǎn)生了超出輸入數(shù)據(jù)數(shù)組末尾的越界內(nèi)存讀取,最終導(dǎo)致系統(tǒng)崩潰。
總結(jié)下來,是在7月19日的更新當(dāng)中,F(xiàn)alcon引入的新傳感器預(yù)計只更新20項參數(shù),但實際輸入了21項參數(shù),且對第21項參數(shù)缺乏非通配符匹配標(biāo)準(zhǔn)的特定測試,引發(fā)越界內(nèi)存讀取導(dǎo)致系統(tǒng)崩潰。
是的,你沒有理解錯,就是單純的多個一個參數(shù),引發(fā)了一場全球電腦集體藍(lán)屏事件。以至于被業(yè)內(nèi)專家吐槽,如此糟糕的代碼,如此糟糕的產(chǎn)品,如此糟糕的測試。
CrowdStrike也在報告中列出了如下改進(jìn)措施:
- 對模板類型輸入字段實施編譯時驗證
- 在內(nèi)容解釋器中增加運行時數(shù)組邊界檢查
- 擴(kuò)大模板類型測試范圍,以涵蓋更多匹配標(biāo)準(zhǔn)
- 更正內(nèi)容驗證器中的邏輯錯誤
- 引入模板實例的分階段部署
- 提供客戶對快速響應(yīng)內(nèi)容更新的控制權(quán)
一個令網(wǎng)安人大跌眼鏡的錯誤
這份報告雖然很詳細(xì)地列出了故障原因,但從中暴露出的問題也引發(fā)了部分專家對這家擁有雄厚技術(shù)實力網(wǎng)安公司的指責(zé)。
微軟獨立安全研究員Kevin Beaumont表示,“CrowdStrike 在部署之前,頻道更新沒有在真實的 Windows PC 上進(jìn)行測試,它們依賴于自動化的定制代碼測試。這一點在報告中沒有提及,而這才是導(dǎo)致事故的真正原因。“
工程師 Eduardo Bellani 表示,”問題的核心是一個數(shù)組越界錯誤,這是緩沖區(qū)溢出的特殊情況,在開發(fā) Crowdstrike 系統(tǒng)的 C++ 語言中被視為未定義行為。對于這種關(guān)鍵性的軟件,這樣的問題不應(yīng)該發(fā)生。“
他還稱:”RCA 中提出的所有技術(shù)緩解措施都只是堵塞漏洞。但安全不能以這種方式實現(xiàn),此類努力需要在一開始就將安全性融入設(shè)計、工具和語言中。如果我是 Crowdstrike 的客戶,我會擔(dān)心未來。”
可見,這份長達(dá)12頁的報告,暴露了Crowdstrike在做部署時測試環(huán)節(jié)的缺位,以及沒有反映如何從根本上避免類似缺陷問題再次發(fā)生。
毫無疑問,這次事件是對安全大廠的一次徹底“祛魅”,給一些所謂安全、可靠且受眾廣泛的安全產(chǎn)品給予了當(dāng)頭一棒,如果廠商對產(chǎn)品無法保證嚴(yán)格的安全測試,無法進(jìn)一步牢固產(chǎn)品質(zhì)量基礎(chǔ),及時發(fā)現(xiàn)并修復(fù)存在的錯誤,那么下一次重大事故的發(fā)生將只是時間問題。
CrowdStrike表示,已經(jīng)聘請了兩家獨立的第三方軟件安全供應(yīng)商,對Falcon傳感器代碼進(jìn)行進(jìn)一步審查,以確保安全性和質(zhì)量保證,同時還將對從開發(fā)到部署的端到端質(zhì)量流程進(jìn)行獨立審查。