上周微软发布2019年4月安全更新中,卡巴斯基发现了其中一个 Windows 0day 漏洞 CVE-2019-0859。目前卡巴斯基实验室已公开该漏洞详情。

已遭利用的 0day

博客文章指出,卡巴斯基实验室在检测到试图利用 Windows 中的某个漏洞时,在分析过程中从 win32k.sys中发现了一个 0day 漏洞 CVE-2019-0859。而这也是卡巴斯基从 win32k.sys 中连续发现的第四个 0day 漏洞。

该漏洞是一个释放后使用漏洞,存在于处理会话窗口或者更具体地说是会话窗口的其它样式的系统函数中。该利用模式已被用于攻击64位系统版本,影响 Windows 7 至Windows 10 版本。利用该漏洞可导致恶意软件下载并执行攻击者编写的脚本,在最糟糕的场景中可导致受感染个人电脑遭完全控制。

或者,至少这是身份仍未明确的 APT 组织的目的。他们可利用该漏洞获得通过 Windows PowerShell 创建的后门的充分权限。从理论上来讲,这么做应该能够导致网络犯罪分子仍然不被发现。通过该后门加载 payload,从而获取对整个受感染计算机的完全访问权限。

技术细节

CVE-2019-0859是一个释放后使用漏洞,存在于 CreateWindowEx 函数中。在执行过程中,CreateWindowEx 将信息 WM_NXXREATE 发送至首次创建时的窗口。通过使用 SetWindowHookEx 函数,很有可能设置一个自定义回调函数,在调用窗口程序之前正确处理 WM_NCCREATE 信息。

在win32.sys 中,所有的窗口都是由 tagWND 结构展现的,该结构中含有一个“fnid”字段,也被称为 Function ID(函数 ID)。该字段用于定义窗口的类;所有窗口都被分为多个类,如 ScrollBar、Menu、Desktop 等。

在WM_NCCREATE 回调过程中,窗口的 Function ID 被设置为0,从而能够从钩子中为窗口设置额外数据。更重要的是,我们能够更改我们钩子后立即执行的该窗口程序的地址。将窗口程序更改为目录窗口程序导致 xxxMenuWindowProc 执行,而初始化 Function ID 为 FNID_MENU,原因是当前信息等同于 WM_NCCREATE。但最重要的地方在于,在将 Function ID 设置为 FNID_MENU之前能够操纵额外数据,从而强制 xxxMenuWindowProc 函数停止对目录进行初始化且返回 FALSE。因此,发送 NCCREATE 信息将被认为操作失败而 CreateWindowEx 函数将通过调用 FreeWindow 停止执行。由于 MENU 类窗口并未真正被初始化,因此导致我们能够获得对所释放的内存块地址的控制权限。

研究人员所发现的漏洞利用通过为人熟知的 HMValidateHandle 技术绕过 ASLR。

成功利用后,该利用代码通过 Base64 编码命令执行 PowerShell。该命令的主要目标是从https://pastebin.com 中下载第二阶段的脚本。第二阶段的 PowerShell 执行最终的也是一个 PowerShell 脚本的第三阶段。

第三阶段的脚本非常简单,主要作如下操作:

  • 解压 shellcode

  • 分配可执行的内存

  • 将 shellcode 复制到所分配的内存中

  • 调用 CreateThread 执行 shellcode

该 shellcode 的目标是制造一个普通的 HTTP 反向 shell,从而帮助攻击者获取对受害者系统的完全控制权限。

卡巴斯基实验室认为该攻击和相关攻击中所使用的部件如下:

  • HEUR:Exploit.Win32.Generic

  • HEUR:Trojan.Win32.Generic

  • PDM:Exploit.Win32.Generic

如何防范

如下防范方法之前都有提到过:

  • 首先,安装微软发布的更新。

  • 例行更新企业所使用的所有软件,尤其是操作系统,将它们更新至最新版本。

  • 使用能够通过行为分析技术检测出甚至尚不知晓的威胁的安全解决方案。

原文链接

https://usa.kaspersky.com/blog/cve-2019-0859-detected/17533/

https://securelist.com/new-win32k-zero-day-cve-2019-0859/90435/

声明:本文来自代码卫士,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。