Google揭露提高Android行動通訊基頻(Cellular Baseband)安全性的方法,透過採用兩種偵測工具(Sanitizer),防止基頻中特定類型的漏洞。Google指出,他們在裸機環境針對C/C++程式碼庫部署偵測工具,以減輕未知漏洞的風險。

為了能持續減少Android記憶體安全漏洞的數量,Google不只是在Android作業系統解決這類問題,範圍也擴及到裝置的韌體,並且優先強化了行動通訊基頻,他們表示,因為行動通訊基頻在執行時具有較高的權限,而且需要解析從外部遠端傳入裝置的不受信任輸入。

Google引用之前的研究指出,行動通訊基頻韌體普遍缺乏漏洞防範措施。基頻遠端程式碼執行漏洞在第三方市場已經有其分類,而且價格相對較低,官方表示,這代表基頻錯誤數量可能很多,或是發現和濫用起來並不複雜。近年來行動通訊基頻也都成為安全會議的重要主題,有鑒於該趨勢和漏洞的嚴重性與普及性,行動通訊基頻遠端程式碼執行漏洞也被Google列為非常嚴重的等級。

為此,Google也開始相對應的措施,透過使用Clang工具鏈的偵測工具,插入Runtime來發現常見的漏洞類別。過去Google已經應用在Android使用者空間多年的偵測工具,包括BoundSan(BoundsSanitizer)與IntSan(Integer Overflow Sanitizer),也剛好非常適合用在行動通訊基頻,因為這兩個偵測工具不需要作業系統和特定架構功能的支援,並且普遍支援所有Clang目標。

BoundSan透過在部分陣列存取處,插入邊界檢查程式碼,來確保存取不會超過陣列邊界。BoundSan僅會在編譯器無法於編譯時證明存取是安全的,並且在執行時已知道陣列的大小時,才會添加程式碼進行檢查。因此BoundSan不會涵蓋所有的陣列存取,畢竟在執行時不一定會知道陣列大小。

而IntSan則會終止有號與無號整數溢位執行,除非溢位行為是刻意為之,不過Google提到,雖然無號整數溢位在技術上是已定義的行為,但是像是當其用於陣列索引時,經常會導致意料之外的行為和漏洞。由於大多數的程式碼庫都可能存在有意或是無意的溢位,因此使用IntSan會需要開發者對程式碼進行重構與註釋,並透過測試發現需要解決的溢位。

不過BoundSan和IntSan的應用對效能產生一定的影響,因此只能應用在特別關鍵的攻擊面,像是解析訊號、處理複雜格式的函式庫,或是IMS、TCP和IP堆疊等。此外,Google也強調改用記憶體安全語言的長期價值,即便不全部以Rust重寫,僅在新的程式碼中使用Rust,就能夠顯著減少記憶體安全漏洞,並提到雖然偵測工具有助於提升程式碼庫安全性,卻無法完全消除漏洞。

熱門新聞

Advertisement