Google Project Zero 研究人員,上周公佈遠端洩露蘋果 macOS 和 iOS 上特定服務記憶體位址的新方法。
這新方法可在不需傳統記憶體毁損或時間為基礎的旁路攻擊 (side-channel attack),繞過蘋果位址空間組態隨機載入 (Address Space Layout Randomization, ASLR) 的重要安全安全功能。
這項研究為 Project Zero 團隊 2024 年發想遠端繞過 ASLR 防護、洩露蘋果裝置記憶體位址的結果。
研究人員發展出一項手法可讓攻擊目標服務進行反序列化(攻擊者資料)及序列化(物件)過程,然後將資料送回給攻擊者。
雖然未發現真實世界的攻擊行動,但研究人員建立了以蘋果 macOS NSKeydArchiver 序列框架為基礎的概念驗證攻擊手法。 Google 今年初通報蘋果,後者在今年三月已釋出更新修補該漏洞。
本項攻擊是利用蘋果可預測的資料序列化行為及 NSDictionary 物件的內部結構,後者基本上是一些雜湊值表 (hash table) 。攻擊目的是利用序列化結果來洩露 NSNull singleton(單例)的記憶體位址,NSNull 是一個全系統物件,其記憶體位址正是其雜湊值。因此洩露雜湊值等同洩露物件位址,可破壞 ASLR 的防護,存取該物件所在的共享快取。
攻擊步驟
攻擊步驟技術細節如下。攻擊者先建立一個經過序列化的 NSDictionary 物件。該字典包含一組 NSNumber 金鑰以及一個 NSNull 鍵。這些 NSNumber 鍵被設計成佔據雜湊表的特定 bucket 排列,造成已知的「有/無」格位模式。接著,受害程式反序列化 (deserialize) 成記憶體中的字典結構,當程式將物件重新序列化回輸出時,它會依固定順序掃過雜湊表的各 bucket 。之後,NSNull 在返回資料中的位置(落在哪個 bucket)透露了 NSNull 的地址 modulo 表格大小(也就是地址的一部分資訊)。最後,使用中國剩餘定理 (Chinese Remainder Theorem, CRT) 還原完整地址。
用白話文來說,ASLR 的保護在於隨機化位址,使攻擊者無法預測指標位置(其指向物件的記憶體)。若能透過行為洩漏出某個固定物件的實際位址(或其餘數集合),攻擊者就能推斷出基底位址,削弱或完全繞過 ASLR 。
研究人員展示了,使用原始物件指標 (pointer) 作為資料結構的雜湊值,一旦序列化結果被取得,就可能導致直接洩露記憶體位址資訊。這種手法並非常見利用時間差的旁路攻擊手法,而是利用序列化的必然輸出結果。
研究人員建議,最保險的防範方法是避免以物件位址作為查表鍵 (lookup key) 或直接序列化輸出。若必須以指標類值當鍵,先用帶密鑰的雜湊 (keyed hash,例如 HMAC) 對指標值進行雜湊,並只輸出雜湊結果,使攻擊者無法從輸出還原出原始位址。
