Windows零時差攻擊CVE-2019-1132利用漏洞鎖定目標攻擊

下一個故事

今年6月,ESET研究團隊發現針對東歐地區利用Windows中的提高本地權限擴張漏洞的零時差攻擊
 
其利用Microsoft Windows中的提高本地權限擴張漏洞,特別是win32k.sys元件中的NULL pointer dereference。當發現該漏洞時,就已向Microsoft資訊安全中心進行通報,該中心也及時修復了漏洞並發布了更新。

該漏洞影響的Windows版本如下:
Windows 7 for 32位系統Service Pack 1
Windows 7(用於​​基於x64的系統)Service Pack 1
Windows Server 2008 for 32位系統Service Pack 2
Windows Server 2008(用於基於Itanium的系統)Service Pack 2
Windows Server 2008(用於基於x64的系統)Service Pack 2
Windows Server 2008 R2(用於基於Itanium的系統)Service Pack 1
Windows Server 2008 R2(用於基於x64的系統)Service Pack 1
 
這與近年來揭露的許多其他Microsoft Windows win32k.sys漏洞一樣,此漏洞為利用彈出選單的攻擊手法,與2017年分析的Sednit組織透過提升本地特權漏洞方式非常相似。
 
此漏洞建立了兩個視窗;一個用於第一階段,另一個用於第二階段的開發。對於第一個視窗,它建立彈出選單對象並使用CreatePopupMenu和AppendMenu函數追加選單項目。此外,該漏洞利用設置了WH_CALLWNDPROC和EVENT_SYSTEM_MENUPOPUPSTART hooks。
 
然後該漏洞利用TrackPopupMenu函數顯示一個選單。此時,連接到EVENT_SYSTEM_MENUPOPUPSTART的代碼將被執行。此代碼嘗試通過向選單發送MN_SELECTITEM,MN_SELECTFIRSTVALIDITEM和MN_OPENHIERARCHY訊息序列打開選單中的第一個可用項目。
 
接下來為觸發此漏洞的關鍵點,利用已經建立初始選單的同時,即刻建立子選單,而該漏洞利用代碼處理WH_CALLWNDPROC hooks中的WM_NCCREATE訊息,當漏洞利用代碼檢測到系統處於此狀態時,它會向第一個選單發送MN_CANCELMENUS(0x1E6)訊息,取消該選單,但它的子選單仍然會被建立。
 
如果在核心模式下檢查這個子選單對象,就會看到tagPOPUPMENU-> ppopupmenuRoot等於0.這個狀態允許攻擊者在這個核心結構中使用該元素作為NULL pointer dereference。該漏洞利用在地址0x0處分配一個新頁面,該地址將被核心視為tagPOPUPMENU對象(請參考圖1)。
 
圖1. tagPOPUPMENU核心結構
 
此時,攻擊者使用第二個視窗,主要的漏洞利用目標是觸發第二個視窗的tagWND結構中的bServerSideWindowProc位址。這導致在核心模式下執行WndProc過程。
 
為了執行該操作,攻擊者通過調用user32.dll函數庫中的未導出的HMValidateHandle函數來洩漏第二個視窗的tagWND結構的核心內存地址。然後,漏洞利用程序在NULL頁面處製作一個假的tagPOPUPMENU對象,並將MN_BUTTONDOWN訊息發送到子選單。
 
之後,核心最終將執行win32k!xxxMNOpenHierarchy函數。
 
圖2. win32k!xxxMNOpenHierarchy函數的反組譯代碼
 
此函數將NULL頁面上的精心設計對象傳遞給win32k!HMAssignmentLock。 bServerSideWindowProc位在win32k!HMDestroyUnlockedObject函數內設置,該函數位於win32k!HMAssignmentLock內部的幾個調用中。
 
圖3. win32k!HMDestroyUnlockedObject函數的反組譯代碼
 
一切完成後,漏洞可以將特定訊息發送到第二個視窗,以便在核心模式下執行WndProc。
 
最後該漏洞利用系統令牌替換當前進程的令牌。
 
已發布的更新程序在win32k!xxxMNOpenHierarchy函數中添加了對NULL pointer的檢查。
 
圖4.兩個win32k.sys版本之間的代碼差異 - 原始(左)和修補(右)
 
結論
該漏洞僅適用於舊版本的Windows,因為從Windows 8開始,不允許用戶端程序執行NULL頁面。 Microsoft將此處理操作反向移植到x64的系統的Windows 7。仍然使用Windows 7進行32位系統Service Pack 1的人更新到最新的操作系統,因為Windows 7 Service Pack 1的擴展支援將於2020年1月14日結束。這意味著Windows 7用戶將無法獲得重大的安全性更新。

入侵指標(IoCs)
 
全球資安大廠ESET一直致力開發主動偵測、多層級的安全技術,並結合自動化的機器學習和人類知識,超過30年的研究經驗,為各種規模的企業和端點平台,提供主動和智慧的防護產品或解決方案。連年榮獲Virus Bulletin 100獎項肯定, 優異的成績持續保持業界領先地位。全球擁有超過1億的用戶,代理機構遍及全球超過180個國家,支援多種語系,並提供在地化的服務協助、是個人及企業值得信賴的資安領導品牌。
 
若有任何資安需求,歡迎洽詢ESET資安專業團隊,服務電話:(02)7722-6899,或上官網查詢:https://www.eset.tw/