KeyFrame內部研究專用

Black Hat Europe 2025 | Page Phantoms: Zero-IO, In-Memory Tampering Of The Linux Page Cache

Black Hat·6月24日週三·32 min英文

三句話摘要

通過繞過頁面緩存管理的監控,在Linux中實現無IO的內存級文件修改攻擊,躲避主機VMM檢測。 頁面緩存內存管理的動態特性與主機VMM監控的靜態基線之間存在根本矛盾,攻擊者可利用MGLRU直接操縱可回收頁面實現內存級文件篡改,其無API、無IO的特性使其難以被檢測。 雙層防禦的盲點 — 主機VMM監控主要聚焦固定區域(.text、.data)和穩定內核對象(inode),但文件數據頁面是動態的、頻繁交換的,外觀與正常內存使用無異,成為攻擊者可利用的缺口。

重點整理

重點
  • 1

    雙層防禦的盲點 — 主機VMM監控主要聚焦固定區域(.text、.data)和穩定內核對象(inode),但文件數據頁面是動態的、頻繁交換的,外觀與正常內存使用無異,成為攻擊者可利用的缺口。

  • 2

    MGLRU作為偵查工具 — 新型LRU管理器通過世代機制追蹤頁面熱度,熱頁面被保護在內存中更長時間,這讓攻擊者能識別並穩定定位目標文件頁面,提供充足的攻擊窗口。

  • 3

    智能的三階段隔離方案 — 通過分離"選擇頁面"(短時持鎖)、"解析路徑"(無鎖)、"隔離目標"(單頁面鎖)三個階段,完全規避ABBA死鎖和軟鎖上問題,允許安全定位目標頁面。

  • 4

    地址空間直接替換,繞過API監控 — 與其修改原有頁面(會觸發API調用),攻擊者直接替換XAS條目、將修改後的頁面放入位置、清除dirty標誌並讓內核背景進程自動寫回,整個過程不產生可監控的API調用。

實用技巧與重點

乾貨
  • 監控層次
  • 主機側:VMM、QEMU、KVM;監控inode結構及哈希變化
  • Guest側:EDR、VFS層、頁面緩存API;監控kernel API調用和inode修改
  • 目標文件
  • /etc/password、/etc/shadow、系統登錄日誌
  • 核心數據結構
  • MGLRU(多代LRU):GenZero(年輕頁)、Gen1...MaxGen(老頁)
  • XAS(地址空間結構):按索引管理文件的所有頁面
  • struct page(folio):頁面元數據
  • struct address_space:inode的頁面緩存索引
  • 技術問題與解決方案
  • 死鎖問題:VFS使用dentry lock、IORU使用page lock,順序相反導致ABBA死鎖 → 分離鎖持有時間
  • 軟鎖上問題:路徑解析在全局自旋鎖內耗時過長 → 鎖外解析,僅鎖定必要操作
  • 緩衝區句柄:新頁面必須預先附加空緩衝區句柄,否則寫回時檔案系統會拒絕
  • 七步隔離過程
  • 鎖定目標頁面、增加引用計數、標記為protected、解鎖
  • 如果其他進程已映射此頁,先解映射
  • 修改頁面內容(核心空間或用戶空間映射)
  • 從IO列表移除、更新IORU世代/計數器
  • 更新VM計數器、清除IORU標誌
  • 從頁面緩存樹移除、清除dirty標誌、清除reserved標誌、丟棄引用計數
  • 地址空間替換步驟
  • 複製新folio的struct address_space、索引、標記
  • 設置up-to-date標誌(必須,否則檔案系統拒絕寫回)
  • 附加緩衝區句柄(與正常寫回路徑一致)
  • 替換XAS條目(新folio取代舊頁面位置)
  • 更新MGLRU和VM計數器
  • 丟棄舊頁面最後引用

結論

結論

頁面緩存內存管理的動態特性與主機VMM監控的靜態基線之間存在根本矛盾,攻擊者可利用MGLRU直接操縱可回收頁面實現內存級文件篡改,其無API、無IO的特性使其難以被檢測。

完整解析

詳細

演講者Jia是Linux和虛擬化安全領域有25年經驗的研究者。他提出的核心問題是:在當前的雙層防禦體系(主機VMM監控 + Guest EDR防護)中,是否存在主機看不到、Guest EDR也無法檢測的攻擊路徑?

問題背景與防禦現狀 — 傳統的主機VMM防禦主要監控guest GPA內存的完整性和kernel程式碼變化,但這種監控基於靜態信任基線:固定代碼段(.text、.data)、穩定的內核對象(inode、superblock等)。然而,文件數據頁面本質上是動態的、頻繁交換的,系統無法對其建立可靠的信任基線。這是防禦的第一個缺口。

MGLRU與頁面定位 — Linux 6.1版本後引入的多代LRU(MGLRU)是這項研究的關鍵。不同於經典LRU的簡單線性結構,MGLRU將頁面按訪問熱度分組成多個世代(Gen0最年輕,MaxGen最老)。當頁面被訪問時,硬體PTE訪問位會觸發promote邏輯,將熱頁面移回Gen0保持在內存。這看似是內核的優化機制,但恰好成為攻擊者的利器:演講者可以通過掃描MGLRU結構直接定位哪些文件頁面最近被訪問過、停留時間最長,這些頁面提供了穩定的攻擊窗口。

死鎖與軟鎖上的突破 — 要在kernel中安全定位文件頁面,需要遍歷MGLRU(需要頁面鎖)並進行VFS路徑解析(需要dentry鎖)。但Linux VFS的加鎖順序是"先dentry再page",而遍歷MGLRU時反向加鎖會在多核環境中造成ABBA死鎖。更糟的是,路徑解析本身很慢,在全局自旋鎖內執行會導致軟鎖上。演講者巧妙地採用三階段策略:(1)在短時持有全局鎖的情況下快速掃描MGLRU並記錄頁面引用,(2)釋放鎖後在外部進行路徑解析,(3)確認目標頁面後只對該頁面施加單一鎖。這個設計完全避免了死鎖風險,也規避了軟鎖上問題。

六步隔離與四步修改 — 一旦找到目標頁面,攻擊進入隔離階段。通過增加引用計數、標記protected標誌,防止頁面被回收器移除;然後將其從各種系統記帳結構中拔出——從IO列表移除、清除IORU標誌、從頁面緩存樹脫離、清除dirty標誌。這樣做的效果是:頁面仍在內存中,內容完全可控,但對系統而言,它已不存在於任何追蹤機制中。修改階段,攻擊者可以直接在核心空間修改頁面內容,或將其映射到用戶空間進行修改。所有這些操作都不涉及檔案系統API調用,主機VMM的監控點無法觸發。

地址空間直接替換——磁盤IO的繞過 — 第一種攻擊(memory-only)只修改頁面緩存內容但不寫回磁盤。但若要持久化修改(如篡改日誌文件、配置文件),必須寫到磁盤。傳統路徑需要調用頁面緩存API進行標記為dirty、更新metadata、刷新到磁盤,這些都會被監控。演講者的解決方案是XAS條目直接替換:不修改原頁面,而是創建修改後的新頁面放入XAS(地址空間結構),設置必要的metadata標誌(如up-to-date),附加緩衝區句柄以符合檔案系統預期。系統的背景回寫線程會自動發現這個dirty頁面並寫回磁盤,整個過程無需攻擊代碼干預,主機完全看不到API調用。

演示與現實 — 在演講的demo中,攻擊者成功修改/etc/shadow文件中的root密碼哈希。第一種攻擊只改頁面緩存,主機VMM無alert;即使重啟系統(從磁盤重新加載),原始內容依舊,因為沒有持久化。第二種攻擊通過地址空間替換寫回磁盤,系統重啟後修改仍然存在。整個過程中,主機VMM的監控始終無法檢測到任何異常,因為沒有kernel API調用、沒有inode修改、沒有可監控的IO操作。

關鍵時刻

Pipeline v2

帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。

事實查核

Pipeline v2

說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

更多「Web2 安全」的內容

SANS Stormcast Tuesday, August 25th, 2026: DOUBLECUP PNG; WebAudio Fingerprinting; Expired Domains; Android; Car
7 min
Web2 安全英文PODCAST8月25日

SANS Stormcast Tuesday, August 25th, 2026: DOUBLECUP PNG; WebAudio Fingerprinting; Expired Domains; Android; Car

SANS Stormcast

  • PNG 容器攻擊的簡易性設計:Double Cup 不依賴複雜的 Exif 或隱寫技術,只用 PNG 副檔名和檔頭來偽裝,核心是利用 findstr 指令的常見可用性讓執行變得無需額外工具。
  • Web Audio API 的隱密指紋識別:音訊於增益零的無聲狀態下播放,使用者完全無感,但錄製波形足以建立裝置特徵,在瀏覽器原生功能層面難以區分是反詐欺還是過度追蹤。
  • 域名過期引發的串聯漏洞:DMARC 報告端點使用過期域名是常見疏漏,允許攻擊者透過簡單的域名註冊取得他人的 SPF/DKIM 錯誤報告,進而收集目標系統配置情報。
Risky Bulletin: Expired credit cards can be used for malicious transactions
5 min
Web2 安全英文PODCAST8月24日

Risky Bulletin: Expired credit cards can be used for malicious transactions

Risky Business

  • 支付安全的非對稱風險:Visa卡利用未加密的卡片資料與NFC通訊,攻擊者可藉由中間人技術竄改過期日期進行交易,但MasterCard、美運卡與Discover的防護更完善,顯示不同發卡機構的安全架構存在明顯差異。
  • 國家級駭客活動的連鎖延伸:北韓Lazarus集團在2月單一事件已累積100名受害者,涵蓋大學、警察部門、媒體與醫療機構,伊朗駭客則針對基礎建設如電力系統發動破壞性攻擊,反映地緣政治在網路戰爭中的升溫。
  • AI加速漏洞生態的雙面刃:AI工具催生近2萬份漏洞概念驗證代碼發布,但同時也導致大量失效漏洞代碼氾濫,增加資安團隊甄別真實威脅的難度;Mayer Protocol遭攻擊事件中,駭客用AI鏈接六個無關的小漏洞完成盜竊170萬美元的攻擊。
SANS Stormcast Monday, August 24th, 2026: More Entra Powershell; Entra Vulnerability; GitLab Vuln (and PoC); GTA 6 Leak Malware
5 min
Web2 安全英文PODCAST8月24日

SANS Stormcast Monday, August 24th, 2026: More Entra Powershell; Entra Vulnerability; GitLab Vuln (and PoC); GTA 6 Leak Malware

SANS Stormcast

  • Microsoft EntraID 的遠端代碼執行漏洞已由微軟修補,初期報告顯示已遭利用但後來更正為未遭利用。這反映 Microsoft 在雲端軟體安全上的透明度提升,對漏洞採用與內部軟體相同的 CVE 編號和公告流程。
  • PowerShell 指令碼可用於驗證 MFA 部署完整性,特別是找出未啟用 MFA 的遺漏帳號。同時可以分析 EntraID 登入日誌中的異常行為,如風險係數評估和地理位置檢測,幫助組織快速識別可疑登入。
  • GitLab 的 GraphQL 代碼注入漏洞允許未認證攻擊者刪除或修改儲存庫,潛在導致供應鏈攻擊。已有公開概念驗證 (PoC) 存在,使用內部部署 GitLab 的組織必須立即修補。