现在的黑客创新圈也开始这么浮躁了吗,明明有实力独创一次引领黑客领域的攻击,却非得大面积抄袭别人的代码!记一次针对克罗地亚政府的定向攻击分析。
在2019年4月初,发生一起针对克罗地亚政府的攻击,最近Positive Technologies对此次攻击做了详细研究,发现攻击者在这次攻击中,使用了许多比较新颖的攻击技术,比如攻击链,攻击指标以及使用新的post-exploitation框架,据研究人员的发现,此前还没有攻击者利用过这个新的post-exploitation框架。
攻击链
在2019年4月2日,在Positive Technologies定期对恶意软件进行审查期间,一份不寻常的Office文件引起了研究人员的注意,该恶意附件的名为“Package Notification”(包裹通知)。
图1.恶意附件(名为“Package Notification”)
伪装成包裹通知的文件是在Microsoft Excel中创建的,并在前一天以旧的.xls格式保存,保存的时间戳为2019-04-01 16:28:07(UTC)。但是,最后打印的时间戳却为2018-07-25 00:12:30(UTC),这意味着该文件已在2018年被使用过,稍后我将对此进行详细介绍。
请注意,“注释”字段(可以在Excel中编辑)包含Windows控制台命令,且“注释”字段的可疑内容全部采用二进制形式。
图2.包含可疑内容的“注释”字段
图3. “注释”字段的内容,采用二进制形式
该命令会创建一个Visual Basic脚本,该脚本在运行时执行以下操作:
1.建立WebDAV网络连接,WebDAV ,全称是Web-based Distributed Authoring and Versioning,维基百科上对它的解释是这样的:基于Web的分布式编写和版本控制(WebDAV)是超文本传输协议(HTTP)的扩展,有利于用户间协同编辑和管理存储在万维网服务器文件。举个例子,如果某产品,比如云网盘,是支持WebDAV的,那么该网盘的用户就能通过WebDAV与其他产品(如WPS、PDF Expert)等连接,快速实现数据传递、数据存储,而不用再复制、粘贴文件到云端。
2.在合法的系统实用程序regsvr32的帮助下,下载并运行下一攻击阶段的文件。
当恶意软件与攻击者的服务器建立HTTP(S)连接时,就将发送NTLM请求。此请求可用于恢复用于传递哈希攻击的NTLM哈希。目前,已经在还没有发现这种攻击的具体样本。另外,对连接到网络资源的原因仍然还在研究之中。
将regsvr32(用于注册和注销ActiveX控件)用于恶意目的的技术(称为Squiblydoo)并不新鲜,攻击者使用它来绕过应用程序白名单并逃避杀毒软件的检测。
“注释”字段的文本本身并不会执行任何操作,它必须被某些内容触发。当受害者打开Excel文件时,会出现一个要求受害者启用宏的提示(提示消息用的是克罗地亚语):
图4.要求用户启用宏的图像
如果用户点击“启用内容”按钮,则会显示另一条虚假消息,其中包含一个克罗地亚邮政的标识和包裹通知:
图5. 虚假包裹通知
同时,宏已从注释字段运行命令,并将新脚本添加到系统启动项中:
图6.宏中的关键逻辑
可奇怪的是,新脚本不是由宏运行的。这可能是攻击者有意进行设计的,因为只有这样,攻击才能在系统重新启动并且用户已经登录后才选择启动下一阶段的攻击。研究人员稍后会讲述这个细节。
在对恶意脚本进行分析时,研究人员发现其中的一部分代码的架构编写地非常整齐,比如结构规范、缩进统一、格式整齐。因此,这部分代码可能是从第三方抄袭来的,还有可能就是从自动生成此类文件的程序输出。
图7. 可能是从第三方抄袭来的宏代码
搜索代码中找到的关键字会出现大量的点击率,因此可以推断,黑客只是在网上找到了必要的代码,并根据需要进行了调整:
图8. 在issuu.com上也有类似的宏
图9. tackoverflow.com上也有类似的宏
图10. dummies.com上也有类似的宏
现在,让研究人员详细分析一下使用regsvr32命令后,所发生的攻击。regsvr32命令运行时,恶意软件将从攻击者服务器下载JavaScript scriptlet(名为update.sct)。正文包含Base64编码的二进制数据。解码后,数据被反序列化并通过.NET Framework运行。
图11.从攻击者服务器下载的update.sct scriptlet
注:微软的数字签名二进制文件是一个称为Regsvr32的实用程序,这是一个本机命令行实用程序,一般被用来注册动态链接库(DII),在Windows系统上安装应用程序或是软件时该文件会被自动生成。这意味着,攻击者只要进入内部网络,就可以运行存在于互联网任意地址的恶意代码。此外,这种Regsvr32命令行实用程序是一种代理程序,并且遵循SSL协议。正因如此这种完善又易于操作的工具才会被滥用。
请注意,这段代码也是攻击者从其他开源库抄来的:
图12. rastamouse.me上也有类似的代码
图13. github.com上也有类似的代码
从各方面来看,攻击者对所使用的工具并不了解。例如,scriptlet调用setversion函数,该函数不执行任何操作,对于本文介绍的scriptlet示例也是如此。
解压缩并运行时,下载的对象是一个.NET可移植可执行(PE)文件。
图14. PE文件的标头
图15. PE文件调试信息中对SharpPick的引用
编译后,源代码文件夹的路径仍然存在。根据-master后缀,研究人员知道该项目之前就是从存储库中复制过来的。一个文件夹路径是SharpPick的某个构件,SharpPick是一个众所周知的软件,用于下载和运行具有.NET依赖性的PowerShell代码,而无需代码解释器。
虽然SharpPick的源码可以在GitHub上被下载下来,但是令研究人员惊奇的是,攻击者没有对它进行任何重大修改,就直接引用了。
图16.反编译的部分SharpPick代码
反编译后,研究人员得到了攻击代码,在对它们进行攻击测试时,这些代码会从Base64解码PowerShell脚本并开始运行:
部分转换的PowerShell脚本
稍微简化一下代码,研究人员可以很容易地看到它们的作用:
1. 创建一个对象,使用用户代理、Cookie和代理设置的指定值与web服务器交互。
2.从指定的地址下载有效载荷;
3.下载的数据用指定的RC4密钥解码并运行;
不幸的是,在研究人员对这部分代码进行调查时,命令和控制(C2)服务器已无法访问。研究人员无法发现以前从中获得的数据。然而,功夫不负有心人,在FireEye的报告中,该段代码清楚地表明,这个攻击链中的最后一个链接是Empire的后门,它可以远程控制受害者的计算机,并且是Empire Framework的post-exploitation框架的一部分。
在针对WinRAR漏洞的攻击中使用类似的PowerShell脚本
对攻击者使用的脚本的最详细的介绍,是一份来自Payatu Technologies的报告。它包括有关重定向和日志记录等主题的详细说明,重点介绍了如何使用Empire。
几个小时后(UTC 时间2019-04-02 16:52:56),研究人员发现了另一个伪造的“包裹通知”。该文件与前一份文件有相似之处:它也在克罗地亚被发现,名称相同并且带有伪造的克罗地亚邮政徽标,但也有不同之处。比如,位于注释字段的恶意代码,这次就发挥了不同的功能:
1.网络连接是通过SMB进行的;
2.下载并激活的下一个攻击阶段是在msbuild(一个合法的.NET Framework实用程序)的帮助下进行的。
有趣的是,用于SMB连接的网络地址包含字符串“webdav”(强调此攻击与前一个攻击的连接)。另外,使用此方法仍然可以进行传递哈希的攻击,尽管研究人员目前还没有确认实际发生这种情况的样本。和以前一样,应用程序白名单是通过合法的实用程序(这次是msbuild)绕过的。在分析如何使用msbuild之前,研究人员觉得有必要查看一下不同版本之间宏代码的差异。
研究人员发现,这一次,攻击者还是没有对VBA代码进行过什么重大更改。不过这一次,它不是加载VBS脚本,而是在文件打开后立即运行。对于这种行为,研究人员认为攻击者可能是在第一次设计时忘记了运行代码,稍后意识到了他们的疏忽,并在新版本中纠正了这一点。
图19.旧版本和新版本之间宏代码的比较
现在,开始分析下一个阶段的攻击,此阶段的攻击包含带有C#代码的XML文件。 msbuild的一个特性是,它能够动态编译和运行内联代码,从注释中可以看出,这段代码在文件开头仍然被完整地保存了下来。
同样,这段代码包含一个Base64缓冲区,之后将被解码、压缩并运行。当然,要做到这一点,攻击者还是要依赖于一个公开可用的模板,正如注释和大量具有类似代码的网站所显示的那样。
图20.从攻击者服务器下载的msbuild.xml任务
结果与上次相同:.NET PE文件将被加载到RAM中并运行,研究人员在调试信息进行分析后,发现了两条线索:代码是在虚拟机中编译的(可能要使反向分析变得复杂,保护自己),并且找到了对名为SILENTTRINITY的文件夹的引用,这对研究人员的讨论很重要。
图21. PE文件调试信息中对SILENTTRINITY的引用
在跟踪这两个文件时,研究人员发现另外两个文件也具有相同的文件格式、名称和伪造的标识。这些文件是在2018年8月底被创建的,这证实了研究人员的假设,即该攻击活动已持续了一段时间。
去年,攻击者没有使用注释字段,而是重新利用合法的实用程序。恶意组件由certutil下载,用于管理证书,由Windows Management Instrumentation(WMI)启动:
图22. 2018年两个不同宏的比较
不幸的是,由于时间已经过了这么长时间,研究人员无法重建2018年攻击发生后的后续阶段。
而在对2019版的宏进行分析后,研究人员发现,VBA代码的唯一区别是删除了解释每个步骤目的的注释:
图23. 2018和2019宏的比较
SilentTrinity框架
SILENTTRINITY是由byt3bl33d3r开源的一款C2工具,通过C#实现,利用IronPython引擎来执行Python代码。
由于研究人员在PE文件调试信息中找到了执行SILENTTRINITY的线索,在对SILENTTRINITY进行了分析后,研究人员可以很好地了解攻击发生的源头。 2018年10月,Marcello Salvati(Black Hills Information Security的研究员)将SILENTTRINITY项目上传到GitHub。他的想法是通过用Python编写,将灵活性与众所周知的post-exploitation的PowerShell框架的优势结合起来。该项目目前的名称是IronPython,我们在本文就不赘述了,只讲一些其实现的基本机制和关键点。
以下是PE文件运行后发生的情况(尽管中间链接不一定是PE文件):
1.与C2服务器取得联系,下载包含必要依赖项和主Python脚本的ZIP文件;
2.提取ZIP内容,但是不保存;
3.为正确处理Python脚本注册了依赖项;
4.主Python脚本运行并等待攻击者的任务;
5.每个任务都作为一个随时可以运行的Python脚本发送;
6.任务在受害者的系统上以单独的线程运行;
7.结果被发送回C2服务器;
图24. SilentTrinity的工作原理
执行的一些注意事项如下:
1.IronPython支持的语言包括Boo语言(IronPython的强类型子集);
2.攻击采用无文件形式,不需要磁盘空间:依赖项、脚本和任务都驻留在RAM中;
3.所有C2流量都使用AES加密,包括具有依赖项、任务和命令输出的内容;
4.使用Diffie-Hellman协议生成公钥;
5.网络传输通过HTTP(S)进行,并具有代理支持;
图25. SilentTrinity服务器端的用户界面
在攻击发生时,PE加载程序被上传到VirusTotal。此时,网站上的所有杀毒软件引擎都没有将加载程序归类为恶意软件。这并不奇怪,因为二进制文件未保存到磁盘,这意味着,签名检测不会运行。此外,在任何情况下,静态检测不是保护用户的唯一方法。
图26. 在攻击发生时,SilentTrinity加载程序的云扫描结果
攻击发生后几天,杀毒软件才开始有所响应。但在攻击发生时,威胁并未被及时发现,甚至杀毒软件引擎都没有相关的签名。
图27. SilentTrinity加载器之后的云扫描结果
这就是攻击者选择这种方法的可能原因,此前,研究人员还未发现任何SilentTrinity被用于恶意攻击的案例。
攻击者的基础设施
随着时间的推移,攻击者使用的网络基础设施会随着恶意软件的版本迭代而发生变化。
表1.用作攻击者服务器的域
攻击者选择的域名与合法网站的域名及其相似,这样的名称大概不会引起网络钓鱼目标的怀疑。也让研究人员误认为,并非所有被冒充的域名都与克罗地亚有关。
所有攻击者使用的域名都注册了WhoisGuard隐私保护。通常,WhoisGuard被用于通过隐藏个人信息来保护用户的域名免受垃圾邮件侵害。不过,此功能也可以帮助攻击者保持匿名,防止被反分析。另外,用于传播和管理恶意软件的服务器是从荷兰提供商Breezle租用的。
所使用的主机、地址和域上的可用数据以及它们之间的大量连接表明,恶意攻击已经大规模的发生过了。之所以到现在才被发现,是由于其攻击的隐蔽性做的非常好,该攻击活动可能包括其他类似工具和其他目前未知的攻击样本。
图28. 攻击者基础设施图
总结
在发现恶意文件后的第二天,研究人员就通知了克罗地亚政府,其中克罗地亚信息系统安全局提出了针对有针对性的网络钓鱼攻击的警报。另外,经过调查,在多个克罗地亚政府系统中都发现了攻击痕迹。总之,攻击都是在受害者点击了一个带有钓鱼网站链接的电子邮件开始的。只要受害者下载了恶意文件,则攻击就会一直存在下去。
这次对克罗地亚政府的定向攻击分析,让研究人员的发现了许多有关攻击链实践中的最新样本。最后,研究人员建议采取以下保护措施来降低此类威胁的风险:
1.注意某些列入白名单的应用程序(certutil,regsvr32,msbuild,net,wmic)的使用情况;
2.扫描和分析电子邮件附件以及不明链接;
3.定期扫描联网计算机的RAM。
攻击指标