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