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