导语:2021年1月27日欧洲刑警组织(Europol)宣布,在欧美多个国家的政府通力合作之下,他们切断了Emotet的基础设施运行,这是国际合作打击网络犯罪集团的成果。
2021年1月27日欧洲刑警组织(Europol)宣布,在欧美多个国家的政府通力合作之下,他们切断了Emotet的基础设施运行,这是国际合作打击网络犯罪集团的成果。本次行动中,不仅逮捕Emotet的系统管理员,也针对位于九十多个国家、负责下命令与指挥(Command and Control Infrastructure)的基础机构,进行大举破坏并接管。
Emotet最早是在2014年被发现,当时它是以金融木马程序的形态发动攻击,背后的黑客组织是TA542(也称Mummy Spider)。而这个恶意软件在多年发展之下,已经成为一个大型僵尸网络,并且变成黑客用来攻击计算机的常见渠道。攻击者一旦借其创建了未经授权的访问,便可以进一步窃取资料或是发动勒索软件攻击。在近期的攻击事件中,黑客经常运用Emotet来在受害计算机下载Qakbot(Qbot)与TrickBot,而后者更是受到勒索软件组织Ryuk与Conti大肆滥用。
最近攻击苗头的发现
unit42的研究人员已经确定并分析了自2020年12月以来一直活跃在野外的臭名昭著的银行木马Emotet的新更新。Emotet长期以来一直以其坚韧、持久和灵活的逃避技巧而闻名。
如上所述,虽然国际执法部门最近采取的行动破坏了Emotet攻击行为者及其基础设施。但是,此Emotet更新中采用的策略、技术和程序(TTP)提供了一个机会,可以揭示对所有行业的活跃,突出威胁的内部运作方式。
在本文中,我们将详细介绍此Emotet更新的端到端攻击链,包括其第一阶段的恶意文档诱饵,将其有效载荷反混淆为第二阶段的PowerShell加载程序以及第三阶段的二进制文件的下载。 R43H.dll。
我们还将详细介绍此Emotet更新使用的持久性机制,以及命令和控制(C2)通道及其危害指标(IOC)。最后,我们将演示安全解决方案针对Emotet的逃避技术所面临的困难。
Emotet攻击链分析
Emotet通常随网络钓鱼电子邮件一起发送,附带Word文档。以下是Emotet攻击链中的攻击步骤:
1.Word文档已传播并在启用宏的情况下打开。
2.运行VBScript宏以生成恶意的PowerShell脚本。
3.恶意的PowerShell脚本将初始DLL二进制文件下载为加载程序。
4.初始加载程序将删除后续的DLL二进制文件,该二进制文件将对其进行自我更新。
5.最终的DLL会窃取受害者的敏感数据或者通过与C2服务器进行通信来进行进一步的攻击。
第一阶段恶意软件——Word宏启动器
Sha256:2cb81a1a59df4a4fd222fbcb946db3d653185c2e79cf4d3365b430b1988d485f
分析的示例是Microsoft Office OLE2复合文件二进制Word文件,与许多鱼叉式网络钓鱼攻击一样,该攻击程序也对用户进行了社交工程设计,以使用户能够启用宏支持来开始提供恶意的Visual Basic for Applications(VBA)代码。
此恶意Word文档包含一个嵌入式宏,该宏启动了Emotet攻击链
当用户在启用了宏的Microsoft Word中打开诱饵文档并生成Document_Open()事件时,将执行嵌入式VBA宏代码。
混淆了嵌入式VBA宏代码以阻止分析工作
下一个调用是对名为Jotxu6biv0471oy0()的函数的调用,该函数的行为和第一级恶意软件的进一步执行如下所述:
1.从文档的StoryRanges.Item()方法中检索wdMainTextStory类型的单个StoryRange,并将其存储在变量mKbjhqs中。该变量的内容是混淆的有效载荷数据,这些数据将在攻击链的后面进行反混淆,VBA世界中的StoryRange用于查找或替换文档中的文本。
从恶意文档中提取并存储了经过混淆的有效载荷
2.通过一系列GoTo调用收集混淆的数据,这些调用将数据存储在多个变量中。然后将数据连接起来并分配给变量C_tmpi32le9。
从恶意文档中提取并存储了经过混淆的有效载荷
3.对C_tmpi32le9中存储的字符串进行反混淆处理,并替换为图4中显示的一系列函数调用。
混淆前后替换函数和数据
通过调用函数Lehj73snaqzhyepdw9()对存储在C_tmpi32le9中的文本有效内容进行去模糊处理。该函数用作函数Jumkzxvtzz2s()的封装器,该函数实现了一个简单的字符串替换例程。该函数还调用内置函数Replace(),该函数将字符串] b2 [s作为分隔符传递给它,以在有效载荷字符串中进行搜索和替换。产生的有效载荷是WMI命名器winmgmts:win32_process,它存储在变量H4qcty67722xqmrmn中。
4.通过调用CreateObject()函数并将winmgmts:win32_process字符串作为参数传递来生成一个新对象。产生的对象值存储在Fcqv6woostm0变量中,该变量是Win32_Process WMI类的一个对象,这个变量是一个能够生成新进程的对象的句柄。
调用CreateObject(“ winmgmts:win32_process”)构造函数
5.执行长度校正例程,并将结果数据存储在变量Ma9hdg7q365lpb中。使用Ma9hdg7q365lpb作为参数来调用函数Lehj73snaqzhyepdw9()。
去混淆的最终有效载荷
6. 调用方法Win32_Process.Create()是通过引用之前实例化的对象并将之前执行的Lehj73snaqzhyepdw9()函数的返回值作为第一个参数传递的。返回值包含经过模糊处理的最终有效载荷(操作系统和PowerShell命令)。
带参数的Create()函数调用
此Emotet攻击链的第一阶段以最初嵌入恶意文档中的去混淆的有效载荷的执行结束,有效载荷包含对cmd.exe的一系列调用,这些调用嵌套在对PowerShell的混淆调用周围,并以base64数据作为参数传递。
混淆的OS和PowerShell命令
第二阶段恶意软件:PowerShell下载器
攻击链的第二阶段始于嵌套的cmd.exe调用,第一阶段调用msg.exe。这会向受害者显示一个消息窗口,其中包含诱饵Word错误,即Word尝试打开文件时遇到错误。
接下来,将使用base64编码的数据作为参数调用PowerShell,而cmd.exe将字符串P^Ow^er^she^L^L作为参数。该参数是使用脱字符号(^)精心设计的,以避免被静态检测到。 -w选项将PowerShell.exe进程设置为在后台启动。 -ENCOD选项告诉PowerShell动态解码base64参数。
msg.exe和powershell.exe的执行
PowerShell–Base64分析
解码后的base64 PowerShell数据
该混淆代码的目的如下:
1.将ServicePoint Manager使用的安全协议设置为TLS 1.2。
2.设置随机生成文件的绝对路径。
3.生成总共七个统一资源标识符(URI)的数组。
混淆后的URI列表
4.实例化WebClient .NET类的新对象,该对象利用DownloadFile()方法从上一步中生成的数组中包含的每个项目(URI)中检索文件。下载的文件将保存到固定的绝对路径和文件名%USERPROFILE%\Ygyhlqt\Bx5jfmo\R43H.dll中。
值得一提的是,此步骤中使用的文件夹名称与在攻击链第一阶段中宏执行期间生成的文件夹名称匹配。
5.执行长度检查,使其等于37652字节。这个特定的检查可能是为了确保二进制内容成功传输。
6.通过执行rundll32.exe命令并提供Control_RunDLL作为入口点函数来执行下载的DLL文件。下图显示了整个命令的反混淆版本。
在PowerShell中执行rundll32.exe
如上所述,PowerShell脚本对不同的URI执行多个HTTP请求。服务器的响应表明已下载DLL文件,该文件的名称设置为NK05DJ2yiA.dll。
HTTP下载请求:第一个DLL(NK05DJ2yiA.dll)
第三阶段恶意软件:DLL分析
Sha256:bbb9c1b98ec307a5e84095cf491f7475964a698c90b48a9d43490a05b6ba0a79
KEY: “k1>@dY0V<o)afFNz7v68r^Kn6)h)OGcSc”
下图显示了具有父进程powershell.exe和rundll32.exe的连续运行的进程树:
PowerShell.exe和rundll32.exe进程执行
第一个进程被赋予R43H.dll的绝对路径作为参数,第二个进程被赋予具有随机路径和文件名的文件路径。但是,这两个进程都以称为Control_RunDLL的相同入口点函数开始。下面介绍此DLL的内部工作原理及其在感染链中的参与。
下载程序代码一旦收到第二阶段DLL文件,它将被保存在路径%USERPROFILE%\Ygyhlqt\Bx5jfmo\中,并将被重命名为R43H.dll。根据ExeInfoPE工具生成的检测结果显示,这是一个Microsoft Visual C++ ver. ~6.0~7.10可执行文件。
下载的DLL文件上的ExeInfoPE文件标识
在第三阶段恶意软件执行期间,将随机生成一个新的绝对路径。调用MoveFileExW()函数会将文件从其原始位置移动到这个新位置。绝对路径格式如下:
%SYSTEMROOT%\system32\
接下来,如图17所示,对CreateProcessW()函数的调用将设置lpCommandLine参数的值,该参数包括最近移动的DLL文件的绝对路径,以及上述入口点函数Control-RunDLL。
第二个DLL文件的执行
在第二阶段恶意软件部分中将描述第二次rundll32.exe执行所执行的操作。
找到并加载资源加密的数据
Emotet恶意软件执行几个操作,其中一个是使用Resource Win32 API函数,目的是从可执行资源部分加载二进制数据,对其进行解密并删除新制作的恶意软件。
首先,在偏移量0x10002119处,调用VirtualAlloc()函数。这将分配0x1B000(110592d)字节,MEM_COMMIT分配类型和内存保护选项作为PAGE_EXECUTE_READWRITE。
VirtualAlloc()和字节复制(调用100045c0)函数
在偏移量0x10002128处,函数调用100045C0将资源部分中的字节复制到上一步中新生成的内存分配中(参见图18)。下图(图19)显示了直接从Resource Hacker工具获取的资源的字节内容与直接从正在运行的进程中获取的内存内容之间的比较。Resource Hacker是一款免费查看,修改,添加,删除和重命名,提取Windows可执行文件和资源文件的资源替换工具,Resource Hacker反编译工具是相当于eXeScope的反编译工具,并且有很多方面比eXeScope反编译还强的软件。
Resource Hacker工具中显示的加密的二进制资源数据
在执行后续指令期间,将调用0x10001D9A函数。此函数有一个位于偏移量0x10001E4D的循环,并执行一些操作。其中一个操作是位于偏移量0x10001E4D处的1字节XOR指令 (xor byte ptr [esi+ecx], al) 。其目的是解密存储PE二进制数据的可执行文件的资源数据,总共110591字节,最终结果是在内存中重建的可执行文件。在图19中,可以看到进程内存中的加密和解密数据。
PE中的加密数据和内存中的数据解密
在偏移量0x10002167处,对EAX寄存器指向的地址进行间接函数指针调用,该地址是内存中(已删除)可执行文件的Control_RunDLL函数的入口点。图20以图形方式显示了此内容以供参考。
间接调用:将控制权转移到内存中的数据
一旦执行了调用EAX指令,执行控制就会转移到新的可执行文件中。
持久性机制
Emotet恶意软件通过调用CreateServiceW()函数安装新服务,该函数由操作系统自动启动恶意软件的副本。图21显示了已安装的新服务。
安装新的Windows服务
服务名称是随机生成的,下面的列表包含在多个测试运行中使用的不同名称:
1.提供磁盘碎片整理功能。
2.Windows Media Center服务,用于电视和FM广播接收。
3.在启动应用程序时处理对它们的应用程序兼容性缓存请求。
4.在Windows Media Center中开始和停止录制电视节目。
使用空闲网络带宽在后台传输文件,如果禁用了该服务,则任何依赖BITS的应用程序(例如Windows Update或MSN Explorer)将无法自动下载程序和其他信息。
第四阶段恶意软件:DLL分析
(Sha256:bd1e56637bd0fe213c2c58d6bd4e6e3693416ec2f90ea29f0c68a0b91815d91a)
在这个阶段,最终的有效载荷正在准备环境,以将信息提交给C2服务器。为此,它执行函数调用以检索所需的数据以最终执行HTTP请求。
以下步骤会假定基址为0x2E1000,并描述了Emotet恶意软件所遵循的详细信息和序列,直到交付有效载荷为止。
收集并准备数据以进行渗透的函数调用
第五阶段恶意软件-C2流量
从函数调用列表中可以看出,HttpSendRequestW()API函数用于将数据发送到服务器。此函数允许发送方超过HTTP客户端正常发送的数据量。
在发送到C2服务器之前,内存中的HTTP数据
图24显示了Wireshark发送并捕获后的数据。
Wireshark捕获了发送到C2服务器的数据
Emotet逃避检测的技术
使用多个下载链接下载第一阶段的加载程序。只要一个下载链接没有被安全产品阻止或捕获,加载程序下载就会成功。
使用多个C2服务器IP地址与C2服务器通信。只要一个IP地址没有被阻断,通信就会成功。
C2通信使用标准HTTP,并使用自定义算法加密敏感信息。从安全缓解的角度来看,很难将这种C2的恶意与良性流量区分开。
本文翻译自:https://unit42.paloaltonetworks.com/attack-chain-overview-emotet-in-december-2020-and-january-2021/如若转载,请注明原文地址: