Exploit Kit——hacker入侵web,某iframe中将加载RIG EK登录页面,最终下载并执行Monero矿工
RIG Exploit Kit使用PROPagate注入技术传播Monero Miner
导语:FireEye研究人员探讨了综合使用RIG EK与各种漏洞利用来攻击终端的技术,展示了NSIS Loader如何利用鲜为人知的PROPagate进程注入技术来规避安全产品。
一、介绍
通过FireEye动态威胁情报(DTI),我们观察到RIG漏洞利用工具包(EK)增添了一个新功能代码:使用PROPagate注入技术来注入、下载并执行Monero矿工(类似的活动已经被Trend Micro报告)。除了利用鲜为人知的注入技术之外,攻击链还有一些其他有趣的特色,我们将在文中谈到。
二、攻击链
攻击链始于用户访问受感染网站时,其iframe中将加载RIG EK登录页面。RIG EK使用各种技术来分发NSIS(Nullsoft脚本安装系统)Loader,该Loader利用PROPagate注入技术将shellcode注入explorer.exe。shellcode执行下一个有效载荷,下载并执行Monero矿工。攻击链的流程图如图1所示。
图1:攻击链流程图
三、Exploit Kit 分析
当用户访问使用iframe注入的受感染站点时,iframe会加载登陆页。图2显示了注入受感染网站的iframe。
图2:注入的iframe
登陆页面包含三个不同的JavaScript代码片段,每个片段使用不同的技术来分发有效载荷。这些都不是新技术,所以我们只会简要介绍一下。
1. JavaScript 1
第一个JavaScript有一个函数fa,它返回一个将使用execScript函数执行的VBScript,如图3中的代码所示。
图3:JavaScript 1代码片段
VBScript利用CVE-2016-0189,下载有效载荷并使用图4中所示的代码片段执行。
图4:VBScript代码片段
2. JavaScript 2
第二个JavaScript包含一个函数,该函数将获取其他JavaScript代码,并使用图5中所示的代码片段将此脚本代码附加到HTML页面。
图5:JavaScript 2代码片段
新附加的JavaScript利用CVE-2015-2419,JSON.stringify中的漏洞。该脚本通过在图6所示的变量中存储漏洞利用部分,混淆对JSON.stringify的调用。
图6:使用变量进行混淆
使用这些变量,JavaScript会调用带有错误格式参数的JSON.stringify,触发CVE-2015-2419,从而导致本机代码执行,如图7所示。
图7:调用JSON.Stringify
3. JavaScript 3
第三个JavaScript包含添加其它JavaScript的代码,类似于第二个JavaScript。这个额外的JavaScript添加了一个利用CVE-2018-4878的Flash对象,如图8所示。
图8:JavaScript 3代码片段
一旦利用成功,shellcode会调用命令行来创建一个文件名为u32.tmp的JavaScript,如图9所示。
图9:WScript命令行
这个JavaScript文件是使用WScript启动的,它下载下一阶段有效载荷并使用图10中的命令行执行它。
图10:恶意命令行
四、Payload分析
在本次攻击行动中,攻击者使用了多种有效载荷和反分析技术来绕过分析环境。图11显示了完整的恶意软件活动流程图。
图11:恶意软件活动流程图
1.NSIS Loader (SmokeLoader)分析
RIG EK下载的第一个有效载荷是一个名为SmokeLoader的已编译的NSIS可执行文件。除了NSIS文件之外,有效载荷还有两个组件:DLL和数据文件(在我们的分析案例中名为'kumar.dll'和'abaram.dat')。该DLL有一个由NSIS可执行文件调用的导出函数。该导出函数具有读取和解密数据文件的代码,数据文件生成第二阶段有效载荷(可移植的可执行文件)。
之后,DLL在SUSPENDED_MODE中下自我复制(dropper),并使用进程挖空注入解密的PE。
2.注入代码分析(第二阶段Payload)
第二阶段的有效载荷是一个高度混淆的可执行文件。它由解密、执行、重新加密的例程组成。
在入口点,可执行文件包含检查操作系统主要版本代码,主版本从Process Environment Block(PEB)中提取。如果操作系统版本值小于6(在Windows Vista之前),则可执行文件自行终止。它还包含检查可执行文件是否处于调试模式的代码,调试模式从PEB的偏移0x2中提取。如果设置了BeingDebugged标志,则可执行文件会自行终止。
恶意软件还通过打开注册表项HKLM\SYSTEM\ControlSet001\Services\Disk\Enumwith(值为0)来实施Anti-VM检查。
它检查注册表值数据是否包含这些字符串:vmware,virtual,qemu或xen。这些字符串中的每一个都代表虚拟机。
运行反分析和环境检查后,恶意软件执行核心代码开始恶意活动。
恶意软件使用PROPagate注入技术在目标进程中注入和执行代码。PROPagate注入技术类似于SetWindowLong。在该技术中,恶意软件使用SetPropA函数修改UxSubclassInfo的回调并导致远程进程执行恶意代码。
此代码注入技术仅适用于完整性级别较低或相同的进程。恶意软件首先检查当前正在运行的进程的完整性是否为中等完整性级别(2000,SECURITY_MANDATORY_MEDIUM_RID)。图12显示了代码片段。
图12:检查当前进程的完整性级别
如果进程高于中等完整性级别,则恶意软件会继续进行。如果该进程低于中等完整性级别,则恶意软件将以中等完整性重新生成自身。
恶意软件创建文件映射对象并将dropper文件路径写入其中,并通过注入的代码访问相同的映射对象,来读取dropper文件路径并删除dropper文件。映射对象的名称源自系统驱动器的卷序列号和带有硬编码值的XOR操作(图13)。
File Mapping Object Name = “Volume Serial Number” + “Volume Serial Number” XOR 0x7E766791
图13:创建文件映射对象名称
然后,恶意软件使用异或解密第三阶段有效载荷,并使用RTLDecompressBuffer对其进行解压缩。第三阶段有效载荷也是一个PE可执行文件,但作者修改了该文件的头部以避免在内存扫描中将其检测为PE文件。数据解密后,修改几个头字段后,可以得到正确的可执行头(图14)。
图14:没有头部(左)和有头部(右)的可执行文件
解密有效载荷后,恶意软件将攻击注入的shell进程explorer.exe。它使用GetShellWindow和GetWindowThreadProcessId API来获取shell窗口的线程ID(图15)。
图15:获取shell窗口线程ID
恶意软件将解密的PE注入并映射到远程进程(explorer.exe)中。它还会注入shellcode,用于在SetPropA中配置回调函数。
在将有效载荷注入到目标进程之后,使用EnumChild和EnumProps函数来枚举shell窗口的属性列表中的所有条目,并将其与UxSubclassInfo比较。
找到shell窗口的UxSubclassInfo属性后,保存句柄信息并通过SetPropA使用它设置回调函数。
SetPropA有三个参数,其中第三个是数据。回调过程地址存储在从数据开始的偏移量0x14处。恶意软件将回调地址修改为注入的shellcode地址(图16)。
图16:修改回调函数
然后,恶意软件将特定消息发送到窗口以执行与UxSubclassInfo属性相对应的回调过程,这样shellcode就会执行。
shellcode包含使用CreateThread执行注入的第三阶段有效载荷入口点地址的代码。然后它重置SetPropA的回调,该回调在PROPagate注入期间被恶意软件修改。图17显示了注入shellcode的代码片段。
图17:注入shellcode的汇编视图
3.第三阶段Payload分析
在执行之前,恶意代码会进行反分析检查以确保系统中没有运行分析工具。它创建两个无限运行的线程,其中包含用于实施反分析检查的代码。
第一个线程使用CreateToolhelp32Snapshot枚举进程并检查通常用于分析的进程名称。它使用自定义操作从进程名称生成DWORD哈希值,并将其与硬编码的DWORD值数组进行比较。如果生成的值与数组中的任一值匹配,则会终止相应的进程。
第二个线程使用EnumWindows枚举窗口。它使用GetClassNameA函数来提取与相应窗口关联的类名称。像第一个线程一样,它使用自定义操作从类名生成DWORD哈希值,并将其与硬编码的DWORD数组进行比较。如果生成的值与数组中的任何值匹配,则会终止与相应窗口相关的过程。
除了这两种反分析技术之外,它还通过访问URL:www.msftncsi[.]com/ncsi.txt检查网络连接。
为了在系统中保持持久性,恶意软件会在%startup%文件夹中安装计划任务和快捷方式文件。计划任务命名为“Opera Scheduled Autoupdate {GetTickCount()的十进制值}”。
然后与恶意URL进行通信以下载最终的有效载荷,这是一个Monero矿工。它使用来自计算机名称和卷信息的Microsoft CryptoAPI创建MD5哈希值,并在POST请求中将哈希值发送到服务器。图18显示了网络通信。
图18:网络通信
最后恶意软件从服务器下载最终的有效载荷——Monero矿工,并将其安装在系统中。
五、总结
虽然我们观察到Exploit Kit活动一直在减少,但攻击者并未完全放弃它们。在这篇博文中,我们探讨了综合使用RIG EK与各种漏洞利用来攻击终端。此外,我们还展示了NSIS Loader如何利用鲜为人知的PROPagate进程注入技术,规避安全产品。