2017年最佳算法提名勒索软件(sega)分析
字数 1712 2025-08-25 22:58:56
Sega勒索软件深度分析与防御教学文档
一、概述
Sega勒索软件是2017年出现的一种新型加密勒索软件,采用了先进的加密算法和反检测技术,其独特的三方加密机制使其在当时极具威胁性。本教学文档将全面分析Sega勒索软件的技术特点、加密机制和防御方法。
二、技术特点
1. 核心加密机制
Sega勒索软件采用了独特的"三方角色"加密模型:
- 入侵者(相当于女主):持有固定的公钥
- 系统(相当于男主):生成临时密钥对
- 文件(相当于小三):每个文件生成独立密钥对
2. 使用的加密算法
| 算法 | 用途 |
|---|---|
| Curve25519 | 密钥协商 |
| ChaCha20 | 文件加密 |
| MurmurHash | 函数名混淆 |
| SHA1 | 字符串生成 |
| Base64 | 数据编码 |
| Salsa20 | CC地址解密 |
3. 反分析技术
- 跳转混淆:使用
push XXX; CALL XX模式 - 内存加载:动态加载关键代码
- SMC(Self-Modifying Code):自修改代码
- 多态字符串生成:基于机器特征生成唯一字符串
三、详细技术分析
1. 反混淆处理
跳转混淆处理
混淆函数特征十六进制:
51 52 8B 54 24 0C 8B 4C 24 08 81 C1 FF 00 00 00 29 D1 41 41 89 4C 24 08 5A 59 C2 04 00
反混淆IDA Python脚本关键部分:
def process_jmp(push_ea, to_ea):
i = idautils.DecodeInstruction(push_ea)
if i.get_canon_mnem() == 'push':
jmp_start_ea = NextHead(push_ea)
code_distance = to_ea - jmp_start_ea - 5
x86_nop_region(push_ea, jmp_start_ea)
code_distance = code_distance & 0xffffffff
code_distance = '%08x' % code_distance
distance_len = len(code_distance)
ret_str = []
temp_buf = code_distance[::]
for i in range(distance_len/2):
bytes = temp_buf[-2::]
ret_str.append(bytes)
temp_buf=temp_buf[:-2:]
fill_value = 'E9%s' % ''.join(ret_str)
buf = binascii.unhexlify(fill_value)
idaapi.patch_many_bytes(jmp_start_ea, buf)
2. CC地址生成
CC地址存储在文件尾部,解密过程:
- 读取文件尾部的密钥与密文
- 使用ChaCha20算法解密
解密示例Python代码:
from Crypto.Cipher import ChaCha20
secrect = '\x2E\x4B\x59\xD7\xA3\x9B\xFC\xBC\x3E\xA1\xCD\x70\x60\xBF\xB9\xBB\x15\xF7\xEB\x9F\xBA\xE3\x3E\xE0\x4B\x34\x4E\xF1\x6B\x7E\x06\xDF'
cipter_code = '\x1D\xA3\xF3\x7D\xB2\x3D\x85\x66\x9D\x67\x2B\xDA\x6A\x9A\x51\x58\x64\x4A\x4F\x03\xC1\x1B\x7D\x11\xE8'
nonce = '\x00\x00\x00\x00\x00\x00\x00\x00'
cipher = ChaCha20.new(nonce=nonce ,key=secrect)
print cipher.decrypt(cipter_code)
3. 字符串生成算法
GenStrByID(unsigned int str_len, char str_id)算法流程:
- 获取注册表中的machine_id
- 将str_id和machine_id进行SHA1运算
- 对SHA1结果进行Base64编码
- 从Base64结果中截取指定长度字符
- 替换非法字符:
- "+" → "a"
- "/" → "b"
4. 文件遍历机制
- 使用
ZwQueryDirectoryFile而非常规的FindFirstFile/FindNextFile - 文件后缀名白名单检查
- 文件夹白名单检查
四、加密机制详解
1. 加密过程
-
入侵者与系统协商密钥:
- 系统生成随机私钥(s_secret1)
- 使用入侵者硬编码的公钥(i_public)和s_secret1计算出共享密钥1
- 系统公钥(s_public1)保存在临时文件前0x20字节
-
系统与文件协商密钥:
- 使用共享密钥1作为系统私钥(s_secret2)
- 生成系统公钥(s_public2)保存在临时文件后0x20字节
- 与文件公钥(f_public)协商出共享密钥2
-
文件加密:
- 使用共享密钥2作为ChaCha20密钥加密文件
- 文件公钥(f_public)保存在加密文件尾部
- 重命名文件为.sega后缀
2. 解密限制
- 只有入侵者能计算共享密钥1
- 共享密钥1是计算共享密钥2的必要条件
- 因此只有入侵者能解密文件
五、其他恶意行为
-
IPGA算法:
- 动态生成0x2000个IP地址
- 向这些IP发送感染用户信息
-
地理区域判断:
- 通过
GetKeyboardLayoutList获取键盘布局信息 - 判断用户所在地区
- 通过
-
持久化与破坏:
- 自删除原始文件
- 删除用户还原镜像
- 添加启动项实现持久化
六、防御措施
-
预防措施:
- 使用安全软件防止勒索软件运行
- 定期备份重要数据
- 创建免疫文件:
C:\Temp\lol.txt
-
检测指标:
- 文件后缀变为.sega
- 出现异常临时文件(包含0x40字节密钥数据)
- 异常网络连接到动态生成的IP地址
-
应急响应:
- 立即隔离感染主机
- 检查并备份可能的临时文件(包含密钥数据)
- 不要支付赎金,联系专业安全团队
七、总结
Sega勒索软件代表了当时勒索软件技术的先进水平,其特点包括:
- 创新的三方加密机制
- 强大的反分析技术
- 动态IP生成算法(IPGA)
- 精心设计的密钥管理体系
由于该勒索软件采用了Curve25519密钥协商和ChaCha20加密,且丢弃了必要的解密密钥,目前尚无公开的有效解密方法。防御该勒索软件的关键在于预防和早期检测。