![5f587ebe29bdfffe40f886c757552a1a.png](https://i-blog.csdnimg.cn/blog_migrate/866675513d14298b78155cd3ffd54d2e.jpeg)
最近,卡巴斯基实验室发现了一场黑客攻击行动,并将其命名为“Operation WizardOpium”。
在这场攻击行动中,攻击者利用了谷歌浏览器中的一个尚未公开的漏洞——CVE-2019-13720,并试图嫁祸给朝鲜黑客组织“Lazaru(拉撒路)”。
技术细节
在一个韩语新闻门户网站上,攻击者在主页中插入了恶意的JavaScript代码,以从远程网站上加载配置脚本。
如你所想,这就是传说中的“水坑攻击(Watering hole)”。
![10c678541846657d21c2b8689762eea3.png](https://i-blog.csdnimg.cn/blog_migrate/762c5df6c2bdf3e14011ef6f0271e816.jpeg)
图1. 重定向到漏洞利用登录页面
主页面上托管着一个小型JavaScript标签,可以从hxxp://code.jquery.cdn.behindcorona[.]com/加载远程脚本。
随后,该脚本便会加载另一个名为“.charlie.XXXXXXXX.js”的脚本,用于对比浏览器的用户代理信息(检查浏览器是否运行在64位的Windows系统上,并且不以WOW64进程运行),以检查目标系统是否能够被感染。
此外,该脚本还会尝试提取浏览器的名称及版本——攻击者想要利用的是谷歌浏览器中的一个bug,需要通过该脚本来判断浏览器版本号是否大于或等于65。
![020b77ed156afa29dda41fe422015b30.png](https://i-blog.csdnimg.cn/blog_migrate/bf9bb17857d7da92ec2cddacdecdb6da.jpeg)
图2. 用于检查浏览器版本的“.charlie.XXXXXXXX.js”脚本
如果条件符合,该脚本则会向由攻击者控制的服务器(behindcorona[.]com)发起一系列AJAX请求,其中路径名以参数形式传入目标脚本(xxxxxxx.php)。
第一个请求用于获取某些重要信息,以备后用。信息包括多个经过十六进制编码的字符串,用于指导脚本需要从服务端下载多少块(chunk)漏洞利用代码。
此外,字符串还包含指向某个图像文件的URL,该文件中包含最终有效载荷的秘钥以及用于解密漏洞利用代码块的RC4秘钥。
![feec4c6bdb9f5a9f48ae24903882df57.png](https://i-blog.csdnimg.cn/blog_migrate/0e2e8b25d10be43cd10671f430c03fb8.jpeg)
图3.利用链-向xxxxxxx.php发起AJAX请求
在下载完所有块后,RC4脚本将解密所有数据并将它们拼接在一起,以向攻击者提供一个包含完整漏洞利用代码的JavaScript脚本。
![2b6fb04fcf6d3ba0c9da1dcc03602ab6.png](https://i-blog.csdnimg.cn/blog_migrate/5096ea50b2b6d4182f907f0928d5c902.jpeg)
图4. 再次检查版本号
漏洞利用脚本经过混淆处理,在去混淆后,我们会发现一些奇怪的东西:
![8182cadbdf14d23e0af228f5c2f655f2.png](https://i-blog.csdnimg.cn/blog_migrate/c4b111ce900041376fe409fe0e24fcdb.jpeg)
图5. 经过混淆处理的漏洞利用脚本
1、脚本会再次检查用户代理字符串,以确定浏览器版本是76还是77。
2、一些函数调用了浏览器的BigInt类,而该类可用于在JavaScript代码中执行64位运算。通常来讲,漏洞利用脚本开发者会通过使用32位数值来实现自己的函数。但在这场行动中,攻击者使用的却是BigInt。
![7787d28bea44637d913a38158ac00262.png](https://i-blog.csdnimg.cn/blog_migrate/fed4e63b24b6efc4b8891902a5987583.jpeg)
图6.用于处理64位数值的代码片段
3、有很多函数及变量并没有在实际代码中使用,这通常意味着这些函数及变量属于忘了被删除的调试代码。
4、大部分代码都使用了多个类,而这些类都与浏览器中存在漏洞的某个组件有关。
5、代码中还有一些大数组,用来表示shellcode代码及内嵌的PE映像。
漏洞利用脚本首先会尝试触发UAF,以获取一些关键的64位地址信息。如此一来,攻击者便可以实现:
- 如果获取地址成功,意味着漏洞利用脚本运行正常;
- 可以使用提取到的地址获取堆/栈的位置,绕过ASLR(地址空间布局随机化)机制;
- 可以在该地址附近进行搜索,进而发现其他有用的指针,以备后用。
然后,脚本会尝试使用递归函数创建一大堆大型对象。这样做是为了获取特定的堆布局,这对于确保漏洞利用能够成功很重要。
与此同时,脚本还将尝试使用堆喷射技术,目的是复用先前在UAF中被释放的同一个指针。
总的来说,脚本会尝试执行各种操作来分配/释放内存以及其他一些技术,最终攻击者成功实现了任意读/写原语。通过这种方式,攻击者能够构造一个特定的对象,与WebAssembly及FileReader配合使用,以执行嵌入式shellcode有效载荷。
![8a768eeb3d8e53b1d21387268929d743.png](https://i-blog.csdnimg.cn/blog_migrate/e375114c2c622ccc93ac69dfd0a75f92.jpeg)
图7.第一阶段shellcode
有效载荷分析
最终下载的有效载荷是一个经过加密处理的二进制文件(worst.jpg),由shellcode负责解密。
![5e8e0b3a740d15174fb52c5e8f3ea245.png](https://i-blog.csdnimg.cn/blog_migrate/096e6e23c818305144241e0ecfe3fc69.jpeg)
图8.经过加密处理的有效载荷“worst.jpg”
解密后,恶意软件模块将以“updata.exe”的形式保存到本地磁盘上并执行。为了实现长久驻留,恶意软件会在Windows Task Scheduler中创建计划任务。
有效载荷的安装程序是一个RAR SFX压缩文件,具体信息如下:
- 文件大小:293,403
- MD5:8f3cd9299b2f241daf1f5057ba0b9054
- SHA256:35373d07c2e408838812ff210aa28d90e97e38f2d0132a86085b0d54256cc1cd
它包含两个文件:
![2b013c27c7ddcb4275e55af3b0013919.png](https://i-blog.csdnimg.cn/blog_migrate/c01b4f766a6723f9131ae4b9b5c0ccab.jpeg)
图9. SFX压缩文件所包含的两个文件
文件名:iohelper.exe
MD5:27e941683d09a7405a9e806cc7d156c9
SHA256:8fb2558765cf648305493e1dfea7a2b26f4fc8f44ff72c95e9165a904a9a6a48
文件名:msdisp64.exe
MD5:f614909fbd57ece81d00b01958338ec2
SHA256:cafe8f704095b1f5e0a885f75b1b41a7395a1c62fd893ef44348f9702b3a0deb
这两个文件的编译时间完全相同,都是“2019年10月8日 01:49:31”。
其中,msdisp64.exe就是恶意软件的主模块,用于通过硬编码的C2服务器列表下载下一阶段有效载荷。
想要获取有关这场黑客攻击行动更为详细的信息,可以与卡巴斯基实验室进行联系,部分IoC如下:
- behindcorona[.]com
- code.jquery.cdn.behindcorona[.]com
- 8f3cd9299b2f241daf1f5057ba0b9054
- 35373d07c2e408838812ff210aa28d90e97e38f2d0132a86085b0d54256cc1cd
- 27e941683d09a7405a9e806cc7d156c9
- 8fb2558765cf648305493e1dfea7a2b26f4fc8f44ff72c95e9165a904a9a6a48
- f614909fbd57ece81d00b01958338ec2
- cafe8f704095b1f5e0a885f75b1b41a7395a1c62fd893ef44348f9702b3a0deb
- kennethosborne@protonmail.com