最近在研究APT攻击,我选择研究APT的方法通过一个APT组织入手,我选择的是APT28这个组织,APT28组织是一个与俄罗斯政府组织的高级攻击团伙,我将分析该组织的攻击样本、攻击方法、攻击目的来研究一个APT组织。本次分析的是该团伙使用的X-agent样本,所有资料均来自互联网。
X-agent作为APT28的旗舰木马,已经有多个平台的版本,该木马通常作为第二阶段木马,拥有完整的功能模块,由于ESET已经获取到源码,但是我并没有找到,只能通过逆向的方式分析此款木马。
样本静态信息
文件名称 spoolhost.exe
SHA-256 dfba21b4b7e1e6ebd162010c880c82c9b04d797893311c19faab97431bf25927
创建时间 2013-05-21 14:01:00
文件大小 145 KB (148,805 字节)
概述
该文件在被下载执行后,会主动释放ose00000.exe、83D2CDE2-8311-40CB-B51D-EBE20FA803D1.dll两个文件,dll文件时旗舰X-agent木马,ose00000.exe主要时设置dll文件的持久化,DLL文件作为X-agent木马,共有AgentKernel、modKey 、modFS、modProcRet模块,可以进行键盘记录,屏幕截图等操作。网络连接在POST和URL中带有先被RC4加密,后被base64(非标准)编码的硬编码key
样本分析
首先经过一段反分析,如果时间超过正常机器速度,则认为被调式,直接退出。
样本首先通过获取系统环境变量,释放一个DLL文件,
C:\WINDOWS\83D2CDE2-8311-40CB-B51D-EBE20FA803D1.dll
并通过rundll32.exe执行dll中的init导出函数
83D2CDE2-8311-40CB-B51D-EBE20FA803D1.dll文件分析
样本静态信息
文件名称 83D2CDE2-8311-40CB-B51D-EBE20FA803D1.dll
SHA-256 5f6b2a0d1d966fc4f1ed292b46240767f4acb06c13512b0061b434ae2a692fa1
创建时间 2013-05-21 13:53:21
文件大小 107 KB (109,568 字节)
样本分析
样本首先获取临时文件路径,并做参数启动线程
首先看到的是X-agent 木马的AgentKernel模块,该模块是核心模块负责与C&C进行通信
首先获取硬盘信息
之后进行
LocalAgentWinHttpProxySender
AgentModuleRemoteKeyLogger
ModuleFileSystem
ProcessRetranslatorModule
模块的配置工作
之后开始启动主线程,和通过线程启动一些其他模块
网络连接分析
先通过连接adobeincorp.com来判断网络是否联通,联通之后分别发送POST跟get请求,还在里面发现了两个备份的C&C地址94.23.254.109跟216.244.65.34
URL数据加密方法解析
POST跟GET请求间隔15分钟进行发送,在发送前会,首先会计算出一串字符传,来看一下这串字符串是如何计算出来的
首先会出先一个key,这个key是硬编码到文件中后面连接获取的硬盘序列号
之后将上面组装的key跟硬盘序列号的0x18自己进行RC4加密,加密密钥是随机的4个字节
RC4加密算法
之后,又生成随机字符串,并进行异或,加在前面,这样形成了一个0x20字节的数据,这个数据组成位4字节随机+4字节RC4密钥+密文(密文包括硬编码key与硬板序列号)
Base64算法,不是标准算法,使用的可打印字符如下,改变了最后两个字符
Base64算法,最终将上面的0x20的字节编码成base64字符
之后将固定的硬编码字符相连接组成URL
Post数据包数据包解析
可以看到Post数据包的原始数据,使用的加密方法还是通URL加密方法一样,用RC4方法进行加密,然后用base64进行编码,具体的例子见上一节
0到19字节 key硬编码字节,用于验证
20到21字节 0100 表示AgentKernel模块,这是是这个模块发送
22到39字节表示里面包含的各个模块,用字符#相隔开
0100 表示AgentKernel模块
0110 表示modKey 模块
0111 表示modFS模块
0113 表示modProcRet模块
Get请求
Get请求会在Post数据包发送15分钟之后进行发送,发送URL,整体的数据与加密方式如上然后等待获取命令
样本在尝试连接网络会开启多个线程,现在开始分析各个线程
写入临时文件模块配置
在临时文件夹写入一个文件zdg6EF885E2.tmp
文件内容如下,开头的四个字节为字符串大小
4到7字节 0x5c997933 表示获取的硬盘信息
8到9字节 0x0001 表示AgentKernel 的ID 必备
后面是一个模块配置通过 # 相jiange
0100 表示AgentKernel模块
0110 表示modKey 模块
0111 表示modFS模块
0113 表示modProcRet模块
获取硬盘信息
构建ID
等待邮槽信息进行屏幕截图
等待获取邮槽信息
匹配指令SCREEN进行屏幕截图
监控系统窗口,进行键盘记录或者截屏
监控当前windows系统最前的窗口
进行键盘记录
发送命令进行截图
文件操作
写入文件
查找文件,进行执行删除等操作
ose0000.exe文件分析
此文件主要进行设置dll木马的持久化操作