众所周知的APT3 - APT防御产品

众所周知的APT3

Fireeye在其6月23日的博文“Operation Clandestine Wolf”中讨论了某个网络间谍小组,众所周知的APT3,在Adobe Flash中利用了某个0day漏洞。Unit42也使用UPS跟踪APT3小组,它是起源于中国的入侵工具集,拥有早前的0day漏洞并传递称为Pirpi的后门。

UPS小组已经利用了多个0day漏洞,使用的多数0day都来自于被攻陷的Hacking Team。我们在7月10日的博文“APT Group UPS Targets US Government with Hacking Team Flash Exploit”.中讨论过这些0day。然而,最近的原始0day CVE-2015-3113是由该小组发布的。它与之前UPS在2014年五月及九月时利用的0day漏洞CVE-2014-1776和CVE-2014-6332有相似点。在这里我们将讨论已经观察到的在多个被使用于exploit的组件中所具有的相似点,重点提及恶意Flash文件和被传递的payload。

恶意的 Flash 文件

通过UPS利用程序利用的最近的0day漏洞或在系统上通过Adobe Flash来利用其它应用程序。Unit 42最近分析了利用CVE-2015-3113的恶意Flash文件。在分析期间,我们已经意识到该恶意文件的相似点,那就是UPS之前经常会利用CVE-2014-1776,以及用于CVE-2014-6332的POC,虽然这两个Flash文件被使用来利用在位于Internet Explorer中的0day漏洞。

在ActionScript脚本中重复的地方

Unit42已经分析了在恶意Flash文件中的ActionScript脚本,该脚本由利用了CVE-2014-1776和CVE-2015-3113的UPS构建。并且已经发现它们之间都使用过的代码。首先,ActionScripts脚本中都含有命名为“hexToIntArray”的函数,为了比较,Figure 1展示了相关信息。这些文件不仅含有一样的函数名,而且使用了一样的操作码(opcode)来实现它的功能。在CVE-2015-3113样本中存在hexToIntArray函数,但有趣的是,在ActionScript脚本中从不被调用或被使用。我们认为作者在编写 CVE-2015-3113利用代码时使用了 CVE-2014-1776中的ActionScript脚本,但经忘记了删除没有被使用的hexToIntArray函数。

http://p9.qhimg.com/t0128f8a107d8d3007d.png

http://p5.qhimg.com/t01cba5d973cf08bf5e.png

Figure 1.  hexToIntArray函数中对比的操作码

同时,利用CVE-2015-3113 的Flash文件有个main类,名为“flappyMan”。该类名也被使用于Flash 文件,该文件在2014年9月26日的博文“Addressing CVE-2014-6332 SWF Exploit”分析并讨论过,同时用于CVE-2014-6332的利用现在在与利用程序相关的论坛中公布了。根据Fireeye的“Operation Double Tap“,UPS已经在2014年九月的攻击中利用了CVE-2014-6332;然而,UPS使用了VBScript而不是Flash文件来利用该漏洞。当仅仅在细心观察时,在类中这个重叠部分存在于CVE-2014-6332 PoC 和利用CVE-2015-3113的 Flash 文件中,可能表明UPS也使用了利用CVE-2014-6332的Flash文件。

Shellcode中的相似点

因为远程代码执行漏洞,UPS使用的恶意文档执行成功利用CVE-2014-1776或 CVE-2015-3113的shellcode。被发现的shellcode存在于UPS传递的利用不同漏洞的文档中,但是相似点没什么价值。

首先,传递的文档共享查找API函数的技术,在kernel32.dll中的函数名上,它包括循环右移指令的使用(特定的是ror7)并用特定值检查。同样循环右移的使用导致多个通用横量,如0xC917432,使用于查找LoadLibraryA的shellcode。其次,它们的shellcode使用了类似的方法创建Unicode字符串“kernel32.dll”,在Figure 2中已了解到。它们的shellcode使用Unicode字符串并使用一样的方法来寻找从LDR结构中加载了kernel32.dll模块的地址,其中的LDR结构可以从进程环境块中得到。其三,它们的shellcode使用相似的单一字节XOR算法,其被使用来解密然后执行特定功能的payload。

http://p1.qhimg.com/t018acd09551815d134.png

Figure 2. 比较UPS所使用的构建Kernel32.dllUnicode字符串的shellcode指令

Conceal Payload中的隐写术

当分析利用CVE-2015-3113,的恶意Flash文件时,Unit42已发现加载某个活跃的GIF图像的ActionScript、脚本。在GIF图片中,恶意文件作者使用了隐写术来嵌入一段被加密的payload。该payload存在于CVE-2014-1776,其也被嵌入在活跃的GIF图片内。正如在之前部分提到的,最后已经在成功利用这些漏洞之后执行的shellcode解密并执行被嵌入的payload。活跃的GIF本身具有不同点,正如Figure 3 和4 (已删除的payloads)中了解到的,隐写术的使用和活跃的图片就像payload的载体在两种活动中通用。

http://p7.qhimg.com/t01d2d4ffafd32407df.gif

Figure 3. 来自于UPS活动中利用CVE-2015-3113 (click to see .gif)的GIF“v.gif”

http://p6.qhimg.com/t01eb0b2b66dc21caa4.gif

Figure 4. 来自于UPS活动中利用CVE-2014-1776 (click to see .gif)的GIF “anyway.gif”

Payload 的比较

在这些不同活动中的其它组件之间,我们已经决定使用CVE-2014-1776 and CVE-2015-3113

比较通过UPS小组传递的paylaod 。从这里,我们将引用这些如Pirpi.2014 (CVE-2014-1776) 和Pirpi.2015 (CVE-2015-3113)的payload,其细节被列出在Table 1,Unit42已经发现了在两种Pirpi变量中的多个相似之处,同时也有一些重要的不同点,它们都值得我们讨论。我们也比较了其它已知样本中Pirpi.2014 和Pirpi.2015 payloads。

http://p1.qhimg.com/t01c4becc031a4fe5ae.png

表 1.  Pirpi.2014的文件细节 和 Pirpi.2015样本

在C2通信中的相似之处

Pirpi变量进行初始检查来了解配置文件是否存在于%APPDATA%\vcl.tmp 或 %TEMP%\vcl.tmp,这取决于操作系统。如果它找到一处,它将会进行解码并使用用于C2通信的配置数据,否则他使用被编码在二进制内部的硬编码C2域。接着恶意软件创建开始C2通信的线程。

Pirpi.2014 和Pirpi.2015用于与C2通信的 payload,通过HTTP GET请求在payload中或它的“vcl.tmp”配置文件中硬编码过的C2域。当C2 URL的结构在两种不同的变量中比较时,发现都使用HTTP Cookie域来将加密表单数据传输到C2域。Figure 6表明了从Pirpi.2014中进行的C2通信范例,Figure 7中表明了与C2进行通信的Pirpi.2015恶意软件变量,在Cookie域中都含有数据。

http://p2.qhimg.com/t0115f761c51d2bff1c.png

Figure 5. 使用用于泄漏的Cookie域进行Pirpi.2014 C2通信

http://p8.qhimg.com/t0109888ee500a45483.png

Figure 6. 使用用于泄漏的Cookie域进行Pirpi.2015 C2通信

GET请求将返回一个web页面,该页面有恶意软件解析,特别是寻找在HTML标签中被编码过的命令

命令循环的重叠

一旦两个Pirpi变种成功与它们的C2服务器通信并解析返回的用于命令的HTML,Pirpi输入一个循环命令,它处理命令并实现不同的活动。比较两种不同的命令,可以发现用于后门的命令循环在Pirpi.2014 和 Pirpi.2015间保持不变。Table 2表明了在值35和36之间Pirpi.2014和Pirpi.2015的命令的不同。

http://p6.qhimg.com/t015bd9d3f4e42a8ccf.png

Table 2. 在 Pirpi.2014  和 Pirpi.2015中使用的命令

反-反汇编

UPS威胁小组是其中一个使用和反-反汇编技巧的小组,在Pirpi.2014 和 Pirpi.2015之间可以了解到。用IDA Pro对其进行了反汇编指令。正如你可以在Figure 6中Pirpi.2014 的代码样本中可以看到的,存在“jump above”指令。如果0x58693C96 > 0x0D7F31B4会导致跳转的发生,那么将永不被执行完整代码路径。

http://p7.qhimg.com/t01fcef262b92443b32.png

Figure 7.代码表明了使用于Pirpitool中的反-反汇编技术

IDA Pro的反汇编序列中首先接着是条件跳转指令,并且会在上一条指令序列中,在另一条指令之后IDA保持将持续反汇编指令。当IDA返回到用于0x10009133目标的反汇编代码时,它将找到指向执行指令的代码。这会阻止IDA更进一步,在图片模式中查看该函数,或用Hex-Rays反编译。为了解决这个问题,不定义将不会被执行的所有代码,定义从条件分支(在该案例0x1000913E)的目标中开始执行的代码,如在Figure 7中所看到的。

http://p9.qhimg.com/t0117144d109cd50544.png

Figure 8.不定义错误指令的Pirpi工具使用了修复反-反汇编的技巧。

你现在将可以构造一个函数来提高你的分析能力。为了更简单的进行,使用某个IDA Pro脚本来对抗这些反-反汇编技巧。请记住该脚本特别针对在Pirpi和其他的UPS样本中使用的反-反汇编。这回导致恶意软件存在问题,它使用和其他反-反汇编技巧来实现。小心使用。

值得注意的不同点

在Pirpi.2014 和Pirpi.2015样本中主要的不同点是在每个后门中被执行的命令循环。在Pirpi.2014中,恶意软件使用简单的执行代码块的状态机,其中的代码块对应一个值,这使恶意软件在每个代码块的后端更新。这些代码块包含sleep函数,然而,如果某个情况的值被设为恰当的值,那么恶意软甲会执行一个含有命令循环的代码块。这个状态机的目的是延迟恶意软件的命令循环的执行。

在Pirpi.2015年中,恶意软件实现执行Pirpi.2014状态机的状态机作为它们的代码块之一。第二个状态机介绍大量随机的sleep函数,造成恶意软件执行它们的代码循环。在第二状态机中的主要代码块或者会睡眠,或者创建线程并等待线程的完成。恶意软件的作者已实现了这些状态机作为一种反调试技术并以此来挫败最为现代的沙盒解决方案。

两种Pirpi变种间的第二个不同点在于涉及到的编码算法,它在过去几年有了明显的提高。在二进制程序中含有的是一个用于编码并解码数据的颠倒的数学函数。在Pirpi.2014中,该函数没有更简单,涉及到一些数学操作。然而,在Pirpi.2015,在源码中被反编译的算法中超过300行是进行数学操作的。

其它的Pirpi 样本

在2014年,Fireeye发布了两篇关于APT3钓鱼活动中的报告,Operation Doubletap 和Operation Clandestine Fox。每个包括含有其他Pirpi样本的md5,在VirusTotal中可获取。此外,简单的VirusTotal搜索结果表明了更多的Pirpi样本的信息。. Table 3含有在这些Pirpi样本中使用的文件信息

http://p6.qhimg.com/t0157f27e3295e46035.png

Table 3. 来自FireEye报告样本中以及共享一样的代码的细节的样本

在Table 3中被列出的样本如s“{FireEye Report Sample}”是简化过的释放器和用于msupd.dll样本的加载器。Unit42已经比较了所有在如上列表中列出的DLL样本并发现它们与Pirpi.2014密切相关。如下的表4展示了在Zynamics BinDiff比较Pirpi.2014和 Pirpi.2015的每个DLL的结果的统计数值。

http://p5.qhimg.com/t01bb0300af6a41de2d.png

Table 4. Pirpi的多个样本中相同点和异同点的结果

总结

UPS 威胁小组在它们的活动中继续利用0day漏洞,这表明该小组相当复杂也进行重要资源的访问。在它们的攻击活动中涉及到了0day,UPS也重用了传递技术 和对多个组件中进行攻击的代码。UPS已经习惯于在对0day进行利用之后使用隐写术来隐藏被传递的payload,其中的payload是被嵌入的,在 活跃的GIF内指定Pirpi后门。该小组也重用了在用于利用漏洞的恶意Flash文件中的ActionScript脚本,同时也在利用成功后执行共享部 分的shellcode。

关于不同payload的相似点,UPS传递Pirpi后门变种,它们都很相似。我们已经分析的Pirpi后门使用了一样的配置文件,一个通用的C2通信隧 道和一个类似的命令处理器。同时Pirpi的作者在代码中包含了多个值得注意的指纹,特别是使用一个不同的状态机和反-反汇编技术。组织可以使用所有这些 重复的与跟踪的相似点以从该高级对手中保护他们。AutoFocus用户可以用Pirpi标签(Fingure 9)确认Pirpi payload。WildFire自动地对作为恶意文件的Pirpi样本归类,同时我们已经发布了IPS签名14643来检测PirpiC2通信。

转载于@360.cn


转载请注明出处 APT防御产品 » 众所周知的APT3

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址