近期,欧洲多国大选开始,去年涉嫌网络攻击干预美国总统选举的APT28又开始活跃了。相继有德国、丹麦等国纷纷指责APT28的大肆入侵攻击行为。而就在最近的法国大选中,有安全专家分析称,APT28可能已经针对首轮投票胜出的纽埃尔·马克龙(Emmanuel Macron)开展了网络攻击活动。难道APT28又要用键盘来操控法国大选了吗?
在这里,让我们来看看安全公司Redsocks security如何通过网络流量来快速识别和破解APT28攻击行为。
一、分析简介
2016年底,Redsocks security发现了一个APT28使用的过期域名,原本Redsocks security希望通过sinkhole该域名对APT28进行一探究竟,却发现该域名使用了异常复杂的加密通信机制。尽管之前像ESET等其它安全公司认为APT28使用了RC4加密算法,但还未发现APT28具体使用的RC4算法和密钥属性。在这里,Redsocks security通过对APT28经常使用的X-Agent样本进行动态分析,破解其整体攻击入侵的网络流量行为。以下为分析中APT28经常使常用到的一例X-Agent木马程序样本文件:
Sinkhole (槽洞)攻击:通过引诱攻击者发起的流量通过一个已被控制接管的节点,一旦流量数据经过该控制节点,接管者就可以对其网络流量数据进行分析篡改,判断攻击者的攻击手法和入侵行为。
由于涉及到对APT28攻击行为的网络通信机制破解,所以分析过程包括以下几个方面:
- 执行X-Agent木马和其释放的恶意程序
- 对X-Agent木马进行网络行为观察
- 破解APT28通信加密机制和算法
Redsocks security通过全网探测和url模式比对,发现了大量APT28使用的控制端和服务器,为破解调查破解APT28通信机制奠定了基础。
二、X-agent释放的恶意程序(dropper)
该样本恶意程序dropper包含两个步骤功能。首先,向Windows系统文件夹内释放一个ose00000.exe程序和一个恶意dll文件,该dll文件名通常来说是固定的,不会随着执行行为和目标系统而改变,如在此例中我们分析的83D2CDE2-8311-40CB-B51DEBE20FA803D1.dll,但极少情况下会随着木马功能而改变,如我们发现的其它释放样本文件xpool.dll;其次,通过释放的恶意dll文件调用系统shell32库中的ShellExecuteW方法函数,之后,以rundll32.exe进程身份和”C:\Windows\83D2CDE2-8311-40CB-B51DEBE20FA803D1.dll,init”参数完成对ShellExecuteW方法的进一步调用执行,在逆向分析中,我们可以从rundll32执行动作中观察到这一行为。另外,我们还发现了恶意进程会调用ZwMapViewOfSection方法对目标系统进行内核Hook以系统提权。最终,木马程序将会以rundll32.exe和ose00000.exe两个进程形成系统驻留。
三、X-agent的木马行为分析(rootkit)
83D2CDE2-8311-40CB-B51D-EBE20FA803D1.dll其实就是X-agent木马安装在系统内的rootkit,通过该rootkit实现键盘记录和远程控制。
1. X-agent架构
如下图所示,X-agent的程序结构相对复杂,在功能实现和通信机制方面都具有模块化的架构:
2. X-agent的程序执行
整个木马程序的执行从rundll32.exe进程加载dll文件调用初始化函数开始,首先它执行了获得目标系统磁盘序列号等信息的kernel32.GetVolumeInformationW方法调用,并初始化一些全局变量:
之后,初始化模块功能实现恶意功能执行,本例样本程序中包括3方面功能模块:
- 在样本逆向代码中为modKey的键盘记录模块
- 为modFS的文件系统控制模块
- 为modProcRet的远程Shell控制模块
完成以上功能初始化后,攻击者结合CHOPSTICK后门为不同任务创建了不同的线程,当然了,攻击者也会针对不同的配置和系统构造不同的功能和内核控制模块AgentKernel:
所有任务线程由功能和内核控制模块进行控制操作,并负责与远程C&C服务器进行通信,受害系统身份和支持运行的功能模块等信息将通过一个ID号为标识的数据包发送至攻击者C&C端。所有这些信息将被保存在临时文件夹下名为“edg6EF885E2.tmp”的文件中。
报告分析样本使用WinInet API并通过HTTP信道进行通信。与C&C端发送数据之前,恶意程序通信线程会通过测试“adobeincorp.com” 域名解析,检查与远程C&C服务器的网络连通性,如果解析失败,则转向两个硬编码IP进行直连。通信通道成功连通后,恶意程序就会通过内置的功能模块发送不同的URL请求信息和POST数据。然而,与C&C端的所有通信都是加密的。总之,X-agent木马在受害者系统中会执行以下一连串行为:
- 调用KERNEL32.GetVolumeInformationW
- 创建至少5个不同的任务线程
- 向临时文件夹内edg6EF885E2.tmp文件读写数据
- 调用socket.connect测试C&C端连通性
- 加密与C&C端的URL和POST数据通信
- 向C&C端发送get请求
- 向C&C端发送post请求
- 调用WININET Http APIs向C&C端对受害者系统发起控制信息
3. X-agent网络通信流量分析
为了破解APT28网络通信流量,我们首先得了解X-agent使用的通信模式。在我们分析X-agent样本中,其一前一后向远程C&C端发送了http get和post请求。除一串请求字符以外,其余http头信息都是固定的。X-agent发起的URL请求如下所示:
- /webhp?rel=psy&hl=7&ai=L2Bd93t_o-jl022K1Og4Bm9mSk8QO88K_3ZQZuKcoPwur-5Q7Y=
其中,“/webhp?rel=psy&hl=7&ai=”和最后的“=”标记在所有的执行动作中都是一样的,而其余51个编码字符“L2Bd93t_o-jl022K1Og4Bm9mSk8QO88K_3ZQZuKcoPwur-5Q7Y”则包含了木马客户端的请求发起时间戳和ID标记;另外,木马程序发送的POST数据则附加在“=”之后,为71个字符的加密串,解密后如下所示:
蓝色部分为受害者系统标记ID,黄色部分为数据发送方模块ID,绿色部分为远程C&C端使用的由#符号分隔的一系列功能模块数据。以下为X-agent的HTTP通信实现结构:
四、X-agent的通信加密机制
X-agent会对所有get或post请求的有用数据进行加密,加密后的数据会被添加进一些额外的字节并被转化为BASE64编码,如下为X-agent的通信模式结构:
时间戳为包含系统时间的BASE64数据,之后,又添加生成了8字节的BASE64随机数据,而加密后的真实数据(cypher)则为16字节之后的信息,其中包含一些初始字节信息,如数据令牌(data token)和
受害系统ID等。而数据令牌(data token)中则包含了一个硬编码字符串“V4MGNxZWlvcmhjOG9yZQ”,以下为X-agent的消息结构流程分解:
最终,其BASE64数据基于RFC 4648和一个动态函数生成,并基于以下排列生成:
- ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_
1. 加密模块
加密过程由两个参数调用,调用指针指向两个数据结构,包含以下两方面加密类实现数据:
- 加密种子
- 加密数据
其中,加密种子是硬编码方式固定的,初始函数通过立即寻址方式把其复制到数据段区域进行加密:
之后,在代码中,4个随机字节被追加到种子之后成为54字节数据,这种结构形成了加密过程的关键所在。例如,从AgentKernel获取的默认初始请求为39字节,其中包括:受害系统ID、模块ID、支持模块信息,这些信息被封装为20个字节的数据令牌(data token)、4个字节的受害系统ID和2个字节的模块ID数据。其中数据令牌(data token)被远程C&C端用来进行加密校验。在使用了RC4算法创建密码之后,加密程序将会向其中添加8字节的随机值并把整体数据转化为兼容BASE64的URL,并向其中生成7字节的时间戳信息。整个过程如下:
- 生成随机的4字节信息;
- 使用RC4算法加密消息;
- 向消息中添加8字节随机值;
- 把消息转化为BASE64的URL;
- 在消息中生成7字节的时间戳信息。
2. RC4算法
RC4是基于字节排列的流密码算法,在此我们不作重点讨论,以下为X-agent使用的RC4算法实现代码,其中算法涉及到的参数包含4字节的随机值、加密种子和明文数据:
五、如何破解X-agent数据
如前所述,X-agent加密过程的中的唯一随机性是把4随机字节附加到50字节的加密种子数据之后,由于 RC4算法是同步的流密码加密机制,必须使用同样的加密密钥key才能实现解密。所以,解铃还需第铃人,X-agent加密机制的破解必须使用相同的RC4算法和调用参数才能实现。最终转变生成的密码消息(cypher)除时间戳和随机字节之外,必须与其http请求对应的数据一致。当然了,可以利用暴力攻击方法枚举所有可能值(0到2的32次方-1)来破解RC4算法,如果其破解结果包含一个硬编码字符串“V4MGNxZWlvcmhjOG9yZQ”,则可以证明这就是APT28的网络通信行为,因为该字符串为APT28在网络通信中使用的数据令牌(data token)内容,并且这种破解操作可以在任何普通的个人电脑上快速实现完成,整个过程也就是几秒钟的事。具体技术分析参考Redsocks报告。