一、概 述

近期,启明星辰ADLab捕获到一起以某摄像头公司为目标的攻击活动,该攻击活动所使用的攻击载荷异常复杂,远超寻常攻击。为了查明该攻击来源及其载荷的技术实现,我们对其进行了深入的技术分析和溯源追踪分析。通过分析,我们发现该攻击在多个维度上都采用了高强度的对抗手段以防止被逆向工程,同时采用了多模块多阶段的内嵌式套娃模式,其中包含多达10个环环相扣层层相嵌的Loader和DLL模块,这些模块依赖大量对抗手段在内存中不落地的解密执行。无论是静态分析对抗还是动态分析对抗都使逆向工程变得极其困难,比如其将所有类型、字段、属性、方法等进行了名称混淆,资源数据和相关配置信息、字符串也均通过动态加解密实现,并基于“spaghetti code”的控制流混淆使得控制流程无比复杂;而为了对抗动态分析,恶意软件的执行流中始终贯穿着毫无规律的垃圾指令和无序跳转,同时采用动态代理技术来封装和隐藏类、方法和成员,并基于“Protobuf”库对结构化数据进行二进制序列化,使得数据交换更加隐蔽。

这次攻击活动的目标企业是一家提供摄像头和智慧物联解决方案的中国企业。攻击者伪装成该企业的客户(国内某印染公司),以订购产品为由向该公司服务支持部门投递窃密木马以试图窃取该公司重要数据和敏感信息。黑客通过利用HTML smuggling方式在目标主机中投放恶意软件以躲避邮件网关检测,恶意软件通过复杂执行逻辑后启用窃密木马。

通过长达一个多月的逆向工程,我们才得以提取出核心木马,并确定其家族归属PureLogs窃密木马,同时通过溯源关联分析确认该木马采用的loader为PureCrypter,这两款恶意代码是最近两年才出现的新型攻击框架,它们均由同一个公司开发且共用大部分的对抗技术。PureLogs是一款新型窃密木马,该木马曾在去年12月针对意大利的攻击中首次被发现,其可以窃取各类浏览器、加密钱包和应用程序中的敏感数据。

通过溯源分析我们发现这款复杂的恶意软件保护程序也曾经被包括PureLogs、Formbook、AgentTesla、SnakeKeylogger、Redline、AsyncRAT、WarzoneRAT、Remcos在内的多款恶意软件所使用,但由于其保护的程序极为复杂,因此极少有团队对PureCrypter保护过的恶意软件进行分析。此外,对于窃密木马PureLogs,我们发现的此次攻击也是该窃密木马首次被用于针对中国企业的网络攻击活动。

此外,在我们对Loder PureCrypter的传播链进行溯源追踪过程中还发现了“黑雀”攻击的现象。“黑雀”攻击是黑客产业链中非常有趣的一种高级黑吃黑现象,这种攻击将供应链攻击思路应用于黑客产业链中,用以控制或者获取下游黑客的攻击资源或攻击成果。在PureCrypter的“黑雀”攻击中,一些上游黑客在源码项目内植入恶意程序并通过Github、地下论坛等渠道提供给黑客使用,以此坐收渔利。有关“黑雀”攻击更多的案例和分析文章可以参考启明星辰ADLab发布的报告《黑雀攻击-揭秘Death僵尸网络背后的终极控制者》、《黑雀攻击:揭秘BillGates僵尸网络中的黑雀现象》、《黑雀攻击:揭秘TF僵尸物联网黑客背后的黑客》、《黑雀攻击:深入分析并溯源Dofloo僵尸物联网背后的”黑雀”》。

二、溯源与关联分析

2.1 攻击活动分析

在本次攻击活动中,攻击者伪装成国内某印染公司向目标企业投放攻击邮件,相关攻击示例如下所示。攻击邮件主题为“Revised Order 20230025-03647”(修改后的订单20230025-03647),正文包括增加订购产品的描述以及公司联系方式。附件是名为“20230025-03647.html”的网页文件,受害者打开后会通过HTML smuggling的方式打开浏览器并脱机下载压缩文件“20230025-03647”,其解压后是名为“20230025-03647”的恶意可执行程序。

图1:钓鱼邮件

通过对该样本的C2服务器45.80.192.226进行追溯,我们进一步关联到更多相关的攻击活动。这批攻击在手法上普遍采用HTML smuggling的方式传输恶意软件。HTML smuggling是一种利用HTML5和JavaScript的隐匿攻击手法,攻击者制作带有恶意JavaScript脚本的HTML网页,并发送含有URL或附件的钓鱼邮件,诱使用户点击并打开附件。当收件人打开邮件中的HTML文件时,浏览器解码JavaScript、加载网页并弹出下载提示,点击保存后包含恶意程序的压缩包会释放到目标系统中,从而躲避邮件网关和安全软件等的检测。通常来说,钓鱼邮件的HTML附件大多以钓鱼网页为主,HTML文件本身是无害的,攻击者会通过模仿各类公司网站、社交平台、邮箱等的登陆界面来钓取用户账户凭证。而近年来越来越多的出现了“HTML smuggling”攻击,尤其是在微软开始默认阻止在线文档中的宏执行后变得更加流行,包括APT29、NOBELIUM等黑客组织近年来都在频繁使用HTML smuggling策略以绕过检测。以下是触发攻击的执行流程示意图。

图2:攻击执行流程

图3:HTML代码示例

相关攻击活动涉及的部分HTML文件及ZIP文件包如下表所示。

表1:诱饵文件

诱饵文件

Hash

PO4500043116.html

3cafd0cbc8a260da84b4a7f0690cf4d90b4db93c39ddba473f02d225c84cee42

SC450013227.html

8f8ae0659ac0c55a6ced6d38f8b6fa0efc3ae9ca528020e3b9ef8c7542973a94

NO20237188.html

b577f7e2e682035e0bae170b9c5dc4d47a15bd98d947dc91653ae80cf8a2514e

SC23200816.z

04cb439abc5ef187d36a45d320d35c6b9ad3e2f8dfa06eb5821025733706952f

INV_00872023.z

7d99a47f7d0318e8076728d266374a4c5286abc06099e05144d2b6da8af897bb

SC23200814.z

7fa534c2586560eacfe1ba58e9e6e412dc3586ab059da922fc9a52c219144588

……

解压ZIP包后释放出攻击样本,部分解压释放的攻击样本如下图所示。相关恶意样本的图标被伪装成Adobe Reader和Excel等常见软件的图标,普通用户往往难以辨别真伪。这批恶意软件在命名上普遍采用了PO(Purchase Order客户采购订单)、SC(Sales Confirmation销售确认书)、INV(Inventory库存)等订单相关的命名前缀,因此也说明黑客主要利用“商贸信”相关题材实施攻击,目标则主要是以商品销售为主营业务的企业或公司。

图4:恶意样本图标

其中,这批攻击样本主要采用了两类加载方式:一类样本通过Loader(如PureCrypter)下载后续的恶意代码并多层解密后执行;另一类样本则直接从资源中释放后续恶意代码并解密执行。大部分样本采用第一类下载执行的方式,并会从weim.us域下载后续的恶意代码,部分关联的下载URL如下表所示。

表2:下载URL

下载URL

https://weim.us/Wraxnkwaa.pdf

https://weim.us/Ukdmsuvndi.vdf

https://weim.us/Ugwiuid.wav

https://weim.us/Eatfh.mp3

https://weim.us/Xstaoqwfh.dat

https://weim.us/Nphmq.dat

https://weim.us/Tagduvuddz.vdf

https://weim.us/Xqbyixrreq.vdf

https://weim.us/Lcogei.wav

https://weim.us/Xbkdjf.mp3

https://weim.us/Ktyyrgmbvhs.vdf

https://weim.us/Bedzbgtqrg.mp3

https://weim.us/Tngnzkzeiz.mp3

https://weim.us/Qjacaa.mp4

https://weim.us/Mujvrsqrdw.pdf

……

2.2 Loader中的“黑雀”攻击分析

“黑雀”攻击是一种具有针对性且高效的攻击方式,主要以黑客或者黑色产业链中的参与者为目标。其攻击目标通常具有丰富的黑客资源,可以帮助幕后受益者黑雀获取更大的攻击资源,享用别人的攻击成果。我们在追踪攻击的过程中意外发现了PureCrypter传播链中的“黑雀”攻击现象,本节将对此次攻击涉及的木马和相关的“黑雀”攻击进行介绍。

在此次攻击活动中,攻击者至少使用了PureCrypter和PureLogs木马组合实施攻击。其中PureCrypter最早于 2021年3月出现,其支持分发多种恶意软件,包括PureLogs、Formbook、AgentTesla、SnakeKeylogger、Redline、AsyncRAT等在内的多个恶意家族。

PureLogs则是该工具背后的开发组织PureCoder在2022 年 12 月新上线的一款新型信息窃取程序,旨在从网络浏览器、加密钱包和电子邮件客户端中窃取数据。PureLogs每年收费 199美元,终身使用为299美元。由于PureLogs发布尚不足1年,相关的攻击事件也较为少见。在PureCoder的官方介绍中,其提供的产品包括Pure Crypter(代码加载、混淆加密等)、Pure Logs(信息窃取)、Pure Miner(挖矿程序)、Blue Loader(僵尸网络)、Pure hVNC(VNC程序)等多种工具,下图为其产品截图和售价。

图5:PureCoder售卖的工具

PureCoder的销售渠道包括产品官网(purecoder.io)、暗网论坛、HACKFORUMS、CRACKED.IO等黑客论坛,开发者还通过Telegram和Discord建立讨论群组。例如其在Telegram的频道PureCoder Group就已有数百个用户。下图是讨论组(General)内的恶意软件订购者在交流恶意代码免杀、存活时间以及感染量等话题。

图6:讨论组内恶意软件订购者的交流信息

我们在进一步的追踪过程中,意外的在Github上发现了一个被植入后门的源代码项目,项目主页为:https://github.com/CoderLadyTeam。

图7:植入后门的源代码项目

攻击者创建了名为Pure-Crypter-ADVANCED-INJECTION-TECHNOLOGY-64BIT-32BIT-Anti-Delete-main的项目并引诱寻找PureCrypter源码、破解、试用等版本的黑客下载编译。其将木马伪装成visual studio的解决方案sln文件的图标从而诱骗用户打开(实际是后缀为.scr的恶意程序)。下图为恶意源码的文件目录,由于visual studio对系统配置要求较高,大部分开发者会安装在本机而非虚拟机内使用,因此这类伪装成VS项目文件的恶意程序攻击成功率极高。

图8:项目结构

当黑客打开Pure Crypter Leak_nls.程序后,木马会回连Discord的CDN(cdn.discordapp.com),并通过Discord的文件存储网络下载后续木马。下载链接如下:

https://cdn[.]discordapp[.]com/attachments/1014017847183286272/1157998889182437416/WindowsUpSetting.scr?ex/WindowsUpSetting.exe

后续阶段在此不做更多分析,我们针对Pure Crypter Leak_nls程序进一步关联后,发现攻击者不仅利用了PureCrypter工具实施“黑雀”攻击,还有更多此类被植入恶意程序的工程项目如下表。

表3:恶意源代码工程

源代码工程项目

Hash

Pure-Crypter-ADVANCED-INJECTION-TECHNOLOGY-64BIT-32BIT-Anti-Delete-main.zip

2C359289F0DF5A5816E08A1AE4F53F47

Escape-from-Tarkov-External-Esp-Aimbot-Hack-Cheat-main.zip

1457799905135f4b0d22c700ad706bba

Rainbow-Six-Siege-Rs6-External-Esp-Aimbot-Hack-Cheat-main.zip

cdd5f926c03d48b2bc93cc07d771b1e0

Full-Permanent-Spoofer-shadow-ban-remover-main.zip

48465ded994461d228b6cc9204cf719f

……

同时,类似的攻击也出现在地下黑客论坛中,如https://sinister.ly/Thread-Leak-Pure-Crypter-Best-Fud-Crypter-On-The-Market-Cracked。

图9:地下论坛中的恶意源码项目

攻击者采用了相似的手法在工程项目中植入Pure Crypter Leak_nls恶意程序,不同的是此次攻击采用了一款.net编写的木马,因此我们推测两次攻击有可能源自不同的攻击者。

图10:项目结构

通过Pure Crypter Leak_nls程序进行关联同样可以发现大量被植入恶意程序的黑客工具项目源码。

表4:恶意源代码工程

源代码工程项目

Hash

Discord-Simple-Token-Grabber-V1-main.zip

454cc03e8e47733f5b0f7901e8e27285

Fortnite-Hack-Esp-Exploits-With-Menu-main.zip

d1f6ec9b99b04dea8c8f53c7f30cea01

Overwatch-External-Esp-Aimbot-Hack-Cheat-main.zip

df6ef6f5c605fc9e485916d206b078c4

Exodus-Exploit-Stealer-Login-Bypass-Hack-Any-Account-main.zip

48d532d829ed5332610344d9fa9e6814

Pure Crypter 1.zip

3c47b4ba36d357a737fcb90b94437e5a

Dll-Injector-Eac-Be-Work-All-Games-Fast-LoadLibrary-main.zip

91476cdebd6552450833bf2dd1445908

Discord-Image-Token-Password-Grabber-Exploit-Cve-2022-main.zip

292ae9d6529ffbe4f844b5d5770f949a

Dll-Injector-EAC-BAC-VANGUARD-main.zip

8707381d8208a73f96b6bc3ccf51f4ef

Call-Of-Duty-Warzone-Hwid-Spoofer-Cleaner-Hwid-main.zip

eaeb37b3abadf4a9156e9f93c764c125

HWID-SPOOFER-UNDETECTED-main.zip

7044c63a226b4d914fc0f3aabb834541

Hwid-Spoofer-Bios-Hwid-Volume-Permanted-Eac-Be-Anticheats-main.zip

0bbfa8ab23de7135ecae63fa53232a15

Hwid-Spoofer-Fornite-Cleaner-Spoofer-Permanted-main.zip

6f885443826510ef9efd9490eb85eb76

NEW-DLL-INJECTOR-V2-GAME-main.zip

909ebe6f0cba3e9bf21e8264113cfcb9

……

由此可见,PureCrypter的传播链中同时存在着多种“黑雀”攻击的现象,同时这些攻击又不局限于PureCrypter工具,一些其它的黑客工具也被污染并发布在Github或各类地下论坛中传播。因此,我们认为相关攻击是黑客产业链中一种相对广泛的“黑雀”攻击活动。借助这些高效的黑吃黑手段,上游攻击者可以迅速掌握大量普通黑客的攻击资源,但同时这也给相关的攻击活动带来了更多的复杂性和不确定性。对于中招用户来说,需要高度警惕在已发现的攻击中是否存在“黑雀”隐藏其中,并借助下游黑客的控制权限实施更加隐秘的攻击。

三、攻击样本分析

本次攻击活动涉及到多阶段多种模块攻击形式,在分析完所有攻击样本和攻击手法后,我们将此次攻击活动归类为四个阶段:诱饵投递、木马下载、PureCrypter以及PureLogs。整个流程能够体现出攻击者的精密策划和部署。在捕获的诸多样本中,我们选取了较典型的攻击样本作为此次的分析案例,接下来我们会从第二阶段模块开始进行详细的技术分析,攻击活动的整个流程可参考下图。

图11:攻击活动流程图

从上面的流程图能够看到,第一阶段的诱饵投递,攻击者先将带有HTML附件的钓鱼邮件投递给受害者。第二阶段的木马下载采用的是HTML smuggling隐匿攻击手法,当受害者打开邮件中的HTML文件时,浏览器会弹出下载(/保存)文件提示,点击保存后木马则会释放到目标系统中。一旦受害者点击运行木马(.NET Downloader),流程则会进入到第三阶段PureCrypter。此时,.NET Downloader模块会在后台静默远程下载并以不落地形式在内存执行Injector模块。Injector模块中除了恶意代码以外,还会通过AES、Reverse(倒置编码)以及Gzip等方式逐步解密加载其它4个资源模块。除此之外,其还会使用Protobuf.Deserialize来存储和操作恶意软件的相关配置信息,并根据配置信息来决定如何进行下一阶段的payload注入。在我们本次的攻击事例中,第三阶段的执行策略是采用进程镂空技术将第四阶段PureLogs注入到白名单“MSBuild.exe”程序中。第四阶段中的Loader主要功能是用来解密加载Logger Stealer,同样的,Logger Stealer也会使用AES、Reverse(倒置编码)以及Gzip等方式再次逐步解密加载嵌入式的其它4个资源模块。最后,Logger Stealer则向恶意服务器发送上线包,并等待接收远程指令,以便完成窃密行为。

鉴于恶意软件具有多阶段多模块的超复杂特性,我们将各模块功能做了简单的概括描述(如表5),详细的操作细节我们会在接下来的章节中进行深入的分析。

表5:恶意模块概述表

模块

类型

功能

第三阶段

.NET Downloader

EXE

联网下载Injector模块并执行解密加载操作(未混淆)

Injector

DLL

从自身资源数据中解密出Resources1模块,再从Resources1模块中解密出其它两个模块。调用“?.dll”模块格式化字符串数据,使用“protobuf-net.dll”模块操作和储存配置信息,最后解密第四阶段的“Loader”并将其进行注入操作。

Resources1

DLL

用以存储资源(无代码的资源模块)

?.dll

DLL

格式化从资源数据中解密出的字符串数据信息

protobut-net.dll

DLL

存储和操作恶意软件的相关配置信息(白文件)

第四阶段

Loader

EXE

解密加载Logger Stealer(未混淆)

Logger Stealer

DLL

从自身资源数据中解密出Resources2模块,再从Resources2模块中解密出后续需要使用的“costura.dll”、“dotnetzip.dll”、“protobuf-net.dll”等3个模块,进行相关数据的操作。最后连接C2,执行窃密等恶意行为。

Resources2

DLL

用以存储资源(无代码的资源模块)

dotnetzip.dll

DLL

用来操作ZIP文件的开源库(白文件)

costura.dll

DLL

Fody.Costura所使用的库文件(白文件)

protobuf-net.dll

DLL

存储和操作恶意软件的相关配置信息(白文件)

在分析过程中我们发现,第三阶段PureCrypter的Injector和PureLogs的Logger Strealer这两个模块采用了各种反分析的高强度混淆手法。

首先,恶意软件所有的类型、字段、属性、方法等名称都使用了名称混淆(Obfuscation)处理,致使分析人员在阅读代码时,难以理解它们的具体功能。资源数据和相关配置信息、字符串方面均以加密并压缩的方式嵌入到程序集中,仅当使用时再进行解压缩和解密。运行环境如沙箱检测结果、互斥体的创建、持久化和注入方式、执行自删除等诸如此类的相关信息数据则采用了protobuf(数据结构序列化/反序列化)进行操作,protobuf的灵活性不仅能够定制其专用的数据结构,还可在不用重新部署的情况下更新此数据结构,不仅如此,这种储存方式相当于在各数据成员的外部进行了一层包裹,再配合上名称混淆处理,促使分析人员无法直观的查看其所包含的数据信息,很难快速了解恶意软件的功能配置,以及各资源数据的实际内容和用途。同时也能在一定程度上躲避安全软件的静态查杀。

其次,恶意软件在控制流方面则采用了“spaghetti code”式混淆,修改了方法内的执行流程,添加了大量的有\\无条件分支、循环,函数调用等无用分支等,使控制流程复杂、混乱而难以理解,在静态分析时则难以判定恶意代码的结构和真实执行流程,而当动态调试时,这些大量的无意义垃圾指令、跳转指令又使得分析人员无法快速锁定关键点进行下断。此外,在大量的方法调用上,恶意软件还使用了动态代理手法,也就是使用代理类来动态地调用一些常规的方法,这也相当于将常规的方法做了封装和隐藏,如此一来,无论是静态还是动态分析时,分析人员都很难直观的识别恶意代码所调用的类及类方法。由此而极大的耗费分析人员大量的时间和精力。

除此之外,恶意软件还使用了Fody.Costura(Fody框架下的插件)将可执行EXE所需的DLL压缩并嵌入到程序集中,由此简化恶意软件的部署和缩小其文件体积。

此次攻击样本除最初的Downloader以外还包含了2个EXE文件和8个DLL文件,整体采用了套娃式的多模块多阶段模式,恶意软件将具有层级关系的Loader模块和DLL模块在内存中依照内部使用需求逐个解密加载并执行。这种多阶段的执行流程使恶意软件更加的复杂化,且所有的DLL模块均具有前后依赖关系,同时再配合上述各种混淆手段,以致安全人员很难独立调试去混淆后的各模块,以便有效快速的分析其主要功能。

3.1 木马下载

木马的最初下载是由恶意下载页面完成。查看html源码我们可以看到,其调用了eval和atob两个函数,eval可以将一个字符串当做JavaScript代码来执行,而atob则可将一个Base64编码的字符串解码成原始的字符串。

图12:html源码

在对atob函数中的字符串进行解码处理后,可看到一段JavaScript执行代码。其主要功能为解码出PE文件,并将该文件命名为“NO20237188.exe”进行保存。具体如下图所示。

图13:JavaScript恶意代码

展示于受害者的恶意页面效果如下图所示。

图14:恶意页面效果图

3.2 PureCrypter

“NO20237188.exe”是一个.NET可执行文件,经过我们详细的逆向分析后,最终通过解密出的字符串作为线索判定此次的恶意软件为PureCrypter家族。PureCrypter是一款使用C#编写的Loader,由Downloader和Injector两个可执行文件组成。其中,Downloader是一个简单的.NET下载器,主要负责下载和在内存中执行第二阶段的Injector。而Injector则为PureCrypter主要的有效载荷,其会解密各种资源模块并解析与恶意程序设置相关的内部配置文件,并在最后将用以分发恶意软件的PureLogs部分注入到白名单进程中(本例被注入进程为MSBuild.exe)。下面我们将对PureCrypter各模块的恶意行为进行详细的技术分析。

3.2.1 Downloader模块

该阶段的Downloader模块相对比较简单,其恶意代码未进行混淆处理,也未包含环境检测和持久化等一系列操作。该模块通过调用httpClient的GetAsync方法从控制服务器下载第二阶段Injector模块。虽然当前服务器下载链接已失效,但我们从自有的威胁情报平台数据库中成功获取到了下一阶段的Injector(.vbf文件)。当Injector被成功下载后,Downloader则使用简单的或运算对Injector模块进行解密。具体代码如下图所示。

图15:下载和解密Injector模块

随后,再通过Assembly.Load方法直接加载Injector程序集(.DLL),并指定调用模块的入口处进入下一阶段。

图16:加载Injector模块

3.2.2 Injector模块

解密后被执行的“Tagduvuddz.vdf”是由.NET编写的32位DLL文件,其则是PureCrypter的核心功能Injector模块。调用"Tagduvuddz.vdf"入口后,首先会进入到此处。

“GetDelegateForFunctionPointer"是用来将非委托函数指针转换为委托的方法,在分析中我们发现恶意代码中使用了大量的动态代理方法调用。

图17:Injector模块入口处

读取名为“yCePnpiAUBbRvu3iIg.ysLIBw2TAHTO5rmrIy”的资源数据进行解密,解密出代理函数的token值。

图18:解密代码函数token值

那么,当需要调用某方法时,则传入相应代理类型的token,然后遍历类型中的每个字段,通过字段获取代理方法的MemberRefToken,随后ReolveMethod。

图19:代理函数调用代码

代理的生成类大多数都在根命名空间下,统一格式如下图所示。采用动态代理调用,致使我们在静态分析时很难识别其真实的调用方法,唯有在动态调试时才能获取到其真实的方法。因此使用此手法,能够极大的增加了安全人员分析样本的精力和时间成本。

图20:代理的生成类

读取“TVCDsGUk3IqH5cDEVT.6bSM4rAxX72vreslXr”的资源数据到内存中,然后进行SHA1运算。

图21:SHA1运算

运算后的数据内容如下图所示。

图22:SHA1运算后的内容

随后,再使用AES对“TVCDsGUk3IqH5cDEVT.6bSM4rAxX72vreslXr”进行解密。

图23:AES解密

最后,解密出后续流程中所需的相关字符串信息。

图24:AES解密后的内容

获取名为"lUXNHw8KGOcuf5PAjq.oxQ3hTn8wDlB3oBEm8"的资源数据,解压缩出“31654f80-7170-4def-9adf-dc023d8aee27.dll”资源DLL。

图25:解压缩出资源DLL文件

查看“31654f80-7170-4def-9adf-dc023d8aee27.dll”发现其是一个没有代码仅包含资源的储存文件,总共有6个资源数据,具体如下图所示。

图26:DLL文件中的资源数据内容

从“31654f80-7170-4def-9adf-dc023d8aee27.dll”中获取名为“sZuFO”的资源数据。

图27:获取“sZuFO”资源数据

随后,再使用AES解密出”?.dll”。该模块的主要功能是将解密后的字符串数据(如图28所示)转换成名称为"yrpaExDORrzH"的hashtable格式。

图28:“?.dll”的主要功能代码

接着返回原主模块,从“31654f80-7170-4def-9adf-dc023d8aee27.dll”模块中查找"costura.protobuf-net.dll.compressed"资源数据,并进行解压缩处理。

图29:查找并解压缩“costura.protobuf-net”

内存加载“protobuf-net.dll”,使用反序列化格式保存恶意软件的配置信息,具体如下图所示。

图30:设置和保存恶意软件配置信息

根据配置信息,能够得出此次的注入进程为“MSBuild.exe”。那么在注入之前,Injector模块则开始尝试动态解析所需的API函数。前期解密并储存的名为"yrpaExDORrzH"字符串(如图28)的hashtable中则包含了将要使用的API函数名以及其所对应的DLL文件名。其中API函数名是以Base64编码方式储存,当中编码的字符串会随机插入“@”字符,在解码时,会先删除“@”字符,然后再使用Base64解码字符串。部分内容如下图所示。

图31:Base64编码的API字符串

我们对所有API函数名称进行解码操作和整理后,得到的具体内容如下表所示。

表6:API函数名称列表

序号

未解码字串

解码字串

1

"Q3JlY@XRlU@HJvY2Vzc0E="

CreateProcessA

2

"Um@VhZFByb2N@lc3NNZW1vcnk="

ReadProcessMemory

3

"WndVbm1h@cFZpZXd@PZlNlY3Rpb24="

ZwUnmapViewOfSection

4

"Q2xv@c2VI@YW5kbGU="

CloseHandle

5

"V293NjRT@ZXRUaHJlYWRDb250ZXh0"

Wow64SetThreadContext

6

"UmV@zdW1l@VGhyZWFk"

ResumeThread

7

"U2V0@VGhyZ@WFkQ29udGV4dA=="

SetThreadContext

8

"R2@V0VGhyZWFkQ@29udGV4dA=="

GetThreadContext

9

"V3JpdGVQcm9j@ZXNzT@WVtb3J5"

WriteProcessMemory

10

"VmlydHVh@bEFsbG9@jRXg="

VirtualAllocEx

解析和导入的具体操作如下图所示。

图32:解析和导入API函数

从“31654f80-7170-4def-9adf-dc023d8aee27.dll”模块中查找"Nvtwjmadmap.Properties.Resources.resources"的资源数据,并提取名为“Npxrc”的资源。

图33:提取名为“Npxrc”的资源数据

之后,再对 “Npxrc”资源进行数据Reverse和GZip解压处理,进而得到将要注入到“MSBuild.exe”的可执行文件,也就是下一阶段的Loader。

图34:解出下一阶段的Loader

本次注入方式采用的是进程镂空技术,恶意程序首先通过CreateProcessA函数创建一个挂起的“MSBuild.exe”进程,再使用ZwUnmapViewOfSection函数卸载进程内存映射,最后将下一阶段的Loader写入到进程内存并执行。

除此之外,我们通过解密出的一些字串能够看到该恶意软件额外的各种反虚拟机反沙箱等环境检测,以及反调试等一系列的对抗功能,具体内容如下表所示。

表7:恶意软件的对抗技术

相关字串

功能

"SbieDll.dll"

检查“"SbieDll.dll"”模块是否存在

"VMware|VIRTUAL|A M I|Xen",

"SerialNumber",

"version",

"select * from Win32_BIOS"

查询 WMI 对象 Win32_BIOS 中计算机的 SerialNumber 和 Version,并检查其是否与正则表达式“ VMware|VIRTUAL|AMI|Xen ”匹配

"Microsoft|VMWare|Virtual",

"manufacturer"

查询 WMI 对象 Win32_ComputerSystem 中计算机的制造商和型号,并检查它是否与正则表达式“ Microsoft|VMWare|Virtual ”匹配

调用 CheckRemoteDebuggerPresent

检查显示器的具体分辨率

3.3 PureLogs

3.3.1 Loader模块

注入的Loader模块是一个由.NET编写的64位PE文件,使用反编译器查看发现恶意代码未进行混淆处理。其主要功能为释放出最终的Stealer恶意软件,并加载执行。首先,Loader对指定数据进行先GZip解压再Reverse操作。具体如下图所示。

图35:释放并加载执行Stealer恶意软件

在内存中解出的可执行PE文件如下图所示。

图36:解密出的PE文件

之后,再加载执行最终的Logger Strealer模块,并指定调用类和类方法。

图37:加载执行Logger Strealer模块

3.3.2 Logger Strealer模块

Logger Strealer模块与Injector模块的混淆程度相似,同样是使用了各种混淆手法。其首先会使用Base64解码出后续所需要的特定字符串,其中包括C2、上线包标识字串以及互斥体对象名等信息。

图38:解码特定字符串

解码出的字符串内容如下图所示。也是由此处,我们根据其中的特殊字串关联出该Strealer是属于Pure Logger家族。

图39:解码出的字符串内容

之后,创建名为“c1897c4d3e7060ba”的互斥体对象。

图40:创建互斥体

创建socket并进行connect连接,向远程服务器发送上线包,上线包的数据使用了GZip和DES进行加密。

图41:联网并发送上线包

抓取的上线包的流量数据如下图所示。

图42:加密后的上线包内容

随后,则进入接收功能。具体代码如下图所示。

图43:等待接收远程控制指令

获取名为“4eUtR2Udd4nrZFCjx4.GhIn5DabADP77htptt”的资源数据,进行解密和解压处理,解出“ef3a8629-365f-4e5a-bdae-60022f71fcc6.dll”文件。

图44:解密出资源DLL文件

“ef3a8629-365f-4e5a-bdae-60022f71fcc6.dll”也是一个无代码的资源文件,其包含4个Fody/Costura嵌入式的压缩资源。具体如下图所示。

图45:DLL文件中的资源数据内容

我们从恶意代码中能够看到,其在满足某项条件后,会通过powershell命令进行自删除,指令为:“Start-Sleep -Seconds 10; Remove-Item -Path’‘’+ FILEPATH + ‘" -Force”。

图46:自删除指令内容

最后,当Logger Strealer模块与恶意服务器成功连接后,则会接收远程控制指令,以便执行相应的恶意行为。参考PureLogs官网介绍,我们能够看到该Logger Stealer具有浏览器凭证、密码、Cookies、信用卡等,以及多类加密钱包和各种常用应用所涉及的账密码隐私数据的窃取功能。

图47:Logger Stealer窃密工具

四、总 结

本文披露了近期针对我国某摄像头公司的一起网络攻击活动,并对相关的攻击武器PureCrypter和PureLogs及其采用的技术和对抗手法进行了全面和深入的分析,包括基于所有类型、字段、属性、方法等的名称混淆、基于“spaghetti code”的控制流混淆、自定义的动态代理调用(隐藏类及方法)、基于“Protobuf”的数据结构封装等多种对抗技术的交叉运用,此外还分析了攻击中采用的多模块多阶段的套娃模式,包括10个具有层级关系的Loader及DLL模块等。同时我们还对追踪过程中发现的“黑雀”攻击现象进行了披露和分析,这些高效的黑吃黑手段给黑客产业链带来了更多的复杂性,也让网络秩序变得越发不安全。

此外,尽管目前未发现本次攻击活动有更进一步的攻击意图,但直接针对物联网企业的攻击仍需引起更多的重视。近年来企业遭到网络入侵并进一步被供应链攻击的事件屡见不鲜,很多看似影响不大的网络攻击在早期未能得到企业足够的重视,结果却演变成了重大安全事件,例如Solarwinds供应链攻击事件,起初的攻击入口源于普通员工的密码失窃,多家企业均发现了相关设备上的异常活动却并未深入调查分析,直到数月后才被披露,影响深远并造成了巨大危害。而本次攻击中,由于在PureCrypter的传播链中发现了“黑雀”攻击的现象,这使得相关的攻击活动变得更加复杂。除了防范黑客在经济层面的攻击意图外,还需进一步关注其是否存在转卖控制权限、窃取软件源代码、篡改源代码构造漏洞、甚至是植入后门实施供应链攻击等隐藏更深的攻击目的,需要引起相关企业足够的警惕。网络安全无小事,不要忽视任何一次可能带来潜在危害的安全隐患,治病于未病,隐患于未然。

声明:本文来自ADLab,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。