Angler EK钓鱼攻击工具包在2013年才出现,短短2年时间,它就成为了野外利用最常用的EK之一。
Angler EK具有高度混淆性、侦察特性(其包含了尝试检测杀毒软件和虚拟机的代码)、反侦察性(其对网络传输的Payload进行了加密以期绕过IDS/IPS的检测,使用了”Fileless infections”等技术来尝试躲避杀毒软件的检测),同时其对最新漏洞的利用代码更新迅速甚至在其中会出现”0 day”的利用代码。因此,Angler EK被一些安全研究人员视为目前世界上最先进的EK。
目前,Angler EK包含了如下漏洞的利用代码:
最近与Exploit Kit有关的安全威胁通常包含了如下几个阶段:
1.诱饵(Lure) 通过邮件等途径引诱目标对象点击指向被控制网站的链接。 2.重定向(Redirection) 目标对象在不知情的情况下被重定向到另外一个包含了Exploiit Kit的网页 3.漏洞利用(Exploit) Exploit Kit获得目标对象的系统信息并选择合适的漏洞进行漏洞利用 4.派发PAYLOAD(Payload Drop) 漏洞利用成功后目标对象系统将被派发一个恶意病毒 5.Post Exploitation Activation 1)外部服务器通信(Call Home) 恶意病毒与外部的C&C服务器通信 2)窃取目标系统数据或控制(Compromise)
我们通过分析一个具体的Angler EK样本来了解该EK所使用的一些技术,分析的样本来自 malware-traffic-analysis.net 的分享。
被控制网站的页面代码如下:
网站被挂马的相关代码
我们再来看Angler EK的登陆页(landing page)的源代码:
Angler EK登陆页的部分脚本代码
Angler EK登陆页的部分脚本代码
可以看到Angler EK的登陆页的JS脚本代码被高度混淆。
现在,让我们看一下获取登陆页所执行的关键代码的两个方法。
在Angler EK的登陆页中添加如下代码:
添加代码后再在虚拟机里面测试Angler EK的登陆页,你可以看到如下信息:
反混淆效果
使用JavaScript Deobfuscator工具反混淆的结果如下:
方法2反混淆结果
如上所示,我们已经可以得到第一次反混淆后的代码,这里得到的代码虽然忽略了登陆页的一部分代码并且可读性依然不太好,但是在查看反混淆后的代码之后,我们可以确认下一步需要关注的重点代码:
可疑代码1
可疑代码2
在确定了需要重点关注的代码之后,我们还需要再做一次反混淆工作来看看这些代码到底干了什么,在这里,可以使用Revelo工具或IE的开发人员工具来做下一步的反混淆工作。
比如,我们借助Revelo来得到可疑代码1中的Q1thJ6hM.text的值。
Revelo反混淆结果
最终,我们可以确认可疑代码1相关的代码其实是CVE-2014-6322的漏洞利用代码片段,可疑代码2是CVE-2013-2551的漏洞利用代码片段。
刚巧笔者都调过CVE-2013-2551和CVE-2014-6322,下面是这两个漏洞的POC和Angler EK所使用的利用代码片段的比较:
CVE-2014-6332(POC和样本代码对比)
CVE-2013-2551(POC和样本代码对比)
除此之外,该Angelr EK的利用代码还利用了CVE-2013-7331,该漏洞是一个信息泄露漏洞,攻击者利用该漏洞可以检测受漏洞影响系统中是否存在特定文件和文件目录。POC代码和样本利用代码分别如下所示:
CVE-2013-7331的POC
CVE-2013-7331的样本代码
Angler EK除了使用CVE-2013-7331来尝试检测系统安装软件的信息之外,还使用如下方法来尝试检测,见代码:
检测代码
从代码来看,其检测控件,并通过加载图片来尝试检测文件是否存在,在我的环境中(WIN7/IE8未打补丁),尝试通过加载图片来检测文件是否存在的这个方法没有成功。
没有搜索到对这个技术的介绍,找到一个 技术博文 枚举了Angler EK检测系统信息的方法,一个与这里的检测相类似的代码可 参见[11] 。
在确定了所分析的Angler EK所使用的漏洞后,下面进入我们下一步的工作:获得漏洞利用成功之后所执行的PAYLOAD。
在前面,我们已经确认了该样本所使用的漏洞分别是CVE-2014-6332和CVE-2013-2551。样本先使用CVE-2014-6332尝试进行漏洞利用再尝试CVE-2013-2551。
调试过CVE-2014-6332的同学都可能了解该漏洞是一个“半神”之洞(整数溢出导致问题缓冲区可以“有限制”的越界读写),该漏洞特性再加上yuange1975的漏洞利用技巧(对variant/SafeArray的灵活运用,将特殊对象的数据作为攻击目标以期获得代码执行机会等等技巧),使得该漏洞最终踏上“成神”之路。
因为该漏洞的易用性,我以为该样本应该是通过这个漏洞来执行PAYLOAD的了,但是实际调试发现样本代码基于yuange的代码做了部分修改且最后利用并没有成功(粗略调试,利用代码中进行内存布局这一步骤的相关操作没有成功,这个内存布局的目的是要将问题缓冲区和另外一个被作为攻击目标的缓冲区相邻,而这个作为攻击目标的缓冲区保存的数据是一个tagSafeArray中的pvData所指向的数组数据)。
确认Angelr EK样本中的CVE-2014-6332漏洞利用代码无法成功利用之后,重新回到我们所要实现的目标:获得漏洞利用成功之后所执行的PAYLOAD。将关于CVE-2014-6322的疑问先放到一边,我们来看样本的CVE-2013-2551的利用代码。
如前所述,我们最开始看到的的CVE-2013-2551的利用代码如下所示:
样本CVE-2013-2551利用代码片段
此时我们需要借助Revelo和IE的F12的帮助给变量和函数重命名,这是比较枯燥的工作,幸运的是有人分享了Angler EK一个CVE-2013-2551的带注释的 干净代码 ,其分享的代码和这里样本所使用的利用代码相类似,这大大节省了这个重名名变量名和函数名的时间。
在重命名变量和函数名的这个过程当中,发现了样本利用代码搜索ntdll模块中的一些rop gadget地址的代码:
寻找ROP Gadget的代码片段
此时,我们通过windbg调试在stackpivot指令下断点就可以获取利用代码所使用的ROP和后续的SHELLCODE。
如下所示即利用代码获得EIP控制后执行stackpivot的相关信息:
EIP控制时的相关信息
利用代码执行完ntdll!ZwProtectVirtualMemory绕过DEP后,执行第一段shellcode(记作sc_one),sc_one如下所示:
第一阶段ShellCode(sc_one)
Sc_one实现一段解码操作,其进行解码的对象数据见下:
执行完sc_one后,我们得到解码后的第二段shellcode,记为sc_two.:
此时,控制流程转入执行SC_TWO的流程。SC_TWO获得kernel32地址并解析获得如下API的地址:
接着SC_TWO调用winhttp的一系列的API来下载一个加密的二进制文件,如下所示:
SC_TWO下载这个加密的二进制文件的相关代码如下:
SC_TWO下载文件完成后,其将进行解码操作,相应的代码如下:
所下载的二进制文件解码后如下所示,其包含了该漏洞即将执行的第三段shellcode(从第3个字节开始记为SC_3rd)和一个DLL文件:
SC_TWO对所下载文件解码结束后,判断解码数据的前两个字节是否为0×9090,若是控制流程进入SC_3rd. 这个判断的代码如下所示:
我没有详细地分析和调试SC_3rd。依据其它安全人员已做的研究和分析,SC_3rd使用”Reflective-Dll”技术来在内存加载一个Dll。Stephenfewer放出了一个演示Reflective-DLL Injection的 源码 ,因此这里不再过多分析,所加载的dll可以直接在前面所描述的恶意二进制文件解码后的数据中看到,通过动态调试可以观察到SC_3rd加载Dll后跳转到该DLL的DllMain,如下所示:
DLL的导出函数如下:
我们在获取了这个DLL之后,让我们来看看这个DLL在virustotal上的扫描结果:
根据微软的 描述 ,Bedep病毒将在443端口连接到外部的C&C服务器并进行下载其它病毒/PC信息收集/自我更新的操作。
我们分析了Angler EK的一个样本,分析了该样本的重定向、漏洞利用、PAYLOAD的派发和利用成功之后的行为(POST EXPLOITATION)这几个阶段,在分析过程中我们可以发现Angler EK在这几个阶段都非常注重绕过常规安全产品的检测。
在这里整理一下在分析过程中所了解到的Angler EK的一些特点:
1.漏洞利用 利用代码高度混淆,对抗IDS/IPS的检测并让安全研究人员需要花费更多的时间和精力来进行分析工作; 利用代码包含对AV/VM等产品的检测代码; 2.PAYLOAD的派发 将shellcode进行了编码; 使用了多阶段的shellcode; 通过网络传输的PAYLOAD会进行简单加密/编码; 使用fileless infection技术,不利于安全研究人员的审计并且降低AV产品的检测几率。
[1] http://community.websense.com/blogs/securitylabs/archive/2015/02/05/angler-exploit-kit-operating-at-the-cutting-edge.aspx
[2] http://contagiodump.blogspot.jp/2010/06/overview-of-exploit-packs-update.html
[3] https://www.fireeye.com/blog/threat-research/2015/02/angler_exploit_kitu.html
[4] http://malware.dontneedcoffee.com/2014/08/angler-ek-now-capable-of-fileless.html
[5] http://malware-traffic-analysis.net/2015/02/10/2015-02-09-Angler-EK-traffic.pcap
[6] https://addons.mozilla.org/zh-cn/firefox/addon/javascript-deobfuscator/
[7] http://www.kahusecurity.com/2012/revelo-javascript-deobfuscator/
[8] https://soroush.secproject.com/blog/2013/04/microsoft-xmldom-in-ie-can-divulge-information-of-local-drivenetwork-in-error-messages/
[9] https://www.fireeye.com/blog/threat-research/2014/02/operation-snowman-deputydog-actor-compromises-us-veterans-of-foreign-wars-website.html
[10] https://hiddencodes.wordpress.com/2014/10/21/software-enumeration-using-internet-explorer/
[11] http://pastebin.com/BFWxLu22
[12] https://hiddencodes.wordpress.com/2014/09/24/cve-2013-2551-exploit/
[13] https://hiddencodes.wordpress.com/2014/10/01/digging-deep-into-angler-fileless-exploit-delivery-2/
[14] https://github.com/stephenfewer/ReflectiveDLLInjection
[15] http://www.microsoft.com/security/portal/threat/encyclopedia/Entry.aspx?Name=Win32%2fBedep#tab=2
[16] http://www.websense.com/assets/white-papers/whitepaper-7-stages-of-advanced-threats-cyber-attack-kill-chain-en.pdf?cm_sp=TMCShowcase-_-PromoCol4-_-Websense+7stages