卡巴斯基實驗室:win32k.sys又曝出了新的零日漏洞
卡巴斯基實驗室在安全公告中稱,其安全研究人員在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,以便攻擊者完全控制受害者的系統。