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