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