首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

APT34攻击再升级,利用CVE-2017-11882漏洞攻击中东国家

背景

APT34是长期从事网络攻击的伊朗黑客组织,该组织从2014年开始活动,活动的主要目的是为了国家利益。APT34组织的攻击目标广泛,包括金融业、政府、能源行业、化学行业和电信业,主要攻击目标在中东。

APT34使用的工具有公开的和非公开的,经常使用鱼叉式钓鱼攻击和社会工程系技巧。今年7月,FireEye发现了一起使用基于PowerShell的后门——POWRUNER 和BONDUPDATER对中东的组织进行攻击活动。BONDUPDATER是含有DGA功能的下载器。该后门利用的是CVE-2017-0199漏洞通过恶意rtf文件进行传播。

这次攻击中,APT34利用了最近的office漏洞CVE-2017-11882来应用POWRUNER和BONDUPDATER。

CVE-2017-11882: Microsoft Office栈内存破坏漏洞

CVE-2017-11882影响许多的Office版本,利用该漏洞没有在内存中合理处理对象,远程用户可以在当前用户环境下执行任意代码。微软11月14日就修复了该漏洞,漏洞的报告者1周后公布了POC代码。

该漏洞存在与老版的公式编辑器(EQNEDT32.EXE)中,公式编辑器是office的组件之一,用于插入数学公式和对公式求值。公式编辑器是用OLE(Object Linking and Embedding,对象连接与嵌入)技术嵌入在office文档中。

公式编辑器创建后是一个单独的进程,而不是office应用的子进程。 如果有伪造的公式传递给公式编辑器,在拷贝数据时,也是不会合理地检查数据长度,这会导致栈内存破坏。而且EQNEDT32.exe用的旧版的编译器进行编译,也不支持ASLR(address space layout randomization地址空间随机化),这样攻击者就可以很容易地改变程序执行流。ASLR是保护缓冲区溢出问题的安全技术。

漏洞分析

Figure 1覆写函数地址

利用该漏洞之后,在当前登录用户环境下,调用WinExec函数创建了一个子进程mshta.exe。进程mshta.exe会从http://mumbai-m.site/b.txt下载恶意脚本,并执行,如图2。

Figure 2 拷贝到破坏的栈缓存的攻击者数据

执行工作流

恶意脚本通过这些步骤成功地执行,最终建立与C2服务器的连接。从利用漏洞开始的所有事件如图3。

Figure 3 CVE-2017-11882和POWRUNER攻击序列

1. 恶意.rtf文件利用 CVE-2017-11882;

2. 恶意软件利用EQNEDT32.EXE的现存指令覆写函数地址;

3. 恶意软件创建子进程mshta.exe,mshta.exe从http://mumbai-m.site/b.txt下载恶意脚本;

4. b.txt含有PowerShell命令,可从http://dns-update.club/v.txt下载一个dropper。PowerShell命令会将v.txt重命名为v.vbs,并执行该脚本。

5. v.vbs脚本会在C:\ProgramData\Windows\Microsoft\java目录下释放4个组件,hUpdateCheckers.base,dUpdateCheckers.base,cUpdateCheckers.bat和GoogleUpdateschecker.vbs。

6. v.vbs用CertUtil.exe来解码hUpdateCheckers.base、dUpdateCheckers.base 2个base64编码的文件,释放hUpdateCheckers.ps1 和dUpdateCheckers.ps1到staging目录。CertUtil.exe是合法的Microsoft命令行程序,是Certificate Services的一部分。

7. 运行cUpdateCheckers.bat来建立一个GoogleUpdateschecker.vbs的计划任务。

8. GoogleUpdateschecker.vbs在休眠5秒后执行。

9. 然后从staging目录下删除cUpdateCheckers.bat 和*.base文件。

Figure 4 Execution Workflow Section of v.vbs的执行工作流部分

在成功执行了Execution Workflow部分的步骤后,Task Scheduler会每分钟运行一次GoogleUpdateschecker.vbs,轮流执行dUpdateCheckers.ps1 和 hUpdateCheckers.ps1脚本。这些PowerShell脚本是最后一阶段的payload,含有DGA功能的下载器和后门组件,可以连接C2服务器接受命令,并执行其他恶意活动。

hUpdateCheckers.ps1 (POWRUNER)

POWRUNER是一个后门,是可以从C2服务器发送和接收命令的PowerShell 脚本。POWRUNER可以通过Task Scheduler设定后每分钟执行一次。

Figure 5 POWRUNER PowerShell脚本hUpdateCheckers.ps1

POWRUNER首先发送随机的GET请求到C2服务器,然后等待响应。服务器会响应一个not_now或11位随机数。如果响应是随机数,POWRUNER会发送另一个随机的GET请求到服务器,并保存响应消息。然后,POWRUNER检查保存的随机数响应的最后一位,并把值翻译为对应的命令,并执行相应的动作。数字、命令和动作的对应表见表1。

Table 1 POWRUNER命令

成功地执行命令后,POWRUNER发送结果到C2服务器并停止执行。

C2服务器可以发送PowerShell命令来获取受害者系统的截屏并保存。如果fileupload命令执行了,POWRUNER会发送截屏文件到C2服务器。图6是发给C2服务器的PowerShell “Get-Screenshot”函数。

Figure 6 Powershell截屏函数

dUpdateCheckers.ps1 (BONDUPDATER)

APT34的高级之处就是使用DGA来生成子域名。BONDUPDATER脚本是基于硬编码的B007命名的,用传统的DGA算法来生成与C2服务器通信的子域名。

DGA 实现

图7是用BONDUPDATER的DGA生成示例域名的分解过程。

Figure 7 BONDUPDATER创建的子域名的分解

1. 用下面的表达式创建的随机数生成器:$rnd = -join (Get-Random -InputObject (10..99) -Count (%{ Get-Random -InputObject (1..6)}))

2. This value is either 0 or 1. It is initially set to 0. If the first resolved domain IP address starts with 24.125.X.X, then it is set to 1.

3. 值是0或者1,初始值设定为0。如果域名第一次解析的IP地址为24.125.X.X,就设为1。

4. 初始值设为000,然后每次DNS请求后增加3。

5. 系统UUID的前12个字符。

6. “B007”硬编码字符串。

7. 硬编码的域名mumbai-m.site。

BONDUPDATER 会尝试解析生成的DGA域名,基于IP地址解析执行下面的动作:

1. 在%temp% 文件夹下创建文件,创建的文件名为解析的IP地址的最后2个8位字节。

2. BONDUPDATER计算文件名的最后一个字符,执行相应的动作。

Table 2 BONDUPDATER动作

Figure 8 Domain Generation Algorithm

执行后生成的子域名的例子:

143610035BAF04425847B007.mumbai-m.site

835710065BAF04425847B007.mumbai-m.site

376110095BAF04425847B007.mumbai-m.site

网络通信

图9是POWRUNER后门客户端和服务器之间的网络通信示例。

Figure 9 网络通信示例

Figure 10 "not now"服务器响应示例

Batch命令

POWRUNER 可能从C2服务器接收batch命令来从系统手机host信息。这包括当前登录的用户信息、主机名、网络配置数据、激活的连接、进程信息、本地和域名管理帐号、用户目录枚举和其他数据。图11是batch命令示例。

Figure 11 POWRUNER C2发送的batch命令

POWRUNER / BONDUPDATER的其他使用

2017年7月,APT34就开始使用POWRUNER和BONDUPDATER来攻击中东的组织了。FireEye发现利用CVE-2017-0199漏洞的恶意rtf文件(MD5: 63D66D99E46FB93676A4F475A65566D8)。该文件用GET请求来从http://94.23.172.164/dupdatechecker.doc下载恶意文件。

图12所示,dupatechecker.doc文件中的脚本尝试从同一服务器下载名为dupatechecker.exe的文件。

Figure 12 dupdatechecker.doc脚本的内容

dupatechecker.exe 文件 (MD5: C9F16F0BE8C77F0170B9B6CE876ED7FB) 释放了BONDUPDATER和POWRUNER。这些文件连接到 proxychecker.pro与C2通信。

IOCs

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20171220A0NI3U00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com