freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

恶意软件分析 (二) 灵活多变的勒索软件Qilin
2025-01-16 21:08:06
所属地 江苏省

本文针对 Qilin 勒索软件开展逆向分析,着重解剖其运行机制和加密过程。

往期回顾:

恶意软件分析 (一) 基于Golang的僵尸网络HinataBot

0x00 Qilin 勒索软件


Qilin 构建了一套配置灵活的勒索软件家族,其 Linux 版本可利用 ESXI 自带工具提高行为隐蔽性和勒索攻击成功率。在2023年11月,知名汽车制造供应商延锋遭 Qilin 勒索,导致几家北美工厂生产中断。直至去年 (2024) ,仍有多起关于 Qilin 勒索事件报道。


本文先概述 Qilin 勒索软件的技术栈,分析其软件功能和执行流程,再重点从ESXI LOTL、抗检机制和加密过程三个角度作静态分析,并给出部分动态测试结果,最后简单提及一些有(wu)效应对措施。

0x01 Qilin 技术栈概览

鉴于网上已有对 Qilin 二进制文件的总体分析,这里就不拾人牙慧,具体可见参考资料,以下只作简单介绍。

笔者分析的二进制文件源自开源样本网站,基本信息如下:

选择分析的样本是 Linux ELF64,使用 IDA pro 打开:

虽然主函数分支复杂,但基本呈线性结构,即使没有符号函数功能也不难识别。


Qilin 提供了大量功能选项以确保加密文件类型的精确性:


获取软硬件信息是常规方式,一则需要适配系统架构,二则需将系统程序配置排除在加密列表之外,以免影响正常开机,同时由于加密是高耗资源操作,必须确保过程原子化,如果临时中断可能导致解密失效,这里很是“良心”。

Qilin 通过/proc/cpuinfo获取系统和硬件信息:

Qilin 通过限定加密目录范围和后缀来避免被勒索的系统无法开机运行,程序制定了一些加密的黑名单和白名单。

进程黑名单:

目录黑名单:

文件黑名单:

如果对这些进程、目录和文件做操作和可能影响系统运行,所以均加入了黑名单。

Qilin 通过setrlimit限制资源的使用:

下面简单介绍其程序执行流。在参数接收处理之后首先读取内置的RSA公钥,并获取信息和配置,其中使用了 ESXI 自带的命令工具将在下文阐释:

读取RSA公钥信息,如果失败直接退出:

在保证日志可正常记录的前提下,经过一系列确认后实施加密操作,获取加密文件目录,将加密后的文件后缀统一设置为 “o7L03e8F9J”。

加密完成后修改mtod文件:

这样用户登录就会出现提示,告知其已被勒索:

0x02 Qilin 逆向分析

逆向分析主要针对对笔者较为感兴趣的几个角度开展,包括

  • 如何利用本地ESXI命令?
  • 作为恶意软件有哪些抗检措施?
  • 如何实施加密和恢复的?(重点)

最后尝试动态执行(危险)。

0x02-00 ESXI LOTL

Qilin 使用 esxcli 来执行 ESXI 命令,esxcli 是 ESXI系统的自带工具,用于实现部分系统命令。

从逆向代码可以看到 Qilin 执行了四条系统命令:

分别是:

  • 通过“storage filesystem list” 命令列出主机可用的卷,包括 VMFS、NAS、VFAT 和 UFS
  • 上一条中命令的VMFS-6 版本
  • 通过“esxcfg-advcfg -s 32768 /BufferCache/MaxCapacity”  命令修改缓冲区容量
  • 通过“esxcfg-advcfg -s 20000 /BufferCache/FlushInterval” 命令设置缓存刷新

0x02-01 抗检机制

通过对main函数的分析,可以看到 Qilin 使用了 `-p` 参数选项,即只有输入正确的 password 才能执行:

同时选项中还包括 ”-t“参数用于设置延迟运行时间:

此功能可能是防止沙箱运行或者规避潜在的安全检测,通过使用 “nanosleep”函数实现该功能。

0x02-02 加密过程

笔者最关心的是加密过程,Linux 下软件一般会直接调用流行的 openssl 库进行操作,从样本的字符串也大致可以猜到:

RSA公钥的位置最明显,可以在字符串中找到:

通过交叉引用和回溯调用关系可以明显得出和 main 函数的关系,在上文流程中也已经提及过, main 函数加载 RSA 公钥的位置如下:

使用 RSA 公钥加密,勒索组织自己保留私钥,赎金到了使用私钥解密,这样很好理解,但是由于非对称加密即慢又耗资源,一般是不会直接用来加密数据的。

一般使用混合加密的方式,即随机生成对称密钥,使用其加密,再利用公钥加密对称密钥,等需要解密时利用私钥解密得到对称密钥,再进行解密操作。

带着猜测接着进行逆向分析,已知的提示就是"random" 操作和对称加密算法。

随机数生成的部分很好识别:

对于加密算法,笔者先尝试自动化解决,首选的是 AI 识别,但是比较专业的要钱,放弃。

接着是插件,使用了IDA pro 插件 Karta, 该工具过于久远,成功安装后 idapython 的 API 语法与笔者使用的 IDA pro 9.0 不一致,改代码太麻烦。

于是改用 Ghidra 的Findcrypt 插件,需要重新下载旧的 10.1.4 版本,插件运行成功了,并没有识别出任何函数,只识别出一些加密盒数据:

但进一步证明了混合加密的猜测,并且很可能使用的是 AES 算法。

剩下的步骤就是澄清 RSA 公钥和随机生成的密钥这这两个过程的逻辑联系。

分析过程教费时更费眼,这里不再赘述,直接给出分析得到的逻辑:

读取 RSA 公钥后,main 函数在"sub_401C20"函数开始加密操作:

"sub_401C20"(同步任务 queue job) 调用 "sub_401F50"进行加密操作:

”sub_401F50“函数完成主要加密过程,生成 128 比特随机数最为IV(nonce):

生成 256 比特随机数最为Key

Key IV 作为metadata,使用RSA 公钥加密存储,之后解密需要:

调用”sub_402C70“函数,该函数使用上述 KeyIV进行 AES 加密

通过函数细节可以看出算法是 AES256,模式是 CTX

加密失败会提示”\x1B[%uG“特征字符串:

值得注意的是,Qilin 使用多任务处理加密,并把公钥加密后的 metadata (Key + IV) 和用该 Key 加密的文件列表统一存储,便于之后解密。同时使用了大量的文件和进程锁,确保程序的稳定性。

0x02-03 动态测试

笔者的测试环境为 Ubuntu 24.10,Qilin 样本信息如下:

通过”-h“参数查看功能选项:

先直接运行该样本(危险动作,请勿模仿):

打印出 blacklist 和 whitelist 后报 `No path specified!`错,显然是没有给出待加密路径。

制定加密路径和密码后会提示密码错误:

上文抗检机制中已阐释只有输入正确密码才能启动该 Qilin 样本,其具体算法如下:

看到算法还是比较复杂的,可以逆向算法给出 crack,这里就不麻烦了,直接强制改跳转:

通过 010edit 定位二进制代码位置,

0x74改为 0x75,即 "jz" 改为 "jnz"

这样只要密码错误就能往后执行:

由于篇幅有限,后面的调试分析这里不再赘述。

0x03 有(wu)效应对

网上公开的 YARA 规则:

ule QilinRansomware {
    meta:
      description = "rule to detect Qilin Ransomware"
      author = "ShadowStackRe.com"
      date = "2023-12-06"
      Rule_Version = "v1"
      malware_type = "ransomware"
      malware_family = "Qilin"
      License = "MIT License, https://opensource.org/license/mit/"
    strings:
      $strMotd = "/etc/motd"
      $strEncryptQuestion = "Are you sure to start encryption"
      $strConfigStart = "--- Configuration start ---"
      $strEsxiUsage = "esxcli"
      $strEncryptRenameFail = "Failed to rename encrypted file to"
      $strStartJob = "Started job..."
      $strBug = "\x1B[%uG 100%%"
    condition:
      all of them

安全措施从来都是行远大于言的,提再多不做只是摆设,所以只简单废话几句。

  • 事前

人人都知道,数据是核心,需要本地(隔离)备份或者上云,但人人也知道,得加钱。

  • 事中

除了安全运营的那套,如果想解密只能读取内存中随机生成的多个 KeyIV 了,不太可能。

  • 事后

0x04 参考资料

shadowstackrce分析文章

bleepingcuputor事件报道

# 恶意软件分析 # 勒索软件分析 # 数据加解密
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录