【逆向】Magniber 勒索软件样本分析
前言
Magniber是一个首次出现于2017年底的勒索软件家族,该勒索软件的早期版本主要针对韩语用户实行勒索,并且通过 Magnitude 漏洞利用工具包进行分发投送。由于Magnitude Exploit Kit (EK) 运营商在最初的活动中使用了Cerber 勒索软件,因此研究人员在为其命名时取了Magnitude exploit kit的“Magni”和Cerber的“ber”组合而成。从2018年年中开始Magniber被发现开始针对其他亚太国家进行勒索活动。并且在今年7月发现的攻击中Magniber勒索软件还试图使用已知的 PrintNightmare(CVE-2021-1675)漏洞来攻击受害者。
样本分析
本次样本共分为2个阶段:初始样本部分 和 勒索软件本体部分
1、初始样本部分:从自身数据段解密出Shellcode数据,远程注入到其它进程执行。
2、勒索本体部分:遍历和加密磁盘文件数据,上传受感染系统数据,生成勒索信索要勒索赎金。
第一阶段:初始样本
在初始DLL样本中程序会通过PEB动态获取代码中需要使用的API函数,然后使用异或指令从数据段中解密出第二阶段Shellcode。
然后通过Syscall等方式(使用Syscall执行系统调用,可以有效绕过通过挂钩3环API进行监控的安全软件),遍历寻找可用于注入Shellcode代码的系统进程。如果未找到则会将代码注入自身进程执行:
通过创建远程线程执行Shellcode:
第二阶段:勒索本体
Shellcode既是勒索软件本体,执行后首先会通过自解密的方式对代码中的关键数据进行解密,然后创建名为“dihlxbl”的互斥体对象保证单实例运行,该互斥体名称同时也是后面被加密文件的后缀名。
获取计算机名称、磁盘序列号字符串,加上互斥对象的名称一起作为被感染系统的标识:
然后对指定类型(可移动磁盘、本地磁盘、远程驱动器)磁盘内的文件进行遍历:
遍历的时候会跳过标记为白名单的目录:
白名单目录: |
Boot |
开始遍历文件,执行加密操作:
加密过程中同样会略过以下类型文件:
白名单文件: |
只读文件 没有后缀的文件 隐藏的文件或目录 用于临时存储的文件 保留供系统使用的文件 Windows 操作系统使用的文件或目录 加密文件系统(EFS)加密的文件,或EFS加密每个新文件的目录 |
随后对指定后缀的文件进行加密,需要加密的文件后缀均以加密形式存储于内存中:
加密前通过随机函数,生成2个包含16字节的数组。第一个数组为:AES密钥,第二个数组为IV向量。
完成以上工作后,导入AES密钥开始加密文件,每次加密的数据大小为0x100000字节,如果最后一组数据小于该大小则加密后直接写入:
使用RSA(2048)对AES密钥和IV向量进行加密:
加密后:
将加密后的数据附加到已加密文件的末尾:
修改被加密文件后缀“*.dihlxbl”,然后在被加密文件目录和%Public%目录下创建名为“readme.txt”的勒索信:
勒索信中个人网页部分的子域名为当前系统的感染标识:
打开系统默认浏览器访问与赎金支付相关的页面(这里断网调试就没有返回数据了),在该URL链接的请求参数中还包含了以下有关受感染系统信息:
1、勒索软件枚举文件的驱动器数量
2、Magniber 勒索软件生成的加密数据的总大小(以字节为单位)
3、勒索软件已加密的文件数
4、勒索软件枚举的文件数量;该数字包括勒索软件已加密的文件和未加密的文件
5、受感染的 Windows 操作系统的内部版本号
最后通过调用WMI删除磁盘卷影副本,防止用户恢复文件数据:
总结
样本总体比较简单,没有复杂的对抗手段,但是通过动态申请内存然后写入Syscall执行语句的方式还是比较有意思的,写远控或者其它红队工具的时候也可以稍微参考下。