0×00 前言
最近,勒索软件世界给网民带来了不少惊喜:CryptoWall 4在网络上活跃,以及出现一种名为 Chimera 的勒索软件,目前为止发现它主要的感染区域在德国,主要手段是要求受害者支付赎金,否则就威胁说将他们的私人文件泄露出来。本文中,我们将一步一步深入分析Chimera勒索软件,共同分析它是如何一步步进行感染、勒索用户的。
0×01 介绍
这是我们后文中将分析的样本参数:
MD5: e6922a68fca90016584ac48fc7722ef8 SHA1: a039ae3f86f31a569966a94ad45dbe7e87f118ad SHA256: ffb4a81fc336b1d77c81eef96eab0a5249ebb053c8920dd0c02e1d9f3ac257b0 Size: 393.216 bytes
0×02 分析
主要的可执行文件似乎主要通过电子邮件传播,并用.NET框架编写。在恶意软件的第一阶段,除了解密和提取第二阶段的代码之外,并没有执行任何恶意功能。所有相关的代码都包含在Stub类中,并且其主要的方法看起来很直观:
然而,使用一个base-64编码的密钥来解密Stub.pe中的内容,解密得到的内容是第二阶段的加密的有效载荷(payload),分析师可以从这里得到它。这里是它所使用的密钥:
fO69CKrW5riZeZWZibAc2jzkqvbrNOMxgsBGRGG39ogzNQA0uB8sJXASVzhq5yZn2RldONsSsEgKjITpkKJX4A==
通过快速浏览方法Stub.decryptBloc()可以发现,我们正在处理的是AES的一个本地实现,并且根据解码密钥来看,它应该是256位的。
有趣的是,解密后的有效载荷是手动映射到内存中的:
在映射完每一个片段后,直接通过一个函数指针调用了该模块:
此时,第一阶段的工作就已经完成。现在,让我们跳到下一个阶段,正是在这一阶段中run_pe()函数以元数据反射方式调用了fnDllEntry()。第二阶段的代码大小为54.265字节,我们可以通过dump它来获取第二阶段。
0×03 加载程序
MD5: 44aa17e27280603c9f83cc6fc1d50d82 SHA1: e8266169ed366c31e14a8cfaba6e850b1b3f39ef SHA256:fb02021257e90f3feb1be35dbc98db8a9cd68a83da320ba106b6ad1c77ff701f Size: 54.265 bytes
通过检查调试信息我们发现了C:/Projects/Ransom/bin/Release/Loader.pdb,表明我们正在处理一个勒索软件,而且当前阶段仅仅是一个进入下一阶段的DLL加载器。这个加载程序其实很简单,它的功能仅仅是找到一个合适的进程来将Chimera核心模块注入进去。通过检查二进制我们确实可以注意到,第三阶段和最后阶段确实被打包进了有效载荷内,MZ签名、DOS存根、PE头以及.text片段、.rodata和.reloc片段头仍旧可以看到:
第一步是获取当前进程的SeDebugPrivilege功能:
接下来,加载器通过EnumWindows()函数枚举每个窗口,以此寻找一个32位进程来作为感染的宿主:
一旦发现一个合适的进程,就将核心模块注入进去并开始执行以下内容:调用一个OpenProcess()函数打开进程,通过VirtualAllocEx()函数将一块内存分配到宿主进程中,然后通过WriteProcessMemory()函数拷贝代码。
在注入解包的第三阶段的代码后,会调用一个 CreateRemoteThread(),此时勒索软件的核心活动就开始啦。这个阶段似乎使用了部分ReflectiveLoader来执行加载到最后宿主进程的操作。
0×04 核心
MD5: 1fc11f7a387b7fe66e1e85135f5f1ffe SHA1: fd834485724db80658538f710eb271f431375a85 SHA256:3fd22016570ca8072180705c8fa2a81efc927313ee9fdabbb1d43e21f3e995de Size: 88.577 bytes
再一次地,从调试信息中我们恢复了组件C:/Projects/Ransom/bin/Release/Core.pdb的原始名称。首先,Chimera试图确定它是否已经在系统中运行,它仅仅创建一个互斥对象作为它所运行计算机的VolumeSerialNumber的一个名字,如果找到了这个实例,那么该勒索软件将停止运行。如果Chimera并没有在运行,那么下一步就是将自己从磁盘中删除,然后通过一个线程调用感染主程序,或如果核心模块已经被静态地调用了,那么它将直接调用。下面的伪代码显示了感染过程的第一步:
我们称之为infectionProc()的函数主要执行了三个主要动作:
1、向它的服务器发送信息并告知C&C服务器我们是谁(ip地址+卷序列号) 2、找到文件并对其加密 3、使用IE以全屏形式显示一个威胁信息
0×05 向C&C服务器发回信息
首先,通过向whatismyipaddress.com执行一个简单的查询,Chimera会尝试获取被感染机器的公网IP:
然后,启动一个新线程来联系两个内嵌的IP地址:95.165.168.168和158.222.211.81:
握手使用了以下模式:
1、将Chimera的版本信息发送给C&C服务器
2、勒索软件等待一个包含字符串verack的确认消息
3、在收到确认信息后,进一步等待一条包含服务器组件版本信息的消息
4、最后向服务器发送一个verack,以确认握手结束
Chimera使用 BitMessage 作为一种P2P通信协议。上面列出的两个IP地址分别在端口8444和8080上与勒索软件通信。
0×06 开始加密
不论与C&C服务器的连接是否成功,加密阶段都将会开始。它会枚举并浏览每一个磁盘驱动器,如果存在的话,同样会枚举并浏览软盘。
Chimera首先寻找一些特定的文件夹:/ Windows、/$Recycle.bin、/Microsoft、/Mozilla Firefox、/Opera、 /Internet Explorer、/Temp、 /Local、/LocalLow、/Chrome,以上这些目录不会被枚举和操作,以避免影响系统的功能,否则任何赎金都拿不到。然后,它会寻找不同类型的文件(图像、多媒体、文档、keyrings等):
.jpg, .jpeg, .xml, .xsl, .wps, NaNf, .vbs, .accdb, .ini, .cdr, .svg, .conf, .config, .wb2, .msg, .azw, .azw1, .azw3, .azw4, .lit, .apnx, .mobi, .p12, .p7b, .p7c, .pfx, .pem, .cer, .key, .der, .mdb, .htm, .html, .class, .java, .asp, .aspx, .cgi, .php, .jsp, .bak, .dat, .pst, .eml, .xps, .sqllite, .sql, .jar, .wpd, .crt, .csv, .prf, .cnf, .indd, .number, .pages, .x3f, .srw, .pef, .raf, .rf, .nrw, .nef, .mrw, .mef, .kdc, .dcr, .crw, .eip, .fff, .iiq, .k25, .crwl, .bay, .sr2, .ari, .srf, .arw, .cr2, .raw, .rwl, .rw2, .r3d, .3fr, .eps, .pdd, .dng, .dxf, .dwg, .psd, .png, .jpe, .bmp, .gif, .tiff, .gfx, .jge, .tga, .jfif, .emf, .3dm, .3ds, .max, .obj, .a2c, .dds, .pspimage, .yuv, .3g2, .3gp, .asf, .asx, .mpg, .mpeg, .avi, .mov, .flv, .wma, .wmv, .ogg, .swf, NaNx, .ape, .aif, .av, .ram, .m3u, .movie, .mp1, .mp2, .mp3, .mp4, .mp4v, .mpa, .mpe, .mpv2, .rpf, .vlc, .m4a, .aac, .aa3, .amr, .mkv, .dvd, .mts, .vob, .3ga, .m4v, .srt, .aepx, .camproj, .dash, .zip, .rar, .gzip, ., mdk, .mdf, .iso, .bin, .cue, .dbf, .erf, .dmg, .toast, .vcd, .ccd, .disc, .nrg, .nri, .cdi
此时,加密过程开始,所有识别的文件都会被重命名并添加.crypt扩展名。然后,在每一个文件夹中保存一个赎金要求文件,这些文件可以用在后面的解密阶段:
为了加速操作过程,所以加密过程是异步的。Chimera嵌入了不同的加密和哈希算法或者将它们引用到它的代码中,但似乎只有两种被使用了。因为我们的兴趣在于感染阶段,所以并没有深入研究加密算法。下面的细节分析可能会不准确,如果你掌握了有关这些步骤的细节信息,请随时联系我们。当加密引擎被初始化时,它会向系统请求128个随机字节:
这个数据会被存储到一个缓冲区中,并被传递给一个哈希函数,看起来是SHA-256或者SHA-512,同时同样的数据在后面的加密阶段会被用作加密密钥。
0×07 勒索要求
在文件加密完成后,将会弹出一个威胁消息,要求受害者支付一定数额的比特币,并威胁道如果他们不支付赎金,那么他们的私人数据、文档和图片将会被公开在网络上。不过,与其他勒索软件家族不同的是,Chimera并没有为解密文件设定倒计时期限。
然而,用户被引导下载一个叫做Chimera Decrypt的程序来帮助解密文件。这个解密程序首先搜索所有扩展名为.crypt的文件,然后查找赎金请求文件YOUR_FILES_ARE_ENCRYPTED.HTML中的第一个。HTML文件用于检索比特币地址,在第二步中,解密程序查询https://blockchain.info/de/rawaddr/ <比特币地址>来检查是否已经收到付款。从blockchain.info上检索到的赎金数额会与勒索文件中声明的数额对比,如果最终收到的赎金数额大于或等于要求的数额,那么将会受到一个确认消息:
一旦收到付款,解密程序要求受害者等待几个小时,因为解密密钥需要每几个小时通过BitMessage网络发送一次。我们所监测到的BitMessage地址是: BM-2cWsXQDYSueEKCtcJS8wzAka3KiYYYC9rB,卷序列号的哈希值也用于区分不同受害者的消息。
密钥接收完毕后就会开始解密过程。代码驻留在一个DLL包装器中,并且仅仅将Chimera核心模块中用于加密过程的代码复制粘贴过来即可。当一个文件被一个看起来像AES算法进行解密时,.crypt扩展名就会被删除。
0×08 行为分析
我们在一个配备了 ReaQta-core 的节点上测试了Chimera,这个人工智能引擎立即观测到了感染迹象,于是在感染阶段就将其杀死。系统保持的数据完整性保护数据防止被篡改和泄露,即使是人工智能引擎被关闭也能够做到。
0×09 IOCs
感染程序
MD5: e6922a68fca90016584ac48fc7722ef8 SHA1: a039ae3f86f31a569966a94ad45dbe7e87f118ad SHA256: ffb4a81fc336b1d77c81eef96eab0a5249ebb053c8920dd0c02e1d9f3ac257b0
加载程序
MD5: 44aa17e27280603c9f83cc6fc1d50d82 SHA1: e8266169ed366c31e14a8cfaba6e850b1b3f39ef SHA256:fb02021257e90f3feb1be35dbc98db8a9cd68a83da320ba106b6ad1c77ff701f
核心
MD5: 1fc11f7a387b7fe66e1e85135f5f1ffe SHA1: fd834485724db80658538f710eb271f431375a85 SHA256:3fd22016570ca8072180705c8fa2a81efc927313ee9fdabbb1d43e21f3e995de
C2服务器
IP: 95.165.168.168 IP: 158.222.211.81
0x0A 结论
在勒索软件世界,虽然Chimera还不像其他古老的勒索软件(CryptoWall、CryptoLocker或CTB-Locker)那么复杂,但它却是一个新的种类。在这一点上,我们对Chimera的分析中并没有发现它真正地能够将私人文件、文档和图片发布到网络上。但是,如果这些功能被证明是有效的,那么作者完全可以将它添加在之后的阶段中。此外,添加BitMessage是一个很有趣的地方,它可以成为一种保持作者身份隐藏的有效手段。像往常一样,我们建议保持你的安全工具为最新状态,并保存一份处于保护状态的备份,由于简单的勒索软件就可以绕过传统的防病毒系统,所以如果检测失败的,那么下一个最佳选择将是从最新的备份中还原出所有文件。最后,不要忘记网络文件夹和附加驱动器也要加密。
*原文地址: reaqta ,FB小编JackFree编译,转载请注明来自FreeBuf黑客与极客(FreeBuf.com)