一种使用TCP自定义加密通信的APT样本分析

  1. 概述
为了确保通信安全和隐私以及应对各种窃听和中间人攻击,越来越多的网络流量被加密,然而,攻击者也可以通过这种方式来隐藏自己的信息和行踪 。近期我们捕获了一个样本,此样本就是使用了加密通信,为了深入研究此样本的加密通信机制,接下来我们来逐层剖析它 。
域名
*.dDNS.net
威胁类型
木马
样本性质
曾关联海莲花等APT组织
  1. 准备工作
解密硬编码字符串
将样本记录的硬编码字符串的每一个字节加0x23,可以获得密钥、域名、注册表键
一种使用TCP自定义加密通信的APT样本分析

文章插图
 
字符串
作用
*.ddns.net
C2服务器域名
Softwaremicrosoftwindows NTCurrentversion
注册表键
ProductName
注册表键,系统版本
ComSpec
环境变量:CMD.EXE的路径
2q36kj8*6t9w5
密钥:数据加密解密时使用的密钥
  1. 通信行为-接收
3.1 建立通信
样本采用TCP自定义加密通信,IP为域名(*.ddns.net)解析成功后得到的IP,端口为5832 。
一种使用TCP自定义加密通信的APT样本分析

文章插图
 
3.2 接收、校验数据
样本使用TCP协议传输数据,TCP载荷部分使用自定义加密协议,并且协议格式中含有身份校验位,只有校验通过才解析后面的内容,不通过则继续接收数据 。
包类型
1、2、3、4、5字节
6、7字节
8、9字节
10、11字节
后续
连接包
会话ID
/
/
/
/
命令与控制包
会话ID
数据大小
指令码
是否解密标志位
传输的数据
备注
单次会话值相同
做大小校验
不同指令执行不同的操作
为0则不解密数据,大于0解密
需要解密的数据
接收数据包格式一览表
每次对接收的数据的校验方式如上表 。第一次连接或者重新连接的数据包的前5个字节的值作为会话ID 。
接收的数据包由三部分组成:
  1. 填充数据(长度可变)
  2. 11个字节的校验数据、指令
  3. 后续操作需要的参数、数据
为了防止单次会话中接收的数据因为前5个字节相同而出现规律性,会在校验前先获取有效的传输数据即移除填充数据,找到数据中与同一次会话的标志值相同的数据的位置,这也算是第一次校验 。
一种使用TCP自定义加密通信的APT样本分析

文章插图
 
接下来,校验有效数据的大小,有效数据的大小记录在第6、7字节,校验通过会根据第10、11字节的值来决定是否解密后续的数据 。
3.3 解密数据
解密操作就是由硬编码得到的密钥和数据进行按位异或,返回的数据包也是这种方式加密的 。
一种使用TCP自定义加密通信的APT样本分析

文章插图
 
  1. 执行指令
接收数据的第8、9字节的值是样本的指令码,根据不同的指令执行不同的操作 。
指令大致分为三类
  1. 获取基本信息
  2. 操作CMD.EXE
  3. 关闭进程、线程
4.1 获取信息
获取电脑系统信息、磁盘盘符、文件信息、进程信息以及TCP&UDP表的信息,并将获取的信息按照不同的格式拼接,然后将拼接好的数据与密钥做加密操作,并且将加密后的数据拷贝到发送缓冲区中 。(具体的发送格式以及指令功能见文章末尾的发送数据包结构一览表)
一种使用TCP自定义加密通信的APT样本分析

文章插图
 
4.2 操作CMD.EXE
创建两个匿名管道,获取环境变量ComSpec的值即CMD.EXE的路径,以这个路径创建进程CMD.EXE,并且在创建进程的时候将进程的输入、输出各绑定一个匿名管道,这样就可以通过管道来对CMD.EXE进行远程操作,其中输入CMD的指令就是有效数据中解密后的数据,输出即回显通过管道获取,再拼接相应的格式后加密存放到发送缓冲区中 。
一种使用TCP自定义加密通信的APT样本分析

文章插图
 

一种使用TCP自定义加密通信的APT样本分析

文章插图
 

一种使用TCP自定义加密通信的APT样本分析

文章插图


推荐阅读