原文:https://securelist.com/compfun-http-status-based-trojan/96874/
译者:知道创宇404实验室翻译组

2019年秋,我们发布了一篇文章,其主要讲述了一个名为Reducor的COMpfun后继文件是如何即时感染文件以破坏TLS流量的,目前该恶意软件的开发者们还在开发新的功能。2019年11月下旬,我们的搜索引擎发现了一个新的木马,其之前发现的代码高度相似,经过我们进一步的研究表明,它使用的是与COMPFun相同的代码库。

里面有什么

该恶意活动幕后操纵者聚焦于外交实体上,这次目标是在欧洲。他们将最初的释放器以伪造签证申请的形式进行传播。合法的应用程序及32位或64位的恶意软件被保存在加密释放器中,但恶意代码是如何传递到目标中的这点我们尚不清楚。

感染链

我们观察到了一个有趣的C2通信协议,该协议使用了罕见的HTTP/HTTPS状态代码(即IETF RFC 7231,6585,4918),而Client Error类中的几个HTTP状态代码(422-429)会使木马知道操作员想要做什么,在控制服务器发送“Payment Required”(402)状态之后,会执行先前所接收到的命令。

操作者将RSA公钥和唯一的HTTP ETag保留在加密的配置数据中。出于Web内容缓存原因而创建的此标记也可以用于过滤对C2的请求,如:来自网络扫描程序而非目标的请求。除了上述用于与C2通信的RSA公钥外,该恶意软件还使用自行生成的AES-128密钥。

操作者是谁

COMPfun恶意软件最初是由G-DATA于2014年记录的,尽管该公司无法确定哪个APT正在使用该恶意软件。但根据受害者学理论,我们能够将其与Turla APT进行关联,其可信度为中低级。

木马能做什么

其功能包括获取目标的地理位置,收集与主机和网络有关的数据、键盘记录和屏幕截图的能力。换句话说,它是普通的成熟木马,也能够将其传播到可移动设备。

就像之前来自同操作者的恶意软件一样,所有必要的功能地址都可以进行动态解析,这样会使分析变得复杂化。为了通过HTTP/HTTPS将目标数据泄露到C2,然后恶意软件使用RSA进行加密,通过LZNT1压缩单字节的XOR进行加密实现本地数据隐藏。

木马用于各种任务的加密和压缩

初始释放器

第一阶段的释放器从局域网共享目录进行下载,与签证申请程序相关的文件名和目标外交实体完全相对应。和具有相似代码基的所有模块一样,释放器动态解析成所有必要的Windows API函数地址,并将它们放入对应结构。然后从其资源(.rsrc)中解密部分下一阶段的恶意软件,其算法是使用密钥的“0x55”的单字节 XOR ,并使用LZNT1对其进行压缩。

除了恶意软件试图模仿的原始应用程序之外,以下文件也被拖放到磁盘上:

释放器要求用户以管理员身份来运行文件,然后删除与主机架构相对应的版本,并将文件系统时间戳设置为2013.12.20 22:31。

有趣的是,释放器的权限并不局限于PE诱饵,这个阶段还可以使用.doc和.pdf文件。在这样的情况下,释放器将使用open shell命令打开文件,而不是运行合法的欺骗可执行应用程序。

主模块–基于HTTP状态的木马

下面的分析基于上表中的32位样本,合法的ExplorerFrame.dll.mui是Windows资源管理器使用的ExplorerFrame.dll文件的语言资源。

多线程特洛伊木马程序的功能

初始化

与之前的恶意软件代码一样,大量简短的独立函数会返回到所有的可读字符串中。为了不让研究人员一眼就能看到字符串,使用这样操作会使分析变得相对复杂,在模块的准备阶段,动态形式将所有必需的Windows API函数地址解析为自定义结构,这样的操作会使恶意软件只能调动间接函数。

该模块获取处理器体系结构(32位或64位)和Windows操作系统版本。它会对与虚拟机相关的设备(VEN VMWARE、VBOX硬盘、virtual DVD ROM等)进行多项反分析检查,来避免执行受到控制,此外其还指出了主机上运行的安全产品(Symantec、Kaspersky、Dr.Web、Avast)。

在每次与C2通信之前,恶意软件都会检查调试器(如WinDbg、OllyDbg、Visual Studio)、主机(进程浏览器或监视器等)及网络监视(Wireshark、TCPView等)程序是否正在运行。此外还检查internet是否连接,若检查失败,则不进行通讯。

动态链接库还能够检查在运行的进程,在需要付款的情况下,该链接库可检查系统、产品安全以及浏览器的进程,紧接着恶意软件将形成相应的代码来对相关文件进行删除。

在初始化过程中,最后一步是文件解密并进行解压。使用0xAA密钥的XOR字节进行解密,使用LZNT1算法进行解压。通过此配置,恶意软件会解析RSA公钥、ETag和IP地址来和相关的服务器进行通信。

解密后的配置数据包含用于加密渗出数据的RSA公钥

基于HTTP状态的通信模块

首先,模块生成需以下内容:

  • 用于HTTP GET/POST参数和HTTP状态码427(请求新命令)的AES-128加密密钥;

  • 基于主机网络适配器、CPU和第一个固定逻辑驱动器序列号的4字节唯一硬件ID(HWID)。

然后,该模块从Windows(cmd.exe,smss.exe),与安全相关的应用程序(Symantec的nis.exe,Dr.Web的spideragent.exe)和浏览器开始按照优先级从高到低的顺序选择注入代码。 (相关浏览器:IE,Opera,Firefox,Yandex浏览器,Chrome)。

主线程检查C2是否在其配置中支持TLS。如果是,通信将通过HTTPS和端口443进行;否则,将使用HTTP协议和端口80。

分析样本中的解密内容配置

发送的第一个GET请求中包含一个ETag“If Match”头部,该头部是用解密配置中的数据生成。ETag通常使用web服务器来进行缓存,方便在ETag值匹配时不会反复发布信息,以此提高效率并节省带宽。ETag的实现意味着,如果C2没有所需的ETag值,它可以忽略所有未从其预期目标发送的请求。

C2 HTTP状态代码描述

HTTP 427可以接收以下任何附加命令:

可移动设备传播模块

如果初始化成功,恶意软件将再启动一个线程来发送Windows消息,查找与WM_DEVICECHANGE事件相关的可移动设备。当USB设备插入或拔出主机时,模块将运行自己的处理程序。

其他间谍模块:键盘记录器、屏幕截图工具等

使用多个挂钩监视用户的活动,他们都独立于任何指挥控制系统来收集目标数据。使用存储在配置数据中的RSA公钥对击键进行加密,每两秒钟或在记录超过512个字节时发送一次。这512个字符还包括鼠标左键单击(写为“MSLBTN”字符串)和Windows标题栏文本。对于剪贴板内容,模块计算一个MD5哈希,如果它发生更改,则使用相同的RSA公钥加密剪贴板内容,然后将其发送。

在单独的线程中,木马使用GDIPlus库获取位图截图,使用LZNT1算法对其进行压缩,使用配置数据中的密钥对其进行加密,然后将其发送到控制服务器。不论在任何情况下,截图都将被截取并发送给目标,其与任何C2命令都无关。

最后但并非最不重要的

恶意软件作者做出了多种选择(尽管不是主要的技术选择),我们仍认为这些选择值得关注。

基于COM劫持的持久性方法将其相应的代码和结构作为参数注入到合法进程的内存中。该恶意软件使用合法的Web服务对受害者进行地理定位(geoplugin.net/json.gp、ip-api.com/json和telize.com/geoip)。 HTTP状态线程中异常的线程同步超时计算很特殊。从数学上讲,该级数的部分和正好是:

在全额情况下,该级数只是指数的表示。开发人员可能使用该指数使通信线程中的超时变得更加不可预测,并且增长速度很快,而编译器是这样计算的。

COMPFun操作者实现了什么

2019年,我们两次看到COMpfun开发者的创新方法。首先,他们通过PRNG系统功能补丁绕过了TLS加密的通信,然后我们观察到C2通信的独特实现使用了不常见的HTTP状态码。

由于最初的感染媒介对他们有利,恶意软件运营商仍将注意力集中在外交实体和选择与签证相关的应用程序上,这些应用程序存储在本地网络共享的目录中。针对目标采取了量身定制的执行方法,这无疑将会使COMPFun背后的开发人员成为一个强大的进攻性团队。

IOCs

File MD5 Hashes
Trojan 32-bit: A6AFA05CBD04E9AF256D278E5B5AD050
Trojan 64-bit: 1BB03CBAD293CA9EE3DDCE6F054FC325

IPs
95.183.49.10
95.183.49.29
200.63.45.35


Paper 本文由 Seebug Paper 发布,如需转载请注明来源。本文地址:https://paper.seebug.org/1212/