用途
该技能用于分析勒索软件家族所使用的加密算法、密钥管理方式与文件加密例程,以评估解密可行性、识别实现缺陷并支持解密工具开发。适用场景包括:勒索软件感染后需要理解其加密方案以进行恢复;评估在不支付赎金的情况下是否可能解密(实现缺陷、已知解密器);逆向工程勒索软件以识别加密算法、密钥派生与密钥存储机制;在发现加密实现弱点时开发解密工具;根据加密方式对勒索软件样本进行家族归类。注意:在未于加密文件的测试副本上验证解密方法之前,不得将其用于生产数据恢复操作。
前置条件
- Ghidra 或 IDA Pro,用于逆向工程勒索软件二进制文件
- Python 3.8+ 与 pycryptodome 库,用于测试加密/解密例程
- 样本加密文件及其对应的明文原件(已知明文对)
- 勒索软件二进制文件的访问权限(如适用需已脱壳)
- 熟悉对称(AES、ChaCha20)与非对称(RSA)加密算法
- NoMoreRansom.org 数据库,用于检查现有免费解密器
工作流
步骤 1:识别加密算法
确定勒索软件使用的加密算法。可通过检查 Windows Crypto API 导入来辅助判断,例如使用 pefile 检查 CryptAcquireContextA/W、CryptGenKey、CryptEncrypt、CryptImportKey、BCryptOpenAlgorithmProvider、BCryptEncrypt、BCryptGenerateKeyPair 等 API。常见勒索软件加密方案包括:AES-256-CBC + RSA-2048(最常见的混合方案,如 LockBit、REvil、Conti);AES-256-CTR + RSA-4096(流密码模式变体,如 BlackCat/ALPHV);ChaCha20 + RSA-4096(现代流密码,如 Hive、Royal);Salsa20 + ECDH(Curve25519 密钥交换,如 Babuk);AES-128-ECB(弱模式,可能通过已知明文解密);仅 XOR(简单加密,通常可恢复);自定义算法(常含实现缺陷)。
步骤 2:分析密钥生成与管理
逆向工程密钥的生成与存储方式。密钥管理模式分为:强模式(无密钥无法恢复),如每文件 AES 密钥由 CryptGenRandom 生成、AES 密钥用嵌入的 RSA 公钥加密、加密密钥附加到每个文件或单独存储、RSA 私钥仅由攻击者 C2 服务器持有;弱模式(可能恢复),如 AES 密钥由可预测种子(时间戳、PID)派生、所有文件使用同一 AES 密钥、密钥在加密开始前传输到 C2(PCAP 可能包含密钥)、使用短重复密钥 XOR(可暴力破解)、PRNG 以 GetTickCount 或 time() 为种子(密钥空间有限);实现缺陷,如 ECB 模式(保留明文模式)、初始化向量(IV)跨文件重用、密钥以明文存储在内存中(可从内存转储恢复)、部分加密(仅加密前 N 字节)。
步骤 3:检查文件加密例程
逆向工程文件处理逻辑。典型勒索软件文件加密流程(Ghidra 反编译伪代码)包括:检查文件扩展名是否在目标列表中;生成每文件 AES 密钥(AES-256 为 32 字节);生成随机 IV(16 字节);读取文件内容;使用 AES-256-CBC 加密;用 RSA 公钥加密 AES 密钥;将加密数据 + 加密密钥 + IV 写入文件;用勒索软件扩展名重命名文件。
步骤 4:检查加密弱点
测试实现中可利用的缺陷。测试项包括:检查多个文件是否使用同一密钥(比较已知文件的加密版本,若 IV 相同且文件共享加密块则可能密钥重用);检查可预测的密钥派生(若密钥由时间戳派生,可迭代可能值进行暴力破解);检查 ECB 模式(ECB 对相同明文块产生相同密文,若重复块比例较高则可能为 ECB)。
步骤 5:尝试密钥恢复
利用已识别的弱点进行密钥恢复。恢复方法包括:从内存转储提取密钥(使用 Volatility 插件扫描 AES 密钥调度);已知明文攻击(弱算法,从已知明文-密文对恢复 XOR 密钥并查找重复密钥长度);检查 NoMoreRansom 是否有现有解密器。
步骤 6:记录加密分析
将发现整理为结构化报告,应记录:识别出的算法(AES、RSA、ChaCha20、自定义);密钥大小与操作模式(CBC、CTR、ECB、GCM);密钥生成方法(CSPRNG、可预测种子、静态密钥);密钥存储位置(附加到文件、注册表、C2 传输);文件修改模式(完全加密、部分、仅头部);目标文件扩展名;勒索信格式与支付基础设施;解密可行性评估(可能/不可能/部分);建议的恢复方法。
关键概念
- 混合加密:结合对称(AES)快速文件加密与非对称(RSA)安全密钥封装,是勒索软件的标准做法
- 密钥封装:用攻击者的 RSA 公钥加密每文件对称密钥,使只有攻击者的私钥能解密
- ECB 模式:电子密码本模式独立加密每个块,保留明文模式,是支持部分恢复的关键弱点
- 已知明文攻击:使用已知原始文件及其加密版本推导加密密钥,对 XOR 和弱流密码有效
- 密钥调度:AES 密钥在内存中的扩展形式,可在内存转储中扫描以在密钥被擦除前恢复
- CSPRNG:密码学安全伪随机数生成器,使用 CryptGenRandom 的勒索软件产生不可预测的密钥
- 部分加密:部分勒索软件仅加密前 N 字节或每第 N 个块以提高速度,未加密部分可能有助于恢复
工具与系统
- Ghidra:逆向工程套件,用于在汇编级别分析勒索软件加密例程
- PyCryptodome:Python 密码学库,用于实现和测试解密例程
- NoMoreRansom.org:由 Europol 和安全厂商维护的免费解密工具库,覆盖已知勒索软件家族
- Volatility:内存取证框架,用于从受感染系统的 RAM 转储中提取加密密钥
- CryptoTester:基于常量和代码模式识别加密算法的工具
常见场景
场景:评估勒索软件事件的解密可行性。背景:组织遭到勒索软件攻击,文件服务器被加密,管理层需要在做出恢复决策前了解不支付赎金是否可能解密。方法:从勒索信、文件扩展名和样本哈希识别勒索软件家族(检查 ID Ransomware);检查 NoMoreRansom.org 是否有该家族的现有免费解密器;在 Ghidra 中逆向工程加密例程以识别算法和密钥管理;测试实现弱点(密钥重用、可预测种子、ECB 模式);检查事件 PCAP 是否捕获了密钥传输到 C2(若密钥在加密前发送);扫描受影响机器的内存转储以查找 RAM 中的 AES 密钥调度;报告发现:解密可能/不可能及具体技术依据。陷阱:在加密文件的唯一副本上测试解密方法(始终在副本上操作);未验证就假设所有文件使用同一密钥(部分勒索软件使用每文件密钥);未检查卷影副本(vssadmin),勒索软件可能未能删除;在报告中混淆文件加密算法与密钥封装算法。
输出格式
输出为结构化的勒索软件加密分析报告,包含:样本名称、家族、SHA-256;加密方案(文件密码、密钥封装、密钥生成、IV 生成、文件结构);目标扩展名(总数、类别、排除项);实现分析(密钥强度、模式安全性、密钥存储、卷影副本);解密可行性(无密钥时是否可能及原因);恢复选项(从离线备份恢复、检查卷影副本、内存取证、与攻击者谈判等)。