+− THE DAILY DIFFdev & AI news
SHIP IT

一個額外欄位使850萬台電腦當機。78分鐘。

世界標準時間2024年7月19日04:09:CrowdStrike向每個上線的Windows Falcon感測器推送Channel File 291——一個快速響應內容更新。

世界標準時間2024年7月19日04:09:CrowdStrike向每個上線的Windows Falcon感測器推送Channel File 291——一個快速響應內容更新。它所饋送的模板在2月時宣告有21個輸入欄位;提供輸入的程式碼則建構了20個元素的陣列。四個月來,沒有任何東西讀取欄位21,因為每個規則都將其保留為萬用字元。此更新在此處放置了一個真實的模式。雲端內容驗證器根據宣告計數為21並通過;感測器的內容解釋器在沒有邊界檢查的情況下,在核心模式讀取了槽位21,導致Windows發生分頁錯誤:PAGE_FAULT_IN_NONPAGED_AREA,csagent.sys。驅動程式在啟動時特意提早載入,讀取相同檔案,再次當機——導致啟動循環。在78分鐘後的05:27 UTC撤銷,但850萬台機器(微軟的統計,不到Windows的1%)已經有了該檔案,解決方案是每台鍵盤前都需有人工操作:安全模式,刪除C-00000291*.sys,BitLocker復原金鑰。航空公司、醫院、銀行和911中心停擺;達美航空取消了約7,000個航班,並向CrowdStrike和微軟索賠至少5億美元;Parametrix估計財富500強的損失接近54億美元。事後分析來自CrowdStrike自己的《根本原因分析》、《初步事件後審查》、微軟部落格、達美航空的8-K文件和眾議院證詞。Git blame:CrowdStrike佔65% / 核心模式設計佔25% / 星期五佔10%。修復方案的裁決:SHIP IT,勉強。

閱讀書面版(英文) ↗

本影片重點

  • 2024年2月28日至4月24日:感測器7.11發布了IPC模板類型(宣告21個欄位,提供20個);壓力測試於3月5日通過;四個實例之所以能運作,是因為欄位21是萬用字元
  • 7月19日,04:09 UTC:兩個新的模板實例;內容驗證器的邏輯錯誤讓非萬用字元的那個通過;核心中的越界讀取;05:27 UTC撤銷
  • 7月19日至29日:手動修復(安全模式、刪除檔案、BitLocker金鑰);約97%的感測器在7月24日前恢復,約99%在7月29日前恢復
  • 7月25日至8月19日:執行時邊界檢查、編譯時欄位計數驗證、驗證器檢查、金絲雀部署環、客戶對快速響應內容的控制、兩次獨立審查;8月6日完成帶有崩潰轉儲的完整根本原因分析

翻譯文字稿

譯自英文原版旁白。可用的音訊和字幕由 YouTube 控制。

0:00 一項安全更新將二十一個欄位帶入一個為二十個欄位建構的驅動程式, 導致八百五十萬台Windows機器在早餐前藍屏。 2024年7月19日,04:09 UTC。 CrowdStrike向每個Falcon感測器推送Channel File 291。 七十八分鐘後他們將其撤回;到那時,航空公司、 醫院和銀行都盯著同一個藍色矩形。 執行長的第一篇貼文說這不是網路攻擊,確實如此,但這不是重點。 它如何發生,為何可能,以及誰該負責。

0:27 這是《The Daily Diff》,事後分析。 2月28日。感測器7.11發布了一個用於命名管道的新檢測器。 它宣告了二十一個輸入欄位;餵給它的程式碼建構了一個由 二十個元素組成的陣列。沒有人注意到:四個月來,每個規則都將欄位二十一保留為 萬用字元,而沒有人會讀取萬用字元。 壓力測試通過,四個規則發布,一切正常。 7月19日,04:09。 兩個新規則;其中一個在欄位二十一中放置了一個真實的模式。

0:51 雲端驗證器根據宣告計數為二十一,並表示正常。 每個上線的Windows主機立即下載它,因為沒有金絲雀環。 感測器讀取槽位二十一,那不是它的記憶體, 然後核心執行了核心會做的事情。 05:27,撤銷。對於所有重新啟動過的人來說太遲了:驅動程式在 啟動時提早載入,讀取相同檔案,再次當機。 啟動循環。為什麼這會發生? 這些規則是從雲端推送的配置,因此不是程式碼跳過了程式碼

1:16 管線。解釋器沒有邊界檢查;它信任驗證器, 而驗證器信任宣告。 而且這一切都在核心模式中運行,在那裡,一個壞指標不是異常,而是 Windows稱無法透過try-except保護的分頁錯誤。 Patrick Wardle在那天下午從一個崩潰轉儲中讀取到:索引零x十四, 槽位二十一。修復是手動的。 安全模式,刪除C-00000291,重新啟動。 使用BitLocker,首先輸入一個四十八位元的

1:43 復原金鑰,它位於一個 同樣藍屏的伺服器上。 git blame。CrowdStrike,百分之六十五:RCA列出了六項發現, 而發現六是一句完整的句子:模板實例應有分階段 部署。核心模式設計, 百分之二十五:CrowdStrike表示Windows目前 無法在核心之外託管安全性,微軟表示這不是微軟事件, 而分頁錯誤不在乎這些。

2:05 星期五,百分之十。 提交訊息稱這不是程式碼。 影響範圍:八百五十萬台設備,不到Windows的百分之一。 達美航空取消了七千個航班並索賠五億美元, 包括微軟。保險公司估計財富500強的損失接近五十億美元。 Hacker News:四千五百個點讚。 諷刺的是:一個旨在檢測新型攻擊技術的更新,反而交付了一種新型攻擊。 裁決,事後分析:SHIP IT,勉強。

2:27 六天內完成邊界檢查,分階段環,客戶對內容更新的控制, 兩次外部審查。 之所以是勉強,是因為所有這些原本就已是標準實務。 星期一:無論您的代理程式從雲端拉取什麼,都會經過金絲雀環。 一旦有東西在無法拋出錯誤的地方解析它,配置就變成了程式碼。 請將您仍不允許談論的事件發送給我, 在評論中,或發送到thedailydiff.dev。 這就是今天的diff。

2:48 我是來自Axrisi的Niko。 請負責地合併。

來源

  1. CrowdStrike, Root Cause Analysis — Channel File 291 (Aug 6, 2024, 12 pp.)www.crowdstrike.com
  2. CrowdStrike, Executive Summary of the RCA (Aug 6, 2024)www.crowdstrike.com
  3. CrowdStrike, Preliminary Post Incident Review (Jul 24, 2024)www.crowdstrike.com
  4. CrowdStrike, Remediation and Guidance Hub — Channel File 291 (the workaround steps)www.crowdstrike.com
  5. CrowdStrike, tech alert of Jul 19, 2024 (archived: Safe Mode → delete C-00000291*.sys → BitLocker key)web.archive.org
  6. Microsoft, David Weston, "Helping our customers through the CrowdStrike outage" (Jul 20, 2024; the 8.5 million figure)blogs.microsoft.com
  7. Delta Air Lines, Form 8-K (Aug 8, 2024; ~7,000 cancellations, at least $500 million)www.sec.gov
  8. Adam Meyers (CrowdStrike SVP), written testimony, House Homeland Security Subcommittee (Sep 24, 2024)homeland.house.gov
  9. George Kurtz on X, Jul 19, 2024, 09:45 UTCx.com
  10. Patrick Wardle on X, Jul 19, 2024 (the crash-dump index 0x14)x.com
  11. Hacker News, Jul 19, 2024 — "CrowdStrike Update: Windows Bluescreen and Boot Loops" (4,489 points)news.ycombinator.com
  12. The Guardian, Jul 24, 2024 — "CrowdStrike global outage to cost US Fortune 500 companies $5.4bn" (Parametrix estimate)www.theguardian.com
  13. Hacker News, Jul 21, 2024 — "Initial details about why CrowdStrike's CSAgent.sys crashed" (519 points)news.ycombinator.com
  14. Wikipedia — 2024 CrowdStrike-related IT outagesen.wikipedia.org

相關影片

postmortem · zh-TW · 2026年9月12日

一個正規表達式擊垮了 Cloudflare。27 分鐘。

2019 年 7 月 2 日,世界標準時間 13:42:Cloudflare 的網路應用程式防火牆 (WAF) 的一項新規則在大約兩秒鐘內在全球 180 多個城市上線。這是一項模擬模式下的 XSS 規則,因此它不會阻止任何內容,但它仍然會在每個請求上運行,並且它以 .*(?:.*=.*) 結尾。PCRE 進行回溯,每個處理 HTTP 請求的 CPU 核心都達到 100 %,每個經 Cloudfla

3:00 ↗
postmortem · zh-TW · 2026年9月22日

重新開機讓 Telstra 回到 2006 年。九百萬支手機受影響。

墨爾本的一名工程師在凌晨 2:50 重新啟動計時機箱,到早餐時間,澳洲最大的行動網路一致同意時間是 2006 年 11 月 8 日。2026 年 7 月 8 日:Telstra 的 NTP 機箱中一個 GPS 卡在電源維修期間重新啟動,其韌體從未進行過 GPS 週數翻轉更新,因此它選擇了舊的紀元,回到 1,024 週前。由於 2025 年 10 月的權宜之計,該卡成為網路唯一的 stratum-1

3:15 ↗
postmortem · zh-TW · 2026年9月19日

Google Cloud 在空白欄位上崩潰。三小時。

一個帶有幾個空白欄位的政策列導致空指標,Google Cloud 在所有區域同時崩潰 — 然後 Cloudflare 也隨之崩潰。2025 年 6 月 12 日,世界標準時間 17:49:Service Control 是核准每個 Google Cloud API 請求的二進位檔案,它讀取了一個帶有「非預期空白欄位」的配額政策變更,觸發了兩週前部署且沒有空值檢查和功能旗標的程式碼路徑,並在每個區域

2:57 ↗