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個國家,支援多種語系,並提供在地化的服務協助、是個人及企業值得信賴的資安領導品牌。 

原文出處:https://www.welivesecurity.com/2019/07/10/windows-zero-day-cve-2019-1132-exploit/

 

 

About Version 2

Version 2 Digital is one of the most dynamic IT companies in Asia. The company distributes a wide range of IT products across various areas including cyber security, cloud, data protection, end points, infrastructures, system monitoring, storage, networking, business productivity and communication products. Through an extensive network of channels, point of sales, resellers, and partnership companies, Version 2 offers quality products and services which are highly acclaimed in the market. Its customers cover a wide spectrum which include Global 1000 enterprises, regional listed companies, different vertical industries, public utilities, Government, a vast number of successful SMEs, and consumers in various Asian cities.

關於ESET
ESET成立於1992年,是一家面向企業與個人用戶的全球性的電腦安全軟件提供商,其獲獎產品 — NOD32防病毒軟件系統,能夠針對各種已知或未知病毒、間諜軟件 (spyware)、rootkits和其他惡意軟件為電腦系統提供實時保護。ESET NOD32佔用 系統資源最少,偵測速度最快,可以提供最有效的保護,並且比其他任何防病毒產品獲得了更多的Virus Bulletin 100獎項。ESET連續五年被評為“德勤高科技快速成長500 強”(Deloitte’s Technology Fast 500)公司,擁有廣泛的合作夥伴網絡,包括佳能、戴爾、微軟等國際知名公司,在布拉迪斯拉發(斯洛伐克)、布裏斯托爾(英國 )、布宜諾斯艾利斯(阿根廷)、布拉格(捷克)、聖地亞哥(美國)等地均設有辦事處,代理機構覆蓋全球超過100個國家。