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去执行。


本文标签: 处理 数据 使用 后门 功能