热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

RIGEK的PROPagate注入技术分析

介绍通过FireEye动态威胁情报(DTI)检测,我们观察到RIG Exploit Kit(EK)提供了一个dropper,以利用PROPagate注入技术注入用来下载并执行Monero挖矿软件的代码

介绍

通过FireEye动态威胁情报(DTI)检测,我们观察到RIG Exploit Kit(EK)提供了一个dropper,以利用PROPagate注入技术注入用来下载并执行Monero挖矿软件的代码(趋势科技也曾报告过类似的活动)。除了利用了一些知名度相对较小的注入技术之外,该攻击链中还有一些其他有趣的东西,让我们在这篇博文中一一道来。

 

攻击链

当用户访问一个在iframe中加载RIG EK登录页面的被入侵网站时,攻击链就会启动,RIG EK使用各种技术来传递NSIS(Nullsoft Scriptable Install System)加载器,该加载器会利用PROPagate注入技术来将shellcode注入到explorer.exe中,而这个shellcode则负责执行下一个payload,以下载并执行Monero挖矿软件。攻击链的流程图如图1所示。

图1. 攻击链流程图

 

Exploit Kit 分析

当用户访问一个被使用iframe注入入侵的受感染网站时,iframe就会加载登陆页面。注入到受感染网站的iframe如图2所示。

img图2:被注入的iframe

登录页面包含三个不同的Javascripts片段,每个片段使用不同的技术来传递payload。这些也都不是一些新技术,因此我们在本文中会对每一种做一个简要介绍。

 

Javascript 1

第一个JS有一个函数——fa——用来返回一个使用execScript函数执行的Vbscript,如图3中的代码所示。

img图3:Javascript 1代码片段

这个Vbscript利用了CVE-2016-0189漏洞,这个CVE漏洞可让它下载payload并使用图4中所示的代码来执行它。img

图4:Vbscript代码片段

 

Javascript 2

第二个Javascript包含了一个用来检索其他Javascript代码的函数,其使用图5中所示的代码片段将此脚本代码添加到HTML页面中。

img图5:Javascript 2代码片段

这一段新添加的Javascript代码利用了CVE-2015-2419漏洞,而此漏洞又利用了一个JSON.stringify中的漏洞。该脚本会通过在图6所示的变量中存储漏洞的EXP部分来混淆其对JSON.stringify的调用。

img图6:利用变量来进行混淆

依靠这些变量,这个Javascript会调用带有错误格式的参数的JSON.stringify以触发CVE-2015-2419漏洞,这反过来则可以导致本机代码执行,如图7所示。

img图7:调用JSON.Stringify

 

Javascript 3

第三个Javascript中包含了添加一个额外JS脚本所需的代码,类似于第二个Javascript。这个额外的Javascript会添加了一个利用CVE-2018-4878漏洞的flash对象,如图8所示。

img图8:Javascript 3代码片段

一旦漏洞利用成功,shellcode就会调用命令行来创建一个文件名为u32.tmp的Javascript文件,如图9所示。

img图9:WScript命令行

这个Javascript文件由WScript启动,它可以下载下一阶段的payload并使用图10中的命令行执行它。

img图10:WScript中的恶意命令行

 

payload分析

在此攻击过程中,攻击者使用了多个payload和反分析技术来绕过分析环境。图11显示了该恶意软件的完整活动流程图。

img图11:恶意软件活动流程图

 

NSIS加载器(SmokeLoader)分析

RIG EK丢弃的第一阶段的payload是一个已编译的NSIS可执行文件,俗称SmokeLoader。除了NSIS文件之外,payload还有两个组成部分:一个DLL和一个数据文件(在这一次的分析案例中名为’kumar.dll’和’abaram.dat’),此DLL具有一个由NSIS可执行文件调用的导出函数,而此导出函数可以读取和解密数据文件的代码,从而生成第二阶段payload(一个可移植的可执行文件)。

然后该DLL在SUSPENDED_MODE中生成自己(dropper)并使用process hollowing技术来注入解密后的PE。

 

注入代码(第二阶段payload)分析

第二阶段的payload是一个高度混淆的可执行文件,它由一个可以解密代码、执行它并对它进行重新加密的例行程序组成。

在可执行文件的入口处,包含了一段通过从进程环境块(PEB)中提取信息来检查操作系统主要版本号的代码,如果操作系统版本值小于6(在Windows Vista之前),则可执行文件将会自行终止。它还包含一段从PEB的偏移量0x2中提取信息来检查可执行文件是否处于调试模式的代码,如果设置了BeingDebugged标志,则可执行文件也将自行终止。

恶意软件还会通过打开值为0的注册表项HKLM SYSTEM ControlSet001 Services Disk Enum来进行Anti-VM检查。它会检查注册表值数据是否包含以下字符串:vmware、virtual、qemu或xen,而这些字符串都意味着目标是一台虚拟机。

在进行了反分析和环境检查后,恶意软件才开始执行核心代码。

恶意软件使用来PROPagate注入技术来在目标进程中注入并执行代码。PROPagate方法类似于SetWindowLong注入技术。在此方法中,恶意软件使用SetPropA函数修改UxSubclassInfo的回调,并使远程进程执行它的恶意代码。

这种代码注入技术仅适用于具有相对自身较低或相等的完整性级别的进程,恶意软件首先会检查当前正在运行的进程的完整性是否为中等完整性级别(2000,SECURITY_MANDATORY_MEDIUM_RID)。下图显示了代码片段。

img图12:检查当前进程的完整性级别的代码片段

如果进程高于中等完整性级别,则恶意软件会继续进行,而如果该进程低于了中等完整性级别,则恶意软件将以中等完整性重新生成。

恶意软件创建文件映射对象并将dropper文件路径写入其中,然后通过注入的代码访问相同的映射对象,以读取dropper文件路径并删除dropper文件。映射对象的名称源自系统驱动器的卷序列号和带有硬编码值的XOR操作(如图13)。

文件映射对象名称=“卷序列号”+“卷序列号”XOR 0x7E766791

img图13:创建文件映射对象名称

然后,恶意软件利用XOR来解密第三阶段的payload,并使用RTLDecompressBuffer对其进行解压缩。第三阶段payload也是一个PE可执行文件,但作者已修改文件头以避免在内存扫描中将其检测为PE文件。如图14,在解密数据开始时修改了几个头字段后,我们得到了正确的可执行头。

img图14:没有头(左)和有头(右)的注入可执行文件

解密payload后,恶意软件将shell进程explorer.exe作为恶意代码的注入目标。它使用GetShellWindow和GetWindowThreadProcessId API来获取shell窗口的线程ID(图15)。

img图15:获取shell窗口线程ID

恶意软件会在远程进程(explorer.exe)中注入并映射解密的PE,同时它还会注入一个在SetPropA中配置为回调函数的shellcode。

将payload注入到目标进程之后,它会使用EnumChild和EnumProps函数来枚举shell窗口属性列表中的所有条目,并将其与UxSubclassInfo进行比较,找到shell窗口的UxSubclassInfo属性后,它会保存句柄信息并通过SetPropA用其设置回调函数。

SetPropA有三个参数,第三个是数据。回调程序地址存储在距数据开头的偏移量0x14处。恶意软件使用注入的shellcode地址来修改回调地址(图16)。

img图16:修改回调函数

然后,恶意软件将特定消息发送到窗口以执行与UxSubclassInfo属性相对应的回调程序,这一步则可以导致shellcode的执行。

shellcode包含使用CreateThread执行注入的第三阶段payload的入口点地址的代码,然后它会重置SetPropA的回调,该回调在PROPagate注入期间会被恶意软件修改。图17显示了注入的shellcode的代码片段。

img图17:注入的shellcode的组装视图

 

第三阶段payload分析

在执行恶意代码之前,恶意软件会执行反分析检查,以确保系统中没有运行任何分析工具。它创建了两个永久运行的线程,其中就包含来用于实现反分析检查的代码。

第一个线程使用CreateToolhelp32Snapshot来枚举进程,并检查在分析中通常会使用的进程名称。它使用自定义操作从进程名称生成DWORD哈希值,并将其与硬编码的DWORD值数组进行比较,如果生成的值与数组中的任一值相匹配,则将相应的进程终止。

第二个线程使用EnumWindows来枚举窗口。它使用GetClassNameA函数来提取与相应窗口关联的类名。与第一个线程一样,它使用自定义操作从类名生成DWORD哈希值,并将其与硬编码的DWORD值数组进行比较,如果生成的值与数组中的任何值匹配,则终止与相应窗口相关的进程。

除了以上这两种反分析技术之外,它还具有通过尝试访问URL来检查互联网连接的代码:www.msftncsi[.]com/ncsi.txt。

为了在系统中保持持久性,恶意软件在%startup%文件夹中创建计划任务和快捷方式。计划任务名为“Opera Scheduled Autoupdate {GetTickCount()的十进制}”。

然后恶意软件会与恶意URL进行通信以下载最终的payload,即Monero挖矿软件。它使用Microsoft CryptoAPIs从计算机名称和卷信息创建MD5哈希值,并在POST请求中将哈希值发送到服务器。图18显示了这一网络通信过程。

img图18:网络通信过程

最后,恶意软件从服务器下载最终payload:Monero挖矿软件,并将其安装到系统中。

 

结论

虽然我们一直在观察到Exploit Kit活动呈减少趋势,但攻击者并没有完全放弃它们。在本文中,我们探讨了RIG EK如何与各种漏洞EXP来进行端点破坏,还展示了NSIS Loader如何利用鲜为人知的PROPagate流程注入技术,其目的很有可能是为了逃避安全产品。

FireEye MVX和FireEye Endpoint Security(HX)平台在攻击链的几个阶段都检测到了此攻击。

审核人:yiwang   编辑:边边


推荐阅读
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 微软评估和规划(MAP)的工具包介绍及应用实验手册
    本文介绍了微软评估和规划(MAP)的工具包,该工具包是一个无代理工具,旨在简化和精简通过网络范围内的自动发现和评估IT基础设施在多个方案规划进程。工具包支持库存和使用用于SQL Server和Windows Server迁移评估,以及评估服务器的信息最广泛使用微软的技术。此外,工具包还提供了服务器虚拟化方案,以帮助识别未被充分利用的资源和硬件需要成功巩固服务器使用微软的Hyper - V技术规格。 ... [详细]
  • 1Lock与ReadWriteLock1.1LockpublicinterfaceLock{voidlock();voidlockInterruptibl ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • asp中如何嵌入python的简单介绍
    本文目录一览:1、如何在IIS中执行Python脚本 ... [详细]
  • 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之六 || API项目整体搭建 6.1 仓储模式
    代码已上传Github+Gitee,文末有地址  书接上文:前几回文章中,我们花了三天的时间简单了解了下接口文档Swagger框架,已经完全解放了我们的以前的Word说明文档,并且可以在线进行调 ... [详细]
author-avatar
广东佳山七郎
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有