欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Buhtrap CVE-2019-1132攻击事件相关漏洞样本分析

来源:本站整理 作者:佚名 时间:2019-08-08 TAG: 我要投稿

2019年7月10日,在微软7月补丁发放的第一天,eset发布文章“windows-zero-day-cve-2019-1132-exploit”披露了APT团伙buhtrap使用windows 0day CVE-2019-1132进行攻击的一次在野活动,之后SHIVAM TRIVEDI于7月25对外放出了该漏洞相关的exp利用,本文针对该漏洞及buhtrap攻击使用的样本进行分析,以便于大众了解buhtrap这个在国内鲜为人知的APT团伙。
Buhtrap是一个常年针对俄罗斯金融企业相关的攻击团伙,其2014年就开始了相关的活动,而这也是buhtrap的第一次0day攻击活动,但是实际上早在2016年3月GROUP IB就针对buhtrap发布了文章“BUTHRAP The evolution of targeted attacks against financial institutions”,如下图所示就是GROUP IB总结的Buhtrap在2014年,2015年两年内的战绩。

 
漏洞部分
该部分使用SHIVAM TRIVEDI分享的相关exp代码,感谢SHIVAM TRIVEDI的分享。
分析
编译对应exp,运行之后效果如下所示,获得了一个管理员权限的shell。

利用代码的主函数中一开始创建了三个menu菜单,并通过AppendMenuA创建对应下拉子菜单,然后创建两个窗口,一个为主窗口,一个用于辅助后续利用的hunt窗口。

之后分别设置消息hook和事件hook函数。

在消息hook回调函数中监控对应的WM_NCCREATE消息,当监控到对应的消息时,通过SendMessage针对指定的menu发送MN_CANCELMENUS消息,该消息会取消对应的菜单。
在事件hook回调函数中,首先保存所有触发菜单的hwnd到hwndMenuList中,并发送MN_OPENHIERARCHY消息,该消息将导致打开对应的子菜单。

之后对第一个hMenuList[0]菜单调用函数TrackPopupMenuEx,用于弹出显示该菜单,调用完成之后将导致hMenuList[0]子菜单hMenuList[1]的ppopupmenuRoot被设置为null,之后设置0地址,将偏移0x1c的位置设置为hunt窗口的内核地址+0x12,hunt窗口的内核地址通过xxHMValidateHandle的方式获取,该内核地址泄露的方式在win10 rs4之后被微软修复。

这里一个最大的疑问就在于为什么TrackPopupMenuEx函数执行之后,对应的hMenuList[1]中的ppopupmenuRoot会被设置为null。
在解决这个问题前,我们需要对windows中的菜单对象有所了解,其中涉及到的内容主要包括:菜单对象,菜单层叠窗口对象和弹出菜单对象,菜单状态对象(以下几个菜单相关对象主要来自于小刀子同学之前的文章,文章对菜单对象分析得很详细,感兴趣的同学可以看看,见参考链接2)
菜单对象:菜单对象是菜单的实体,在内核中以结构体tagMENU的形式存在,用于描述菜单实体的菜单项,项数,大小等静态信息,但本身并不负责菜单在屏幕中的显示,通过用户调用CreateMenu函数时在内核中创建,通过函数DsetroyMenu调用或进程结束时销毁。
菜单层叠窗口对象(以下简称菜单窗口对象):菜单窗口对象是窗口结构体tagWND对象的特殊类型,当需要在屏幕中的显示某个菜单时,如通过窗口区域右键鼠标,内核中将调用相关的服务函数根据目标菜单对象创建对应类型为MENUCLASS的菜单窗口对象,其主要负责描述菜单在屏幕中的显示位置,样式等动态信息,其扩展区域关联对应的弹出菜单对象。
弹出菜单对象:弹出菜单对象为菜单窗口对象的扩展对象,用来描述其所代表的菜单的弹出状态,以及菜单窗口对象,菜单对象,子菜单或父菜单的菜单窗口对象等用户对象的相互关系。
当某个菜单在屏幕中弹出,菜单窗口对象和关联的弹出菜单对象被创建,
菜单状态对象:该结构体用来存储和当前活跃菜单状态相关的详细信息,包括上下文菜单弹出坐标,关联的位图表面对象的指针,窗口设备上下文对象,之前的上下文菜单结构体的指针,及其他一些成员域。
菜单窗口对象实际是tagWND对象的特殊类型,其中比较重要的是偏移0x14处的bServerSideWindowProc,该字段用于标记对应的窗口对象是否在内核态执行,如果能修改该标记位,即能实现让我们的窗口对应的回调处于内核态的执行权限,从而实现提权(类似的提取方式在CVE-2019-0808,CVE-2017-0263种都被使用),其偏移0xB0的位置为WndExtra Data Section,在这里指向了对应关联的弹出菜单对象。

弹出菜单对象如下所示,其中偏移0x20 ppopupmenuRoot标记了第一个弹出菜单对象,如第一个菜单对象的ppopupmenuRoot就是自身,这也是漏洞中被设置为null的位置。
偏移0x24的位置为ppmDelayedFree,该成员域用来将所有被标记为延迟释放状态的弹出菜单对象连接起来,以便在菜单的弹出状态终止时将所有弹出菜单对象统一销毁,根弹出菜单对象的ppmDelayedFree作为链表的入口,即第一个节点。

[1] [2] [3] [4] [5] [6] [7]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载