Google宣布在Android P中擴展編譯器緩解漏洞的作法,來讓特定類型的漏洞攻擊失效。當未定義行為出現時,Android P會讓Runtime操作安全的失敗,這個做法綜合了兩部分,分別是控制流程完整性(Control Flow Integrity,CFI)與整數溢位消毒(Integer Overflow Sanitization),以防止程式碼重用攻擊(Code-Reuse Attack,CRA)以及整數溢位造成類別記憶體損壞或是資訊洩漏的漏洞。

Google提到,他們從Android N開始便開始預設LLVM/Clang作為平臺編譯器,已獲得更多縱深安全防禦的優勢,而現在要繼續在編譯器上耕耘,使特定類型的臭蟲難以被駭客發展成攻擊漏洞。由於現代攻擊鏈中的關鍵步驟,是駭客透過破壞函數指標或是回傳位置來控制程式流,而這正為程式碼重用攻擊開了一道大門,讓駭客可以執行程式碼的任意片段來達成惡意目的。

在Android O中,首先支援了LLVM的CFI實作,透過把程序流控制在預期的函式呼叫圖(Call Graph)中,來減緩程式碼重用攻擊的影響,現在則擴大在Android P的支援。這項實作的重點在於使用間接跳轉分支(Indirect Branches)技術,來防止控制流的操作。具有預期函式簽章的函式進入點才是合法的分支目標,因此控制流被嚴謹的控制在一小組合法目標中,因此程式碼重用攻擊會變得綁手綁腳,而且一些記憶體損壞的漏洞也會難以利用。

此外,在Android N中,開始引入消毒程序UndefinedBehaviorSanitizer(UBSan)對帶號與非帶號整數進行溢位清理,檢測算術指令溢出帶號與非帶號整數,這個消毒程序會讓執行程序安全的中止,進而減輕了整數溢位造成整個類別記憶體損壞或是資訊洩漏的漏洞。

由於在Android N中採用效果良好,因此現在於每個釋出版本的媒體框架,都會擴大使用這些消毒程序。LLVM的消毒程序經過修改後,透過減少使用ARM 32位元指令以及移除不必要的檢查,已經降低對於系統效能的衝擊。Google測試顯示,這些改進在部分程式中減少了75%的效能影響。同時他們也改進了Android建置系統的支援,像是現在加入更好的診斷支援、更合理的崩潰處理,以及全域整數溢位目標消毒測試,加速了消毒程序的釋出。


Advertisement

更多 iThome相關內容