admin 管理员组文章数量: 887019
2024年2月7日发(作者:什么叫做原码反码补码)
内核级后门“DoublePulsar”分析报告
在Shadow Brokers组织泄露的NSA方程式工具中,DoublePulsar是一个无文件型的内核后门程序。值得注意的是,DoublePulsar同时使用了终端和网络的高级逃逸技术。首先它是一个无文件型的内核级别后门,被控制端的主机防护软件通常无法有效检测;其次它与被控制端的通讯使用正常协议进行伪装(SMB或者RDP协议),可逃逸常见的网络防护产品。
具体地,某些漏洞工具(EternalBlue、EternalRomance等)攻击成功后会篡改中SrvTransaction2DispatchTable表的第14项指针,从而在中安装一个后门。而原始的SrvTransaction2DispatchTable表第14项指针指向的是SrvTransactionNotImplemented函数,在处理SMB协议的SMB_COM_TRANSACTION2消息时,会使用到该函数。这样DoublePulsar就可以与被控制机器通过特定的SMB_COM_TRANSACTION2消息建立隐蔽信道,并执行相应攻击操作。
技术分析
1.在后门被成功安装前,查看SrvTransaction2DispatchTable表,可以发现该表第14项指向的为SrvTransactionNotImplemented函数。
2.后门安装成功后,SrvTransaction2DispatchTable表中的第14项便被修改。
修改后的函数如下:
Pulsar主要有以下几个功能:
对应功能指令及描述如下表:
功能
OutputInstall
Ping
RunDLL
RunShellcode
Uninstall
功能描述
可在本地生成一个shellcode二进制文件供RunShellcode功能使用
检测目标机是否存在DoublePulsar
执行一段shellcode并加载Dll
执行一段shellcode
卸载DoublePulsar
4.以上功能在代码中都对应不同的处理方法,主要处理流程如下:
(1)CheckFlag功能
函数开始的时候会检测不同的标志,该标识来自构造的SMB_COM_TRANSACTION2数据包中的Timeout字段。计算flag的相关代码如下:
下图中的timeout值计算后则为指令0x23。
之后通过判断不同指令进入不同的处理流程:
指令
0x23
0x77
0xc8
相关代码如下:
功能描述
处理Ping包
卸载自身
可用来执行一段shellcode
(2)Ping功能
如果标志位为0x23,则进入Ping包的处理环节。Ping包无特殊处理函数,直接返回成功。(参考下面“对返回数据的处理”分析)
(3)RunShellcode与Rundll功能
如果标志位为0xc8,则进入执行shellcode的处理流程。Doublepulsar工具的Rundll与RunShellcode功能均走此分支,不同的是Rundll功能在发送具有加载动态库功能的shellcode的同时会附加一个dll文件。
在RunShellcode与Rundll功能中,首先会发送一个Ping包,用于检测后门是否存在。如果存在,则继续发送后续数据。
后续数据中的SESSION_SETUP Parameters包含了shellcode的长度(使用密钥异或加密),当前数据包中包含数据大小(使用密钥异或加密),以及用来解密数据的密钥。如下图,黄色部分计算后即为shellcode的长度(0x5ed26d41^0x5ed24a49=0x2708),绿色部分为当前数据包中包含数据大小(0x5ed25a49^0x5ed24a49=0x1000),解密密钥为0x5ed24a49。
SESSION_SETUP Data为加密后的shellcode。
相应代码处理流程如下:
a.解密获得shellcode大小,同时校验所传数据包中数据大小是否正确。
b.分配一段内存空间,将shellcode数据拷贝到缓冲区,通过密钥去解密shellcode,同时判断是否解密完所有数据,如果解密完成将调用shellcode去执行。
版权声明:本文标题:内核级后门“DoublePulsar”分析报告 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1707284333h513645.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论