回归最本质的信息安全

;

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

2017年12月20日发布

93,306
0
4

导语:FireEye发现一波利用CVE-2017-11882漏洞发起针对中东政府组织的攻击。攻击可能是伊朗的黑客组织APT34发起的,利用PowerShell后门完成攻击。

背景

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是保护缓冲区溢出问题的安全技术。

漏洞分析

APT34向攻击的目标组织发送一封恶意的鱼叉式钓鱼邮件,钓鱼邮件附件中含有一个.rtf文件(MD5: a0e6933f4e0497269620f44a083b2ed4)。恶意rtf文件利用CVE-2017-11882破坏内存中的栈,然后将恶意数据送进栈内。恶意软件会用EQNEDT32.EXE的指令地址覆写函数地址。覆写的指令(图1)用于从kernel32.dll中调用WinExec函数,指令地址为00430c12。

Fig1.png

Figure 1覆写函数地址

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

Fig2.png

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

执行工作流

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

Fig3.png

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:ProgramDataWindowsMicrosoftjava目录下释放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文件。

Fig4.png

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设定后每分钟执行一次。

Fig5.png

Figure 5  POWRUNER PowerShell脚本hUpdateCheckers.ps1

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

图片.png

Table 1 POWRUNER命令

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

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

Fig6.png

Figure 6 Powershell截屏函数

dUpdateCheckers.ps1 (BONDUPDATER)

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

DGA 实现

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

Fig7.png

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计算文件名的最后一个字符,执行相应的动作。

图片.png

Table 2 BONDUPDATER动作

Fig8.png

Figure 8  Domain Generation Algorithm

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

143610035BAF04425847B007.mumbai-m.site

835710065BAF04425847B007.mumbai-m.site

376110095BAF04425847B007.mumbai-m.site

网络通信

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

Fig9.png

Figure 9 网络通信示例

在本例中,POWRUNER客户端发送随机的GET请求到C2服务器,然后C2服务器发送随机数字(99999999990)作为响应。因为响应以0结尾,POWRUNER会发送另1个随机的GET请求来获取其他的命令字符串。C2服务器会返回Base64编码的响应。如果服务器返回的响应是not_now,POWRUNER就中止请求并停止执行。

Fig10.png

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

Batch命令

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

Fig11.png

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的文件。

Fig12.png

Figure 12 dupdatechecker.doc脚本的内容

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

IOCs

1.png

11.png

111.png

本文翻译自:https://www.fireeye.com/blog/threat-research/2017/12/targeted-attack-in-middle-east-by-apt34.html,如若转载,请注明原文地址: http://www.4hou.com/vulnerable/9296.html

点赞 4
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

ang010ela

这个人很懒,什么也没留下

发私信

发表评论