全国咨询电话

02389108633

关注官方微信

ESET发现新的windows零日漏洞正被用于APT攻击
2019年6月,ESET研究人员发现东欧的一场高度针对性的攻击中利用了零日漏洞。
这场漏洞攻击滥用微软 Windows的本地权限提升漏洞,特别是win32k.sys组件中的空指针解引用。该漏洞攻击被发现并经分析后,立即被报告至微软安全响应中心,微软安全响应中心及时修复了漏洞并发布了补丁。
  • Windows 7 (适用于32位系统) Service Pack 1

  • Windows 7 (适用于基于x64的系统) Service Pack 1

  • Windows Server 2008 (适用于32位系统) Service Pack 2

  • Windows Server 2008 (适用于基于Itanium的系统) Service Pack 2

  • Windows Server 2008 (适用于基于x64的系统) Service Pack 2

  • Windows Server 2008 R2 (适用于基于Itanium的系统) Service Pack 1

  • Windows Server 2008 R2(适用于基于x64的系统) Service Pack 1

漏洞攻击
与近年来发现的许多其他微软 Windows win32k.sys漏洞一样,此漏洞攻击利用了弹出菜单对象。例如,我们在2017年分析的Sednit组织的本地特权升级漏洞攻击就利用了与当前漏洞攻击非常相似的菜单对象和技术。
此漏洞攻击会创建两个窗口;漏洞攻击的第一和第二阶段各一个。对于第一个窗口,它会创建弹出菜单对象并使用CreatePopupMenu和AppendMenu函数追加菜单项。除此之外,攻击还会设置WH_CALLWNDPROC和EVENT_SYSTEM_MENUPOPUPSTART挂钩。
然后该漏洞攻击利用TrackPopupMenu函数来显示一个菜单。此时,与EVENT_SYSTEM_MENUPOPUPSTART挂钩的代码将被执行。此代码会尝试通过向菜单发送MN_SELECTITEM和MN_SELECTFIRSTVALIDITEM以及MN_OPENHIERARCHY消息序列,以作为菜单中的第一个可用项打开。

下一步对于触发此漏洞非常重要。漏洞攻击必须要抓准初始菜单创建完成后、子菜单尚未创建之前的这一时机。为此,该漏洞攻击利用代码来处理WH_CALLWNDPROC挂钩中的WM_NCCREATE消息。当漏洞攻击代码检测到系统处于此状态时,会向第一个菜单发送MN_CANCELMENUS(0x1E6)消息,以取消该菜单。但其子菜单仍即将创建。

现在,如果我们在内核模式下检查这一子菜单对象,会看到tagPOPUPMENU‑>ppopupmenuRoot等于0。这一状态让攻击者能够在这一内核结构中使用该元素作为空指针解引用。该漏洞攻击会在地址0x0处分配一个新页面,该地址将被内核视为tagPOPUPMENU对象(参见图1)。

图片.png

图1. tagPOPUPMENU内核结构

此时,攻击者会使用第二个窗口。漏洞攻击的主要目标是翻转第二个窗口tagWND结构中的bServerSideWindowProc位,在内核模式下引发WndProc过程的执行。
为执行该操作,攻击者通过调用user32.dll库中未导出的HMValidateHandle函数来泄漏第二个窗口tagWND结构的内核内存地址。然后,漏洞攻击程序在空页造一个假的tagPOPUPMENU对象,并将MN_BUTTONDOWN消息发送至子菜单。
此后,内核最终将执行win32k!xxxMNOpenHierarchy函数。

图片.png

图2. win32k!xxxMNOpenHierarchy函数的反汇编代码
此函数将空页上精心造出的对象传递至win32k!HMAssignmentLock。bServerSideWindowProc位在win32k!HMDestroyUnlockedObject函数内设置,该函数位于win32k!HMAssignmentLock内部,需要经过几次调用才能使用。

图片.png

图3. win32k!HMDestroyUnlockedObject函数的反汇编代码

结论
结论该漏洞攻击仅能针对旧版Windows发起,因为从Windows 8开始,用户进程无法映射空页。微软将此缓解措施反向移植到了适用于x64系统的Windows 7。


仍使用Windows 7 (适用于32位系统)Service Pack 1的用户应考虑更新至新版操作系统,因Windows 7 Service Pack 1的支持将于2020年1月14日告终。这意味着Windows 7用户将无法获得重要的安全更新。这样一来,此类漏洞将永远无法得以修补。
入侵威胁指标(IoC)
SHA-1 哈希值ESET 检测名称
CBC93A9DD769DEE98FFE1F43A4F5CADAF568E321Win32/Exploit.CVE-2019-1132.A