解決方案
在微軟揭露 CVE-2020-0601 後不到 24 小時——這是微軟於 2020 年 1 月 14 日在接獲 NSA 私下通報後修補的 Windows CryptoAPI 重大漏洞——研究員 Saleem Rashid 在 Twitter 上發布圖片,顯示 Rick Astley 的〈Never Gonna Give You Up〉在 GitHub.com 與 NSA.gov 上透過 HTTPS 播放。這個 rickroll 就是示範:他的漏洞利用程式讓 Edge 與 Chrome 將偽造網站視為真正通過驗證,Brave、其他 Chrome 衍生瀏覽器與 Internet Explorer 可能也受到影響。Firefox 則未顯示受到影響的跡象。
該漏洞徹底破壞了 Windows 10(包括 Windows Server 2016 與 2019)上網站、軟體更新、VPN 及其他安全關鍵用途的憑證驗證。其機制如下:CryptoAPI 信任每張憑證隨附的橢圓曲線參數,而非要求使用標準定義的曲線,因此攻擊者可以提供自訂的生成元參數——讓 Windows 與攻擊者所選的公鑰「達成一致」,並使偽造憑證被當成真品通過。
Rashid 表示,該漏洞利用程式約使用 100 行程式碼,若捨棄「幾項實用技巧」,還能壓縮到 10 行。這項示範的速度——在一天之內,針對一個未附公開技術說明的已揭露漏洞——顯示當根本原因是設計錯誤而非記憶體錯誤時,「已修補的漏洞」與「已武器化的漏洞利用程式」之間的差距有多小。
這起揭露的來源賦予了故事諷刺意味:NSA 私下通報了這個漏洞,而其實際影響包括可冒充 NSA 自家網站。Rickroll——示範嚴重安全漏洞的標準幽默手法——讓非專家也能立即看見這種冒充。
達成了什麼
一個接受攻擊者橢圓曲線參數的加密程式庫,會讓攻擊者挑選數學所認可的金鑰——驗證於是變成橡皮圖章。
為何奏效
根本原因是設計原則,而非實作疏失:接受呼叫方提供的加密參數,會把敏捷性轉變為通用偽造能力。
影響範圍涵蓋 TLS 所保護的一切——網站、軟體更新、VPN——遍及所有 Windows 10 與 Server 2016/2019 機器。
在揭露後一天內,約 100 行就能完成可運作的冒充,而那時大多數防禦者甚至還沒套用修補程式。
示範目標正是漏洞的通報者本身,使這個失效模式無法被斥為理論問題。
可借鏡之處
加密敏捷性就是攻擊面:驗證方願意從不受信任一方接受的每一個參數,都是攻擊者能轉動的旋鈕——把常數寫死,不要驗證任何可選項目。
後續發展
微軟於 2020 年 1 月 14 日發布的修補程式修正了 Windows 10 與受影響伺服器版本的 CryptoAPI 驗證漏洞;來源報導指出,除 Rashid 的示範外,並無實際環境中的漏洞利用。
追溯依據
參考來源
- Critical Windows 10 vulnerability used to Rickroll the NSA and Github Ars Technica · arstechnica.com ·