原因
當Windows作業系統遇到嚴重錯誤導致系統崩潰時,螢幕顯示為藍色,通常伴有錯誤程式碼和資訊,這被稱為“藍色畫面當機”(Blue Screen of Death,簡稱BSOD)
https://www.thepaper.cn/newsDetail_forward_28126297 這次藍色畫面事件影響非常廣泛,主要原因是CrowdStrike 的核心驅動升級導致的,CrowdStrike是國外廣泛使用的一個安全防護軟體廠商,類似於國內的毒霸 360之類。
Microsoft says 8.5M systems hit by CrowdStrike BSOD, releases USB recovery tool When reboots don't work, bootable USB sticks may help ease fixes for some PCs.
微軟為此釋出了一個修復說明,核心意思是說,你用一個PE工具進入系統,然後把CrowdStrike 的核心驅動 C-00000291*.sys刪掉,然後就可以了。
https://support.microsoft.com/en-us/topic/kb5042421-crowdstrike-issue-impacting-windows-endpoints-causing-an-0x50-or-0x7e-error-message-on-a-blue-screen-b1c700e0-7317-4e95-aeee-5d67dd35b92f
什麼是sys檔案
.sys格式的檔案實際上是window 的核心驅動檔案,做軟體開發的工程師多少都會有些瞭解。核心驅動直接訪問了作業系統的底層資源,如果這個檔案有bug,系統很容易藍色畫面,且無法恢復,因為重啟的時候它又會自動載入。
先來看看.sys在widnows作業系統所處的層級,非常的low level
什麼裝置需要核心驅動
需要作業系統核心資源的任務或者裝置,本質上都可以寫一個核心驅動來呼叫核心資源。通常windows的外設,比如顯示卡、USB裝置、自研PCIe裝置、串列埠裝置 都需要對應的核心驅動去實現與硬體的互動,尤其是pcie 裝置,只有用核心驅動程式碼才能訪問對應資源,從而驅動外設。
核心驅動安全策略
強制數字簽名。
數字簽名在Windows作業系統中扮演著重要角色,尤其是為了增強系統穩定性和安全性。數字簽名是一種加密技術,用於驗證軟體的來源和完整性。在Windows環境下,數字簽名用於確保驅動程式和其他軟體來自可信賴的釋出者,並且自發布以來未被篡改。
以下是數字簽名在Windows系統中的幾個關鍵作用:
- 驗證來源:數字簽名可以確認軟體是由已知和信任的開發人員或公司建立的,這有助於防止惡意軟體和病毒的傳播。
- 確保完整性:簽名過程使用公鑰加密技術來建立一個唯一的數字指紋,如果軟體在傳輸過程中或安裝後被修改,數字簽名將不再匹配,提示使用者軟體可能已被篡改。
- 提升系統穩定性:Windows強制要求所有核心模式驅動程式都有數字簽名,這是為了確保這些驅動程式遵循Microsoft的作業系統程式設計規範,從而減少由驅動程式引發的藍色畫面事件。
- 驅動程式認證:在Windows Vista及更高版本中,作業系統預設啟用了驅動程式簽名強制執行,即所有載入到核心的驅動程式必須帶有有效的數字簽名。這有助於防止不相容或惡意的驅動程式載入,從而減少系統崩潰的風險。
數字簽名
Windows裝置安裝利用數字簽名來驗證驅動程式包的完整性和確認提供驅動程式包的供應商(軟體釋出者)的身份。此外,64位版本的Windows Vista及其後續Windows版本的核心模式程式碼簽名策略規定,核心模式驅動程式必須經過簽名才能載入。
Windows 10桌面版(家庭版、專業版、企業版和教育版)以及Windows Server 2016的核心模式驅動程式必須由Windows硬體開發者中心Windows Hardware Quality Labs (WHQL)進行簽名,這要求具備擴充套件驗證(EV)證書。詳情請參閱驅動程式簽名策略。
所有為Windows 10(從版本1507,Threshold 1開始)由硬體開發者中心簽名的驅動程式都是使用SHA2演算法簽名的。有關特定作業系統版本的詳細簽名要求,請參閱按版本劃分的簽名要求。
在WIN10之前,使用者的核心驅動只要有EV證書籤名就可以被作業系統認可,但是實際上這個策略非常不安全,因為EV證書籤名很容易獲取,即使不是出於非法目的,隨意的核心驅動EV簽名也可能頻繁導致系統BSOD故障或者卡死,因為驅動開發人員不能保證它的測試項覆蓋了所有必要的情況。
如何或得簽名
https://learn.microsoft.com/en-us/windows-hardware/drivers/dashboard/get-started-dashboard-submissions
- 首先你得有一個EV證書,這個需要到第三方授權機構 購買,你沒辦法自己憑空生成一個被認可的證書,對你的核心驅動進行簽名。
- 到微軟 註冊賬號
- 需要為驅動程式碼進行測試,微軟有一套通用測試列表,在win10之前 叫HCK https://learn.microsoft.com/en-us/windows/win32/w8cookbook/windows-hardware-certification-kit ,win10之後叫HLK https://learn.microsoft.com/en-us/windows-hardware/test/hlk/
- 透過測試後,打包上傳 等待微軟簽名
我們看一下經過認證的驅動簽名是什麼樣子的。
後續會記錄如何為驅動進行測試和簽名。
為什麼CrowdStrike 做了認證還會當機
這大機率是CrowdStrike 鑽了微軟的空子,因為數字簽名的測試步驟非常繁瑣,做1個測試至少要1天的時間,並且微軟簽名並不檢查當前驅動打包檔案的日期,只要你曾經做過一次成功的測試,保留了日誌檔案,那麼理論上你可以跳過測試讓微軟簽名。
這大機率會導致出現問題。當前市面上有些中介機構,號稱可以做WHQL認證,實際上也是這個策略,它根本不會給你做測試,只是偷偷把你的驅動打包到已經做了測試的檔案中,然後簽名,沒有任何成本。