安全狗,领先的云安全服务与解决方案提供商
近期(3.30)安全狗网络攻防实验室的安全研究人员在其工作邮箱中收到一封疑似携带恶意附件的垃圾邮件:

这封名为"payment confirmation"的邮件包含了一个名为"root_document_7775F1.rar"的附件,而且发件人并不是来自常用联系人,因此这 是一封钓鱼邮件的可能性极大。而且近期一系列的恶意软件攻击事件频发,所以更应该小心各种来历不明的附件。安全狗网络攻防实验室也在第一时间对该邮件中的 附件进行了详细的分析。
0x01样本基本特征
首先解压"root_document_7775F1.rar",包含两个文件,其中一个名为"cc7c6191.js"脚本文件,另一个是名为”d”的隐藏文件:

很明显,"cc7c6191.js"脚本文件应该就是木马文件了,恶意软件的作者希望受害人打开附件中的js脚本文件来实现攻击目标,方法虽然很low但是却很实用,查看下"cc7c6191.js"的js代码:"cc7c6191.js"
SHA256: 3b07fc2567fd61c2c6782656a77f06ae4294f4ba8e068be84a5 27b1577e1cab0

…
…

这段js代码经过了简单的混淆,但是并不影响阅读。
首先创建MSXML2.XMLHTTP对象来与远程服务器http://zakaz-sharikov.ru/x9dslp进行通信下载服务器上的木马文件:"x9dslp";
"x9dslp"
SHA256:CB6738F27E388D3CBC71D5506A35BE2A1ED863BE4947BEFDA82C35A97B5475 F5
然后使用创建的ADODB.Stream对象将木马文件保存到用户的TEMP目录下,并更名为:"cGDgSQZxW8WUVwn.exe";
最后利用创建的WScript.Shell对象直接运行该文件,完成攻击。
将"cc7c6191.js"和"x9dslp"上传至virustotal.com,基本信息如下:



可以看到截止到目前(3.31),"cc7c6191.js"的检出率比较低,包括Kaspersky、McAfee、360等杀软都未能检测,而payload "x9dslp"检出率比较高。
0x02 恶意软件行为
直接在虚拟机中执行"cc7c6191.js"恶意文件,一段时间后电脑中的数据被加密,并且在每个加密文件的目录下都会释放 help_instraction.txt、help_instraction.bmp文件,桌面壁纸也被强制修改,最后加密的文件后缀被统一 为".locky"。
根据这些结果,可以看出该勒索软件为近期比较有名的Locky勒索软件:



Locky勒索软件的作者声称采用的是RSA-2048和AES-128算法对文件进行加密,如果想要解密文档需要支付3.00 Bitcoin。
目前可被加密的文件类型如下:
.m4u .m3u .mid .wma .flv .3g2 .mkv .3gp .mp4 .mov
.avi .asf .mpeg .vob .mpg .wmv .fla .swf .wav .mp3
.qcow2 .vdi .vmdk .vmx .gpg .aes .ARC .PAQ .tar.bz2
.tbk .bak .tar .tgz .gz .7z .rar .zip .djv .djvu .svg
.bmp .png .gif .raw .cgm .jpeg .jpg .tif .tiff .NEF
.psd NaNd .bat .sh .class .jar .java .rb .asp .cs .brd
.sch .dch .dip .pl .vbs .vb .js .h .asm .pas .cpp .c
.php .ldf .mdf .ibd .MYI .MYD .frm .odb .dbf .db .mdb
.sql .SQLITEDB .SQLITE3 .asc .lay6 .lay .ms11 (Securitycopy)
.ms11 .sldm .sldx .ppsm .ppsx .ppam .docb .mml .sxm .otg
.odg .uop .potx .potm .pptx .pptm .std .sxd .pot .pps
.sti .sxi .otp .odp .wb2 .123 .wks .wk1 .xltx .xltm
.xlsx .xlsm .xlsb .slk .xlw .xlt .xlm .xlc .dif .stc
.sxc .ots .ods .hwp .602 .dotm .dotx .docm .docx .DOT
.3dm .max .3ds .xml .txt .CSV .uot .RTF .pdf .XLS .PPT
.stw .sxw .ott .odt .DOC .pem .p12 .csr .crt .key wallet.dat
本地执行过程
1.调用WMI service服务下载payload "x9dslp",拷贝至%TEMP%目录下,并将payload重命名为"cGDgSQZxW8WUVwm.exe"
SHA256: CB6738F27E388D3CBC71D5506A35BE2A1ED863BE 4947BEFDA82C35A97B5475F5

2.执行"cGDgSQZxW8WUVwm.exe",与C&C服务器进行通信,进行文件加密前的准备:

3.加密完成后,在每个加密目录下创建help_instraction.txt文件,同时修改桌面背景:



4.调用vssadmin.exe删除所有的卷影副本,这样阻止受害者的系统通过卷影副本进行还原。

5.最后调用cmd.exe删除"cGDgSQZxW8WUVwm.exe":

注册表行为分析
添加注册表相关键值:
HKCU\Software\Locky\id:感染主机上分配的独立id。
HKCU\Software\Locky\pubkey: RSA public key.
HKCU\Software\Locky\paytext
HKCU\Software\Locky\completed
HKCU\ControlPanel \Desktop\Wallpaper (“%UserProfile%\Desktop \_Locky_recover_instructions.bmp”): 将该bmp设置为桌面背景,并提示用户如何操作可以成功恢复被加密的文件。
数据包流量分析
首先,用Wireshark抓取"cc7c6191.js"在执行过程中的报文,筛选http.request,可以看到不正常的的HTTP GET请求下载远程服务器上的木马文件:

Locky作者将木马服务器安置在俄罗斯:

随后,跟C&C服务器进行一系列的通信,可以看到连续的post请求:


继续分析tcp流。我们发现,该HTML的reply是经过加密的:


上述C&C服务器的地址分别来自捷克和英国:


0x03 payload分析
Payload "cGDgSQZxW8WUVwm.exe"采用了一系列的方法干扰研究人员的分析。
第一层防护采用类Crypters方法对payload主体进行压缩加密,因此静态分析之后的代码不是payload的核心代码:

第二层防护便是各种反调试和反沙盒技巧,这个可以在导入表调用的API函数可以看出:





因此要看到payload的核心代码比较困难,这里采用HASHEREZADE在2015年的一篇博文Malware Crypters – the Deceptive First Layer的方法:"cGDgSQZxW8WUVwm.exe"虽然被Crypters加密伪装起来,但是在执行的某一个过程会将真正的payload2从内存中解密出来,如果选择合适的时间dump的话,那么dump下来的文件就是解密后的payload2。
而Crypters在解密自身payload的过程会连续调用VirtualAlloc或者VirtualAllocEx分配内存空间,因此在OD中直接bp 这两类断点:

经过一系列的内存分配和释放后,终于在内存中看到解密后的payload2:

在内存中可以看到是PE文件的类型,此时还不能dump,因为导入表还未修复,继续调试,直到导入表修复完毕:

导入表修复完毕后,直接dump这段内存,保存为"Dump_00260000_0001B000.bin" SHA256:FAD6169FD6721244438D97A4A134C5F2AA798C960E4F4ADD1CB8A652C04E7B2C

因此"Dump_00260000_0001B000.bin"为最终解密后的payload,可以直接分析其内部代码。
C&C通信机制
而在默认的情况下,Locky与硬编码的服务器IP进行通信:

当然Locky还采用DGA(域名生成算法)每天批量生成域名,而DGA算法的控制流相对比较简单DGA_func=sub_407AA4():



选择加密磁盘
首先选择需要加密的磁盘,通过GetDriveTypeW函数的返回值来选择要加密的磁盘:


可以看出,选择的返回值为3、2和6,因此Locky加密的磁盘类型为本地磁盘、软盘和RAM磁盘。
此外,在我们的实验中,Locky还能够对网络共享盘文件进行加密。分析后发现是采用WNetOpenEnumA和WNetEnumResource函数对网络资源进行枚举,因此同样可以加密网络共享文件:

加密过程
Locky的作者声称采用的是RSA-2048和AES-128算法对文件进行加密,在对加密过程的拆解后,发现在加密每个文件前,随机生成AES加密密钥,这样每个文件均采用不同的AES密钥加密。而每个AES密钥在生成后均使用RSA-2048公钥进行加密,加密完后的字符串再发送给服务器,留着后期解密文件,这样密钥的保存方式就比较稳妥了。其中,RSA-2048公钥就是通过&act=getkey的方式向服务器请求的RSA公钥。
HASHEREZADE在3月初Locky爆发的时候也对加密过程进行了分析,下面拆解加密过程:
从C&C服务器获取RSA公钥:

随机获取加密文件的AES密钥:

再次调用CryptImportKey函数将AES密钥转换成128bit后,采用RSA公钥加密AES密钥发送给C&C服务器。
最后遍历磁盘文件进行加密。
0x04 总结
Locky诱骗用户的方式多种多样,目前比较常见的是借助Office宏、网页JS脚本来传播,通过宏或者JS下载指定服务器的木马文件,而且Locky采用的是RSA-2048和AES-128的加密算法,即使我们知道加密算法,以及整个加密流程,想要解密文件也几乎是不可能的。此外,Locky已经中国化,目前国内已经有很多企业或者高校遭受到Locky的定向攻击,因此可以预见,Locky会在很长一段时间内存在,并且会愈演愈烈。
安全狗,知名互联网安全品牌,领先的云安全服务与解决方案提供商。秉承“安全狗即服务”(Safedog as a Service)的理念,安全狗依托全球领先的安全技术与完善的大数据处理平台,致力于为电商、医疗、教育、游戏、云计算服务商、政府机关等行业客户提供最具核心竞争力的云安全产品及解决方案,帮助客户实现业务平台的安全、稳定、可靠运行。
安全狗微信公众号对话框点击“安全事”获取最新最热安全资讯;
安全狗微信公众号对话框点击“安全狗”向安全狗咨询了解更多信息;
安全狗微信公众号对话框点击“更多帮助”查看更多跟安全狗相关的信息。
联系方式(大胆表白,来者不拒)
公众微信号:安全狗(safedog2013)
安全狗官网:www.safedog.cn
安全狗官方微博:@安全狗safedog
客服电话:4001000221



