首页 >> 网络安全 >>零日漏洞 >> win32k.sys中新的零日漏洞CVE-2019-0859
详细内容

win32k.sys中新的零日漏洞CVE-2019-0859


在2019年3月,我们的自动漏洞利用防护(EP)系统检测到尝试利用Microsoft Windows操作系统中的漏洞。对此事件的进一步分析使我们发现win32k.sys中存在零日漏洞。这是我们在最近几个月使用我们的技术发现的Windows中连续第五次被利用的Local Privilege Escalation漏洞。以前的是:


  1. 用于目标攻击的零日攻击(CVE-2018-8453)

  2. 针对零日漏洞的新漏洞CVE-2018-8589

  3. Windows内核事务管理器中的零日(CVE-2018-8611)

  4. 第四个骑士:CVE-2019-0797漏洞


在2019年3月17日,我们向微软报告了我们的发现; 该公司确认了该漏洞并将其分配给CVE-2019-0859。微软刚刚发布了一个补丁,这是其更新的一部分,归功于卡巴斯基实验室的研究人员Vasiliy Berdnikov和Boris Larin。


技术细节

CVE-2019-0859是CreateWindowEx函数中提供的Use-After-Free漏洞。在执行期间,CreateWindowEx在首次创建时将消息WM_NCCREATE发送到窗口。通过使用SetWindowsHookEx函数,可以在调用窗口过程之前设置可以处理WM_NCCREATE消息的自定义回调。


在win32k.sys中,所有窗口都由tagWND结构呈现,该结构具有“fnid”字段,也称为功能ID。该字段用于定义窗口的类; 所有窗口都分为ScrollBar,Menu,Desktop等等。我们已经写过与功能ID相关的错误。


在WM_NCCREATE回调期间,窗口的功能ID设置为0,这允许我们从钩子内部为窗口设置额外数据。更重要的是,我们能够更改挂钩后立即执行的窗口过程的地址。将窗口过程更改为菜单窗口过程会导致执行xxxMenuWindowProc,并且该函数会将函数ID启动到FNID_MENU,因为当前消息等于WM_NCCREATE。但最重要的部分是在将函数ID设置为FNID_MENU之前操作额外数据的能力可以强制xxxMenuWindowProc函数停止菜单的初始化并返回FALSE。因此,发送NCCREATE消息将被视为失败的操作,CreateWindowEx函数将通过调用FreeWindow来停止执行。

1.png

win32k!xxxFreeWindow + 0x1344在最新的Windows 7 SP1 x64上

我们在野外发现的攻击目标是64位版本的Windows(从Windows 7到Windows 10的旧版本),并使用众所周知的HMValidateHandle技术利用该漏洞绕过ASLR。


在成功利用之后,漏洞利用Base64编码命令执行PowerShell。此命令的主要目的是从https // pastebin.com下载第二阶段脚本。第二阶段PowerShell执行最后的第三阶段,也是PowerShell脚本。

2.png

第三阶段PowerShell脚本

第三个脚本非常简单,并执行以下操作:

  1. 解包shellcode

  2. 分配可执行内存

  3. 将shellcode复制到已分配的内存

  4. 调用CreateThread来执行shellcode

    3.png

    来自PowerShell脚本的Shellcode

shellcode的主要目标是制作一个简单的HTTP反向shell。这有助于攻击者完全控制受害者的系统。


卡巴斯基实验室产品通过以下技术主动检测到此漏洞:

  1. 端点产品的行为检测引擎和漏洞利用预防;

  2. 卡巴斯基反目标攻击(KATA)平台的高级沙盒和反恶意软件引擎。


卡巴斯基实验室判断此次攻击和相关攻击中使用的工件是:

  1. HEUR:Exploit.Win32.Generic

  2. HEUR:Trojan.Win32.Generic

  3. PDM:Exploit.Win32.Generic


技术支持: 建站ABC | 管理登录