今年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/
關於Version 2 Limited
Version 2 Limited是亞洲最有活力的IT公司之一,公司發展及代理各種不同的互聯網、資訊科技、多媒體產品,其中包括通訊系統、安全、網絡、多媒體及消費市場產品。透過公司龐大的網絡、銷售點、分銷商及合作夥伴,Version 2 Limited 提供廣被市場讚賞的產品及服務。Version 2 Limited 的銷售網絡包括中國大陸、香港、澳門、臺灣、新加坡等地區,客戶來自各行各業,包括全球1000大跨國企業、上市公司、公用機構、政府部門、無數成功的中小企及來自亞洲各城市的消費市場客戶。
關於ESET
ESET成立於1992年,是一家面向企業與個人用戶的全球性的電腦安全軟件提供商,其獲獎產品 — NOD32防病毒軟件系統,能夠針對各種已知或未知病毒、間諜軟件 (spyware)、rootkits和其他惡意軟件為電腦系統提供實時保護。ESET NOD32佔用 系統資源最少,偵測速度最快,可以提供最有效的保護,並且比其他任何防病毒產品獲得了更多的Virus Bulletin 100獎項。ESET連續五年被評為“德勤高科技快速成長500 強”(Deloitte’s Technology Fast 500)公司,擁有廣泛的合作夥伴網絡,包括佳能、戴爾、微軟等國際知名公司,在布拉迪斯拉發(斯洛伐克)、布裏斯托爾(英國 )、布宜諾斯艾利斯(阿根廷)、布拉格(捷克)、聖地亞哥(美國)等地均設有辦事處,代理機構覆蓋全球超過100個國家。