win32ksys新曝出的CVE?
卡巴斯基實驗室在安全公告中稱,其安全研究人員在 win32k.sys 中又發現了一個新的零日漏洞,代號為 CVE-2019-0859 。
2019 年 3 月,卡巴斯基的自動化漏洞利用防護(EP)系統檢測到了對微軟 Windows 操作系統中的漏洞嘗試。
但在進一步分析后,他們發現 win32k.sys 中確實存在新的零日漏洞,而且這是實驗室最近幾月內第五次發現被利用的本地提權漏洞。
【Win7 SP1 x64 上的 win32k!xxxFreeWindow+0x1344 彈窗,圖自:Kaspersky Lab】
2019 年 3 月 17 日,卡巴斯基實驗室向微軟提交了漏洞報告,該公司確認了該漏洞,并分配了 CVE-2019-0859 這個編號。
萬幸的是,微軟已經為該漏洞發布了一個補丁,并通過 Windows Update 進行了推送。
卡巴斯基實驗室稱,功勞簿上有 Vasiliy Berdnikov 和 Boris Larin 這兩位安全研究人員的名字。
至于 CVE-2019-0859 漏洞的技術細節,主要是 CreateWindowEx 函數中隱含的 Use-After-Free 漏洞。
執行期間,CreateWindowEx 會在首次創建時,將 WM_NCCREATE 消息發送到窗口。
借助 SetWindowsHookEx 函數,可在窗口調用過程之前,設置處理 WM_NCCREATE 消息的自定義回調。
然而在 win32k.sys 中,所有窗口都由 tagWND 結構呈現,其具有“fnid”字段(亦稱 Function ID)。
該字段用于定義窗口的類,所有窗口分為 ScrollBar、Menu、Desktop 等部分,此前卡巴斯基已經分享過與我們已經寫過與 Function ID 相關的 bug 。
在 WM_NCCREATE 回調期間,窗口的 Function ID 被設置為 0,使得我們能夠鉤子內部為窗口設置額外數據,更重要的是 Hook 后立即執行的窗口過程的地址。
將窗口過程更改為菜單窗口過程,會導致執行 xxxMenuWindowProc,且該函數會將 Function ID 啟動到 FNID_MENU(因為當前消息等于 WM_NCCREATE)。
在將 Function ID 設置為 FNID_MENU 之前操作額外數據的能力,可強制 xxxMenuWindowProc 函數停止菜單的初始化、并返回 FALSE 。
因此發送 NCCREATE 消息將被視為失敗的操作,CreateWindowEx 函數將通過調用 FreeWindow 來停止執行。
卡巴斯基實驗室發現,野外已經有針對 64-bit 版本的 Windows 操作系統的攻擊(從 Windows 7 到 Windows 10),其利用了眾所周知的 HMValidateHandle 漏洞來繞過 ASLR 。
成功利用后,漏洞會借助 Base64 編碼命令來執行 PowerShell,主要目的是從 https // pastebin.com 下載執行二、三階段的腳本。
其中三階段腳本的內容很是簡潔明了 —— 捷豹 shellcode、分配可執行內存、將 shellcode 復制到已分配的內存、以及調用 CreateThread 來執行 shellcode 。
shellcode 的主要目標,是制作一個簡單的 HTTP 反向 shell,以便攻擊者完全控制受害者的系統。