解析NanoCore犯罪软件攻击链

华盟原创文章投稿奖励计划

华盟君引言“Cybaze-Yoroi ZLab  使用Delphi包装器分析了一个新的Nanocore Remote Administrator Tools(RAT)样本,  以保护其代码。”

介绍

从历史上看,网络犯罪分子采用了一层或多层加密和混淆来降低其占用空间并避免被发现。密码器和打包器的使用已成为当代恶意软件领域的商品,为恶意代码提供所谓的“FUD”(完全不可检测)功能,并允许隐藏有效负载的外包。

CSDC监控操作发现了着名的Nanocore  远程管理员工具(RAT)的特定样本  在这种特定情况下,使用Delphi包装器来保护RAT。因此,Cybaze-Yoroi ZLab决定分析这种威胁。

技术分析

Nanocore RAT是一种“通用”恶意软件,每个人都可以使用特定的客户工厂,并且可以轻松访问。在我们的网络防御活动中,我们发现针对在奢侈品行业经营的意大利公司的攻击企图。例如,我们拦截了声称来自知名意大利银行的恶意电子邮件,然后我们开始对其进行分析。

图1:初始电子邮件的一部分

附件看起来像一个7z存档文件,其中包含带有Adobe Acrobat图标的有效PE文件。琐碎的伎俩用来吸引天真的用户相信它是一个合法的PDF文件。但是,它包含一个PE可执行文件:

哈希 8274313b5b1e941a67b54e9f311094f2f56a3afe97820ad03560d9885a60b71b
威胁 Nanocore RAT包装
简要描述;简介 用于Nanocore RAT的Delphi语言包装器
Ssdeep 24576:FZ8elMYdWD7yWQ5 / It6OxPtNHApfqGwcblA8:FyYEvt6OxPTHAgJcblA8
图标

表1:关于Nanocore滴管/ NanoCore RAT的静态信息

然后我们在样本上提取了一些静态信息:

图2:有关“trasferimento.exe”dropper / NanoCore RAT的信息

样本是用“ BobSoft Mini Delphi ”编译器编译的,两个特征是重要的:第一个是高水平的熵,这使我们认为样本是以某种方式包装的; 第二个是可执行文件的绝对伪造的编译时间戳。

执行恶意软件时,我们注意到恶意软件执行了一些检查以逃避分析框。

图3:恶意软件检查的进程

在上图中,显示了恶意软件检查的一些过程。此操作是通过使用经典的Win32 API调用“ CreateToolhelp32Snapshot ”和“ Process32Next ”来执行的。

图4:用于检查打开工具的API调用

如果没有任何一个已检查的进程处于活动状态,则恶意软件可以继续进行真正的感染:它将Nanocore RAT的实际有效负载写入“%TEMP%”文件夹中。

图5:由加载程序和相关API调用编写的NanoCore有效负载

有趣的是,有效载荷进一步加载到内存中,只是嵌入在资源中而没有任何加密或混淆。

图6:嵌入在“trasferimento.exe”示例资源中的有效负载与%TEMP%文件夹中写入的“non.exe”之间的比较

如上图所示,  “trasferimento.exe ”Delphi包装器有很多嵌入式资源(左侧可见),其中一个包含整个Nanocore RAT有效负载。在右侧,有一个名为“2035”的资源的差异分析以及受害机器上触发的实际有效负载。资源“2035”有一种标题(在左上角以黄色突出显示),其中包含要在机器“non.exe”上植入的有效负载的名称  后续代码是相同的,没有任何保护。“ trasferimento.exe ”组件运行计划任务以保证其持久性。

图7:恶意软件设置的任务调度程序

此时,恶意软件会创建一个带有伪随机名称的xml文件,该名称包含其在计算机上持久性的配置。创建此文件后,恶意软件会生成“ non.exe ”进程,然后通过以下命令行重新生成自身。

schtasks.exe“/ create / f / tn”IMAP Subsystem“/ xml”C:\ Users \ admin \ AppData \ Local \ Temp \ tmpC5A7.tmp“schtasks.exe”/ create / f / tn“IMAP Subsystem”/ xml “C:\用户\ ADMIN \应用程序数据\本地的\ Temp \ tmpCB59.tmp”

xml配置文件的主体如下:

<?xml version =“1.0”encoding =“UTF-16”?> <Task version =“1.2”xmlns =“http://schemas.microsoft.com/windows/2004/02/mit/task”> <RegistrationInfo /> <Triggers /> <Principals> <Principal id =“Author”> <LogonType> InteractiveToken </ LogonType> <RunLevel> HighestAvailable </ RunLevel> </ Principal> </ Principals> <Settings> <MultipleInstancesPolicy> Parallel </ MultipleInstancesPolicy> <DisallowStartIfOnBatteries> false </ DisallowStartIfOnBatteries> <StopIfGoingOnBatteries> false </ StopIfGoingOnBatteries> <AllowHardTerminate> true </ AllowHardTerminate> <StartWhenAvailable> false </ StartWhenAvailable> <RunOnlyIfNetworkAvailable> false </ RunOnlyIfNetworkAvailable> <IdleSettings><StopOnIdleEnd> false </ StopOnIdleEnd> <RestartOnIdle> false </ RestartOnIdle> </ IdleSettings> <AllowStartOnDemand> true </ AllowStartOnDemand> <Enabled> true </ Enabled> <Hidden> false </ Hidden> <RunOnlyIfIdle> false </ RunOnlyIfIdle> <WakeToRun> false </ WakeToRun> <ExecutionTimeLimit> PT0S </ ExecutionTimeLimit> <Priority> 4 </ Priority> </ Settings> <Actions Context =“Author”> <Exec> <Command>“C:\ Users \ admin \ Desktop \ trasferimento.exe“</ Command> <Arguments> $(Arg0)</ Arguments> </ Exec> </ Actions> </ Task>AllowStartOnDemand> true </ AllowStartOnDemand> <Enabled> true </ Enabled> <Hidden> false </ Hidden> <RunOnlyIfIdle> false </ RunOnlyIfIdle> <WakeToRun> false </ WakeToRun> <ExecutionTimeLimit> PT0S </ ExecutionTimeLimit> <Priority> 4 </ Priority> </ Settings> <Actions Context =“Author”> <Exec> <Command>“C:\ Users \ admin \ Desktop \ trasferimento.exe”</ Command> <Arguments> $(Arg0)</参数> </ Exec> </ Actions> </ Task>AllowStartOnDemand> true </ AllowStartOnDemand> <Enabled> true </ Enabled> <Hidden> false </ Hidden> <RunOnlyIfIdle> false </ RunOnlyIfIdle> <WakeToRun> false </ WakeToRun> <ExecutionTimeLimit> PT0S </ ExecutionTimeLimit> <Priority> 4 </ Priority> </ Settings> <Actions Context =“Author”> <Exec> <Command>“C:\ Users \ admin \ Desktop \ trasferimento.exe”</ Command> <Arguments> $(Arg0)</参数> </ Exec> </ Actions> </ Task>4 </ Priority> </ Settings> <Actions Context =“Author”> <Exec> <Command>“C:\ Users \ admin \ Desktop \ trasferimento.exe”</ Command> <Arguments> $(Arg0)</参数> </ Exec> </ Actions> </ Task>4 </ Priority> </ Settings> <Actions Context =“Author”> <Exec> <Command>“C:\ Users \ admin \ Desktop \ trasferimento.exe”</ Command> <Arguments> $(Arg0)</参数> </ Exec> </ Actions> </ Task>

两个计划任务之间的区别在于,一个引用  “trasferimento.exe ”进程,另一个引用  “non.exe ”进程。它似乎是一种生存机制,其中两个过程都起作用并使感染保持活力。

图8:有关设置任务计划程序的详细信息

这两个过程联系两个不同的C2。在分析过程中,其中一个(185.244.31。[50]下降,另一个(79.134.225 [.41]继续工作)。

图9:与两个不同C2的通信

NanoCore客户端

哈希 52d73eee176a2ff30af7e386809b94ef1c4918f131f8de1e2b66915ab8cc3790
威胁 Nanocore RAT
简要描述;简介 NanoCore RAT客户端
Ssdeep 6144:MLV6Bta6dtJmakIM5u8GL + 1WUQ52F + / 8Ej4eg:MLV6BtpmkqGLUcQsEEj4h

表2:关于“non.exe”NanoCore RAT的信息

此时,让我们开始分析“non.exe”文件,即Nanocore RAT客户端,即使这个文件是用.NET语言编译的。

图10:有关“non.exe”NanoCore RAT和相关编译语言的其他信息

解压缩的代码非常模糊,并使用一些自定义例程进行加密。

图11:NanoCore客户端的版本

经过几个调试步骤后,显示了有效载荷的真实性质,我们还提取了当前版本:1.2.2.0,如红色正方形中所示。继续进行调试,我们发现了一个用于解密RAT静态字符串和恶意软件配置的循环例程:

图12:提取配置文件的解密例程

与其他犯罪软件一样,此漏洞利用的加密配置仅在恶意软件执行期间解密。有趣的是,提取的配置不包括持久性,但是由外部包装器处理的计划任务保证了持久性。

图13:RAT客户端的配置信息

从上图中可以看出,该客户端具有一些有趣的启用功能,例如绕过UAC控制的功能,或者阻止系统进入休眠状态。此外,主C2和备用C2是相同的,并且通过其他“ trasferimento.exe ”RAT模式进程保证备份C2的解决方案

结论

如今,许多网络犯罪分子并不努力从头开始编写恶意软件,因为已经有大量公共工具适合这种需求。攻击者的角度来看,使用这些工具的问题是它们迟早会被反病毒引擎识别。

因此,攻击者采用其他技术,如打包器和混淆器,很多时候也可公开获取,或者写下自定义加载器来隐藏他们的间谍工具,让他们长时间跑进受害者机器,默默地观察他们的目标并等待合适的时间采取行动他们的犯罪计划。

发布的分析中提供了技术细节,包括IoC和Yara规则  Yoroi博客。

https://blog.yoroi.company/research/dissecting-nanocore-crimeware-attack-chain/

华盟知识星球入口


本文原创,作者:张,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/237613.html

发表评论