上周,CrowdStrike的錯(cuò)誤更新導(dǎo)致全球范圍內(nèi)的Windows系統(tǒng)出現(xiàn)大規(guī)模藍(lán)屏事件,造成巨大經(jīng)濟(jì)損失。
據(jù)估計(jì),僅美國(guó)財(cái)富500強(qiáng)企業(yè)就面臨54億美元的損失,全球損失可能高達(dá)150億美元。受此影響,CrowdStrike股價(jià)暴跌超過(guò)20%。
除了對(duì)CrowdStrike的質(zhì)疑和譴責(zé),開(kāi)發(fā)者圈內(nèi)還興起了另一個(gè)話題:
”如果CrowdStrike改用Rust的話,全球850萬(wàn)PC是不是就不會(huì)藍(lán)屏了?“
這次事件的起因竟是一個(gè)簡(jiǎn)單的null deref錯(cuò)誤。盡管C++語(yǔ)言已經(jīng)發(fā)展了數(shù)十年,擁有各種工具、linter、sanitizer、測(cè)試和同行評(píng)審機(jī)制,但仍然無(wú)法阻止此類(lèi)錯(cuò)誤的發(fā)生。
因此不少開(kāi)發(fā)者認(rèn)為,如果采用內(nèi)存安全機(jī)制更完善的Rust語(yǔ)言,或許能夠避免類(lèi)似事件的發(fā)生。
然而,一位同樣喜歡Rust的資深軟件工程師Julio Merino,在理智地進(jìn)行了一番全盤(pán)分析后得出結(jié)論:“就算是Rust,也救不了這次CrowdStrike的中斷事故。”
我們來(lái)看看他怎么說(shuō)。
首先,CrowdStrike官方將此次事件歸咎于一次配置更新引發(fā)的邏輯錯(cuò)誤,該錯(cuò)誤導(dǎo)致部分系統(tǒng)崩潰。
具體來(lái)說(shuō),F(xiàn)alcon平臺(tái)在解析配置文件時(shí),由于代碼邏輯缺陷,嘗試訪問(wèn)了無(wú)效的內(nèi)存地址,最終引發(fā)系統(tǒng)崩潰。
誠(chéng)然,Rust的內(nèi)存安全機(jī)制可以有效避免此類(lèi)內(nèi)存訪問(wèn)錯(cuò)誤。然而,將此次事件僅僅歸咎于內(nèi)存安全問(wèn)題,無(wú)異于“只見(jiàn)樹(shù)木,不見(jiàn)森林”。
首先,內(nèi)核崩潰的原因多種多樣,內(nèi)存錯(cuò)誤只是其中之一。
死鎖、系統(tǒng)調(diào)用處理程序錯(cuò)誤、無(wú)限遞歸等等,都可能導(dǎo)致內(nèi)核崩潰。Rust雖然可以最大程度減少內(nèi)存錯(cuò)誤和其他邏輯錯(cuò)誤,但并不能完全杜絕所有潛在問(wèn)題。
其次,即使Falcon不運(yùn)行在內(nèi)核空間,系統(tǒng)崩潰的風(fēng)險(xiǎn)依然存在。
Falcon作為終端安全系統(tǒng),需要具備防篡改能力,以防止惡意軟件和用戶的惡意操作。如果將Falcon遷移至用戶空間,并通過(guò)受控API與內(nèi)核通信,則需要確保這些API同樣具備防篡改能力。
否則,惡意軟件或用戶可以通過(guò)攻擊這些API,間接地影響系統(tǒng)穩(wěn)定性。
因此,僅僅依靠Rust的內(nèi)存安全機(jī)制,并不能完全避免類(lèi)似事件的發(fā)生。
更重要的是,此次事件的根本原因在于CrowdStrike的配置變更發(fā)布流程存在嚴(yán)重缺陷。
根據(jù)SRE原則,配置變更應(yīng)該分階段、漸進(jìn)式地進(jìn)行,并在每個(gè)階段進(jìn)行充分驗(yàn)證。
然而,CrowdStrike顯然沒(méi)有遵循這一原則,導(dǎo)致一個(gè)本應(yīng)在測(cè)試階段就被發(fā)現(xiàn)的錯(cuò)誤配置被推送至全球用戶,最終引發(fā)了大規(guī)模系統(tǒng)崩潰。
CrowdStrike最新發(fā)布的初步審查報(bào)告也證實(shí)了這一點(diǎn),報(bào)告指出“測(cè)試和流程不完善”是導(dǎo)致此次事件的主要原因。
報(bào)告詳細(xì)描述了從2月28日到7月19日期間,CrowdStrike多次發(fā)布更新,并在測(cè)試環(huán)節(jié)存在嚴(yán)重疏漏,最終導(dǎo)致了7月19日的全球宕機(jī)事件。
綜上,CrowdStrike全球宕機(jī)事件的根本原因在于其部署流程的缺陷,而非簡(jiǎn)單的代碼或技術(shù)問(wèn)題。
-------
將Rust奉為解決此類(lèi)問(wèn)題的唯一答案,不僅無(wú)助于問(wèn)題的解決,反而會(huì)加劇技術(shù)社區(qū)之間的分歧,不利于Rust的推廣和普及。
我們應(yīng)該認(rèn)識(shí)到,任何技術(shù)都有其局限性,Rust也不是萬(wàn)能的。
與其盲目追捧,不如理性看待,將Rust作為提升軟件安全性和可靠性的工具之一,并結(jié)合完善的流程和最佳實(shí)踐,共同構(gòu)建更加健壯的軟件系統(tǒng)。