导语:FireEye研究人员探讨了综合使用RIG EK与各类漏洞利用来攻击终端的技术,展现了NSIS Loader如何利用不为人知的PROPagate进程注入技术来规避安全产品。html
1、介绍shell
经过FireEye动态威胁情报(DTI),咱们观察到RIG漏洞利用工具包(EK)增添了一个新功能代码:使用PROPagate注入技术来注入、下载并执行Monero矿工(相似的活动已经被Trend Micro报告)。除了利用不为人知的注入技术以外,攻击链还有一些其余有趣的特点,咱们将在文中谈到。数组
2、攻击链安全
攻击链始于用户访问受感染网站时,其iframe中将加载RIG EK登陆页面。RIG EK使用各类技术来分发NSIS(Nullsoft脚本安装系统)Loader,该Loader利用PROPagate注入技术将shellcode注入explorer.exe。shellcode执行下一个有效载荷,下载并执行Monero矿工。攻击链的流程图如图1所示。服务器
图1:攻击链流程图网络
3、Exploit Kit 分析app
当用户访问使用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:恶意命令行
4、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矿工,并将其安装在系统中。
5、总结
虽然咱们观察到Exploit Kit活动一直在减小,但攻击者并未彻底放弃它们。在这篇博文中,咱们探讨了综合使用RIG EK与各类漏洞利用来攻击终端。此外,咱们还展现了NSIS Loader如何利用不为人知的PROPagate进程注入技术,规避安全产品。