Winnti组织是如何利用GitHub来进行C&C通信的

jopen 8年前
   <p style="text-align:center"><img alt="Winnti组织是如何利用GitHub来进行C&C通信的" src="https://simg.open-open.com/show/a8e8a64310074f77d7ff770611b99f6a.jpg" /></p>    <p><strong>写在前面的话</strong></p>    <p>在发布某个新版本的应用程序或维护代码项目时,开发人员通常需要不断地修改或重写他们的源代码,而这也许就是 GitHub(在线代码托管服务,提供了版本控制管理)能够如此受欢迎的原因了。从某种程度上来说,GitHub 已经成为了程序员的一个特殊的社交平台了,因为这个平台提供了代码管理、代码共享、协作开发以及代码整合等对于程序员来说非常有价值的功能,而且不同国家的开发人员都可以在项目评论区中进行问题讨论。</p>    <p>不过,GitHub 与恶意软件之间也有着千丝万缕的关系。比如说,以普及安全教育为目的的<a href="/misc/goto?guid=4959004420392064008">开源恶意软件项目 EDA2 和 Hidden Tear</a> 就托管在 GitHub 上,但是不法分子却利用这些恶意软件的源代码开发出了相应的变种来攻击企业用户。除此之外,也有大量能够<a href="/misc/goto?guid=4959004420492418198">攻击物联网(IoT)设备</a>的工具源码也托管在 GitHub 上,而这些代码是任何接入了互联网的用户都可以获取到的,甚至连 <a href="/misc/goto?guid=4959004420584982244">Limitless Keylogger</a> 这样针对性极强的攻击工具源码我们都可以在 GitHub 上找到。</p>    <p>近期,安全研究人员发现,一个名叫 Winnti 的黑客组织把 GitHub 变成了一个用来跟后门(趋势科技标识为 BKDR64_WINNTI.ONM)进行C&C远程通信的工具。在此之前,这个黑客组织进行的都是一些类似金融欺诈等传统的网络犯罪活动,而这一发现也证明了黑客的攻击技术又上升了一个层次。除此之外,我们还发现该组织正在通过 GitHub 账号并利用臭名昭著的 PlugX 恶意软件变种来处理某些有针对性的攻击活动。</p>    <p><strong>恶意软件分析</strong></p>    <p>我们所分析的恶意软件主要分为两个文件:一个加载器(loader)和 payload。</p>    <p>loader 文件名为 loadperf.dll,在 Windows 操作系统中,也有一个名叫 loadperf.dll(用于管理系统性能的注册表键)的文件,不过我们这里分析的这个 loadperf.dll 是被恶意修改过的,因为攻击者在该文件中额外增加了一个数据域。在感染成功之后,这个文件会被复制到%WINDIR%\system32\wbem\目录下并替换原始的 DLL 文件,然后它会利用 WMI 性能适配器服务 wmiAPSrv(Windows 下的合法服务,用于收集与系统性能相关的信息)和 services.exe 来导入恶意软件的加载器。除此之外,系统还会将所有相关的 DLL 文件一起导入进去,包括 payload“loadoerf.ini”在内。整个感染链还包括一个从 loadoerf.ini 中导入的函数 gzwrite64,它将伪装成一个应用程序编程接口(API)并作为 payload 的入口。虽然 gzwrite64 是通过 loadperf.dll 导入进来的,但 payload 的主函数实际上位于 loadoerf.ini 的 DLLMain(DLL 的入口函数)之中。</p>    <p style="text-align:center"><img alt="Winnti组织是如何利用GitHub来进行C&C通信的" src="https://simg.open-open.com/show/f63144512a7c23d125708495b61ab24e.jpg" /></p>    <p style="text-align:center">图片1:攻击者在原始 loadperf.dll 中添加的额外数据域 .idata</p>    <p style="text-align:center"><img alt="Winnti组织是如何利用GitHub来进行C&C通信的" src="https://simg.open-open.com/show/9da7f17ae78c9b558c7b070796a9377f.jpg" /></p>    <p style="text-align:center">图片2:额外导入的 gzwrite64 函数</p>    <p>payload 是一个名为 loadoerf.ini 的文件,该文件中包含解密、运行以及代码注入函数。当系统加载了这个 payload 文件之后,DLLMain 会根据 CryptUnprotectData 的的值来解密 payload,由于这个函数的运行需要“设备 ID”作为参数,因此在一台非初始感染主机的计算机中是无法完成解密操作的,这也使得恶意软件的分析变得更加困难了</p>    <p style="text-align:center"><img alt="Winnti组织是如何利用GitHub来进行C&C通信的" src="https://simg.open-open.com/show/6a06844d2e790fb838dbdcf987b49206.jpg" /></p>    <p style="text-align:center">图片3:payload 所使用的解密函数(部分代码)</p>    <p>解密完成之后部分恶意代码会在目标系统中运行,这些代码将会注入到 svchost.exe(Windows 中的一个核心组件)中,并将 payload 加载进系统内存。</p>    <p style="text-align:center"><img alt="Winnti组织是如何利用GitHub来进行C&C通信的" src="https://simg.open-open.com/show/1b8082050e36b1be365c30e449c1b2cb.jpg" /></p>    <p style="text-align:center">图片4:loadoerf.ini 的执行/感染流程</p>    <p>那么这一切与 GitHub 有什么关系呢?在成功感染之后,恶意软件便会通过一个托管在 GitHub 代码库中的 HTML 页面来与远程C&C主机进行通信。</p>    <p style="text-align:center"><img alt="Winnti组织是如何利用GitHub来进行C&C通信的" src="https://simg.open-open.com/show/c312785d7fb53c9375d7c50d942131e3.jpg" /></p>    <p style="text-align:center">图片5:用于C&C通信的 HTML 信息(托管在 GitHub 上)</p>    <p>想必每一位恶意软件分析人员第一眼都会注意到上图中的第三行代码,因为这行代码与 PlugX 有关。这行代码的起始和结束标签为 DZKS 和 DZJS,这种标签是 PlugX 的典型标记。在进一步分析之后,我们发现其解密算法与 PlugX 的是不一样的,因为它在解密过程中还需要访问一台C&C服务器(代码中标记有通信主机的 IP 地址和端口号)。</p>    <p>目前,Winnti 使用了多种不同的算法来加密文件(托管在 GitHub)中与这些C&C服务器有关的引用信息,但其中有一个算法 PlugX 也曾使用过。实际上,我们在代码的C&C字符串中发现了与 PlugX 有关的引用,这也表明该组织在其攻击活动中也使用了 PlugX,但我们却没有在这个 GitHub 库中发现 PlugX 的样本,因此我们推测可能有其他的 PlugX 样本也在使用这个 GitHub 代码库来获取自己相应的命令控制信息。</p>    <p>除了解密算法不同之外,这个 GitHub 库文件所使用的其他算法与原始的 PlugX 算法几乎相同:</p>    <p>PlugX style + shift string + Base64</p>    <p>PlugX style + shift string + Base64 + XOR</p>    <p>PlugX style + Base64 + XOR</p>    <p><strong>追踪 Winnti 的活动踪迹</strong></p>    <p>Winnti 黑客组织所利用的这个 GitHub 账号创建于 2016 年 5 月份,并在 2016 年 6 月创建了一个合法的项目(mobile-phone-project),而这个项目来自于另一个普通的 GitHub 页面。这个用于C&C通信的代码库创建于 2016 年 8 月份,而且我们认为这个账号并不是一个被盗账号,而是 Winnti 自己创建的。直到 2017 年 3 月份,这个代码库中已经有 14 个不同的 HTML 页面了,而且这些页面的创建时间也不同。</p>    <p><strong>活动时间轴</strong></p>    <p>我们通过对该 GitHub 库的代码更新日期进行了分析之后,大致得出了 Winnti 的活动时间图。对于每一份文件,GitHub 都会保存其首次和最新提交的时间戳,因此我们得到了下面的这张图片。</p>    <p style="text-align:center"><img alt="Winnti组织是如何利用GitHub来进行C&C通信的" src="https://simg.open-open.com/show/862bfd67ac01fdaf69c162acad27aa2f.jpg" /></p>    <p style="text-align:center">图片6:C&C服务器的 IP 以及相应的活动时间轴</p>    <p>我们对这些 IP 地址进行了持续跟踪,并且发现他们通常会在下午到深夜的这段时间与 Winnti 的C&C服务器进行通信,而这种时间段也是大多数网络犯罪分子的“正常工作时间”,而且在我们的观察过程中,这个 GitHub 库中又出现了一个新创建的 HTML 文件。</p>    <p><strong>C&C服务器</strong></p>    <p>我们在这个 Winnti 所使用的 GitHub 账号中总共发现了 12 个不同的 IP 地址以及相应端口号。所有与这些C&C服务器有关的网络通信主要是通过三个端口完成的:53(DNS)、80(HTTP)和 443(HTTPS),而这也是 PlugX 和 Winnti 恶意软件变种用来控制受感染主机与其C&C服务器进行通信交互的典型技术手段。根据 IP 地址我们了解到,除了两台C&C服务器位于日本之外,剩下所有的服务器都托管在美国境内。</p>    <p style="text-align:center"><img alt="Winnti组织是如何利用GitHub来进行C&C通信的" src="https://simg.open-open.com/show/221971ce3ec5175e8eadffb7d206cdd0.jpg" /></p>    <p style="text-align:center">图片7:C&C 通信所使用的 IP 地址及端口号</p>    <p>目前,我们已经将研究结果披露给了 GitHub,并将会帮助他们一同解决这些安全问题。</p>    <p><strong>总结</strong></p>    <p>通过利用 GitHub 这样的热门平台可以帮助网络犯罪分子实现受感染主机与恶意服务器之间的持久化网络通信,而且这种恶意行为也很难被检测到。虽然 Winnti 仍在使用传统的恶意软件,但是他们的攻击策略却是非常领先的,而这也是网络安全威胁复杂化的大势所趋。</p>    <p><strong>后门 BKDR64_WINNTI.ONM 的哈希(SHA256):</strong></p>    <blockquote>     <p>06b077e31a6f339c4f3b1f61ba9a6a6ba827afe52ed5bed6a6bf56bf18a279ba— cryptbase.dll</p>     <p>1e63a7186886deea6c4e5c2a329eab76a60be3a65bca1ba9ed6e71f9a46b7e9d– loadperf.dll</p>     <p>7c37ebb96c54d5d8ea232951ccf56cb1d029facdd6b730f80ca2ad566f6c5d9b– loadoerf.ini</p>     <p>9d04ef8708cf030b9688bf3e8287c1790023a76374e43bd332178e212420f9fb— wbemcomn.ini</p>     <p>b1a0d0508ee932bbf91625330d2136f33344ed70cb25f7e64be0620d32c4b9e2— cryptbase.ini</p>     <p>e5273b72c853f12b77a11e9c08ae6432fabbb32238ac487af2fb959a6cc26089— wbemcomn.dll</p>    </blockquote>    <p>* 参考来源:<a href="/misc/goto?guid=4959004420682555616">trendmicro</a>, FB 小编 Alpha_h4ck 编译</p>    <p>来自: <a href="/misc/goto?guid=4959004420771833106" id="link_source2">www.freebuf.com</a></p>