📢 Gate廣場 #MBG任务挑战# 發帖贏大獎活動火熱開啓!
想要瓜分1,000枚MBG?現在就來參與,展示你的洞察與實操,成爲MBG推廣達人!
💰️ 本期將評選出20位優質發帖用戶,每人可輕鬆獲得50枚MBG!
如何參與:
1️⃣ 調研MBG項目
對MBG的基本面、社區治理、發展目標、代幣經濟模型等方面進行研究,分享你對項目的深度研究。
2️⃣ 參與並分享真實體驗
參與MBG相關活動(包括CandyDrop、Launchpool或現貨交易),並曬出你的參與截圖、收益圖或實用教程。可以是收益展示、簡明易懂的新手攻略、小竅門,也可以是現貨行情點位分析,內容詳實優先。
3️⃣ 鼓勵帶新互動
如果你的帖子吸引到他人參與活動,或者有好友評論“已參與/已交易”,將大幅提升你的獲獎概率!
MBG熱門活動(帖文需附下列活動連結):
Gate第287期Launchpool:MBG — 質押ETH、MBG即可免費瓜分112,500 MBG,每小時領取獎勵!參與攻略見公告:https://www.gate.com/announcements/article/46230
Gate CandyDrop第55期:CandyDrop x MBG — 通過首次交易、交易MBG、邀請好友註冊交易即可分187,500 MBG!參與攻略見公告:https://www.gate.com/announcements
Windows零日漏洞分析:Web3生態或受重大影響
微軟Windows系統零日漏洞分析:可能造成Web3生態重大影響
上個月微軟的安全更新中修復了一個正在被惡意利用的Windows內核提權漏洞。該漏洞主要影響較早版本的Windows系統,Windows 11似乎不受影響。本文將分析在當前安全防護措施不斷加強的背景下,攻擊者可能如何繼續利用這類漏洞。
我們在Windows Server 2016環境下完成了全部分析工作。
零日漏洞是指尚未被發現和修復的系統漏洞,類似於金融市場中的T+0交易概念。零日漏洞一旦被惡意利用,通常會造成極大危害。本次發現的Windows系統零日漏洞可讓攻擊者獲得系統的完全控制權。
被攻擊者控制系統後果嚴重,包括但不限於個人隱私泄露、系統崩潰數據丟失、財產損失、惡意軟件植入等。對於個人用戶而言,可能導致加密貨幣私鑰被盜、數字資產被轉移;從更大範圍看,該漏洞甚至可能影響整個基於Web2基礎設施的Web3生態。
補丁分析
對補丁進行分析,我們發現問題似乎只是一個對象的引用計數被多處理了一次。由於win32k是較早期的代碼,我們可以找到一些早期的源碼注釋,這些注釋表明之前的代碼只鎖定了窗口對象,沒有鎖定窗口對象中的菜單對象,這可能導致菜單對象被錯誤引用。
漏洞利用概念驗證(PoC)實現
分析漏洞函數上下文,我們發現傳入xxxEnableMenuItem()的菜單通常已在上層函數中被鎖定,那麼這裏究竟是要保護哪個菜單對象?
進一步分析xxxEnableMenuItem中對菜單對象的處理過程,我們發現MenuItemState函數返回的菜單有兩種可能:窗口的主菜單,或菜單的子菜單(甚至子子菜單)。
在PoC中,我們構造了一個特殊的四層菜單結構,相鄰菜單之間是父子關係。這些菜單有一些特定特徵,以通過xxxEnableMenuItem函數中的檢測和判斷。
在xxxRedrawTitle返回用戶層時,我們刪除了菜單C和菜單B的引用關係,成功釋放菜單C。最終,當內核中xxxEnableMenuItem函數返回到xxxRedrawTitle函數時,即將引用的菜單C對象已經無效。
漏洞利用(Exploit)實現
在確定利用思路前,我們通常會進行一些理論上的前期判斷,以避免在不可行的方案上浪費時間。本次漏洞利用主要考慮了兩個方向:
執行shellcode代碼:參考早期的CVE-2017-0263和CVE-2016-0167。但在高版本Windows中,這種方式可能面臨一些難以解決的問題。
利用讀寫原語修改token地址:近年來已有公開的利用方式可供參考。桌面堆內存布局和讀寫原語具有長期通用性。我們主要需要分析如何在UAF內存被重用時首次控制cbwndextra爲特大值。
我們將整個利用過程分爲兩個問題:如何利用UAF漏洞控制cbwndextra值,以及控制cbwndextra值後如何實現穩定的讀寫原語。
最終我們選擇了在xxxRedrawWindow函數中通過標志位的AND 2操作來寫入HWNDClass的cb-extra。這是因爲HWNDClass的cb-extra偏移較小,我們可以通過布局內存來控制前一個對象的內存數據,從而通過xxxRedrawWindow函數中對對象標志的判斷。
爲實現穩定的內存布局,我們設計了至少連續三個0x250字節的HWND對象。釋放中間對象後,用0x250字節的HWNDClass對象佔用該位置。前一個HWND對象的尾部數據用於通過xxxRedrawWindow的標志檢驗,後一個HWND對象的菜單對象和HWNDClass對象用作最終讀寫原語的媒介。
我們盡量保持窗口對象和HWNDClass對象大小一致,並確保窗口對象的擴展數據足夠大。通過堆內存中泄露的內核句柄地址,我們可以精確判斷申請的窗口對象是否按預期順序排列。
在讀寫原語方面,我們使用GetMenuBarInfo()實現任意讀,使用SetClassLongPtr()實現任意寫。除了替換TOKEN的寫入操作依賴第二個窗口的class對象外,其他寫入都利用第一個窗口對象的class對象通過偏移來實現。
總結
win32k現狀:微軟正在嘗試使用Rust重構Windows 11預覽版中的相關內核代碼,未來新系統可能杜絕此類漏洞。
漏洞利用過程相對簡單:除了如何控制第一次寫入需要細心嘗試外,基本不需要使用新的利用技術。該類漏洞嚴重依賴桌面堆句柄地址的泄露。
漏洞發現:推測可能依賴於更完善的代碼覆蓋率檢測。一旦系統API能在目標函數執行路徑中到達最深處的漏洞點,且窗口對象處於多重嵌套引用狀態,該漏洞就可能被模糊測試發現。
其他發現途徑:除了對漏洞觸發函數關鍵點的檢測,針對不常見的內存布局和窗口或窗口類額外數據異常偏移讀寫的檢測也可能是發現同類漏洞的途徑之一。