Magnitude EK是被使用时间最长的浏览器漏洞利用工具包之一。自2013年被创建以来,一直深受全球范围内勒索软件的喜爱。它最终还是走向了私有化,仅在相对固定范围内的活动中被使用。
在2017年,Magnitude通过一个名为“Magnigate”的网络过滤器,将Cerber勒索软件交付给少数几个亚洲国家。在2017年10月,这个漏洞利用工具包的运营商开始用它来分发自己的勒索软件“Magniber”。这个变化带来了一个有趣的转折——恶意软件的开发者将全部精力都投向了感染韩国用户。除了通过特定国家/地区的恶意链接进行流量过滤之外,Magniber还必须在返回特定国家代码的情况下才会安装,否则它就会删除自己的代码。
在2018年4月,Magnitude出人意料地开始推动不断发展的GandCrab勒索软件,不久之后还开始了对新的Flash零日漏洞(CVE-2018-4878)的使用。这场可能是用于测试目的活动并没有持续太长时间,不久之后,Magnitude再次回到了分发Magniber。在我们最近捕获的Magnitude中,我们看到了最新的Internet Explorer漏洞(CVE-2018-8174)正在被主要使用,Magnitude仅在一个星期的流量中断之后就集成了这个漏洞。
在这篇文章中,我们将看到Magniber的一些值得注意的变化。它的源代码现在更加精细,利用了各种混淆技术,不再依赖于命令和控制服务器或硬编码密钥来实现其加密例程。此外,虽然Magniber之前一直只针对韩国,但它现在已经将目标范围扩张到了其他亚太国家。
提取有效载荷
72fce87a976667a8c09ed844564adc75 – 加载程序DLL
19599cad1bbca18ac6473e64710443b7 – Magniber的核心DLL
在下载和执行最终有效载荷之前需要经历几个阶段。在Magnigate的302重定向(第一阶段)之后,我们看到一个采用Base64混淆的JavaScript(第二阶段),用来启动Magnitude的登录页面,以及一个采用Base64编码的VBScript。(这两个脚本的原始版本都可以在IOCs中看到。)在完成对CVE-2018-8174的利用之后,将检索使用异或(xor)算法加密的Magniber。
图1. Magniber感染的流量视图,通过Magnigate重定向和Magnitude EK
图2.解码后的Javascript,显示重定向到Magnitude的登录页面
图3.显示CVE-2018-8174部分的VBScript代码片段
一旦存在于Internet Explorer中的 UAF漏洞(CVE-2018-8174)被成功利用,VBScript将执行以下shellcode:
图4.字节数组(shellcode)
在功能方面,这个shellcode代码是一个简单的下载程序(downloader)。它将下载经混淆的有效载荷,并用密钥对其进行异或运算解码,然后部署:
图5.通过InternetOpenUrlw API下载最终的有效载荷
然而,被下载的有效载荷(72fce87a9766a8c09ed844564adc75)仍然不是Magniber的核心,而是下一个阶段的加载程序。该加载程序解压缩了Magniber的核心DLL (19599cad1bbca18ac6473e64710443b7),并将其注入一个进程。
这两个元素,加载程序和Magniber核心,都是具有Reflective Loader存根的DLL,它们使用Reflective DLL injection 技术将自己加载到当前进程中。
行为分析
Magniber所做的行为并没有太大变化。它会对文件进行加密,并在最后放入一个名为README.txt的赎金票据。
图6.在受感染设备上留下的赎金票据
给定的链接指向一个洋葱网络页面,这个页面对于每个受害者来说都是唯一的,与许多其他勒索软件的页面类似:
图7. Magniber的支付页面
由此版本的Magniber加密的文件可以通过它们的扩展名.dyaaghemy来识别。虽然在过去每个文件都被使用相同的AES密钥加密,但这次每个文件都被使用了唯一的密钥加密——相同的明文提供了不同的密文。被加密的内容没有可见的模式,这表明攻击者使用了流密码或区块链密码(可能是CBC模式下的AES)。你可以在下面看到被Magniber加密前和加密后的BMP文件:
图8.加密之前和加密之后的文件
代码修改
随着时间的推移,Magniber不断发展,其大部分代码都被完全重写。下面你可以看到当前Magniber DLL和早期版本(8a0244eedee8a26139bea287a7e419d9)之间的代码比较,它是在BinDiff 的帮助下创建的:
图9.将较旧的Magniber与较新的Magniber进行比较
代码混淆
Magniber的开发者付出了很多努力来改进混淆。我们描述的第一个版本根本没有经过混淆。相比之下,对当前版本的Magniber而言,开发者采用了多种不同的技术来对其进行混淆。首先,API函数现在由其校验和动态检索。例如:
图10.通过校验和调用API函数
比较新版本和旧版本,我们可以看到一些重叠的代码片段:
图11.具有正常导入调用的旧版本与具有动态检索功能的新版本
通过搜索当前加载的DLL的导出表来检索函数指针。这项技术要求我们从导出表中检索要加载的函数的DLL。几个月前,这种检索功能的算法被添加到了Magniber中,例如可以在样本60af42293d2dbd0cc8bf1a008e06f394中看到。
此外,Magniber的开发者还对调用的一些参数进行了动态计算,并在操作之间添加垃圾代码。应该加载的字符串被分散在多个变量中。
图12.添加垃圾代码使分析更加棘手
文件加密
我们还可以看到在功能级别上的一些变化。早期版本依赖于从CnC服务器下载的AES密钥(如果它不可用,则返回到硬编码的密钥,在这种情况下,解密文件会相对容易)。这次,Magniber附带了攻击者的公共RSA密钥,使其在加密过程中完全独立于互联网连接。此密钥用于确保用于加密文件的AES密钥的唯一性。
攻击者的RSA密钥以混淆形式在样本中进行硬编码。以下是去混淆后的样子:
图13.去混淆后的RSA密钥
每次要加密新文件时,都会生成两个16字节长的字符串。一个将用作AES密钥,另一个用作初始化向量(IV)。下面你可以看到负责生成伪随机字符串的代码片段。
图14.生成伪随机字符串
有趣的事实是,它们用作随机字符串生成器,随机性的弱源可能会产生漏洞。我们可以看到, 钩子函数GetTickCount被调用:
图15.使用GetTickCount的随机字符串生成器
生成密钥和初始化向量的代码的完整重建可在以下代码段中找到:https://gist.github.com/hasherezade/7fb69fbd045315b42d7f962a83fdc300
在勒索软件继续加密文件之前,RSA密钥被导入并用于加密生成的数据(密钥+初始化向量):
图16.文件加密开始之前的RSA密钥导入
它生成了一个256字节的加密块,传递给加密函数,然后附加在加密文件的末尾。除了这些修改之外,在 Windows Crypto API的帮助下,文件也能像以前一样加密。
图17.设置AES密钥和初始化向量
图18.对文件进行加密和写入
地理扩张
在7月初,我们注意到在我们习惯的典型区域之外发生了漏洞利用尝试,例如在马来西亚。大约在同一时间,MalwareHunterTeam的一条推文提到了台湾和香港的感染。
随着分发范围的变化,Magniber代码中的白名单被添加了更多的亚洲国家/地区语言,如汉语(澳门、中国、新加坡)和马来语(马来西亚、文莱)。
图19.扩大语言检查
持续进化
虽然Magniber一开始并不那么令人印象深刻,代码简单且没有经过混淆,但它正在被积极地开发,并且其质量一直在不断提高。它的开发者看起来很专业,虽然他们也会犯下一些错误。
基于这种勒索软件的恶意活动具有极高的精准性,从精心设计的分发过程到用于匹配目标的语言白名单。犯罪分子确切地知道他们想要瞄准哪些国家,并努力减少不必要的感染。
IOCs
178.32.62[.]130,bluehuge[.]expert,Magnigate (Step 1)
94.23.165[.]192,69a5010hbjdd722q.feedrun[.]online,Magnigate (Step 2)
92.222.121[.]30,08taw3c6143ce.nexthas[.]rocks,Magnitude EK (Landing Page)
149.202.112[.]72,Magniber
代码片段:
l VBScript
Magniber(原始版本):
6e57159209611f2531104449f4bb86a7621fb9fbc2e90add2ecdfbe293aa9dfc
Magniber(核心DLL):
fb6c80ae783c1881487f2376f5cace7532c5eadfc170b39e06e17492652581c2
审核人:yiwang 编辑:边边
发表评论
您还未登录,请先登录。
登录