NetWire是一种远程访问木马(RAT,Remote Access Trojan),已经被广泛使用了多年。
最近,FortiGuard实验室发现了一种通过网络钓鱼电子邮件传播的恶意软件。分析表明,它正是NetWire RAT的新变种。
正通过钓鱼邮件传播的NetWire RAT新变种图1展示的就是网络钓鱼电子邮件中的一个示例,它的底部包含一张带有超链接的图片。一旦点击,就会导致一个恶意文件被下载到计算机上。
图1.包含图片的网络钓鱼电子邮件示例
如你所见,恶意文件的下载链接为“hxxps[:]//www[.]mediafire[.]com/file/d86hz5qj21lmhrb/PROFORMA-INVOICE_0990.7z/file”。
下载的文件是一个.7z压缩文件,NetWire RAT的新变种就包含在其中。
解压缩后,你会得到一个名为“PROFORMA-INVOICE 0990.exe”的可执行文件。
图2.解压缩.7z文件
NetWire RAT新变种的反分析技术FortiGuard实验室表示,这个新的NetWire RAT变种是采用MS Visual Basic编译的,且使用了多种反分析技术。
1.动态地将恶意代码提取到内存中并执行,这使得静态分析变得非常困难;
2.在安装完成后,并不会运行,直到受害者移动鼠标(通过对比鼠标光标的位置来实现),此技术被指用于反沙箱。
如图3所示,这个NetWire RAT新变种会通过两次调用API USER32.GetCursorPos()来获取鼠标光标的位置,然后对他们进行比较。
如果两次位置是相同的,则表明受害者没有移动鼠标,它则会停止运行,并在休眠一定时间后再次检查,直到位置不同为止。
图3.检查受害者是否移动了鼠标
3.调用API ntdll.ZwGetContextThread来获取当前线程上下文结构,以获取受感染计算机的CPU调试寄存器状态,此技术被指用于反调试。
首先,如果调试器设置了硬件断点,那么CPU寄存器中的Dr0、Dr1、Dr2、Dr3、Dr6和Dr7就不再为“0”。
其次,寄存器EAX是一个API地址,这个NetWire RAT新变种会在运行时检查地址是否是0CC、3CD和0B0F,因为这是软件断点(Int 3)的操作码。
一旦触发上述条件之一,这个NetWire RAT新变种就会跳转到一个随机地址,以终止运行。然后,一个崩溃小窗口将弹出,如图4所示:
图4.触发反调试
4. 与大多数恶意软件一样,这个NetWire RAT新变种会生成自身的挂起子进程,然后修改其内存和线程上下文数据,如OEP值。
当一切准备就绪后,父进程将恢复子进程并退出。如此一来,这个NetWire RAT新变种的真实代码就将覆盖子进程中的现有代码,然后在子进程中执行,这会使得对它的分析变得异常困难。
NetWire RAT新变种子进程分析首先,这个NetWire RAT新变种会通过调用API WSAStartup()来初始化几个全局变量和Windows套接字。紧接着,它会解密一些加密的字符串。
接下来,它会查看当前的可执行文件是否位于正确的文件夹(%AppData%\Install)中以及是否具有正确的文件名(Host.exe)。如果不是,它则会将文件重新放置到“%AppData%\Install”并将其重命名为“Host.exe”。
然后,它将运行重新放置的文件并退出当前进程,并再次执行上述所有过程。
图5.重新放置的文件
为了实现持久性,这个NetWire RAT新变种会创建一个注册表项(HKCU\SOFTWARE\NetWire),以实现随受感染系统的重启而自动运行。
图6.恶意软件将自身添加到系统注册表的“自运行”组中
同时被创建的还有一个日志文件夹,被用于存储从受感染系统收集的信息,位于“%AppData%\Logs”。
此外,还会通过调用这个NetWire RAT新变种_beginthreadex()函数来执行一个线程,以实现按键记录功能(记录受害者的所有键盘动作、时间,以及受害者正在键入的内容)。
图7.键盘记录日志文件
与命令和控制(C2)服务器通信这个NetWire RAT新变种的C2服务器为“gbam0001.duckdns[.]org:3366”,目前处于关闭状态。
分析显示,一旦建立起了通信,C2服务器就会发来一个编号为“9B”的命令,而这个NetWire RAT新变种则会用一个名为“Task_Fun()”的函数来进行处理(将收集的信息上传到C2服务器)。
图8. 将收集的信息上传到C2服务器
通过对数据包的分析,FortiGuard实验室发现这个NetWire RAT新变种从受感染系统中搜集了以下信息:
通过调用API GetUserNameA()或从系统环境变量收集的当前登录用户名;通过调用API GetComputerNameA()获取受害者的计算机名称;通过调用API GetVersionExA()获取 Windows版本信息;受害者正在使用的软件的名称;受感染计算机的当前时间。NetWire RAT新变种还能干什么?如上所述,函数Task_Fun()被用于处理来自C2服务器的命令,并为一个命令调用一个子过程。
分析显示,它共有80多个子程序。这也就意味着,除了“9B”命令外,它还可以处理来自C2服务器的80多个命令:
命令编号:097h-获取一个时间值,以了解受害者自上次输入以来处于非活动状态的时间;命令编号:09Ch、09Ch、0A3h、0AFh、0B6h、0C3h-执行下载的可执行文件或现有的本地文件,如“cmd.exe”;命令编号:09Fh、0A0h、0A1h、0A2h、0AEh、0E5h、0E7h-退出NetWire RAT进程;关闭C2服务器的套接字;从系统注册表中的Home键读取值;重置或删除指定的注册表项;删除NetWire RAT可执行文件并重新放置其可执行文件;命令编号:09Fh、0A0h、0A1h、0A2h、0AEh、0AFh、0B0h〜0B5h、0B7h、0DFh、0E8h-收集受感染系统的分区和硬盘驱动器信息;获取指定文件夹中的文件信息;通过指定的文件类型获取文件信息;创建指定的目录和文件,将内容写入指定的文件;删除、重新放置指定文件以及其他与文件相关的操作;命令编号:0D4h、0D5h、0D6h、0D7h、0D8h、0D9h-窃取并收集通过不同软件存储在受感染系统中的凭证,如360Chrom、Opera、Mozilla Firefox、Mozilla SeaMonkey、Google Chrome、Comodo Dragon浏览器、YandexBrowser、Brave-Browser、Mozilla Thunderbird、Microsoft Outlook和Pidgin。此外,它还能从历史记录文件夹中读取受害者的浏览器历史记录。命令编号:0CCh、0CEh、0CFh、0D0h-操作其文件夹中的日志文件(“%AppData%\Log”),包括枚举日志文件、获取指定的日志文件属性、读取和删除指定的日志文件。命令编号:0BEh、0C0h、0C1h、0C2h、0E3h-获取在受感染计算机上创建的窗口句柄;通过指定的Windows句柄向窗口发送Windows消息;获取受感染计算机上所有正在运行的进程的信息;使用给定的进程ID终止正在运行的进程;获取TCP或UDP端点信息(TCP或UDP、本地和远程IP地址、端口、状态)以及连接该端点的进程信息(进程名称、进程ID)的列表。命令编号:0Bah、0BCh-收集受感染计算机的基本信息,包括当前用户名、登录会话信息、计算机名、CPU信息、Windows版本、内存状态、网络状态和Windows安装路径。此外,它还能收集PowerShell的安装路径、NetWire RAT可执行文件的完整路径及其Log文件夹的完整路径等。命令编号:0C5h、0C6h、0C7h、0C8h-控制受害者的输入设备,包括键盘和鼠标;通过发送keybd_event和mouse_event,它还可以模拟键盘和鼠标操作。在完成上述操作后,这个NetWire RAT新变种会将收集到的所有数据上传到C2服务器。