如何在数秒之内破解APT28流量?

简介: 本文讲的是如何在数秒之内破解APT28流量?,安全公司Redsocks最近发布了一个有趣的报告,解密了如何在几秒钟内破解APT28流量。
本文讲的是 如何在数秒之内破解APT28流量?

如何在数秒之内破解APT28流量?

安全公司Redsocks最近发布了一个有趣的报告,解密了如何在几秒钟内破解APT28流量。

在2016年年底,Redsocks就曾对APT28所使用过的过期域( expired domain)的安全性进行过研究,APT28利用这些过期域的攻击受到加密通信通道的阻碍。虽然许多关于APT28的研究组织,如ESET都提到了RC4加密算法,但并没有详细介绍所使用的密钥细节和RC4实现的细节,也没有对其进行静态特征进行分析。在本研究中,Redsocks就旨在为我们揭示x-agent恶意软件的整个运行过程,以解密其怎样干预流量。XAgent具有反调试,键盘记录,下载文件和加密通信等恶意能力,在各种主流操作系统中都有样本出现。

本文首先通过使用APT28 dropper开始进行调查:

如何在数秒之内破解APT28流量?

由于Redsocks调查的重点是解密APT28的通信流量,因此,本文详细阐述了x-agent的加密功能,并研究了关于开发x-agent通信流量的问题。也就是说,Redsocks不但对x-agent的加密功能进行了破解,还对以下3各方面进行了研究:

1. dropper和x-agent的执行行为
2.x-agent的网络行为
3. 在几秒钟内破解APT28的加密算法

按照Redsocks提出的加密及解密方案,只要大家通过本文所介绍的互联网扫描和URL模式,相信你一定可以找到当前活跃的APT28服务器和有关的受害者,并对这些服务器进行进一步调查。

X-agent dropper

dropper功能的实现要分为两步,在第一步,它只解压缩到Windows文件夹的dll,由于文件的名称是固定的(静态的),所以它不会被多次执行或被不同的工作站所改变。在第二步中,dropper通过调用shell32库的ShellExecuteW函数加载dll。此函数由rundll32.exe和“C: Windows  83D2CDE2-8311-40CB-B51D-EBE20FA803D1.dll”,init“作为参数调用。这意味着X-agent的踪迹应该在rundll32执行中查看。 dropper还在Windows文件夹中创建“ose00000.exe”文件,并使用dll和dropper path address的参数调用它。总而言之,dropper会在具有隐藏属性的Windows目录中创建两个文件“83D2CDE2-8311-40CB-B51D-EBE20FA803D1.dll”和“ose00000.exe”(请参见表1相应的哈希值),并使用rundll32.exe加载一个文件。 dropper执行的结果是rundll32.exe和ose00000.exe分别作为两个单独的进程,在dropper执行期间是观察不到任何网络活动的。

X-agent删除rootkit

dropper的目标是将控件转移到具有键盘记录和远程执行代码的rootkit的83D2CDE2-8311-40CB-B51D-EBE20FA803D1.dll(参见表1中的SHA256哈希)。

X-agent架构

x-agent具有复杂的架构,它具有功能和通信通道实现的模块化结构。图1给出了我们分析的样本的x-agent架构。

如何在数秒之内破解APT28流量?

X-agent执行

执行从rundll32加载dll的init函数开始,将控制转移到Init后的第一个有趣的事件是调用KERNEL32.GetVolumeInformationW。在这个调用之后,Init函数就开始初始化全局变量:

如何在数秒之内破解APT28流量?

接下来,init函数初始化可用的模块,本文列举了X-agent的3个恶意攻击模块:

1.KeyLogging模块,在代码中被称为modKey
2.文件系统模块,在代码中被称为modFS
3.远程Shell模块,在代码中被称为modProcRet

在初始化这些模块的数据结构之后,CHOPSTICK为不同的任务创建不同的线程。模块会基于它们的配置循环创建,并且AgentKernel的创建方式不同:

如何在数秒之内破解APT28流量?

创建线程后,执行将传输到AgentKernel和Module线程。代理内核模块一开始就为服务器准备一条消息,然后等待服务器使用命令进行响应。该消息是通过代理ID将受害者引入服务器,并报告支持的模块开始执行。此消息将写入临时文件夹中的edg6EF885E2.tmp文件。本文分析的样本是通过HTTP通道进行通信,以实现使用WININET API。

在发送数据之前,通道线程要检查与服务器的连接。首先,会尝试连接“adobeincorp.com”域名,如果连接失败,它会尝试连接到两个硬编码的IP地址。成功连接到服务器后,会根据其他模块准备的数据创建URL请求并发布数据。X-agent首先要发送获取请求,然后发送发送请求。在此过程中,通信会始终加密。

总而言之,下面这8个操作过程会发生在x-agent的每次执行中:

1.调用KERNEL32.GetVolumeInformationW
2.创建至少5个不同的线程
3.在temp目录下读写edg6EF885E2.tmp
4.通过调用socket.connect检查连接
5.加密URL查询字符串和POST数据
6.发送获取请求
7.发送发送请求
8.使用WININET Http API将支持的命令和代理号码发送到服务器。

X-agent流量通信

为了解密APT28流量,我们首先需要了解X-agent的流量模式。本文所分析的x-agent版本就是通过发送HTTP发送请求之后的初始GET请求进行通信。除请求的一个查询字符串外,HTTP请求头值被硬编码,x-agent流量的URL如下所示:

/ webhp?rel = psy&hl = 7&ai = L2Bd93t_o-jl022K1Og4Bm9mSk8QO88K_3ZQZuKcoPwur-5Q7Y =

“/ webhp?rel = psy&hl = 7&ai =”作为URL的一部分,最后的“=”符号可以连接到不同的进程中。事实上,代码中的“/ webhp?rel = psy&hl = 7&ai =”是硬编码的。接下来的51个字节都不是明文形式的,简要地说,它包含请求的时间戳和代理的ID。 x-agent的初始POST数据为71字节,并以a =结尾。数据被加密,解密时等于:

56 34 4D 47 | 4E 78 5A 57 | 6C 76 63 6D | 68 6A 4F 47 | 39 79 5A 51 | 6B 30 84 F2 | 01 00 00 01 | 00 23 01 10 |23 01 11 23 | 01 13 23

这段解密的代码是由四部分组成,分别是代理人(受害人)的身份号,发送数据的模块的ID以及由#字符(0x23)分隔成的两部分模块,如下图所示:

如何在数秒之内破解APT28流量?

以下是x-agent通道的Http实现:

如何在数秒之内破解APT28流量?

X-agent流量加密

加密模块

加密模块是使用两个参数调用加密过程的,指针包含两个数据结构,这些数据结构提供了加密类的两个参数:

1.种子加密

2.要加密的数据

种子是经过硬编码的,除此以外,init函数使用即时常量将其复制到数据段:

如何在数秒之内破解APT28流量?

接下来,在代码中,4个随机字节被附加到种子上,与这些字母一起形成加密的核心。种子为50字节,密钥长度为54字节。数据的大小可变,例如,来自AgentKernel的默认初始请求总共为39个字节(见图4),包括:代理ID,模块ID(消息的发送方)和支持的模块。这些数据总是附加到20字节的数据令牌,代理ID和发件人模块ID。该数据令牌用于服务器的解密结果验证。使用RC4创建密码后,加密过程将向消息添加8个随机值,然后将整个二进制字符串转换为兼容URL的BASE64。 接下来,加密过程会向消息中添加一个7字节的时间戳。总而言之,加密的过程包含以下5个操作:

1. 随机生成4字节
2.使用RC4加密消息
3.向消息中添加8个随机字节
4.将二进制字符串转换为BASE64
5.向消息添加时间戳(BASE64中为7个字节)

RC4的功能

RC4是流密码算法,基于字节置换。以下代码是由x-agent实现的RC4算法。函数的参数是附加到种子和明文数据的4字节随机值:

如何在数秒之内破解APT28流量?

如何在数秒之内破解APT28流量?

如何解密x-agent数据

如上所述,x-agent加密中唯一的随机性是附加到上一节中给出的50字节种子的4个随机字节。由于RC4是同步流密码,所以只能使用与加密相同的密钥来解密流量。在x-agent的解密算法中必须使用相同的RC4函数进行解密。密码输入必须是来自http请求的相同的数据字节流,即时间戳和随机字节必须被删除。必须以强制方式调用RC4函数,其中所有可能的值都是从0到-1。由于这是一个已知的纯文本攻击,所以解密结果必须包含“V4MGNXZWlvcmhjOG9yZQ”。




原文发布时间为:2017年5月3日
本文作者:xiaohui 
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
3月前
|
存储 安全 网络安全
怎么看服务器是中毒了还是被攻击?以及后续处理方案
怎么看服务器是中毒了还是被攻击?以及后续处理方案
|
7月前
|
开发框架 安全 .NET
记一次绕过安全狗命令执行上线
记一次绕过安全狗命令执行上线
107 1
解决 SmallPDF 联网验证和试用期过期问题
解决 SmallPDF 联网验证和试用期过期问题
|
安全 Linux
真实记录疑似Linux病毒导致服务器 带宽跑满的解决过程
案例描述   由于最近我在重构之前的APP,需要和server端进行数据交互,发现有一个现象,那么就是隔1~2天总会发生获取数据超时的问题,而且必须要重启服务器才能解决。早在之前,我有留意到这个问题,但是由于这个服务器目前只有我测试的时候才有访问,其他的途径的数据交互几乎没有,但是这次必须要把这个问题解决了,因为APP我肯定要上线的。
1013 0
|
安全 Windows
SMB上发现一枚0day漏洞,影响多个版本的Windows系统
本文讲的是SMB上发现一枚0day漏洞,影响多个版本的Windows系统,近日,US-CERT称在SMB(服务器信息区块)协议上发现了一个0day漏洞,可被远程攻击者利用。
1475 0
|
数据安全/隐私保护
勒索软件的代价:大多数受害者网络下线至少一周
本文讲的是勒索软件的代价:大多数受害者网络下线至少一周,近日,一份报告显示,勒索软件通常只需要几秒钟就能够封锁整个网络,但是绝大多数的企业依然要面临至少一周无法访问重要文件和系统的代价,造成严重的经济和名誉损失。
1160 0
|
安全
安全预警:Xshell 5官方版本被植入后门,更新即中招(国内已有用户受影响)
本文讲的是安全预警:Xshell 5官方版本被植入后门,更新即中招(国内已有用户受影响),嘶吼8月14日消息,知名服务器终端管理软件Xshell在7月18日发布的5.0 Build 1322官方版本被植入后门,用户下载、更新到该版本均会中招。
2376 0