研究人员最近新发现了一个新的高APT组织,我们称之为EarthBerberoka(又名GamblingPuppet)。该APT组织专门针对Windows、macOS和Linux平台上的赌博网站。
该恶意软件家族包括经过验证且已升级的恶意软件家族,例如PlugX和Gh0stRAT,以及在本文称为PuppetLoader的全新多阶段恶意软件家族。
PuppetLoader
PuppetLoader是一个复杂的五阶段恶意软件家族,它使用了一些有趣的技术,包括劫持加载的模块以启动恶意代码,以及将恶意负载和模块隐藏在修改后的位图图像(BMP)文件中。
第1阶段:混淆程序和加载程序
RC4实施不正确。
在此阶段,使用硬编码密钥(2726c6aea9970bb95211304705b5f595)和似乎是RC4(RivestCipher4)算法的方式对一组有效负载数据进行解密。但是,密码的伪随机生成部分中的密码“交换”操作实施不当。这导致仅对标头和有效负载的前几部分进行了正确加密,而后面的部分几乎完全以明文形式保留。
似乎这种硬编码密钥和有漏洞的RC4实现也被用于名为TigerPlug的恶意软件家族中,可能是因为它传播了PlugX恶意软件。
劫持加载的模块
载荷解密后,它被加载到设备的内存中,并使用一种隐蔽的方法执行:PuppetLoader通过从Windows\System32目录加载一个合法的DLL启动。然后,加载过程被劫持,以恶意库替换合法库。这是通过挂钩NTDLLAPI来完成的,例如NtQueryAttributesFile、NtOpenFile、NtCreateSection、NtMapViewOfSection、NtQuerySection和ZwClose。
加载程序使用未记录的NTDLLAPI,例如RtlPushFrame、RtlPopFrame和RtlGetFrame,以避免递归预订,当挂钩函数间接调用自身时会发生这种情况。
为了正确加载恶意负载,一个标记为“LDFM”的帧被分配并填充必要的参数,例如文件名的内存地址和分配的缓冲区句柄或包含恶意负载的地址。在确定它们的值后,一些参数会立即设置,而其他参数则稍后设置。
LDFM加载框架
然后调用LdrLoadDll来加载合法的asyclfilt.dll库。之后,调用之前挂钩的API函数,导致加载的DLL名称被替换为lz32.dll,这是一个合法的DLL。然后,这个合法DLL的内容会被挂钩的NtMapViewOfSection函数内的恶意负载替换。
然后,LdrLoadDll函数重新设置新加载的恶意映像的基础,并加载所有需要的依赖项。一旦ldrloadll函数返回了句柄,恶意软件就不再需要该帧了,这就是为什么它通过调用RtlPopFrame弹出该帧,解除之前挂钩的函数,并通过调用GetModuleHandleW(asyncfilt.dll)来验证加载是否成功。
然后,恶意软件会动态解析名为Install的导出函数,并将参数值设置为“11BF29E1371C0D83C530BD1BF346”,然后解密为名为OneTime的函数。对于其命令行参数,PuppetLoader使用相同的有漏洞的RC4实现,使用密码“whk0q9ogev6ofg8d”。
劫持结果如下:
1.通过解析PEB_LDR_DATA结构可以看到加载的asycfilt.dll模块,该结构包含当前进程中所有加载的模块。
在加载的模块名中显示asynfilt.dll
lz32.dll是基于进程监控工具打开的。
Lz32.dll显示在打开的文件中
只有PuppetLoader的dropper有效负载被加载,而前面提到的库实际上都没有被加载。
第2阶段:释放
dropper在受感染的设备中创建并删除多个文件。
dropper创建和删除的文件
硬编码的GUID({78106D5F-CD1A-A8C4-A625-6863092B4BBA})被插入CPuppetProcessFileSharer(C:\Users\Public\Pictures\Desktop.inf)。研究人员认为,它标志着第二阶段已经完成。
Config.ini(C:Users\Public\Videos\Config.ini)包含GUID和原因,它是硬编码的值“StartupBasicLoader”,使用一个密钥加密(whk0q9ogev6ofg8d)。
svchost.exe使用以下命令行参数以挂起模式启动:
-cmd-NoModuleLoadDLL-DisplayName=KeepAuthority.Client.MainConsole.x64.Release-InvokeMethodName=Run-InokeMethodParam=NULL”
这也使用前面提到的密钥进行了加密,并在svchost.exe中创建了一个新线程,以使其加载BasicLoader有效负载MSVCPX00.dll。有趣的是,“-InokeMethodParam”中有一个印刷错误。
第3阶段:BasicLoader
BasicLoader阶段首先将硬编码的GUID({78106D5F-CD1A-A8C4-A625-6863092B4BBA})添加到CPuppetProcessFileSharer。与第2阶段一样,我们认为这可能是第3阶段开始运行的标志。
BasicLoader在Users\\Public中的目录(桌面、文档、下载、音乐、图片和视频)中搜索BMP文件。它会检查每个目录中是否存在将通过所需结构的BMP文件。对于这样做的BMP文件,附加到BMP文件的有效负载被解密、加载到内存中并执行。BMP文件仅由33 x 11像素和338字节组成,附加到文件中的数据是使用同样有漏洞的RC4实现加密的有效负载。
一个小的BMP文件,其中附加了加密的有效载荷
第4阶段:内核
这个阶段开始于一个硬编码的GUID ({7D8DA9DC-1F3B-2E5C-AA59-9418E652E4AA})被添加到CPuppetProcessFileSharer。与其他阶段类似,这可能是第4阶段开始运行的标志。
在此之后,恶意软件启动系统记录程序线程,其中记录的信息通过管道接收并保存到具有硬编码名称的文件中。记录的信息可以来自其他模块或进程。根据我们的分析,每个日志文件条目由分隔符(0xAABBCCDD)分隔,后跟自定义RC4密码和消息长度。
解密后的日志可以包含以下信息:
运行的模块;
运行此模块的参数;
在哪个阶段(来自CPuppetProcessFileSharer的GUID)执行了操作;
解密日志
在此阶段还实现了以下命令行参数:
DisplayName;
InokeMethodParam (sic);
InvokeMethodName;
NoModuleLoadDLL;
LoadShellcode;
我们在此只强调两个值得注意的参数:-NoModuleLoadDLL使用与阶段1加载程序相同的技术,-LoadShellcode分配一个内存块,复制shellcode并执行它。
第5阶段:Client.MainConsole
这是用C++编写的主要客户端二进制文件,是PuppetLoader感染链的最后阶段。
代码由处理不同任务的几个类构成,例如管理交互式shell、上传和下载文件、安装新模块、监控受害者行为以及在满足条件时执行回调函数。
1.CPipeCmdManager——交互式shell管理程序
参数:
-flushusersession
-createcmd
-destorycmd (sic)
-excutecmd
-cmdkeepalive
2.CommonLib::CcmdMulArgDecoder——命令行参数解码程序,与命令行参数相关的附加模块
参数:
-ModuleLog
-LogText
-ModuleID
-ModuleVersion
-MountStatus
-Path
-IsDelete
-ModuleKeepAlive
-UploadFile
然后,客户端通过UDP(用户数据报协议)与命令和控制(C&C)服务程序建立通信,并识别不同类型的自定义UDP数据包:
客户端识别的自定义UDP数据包
在主客户端中实现的后门功能有:
交互式shell;
上传文件;
下载文件;
列表文件;
终止进程;
列表进程;
安装模块;
登录回调;
枚举RDP会话;
主客户端实现的后门功能有:
交互式shell;
上传文件;
下载文件;
列表文件;
终止进程;
列表进程;
安装模块;
登录回调;
枚举RDP会话;
通过UDP的通信协议使用相同的RC4加密,发送/或接收的数据包包含一个16字节的RC4密钥和一个RC4加密有效负载的长度,然后是另一个带有加密有效负载本身的数据包。
oRAT
调查期间,研究人员获得了Windows和macOS样本的另一个恶意软件家族是oRAT。有趣的是,这是研究人员第一次分析用Go语言编写的这个恶意软件家族的样本。
我们在分析中发现的oRAT释放程序是使用ElectronJS框架和DMG(磁盘映像)文件构建的MiMi聊天应用程序。
对于Windows和macOS示例,这些示例都标记为0.5.1版,并且具有相同的功能和配置。
配置文件和AES解密密钥以加密形式附加到PE(便携式可执行文件)文件覆盖层。
解密后的oRAT配置
该配置使用AES- gcm (AES with galalois /Counter Mode)算法解密。如果在配置设置中指定了网关或流量转发器模式,恶意软件就会对其进行解析并启用该模式。
为了让恶意软件操作员直接连接到受感染的设备并通过GET或POST请求执行命令,恶意软件会启动受感染设备上的本地服务程序,以侦听在配置设置中为控制命令指定的端口。
网络通信可以是纯文本或加密的,具体取决于文件的配置:
纯文本的“tcp”;
“stcp”用于使用golang-tls库的加密TCP通信;
“sudp”用于使用Quic-go库的加密UDP流量;
控制服务程序是通过注册路由来实现的。这种简单的机制导致将GET/POST请求直接转换为内部Go命令。因此,请求URL会导致在受感染的系统上执行相应的代码。
我们获得了注册这些路由的oRAT样本:
GET /agent/info
GET /agent/ping
POST /agent/upload
GET /agent/download
GET /agent/screenshot
GET /agent/zip
GET /agent/unzip
GET /agent/kill-self
GET /agent/portscan
GET /agent/proxy
GET /agent/ssh
GET /agent/netPuppet
Downloaders (C++ downloaders)
在我们的调查过程中,我们还发现恶意网站传播虚假的Adobe Flash Player更新,这些更新实际上是在传播c++下载程序。
攻击始于用c++编写的可执行文件,该文件通过Winsock API连接到特定端口中的域或IP地址。下载的内容被保存为SMTemp.dat,使用可执行文件的文件名和一个硬编码的XOR密钥,一个名为Loader.dll的文件被解密并复制到磁盘。如果可执行文件因为任何原因被重命名,DLL解密失败,恶意软件的第二阶段不会通过。
如果SMTemp.dat文件存在,Loader.dll文件将执行它。之后,加载程序解密一个合法的Adobe Flash Player安装程序并执行它,以欺骗受害者认为可执行文件是一个合法的安装程序。
在调查过程中,研究人员注意到托管PuppetDownloaders恶意软件负载第二阶段的服务程序处于离线状态。值得注意的是,该恶意软件的字符串解密例程是一个简单的XOR,其密钥为字符串“2020-05-2413:00:29”。用于解码字符串的密码的前13个字节与后13个字节相同。
XOR解密例程
研究人员将这些下载程序称为PuppetDownloader,因为它们与PuppetLoader恶意软件家族相关联,原因如下:
1.该恶意软件和PuppetLoader都使用相同的字符串解密例程,该例程使用相同的密钥。
2.该恶意软件和PuppetLoader都使用相同的XOR密钥(2726c6aea9970bb95211304705b5f595),用于解密嵌入式Loader.dll文件。
该恶意软件和PuppetLoader的解密Loader.dll共享类似的字符串,例如“[-]UnExistpwszModuleFunName:”。这表明使用了一个通用框架来编译这两个DLL。
MFC套接字下载程序
研究人员还看到WinRAR自解压(SFX)文件释放了使用Microsoft基础类库(MFC)框架编写的下载程序。这些MFC套接字下载程序具有相同的结构:一个函数创建一个套接字,连接到域或IP地址,发送一个短字符串,然后调用两次“recv”。
代码流通过调用EnumDesktopsA或EnumWindows重定向,其回调函数指针指向下载的内容。
下载程序尝试访问端口8080、29527和8885。它们还将字符串“feiji”、“@5436”和“[email protected]”发送到套接字。研究人员发现了同一恶意软件家族的多个额外样本,它们具有相同的结构并发送相同的字符串。然而,有可能多个组织正在秘密地共享这个恶意软件的源代码。
PlugX
PlugX是一种远程访问工具(RAT),十多年来一直被用作间谍活动的恶意工具。根据已获得和分析的样本,研究人员发现EarthBerberoka使用PlugX以32位和64位架构为目标。
该恶意软件家族在HELLO数据包中发送一个DWORD,一个32位无符号整数。然后,受感染的系统将看起来像“yyyymmdd”格式的日期的HELLO数据包发送到C&C服务程序。
研究人员在分析的多个样本中发现了以下DWORD,这表明已发现的版本是在过去三年内开发的:20190520、20201106和20210804。
研究人员发现的所有样本都以相同的方式加载:一个容易受到DLL侧载攻击的合法签名文件被放置在一个恶意DLL旁边,该恶意DLL解密并加载包含最终有效负载的第三个文件。
这些恶意DLL文件之一具有PDB(程序数据库)路径:C:\Users\Administrator\Desktop\Plug7.0(Logger)\logexts\x64\Release\logexts.pdb。
Gh0stRAT
研究人员还看到了Gh0stRAT的至少三种不同变体,这是另一个已经存在10多年的恶意软件家族,被用于EarthBerberoka的活动。这个恶意软件家族的源代码是公开的,这就是它有很多变体的原因。
研究人员分析的其中一个变体有一个有趣的破坏性功能:它取代了主引导记录(MBR)以显示明确的消息。
其他已知的恶意软件家族
研究人员还发现EarthBerberoka滥用了其他合法工具,以及该组织在其活动中使用的恶意软件家族:
QuasarRAT——一种基于Windows的开源RAT,已被APT组织用于网络攻击;
AsyncRAT——一种开源RAT,可用于通过加密连接远程监控和控制设备;
Trochilus——一种可以逃避沙盒分析的隐形RAT,可用于网络间谍活动;
安全建议
分析表明Earth Berberoka拥有多种工具和庞大的基础设施来瞄准东南亚博彩市场。为避免成为“EarthBerberoka”攻击的受害者,赌博网站的使用者及经营者可采用以下安全建议:
1.在点击链接或下载应用程序之前,正确审查电子邮件、网站和应用程序;
2.仅从受信任的来源下载应用程序;
3.注意恶意网站标志,例如语法和拼写错误。
4.通过托管电子邮件安全和反垃圾邮件保护阻止通过电子邮件到达的威胁,例如恶意链接。
5.使用有助于检测、扫描和阻止恶意URL的多层安全解决方案。
参考及来源:https://www.trendmicro.com/en_us/research/22/d/new-apt-group-earth-berberoka-targets-gambling-websites-with-old.html