记一次勒索软件样本分析
字数 2898 2025-08-24 07:48:10
CryptNet勒索软件样本分析教学文档
1. 样本概况
- 样本类型: .NET编写的勒索软件
- 保护方式: 使用.NET Reactor进行打包混淆
- 家族名称: CryptNet勒索软件
- 攻击特点: 数据泄露与文件加密相结合的双重勒索攻击
- IOC:
- MD5: 733a808bc1be9d56026fd39b6e587ce4
- SHA1: 323c2d8db7a1104a6631f420b3dfa98f693058a0
- SHA256: 2e37320ed43e99835caa1b851e963ebbf153f16cbe395f259bd2200d14c7b775
- ANY.RUN沙箱链接: https://app.any.run/tasks/95d0f6d2-f8c1-4cff-ab4c-e804df757dc1/
2. 初始分析准备
2.1 解混淆工具
使用**.NET Reactor Slayer**对样本进行解混淆处理,以便后续分析。
2.2 分析工具
推荐使用dnSpy进行静态分析,配合动态调试工具。
3. 主要功能分析
3.1 单一实例控制
- 创建互斥锁,名称为当前机器名称
- 确保计算机中只有一个实例运行
- 降低被检测的风险
- 实现方式:通过互斥锁检查,布尔值flag控制
3.2 勒索信息解密
- 使用
smethod_15函数对处理过的字符串进行解码和替换 - 解密后内容包含:
- 勒索软件标题:"CRYPTNET RANSOMWARE"
- 赎金说明
- .onion网站链接
- 受害者唯一ID
3.3 文件加密机制
3.3.1 加密目标选择
- 获取系统中所有驱动器信息(固定磁盘、移动磁盘、CD-ROM等)
- 对不同驱动器采用不同处理方式:
- 非系统盘:通过
Task.Factory.StartNew异步启动加密任务 - 系统盘:
- 定义排除目录数组
array - 获取系统盘根目录下所有子目录
- 跳过排除目录中的项目
- 对其余目录异步启动加密任务
- 定义排除目录数组
- 非系统盘:通过
3.3.2 文件加密实现
加密算法特点:
- 使用生成的256位密钥和IV,通过AES CBC模式加密文件
- 使用硬编码RSA密钥对生成的AES密钥进行加密
- 将加密后的AES密钥附加到加密文件中
硬编码RSA公钥:
<RSAKeyValue>
<Modulus>8TO8tQQRyFqQ0VShtSpLkDqtDVsrxS8SfdOsqRAj8mWF7sVoGzyZMcv501DF6iZUdKYsFDlaSMnuckG9+MJmD2ldZwU/0H6Xztkta1BkJWSO2qHg2JAGDp9ZsFGP1wDR9oRb1w7wtBe7Db3wf7q848+qKPWiTP/2R/jlR4evW73M65Jdo9uOzQnbmvw+blsloXeszuYlW2nCcwQ7WarzAK29UmM9ZHS0/lqzU0KHNU+DvyfGwmMJgtb2HN6GFGXq9Z0n3dNBCQVzdUl2G/7fLAMoFbJeExn5USZdFHr2ygheTilo/shmfq7tcPCZM8C4zqBtb0Nbct0f/M48+H920Q==</Modulus>
<Exponent>AQAB</Exponent>
</RSAKeyValue>
目标文件扩展名:
勒索软件会加密以下扩展名的文件(部分列举):
.myd, .ndf, .qry, .sdb, .sdf, .tmd, .tgz, .lzo, .txt, .jar, .dat,
.contact, .settings, .doc, .docx, .xls, .xlsx, .ppt, .pptx, .odt,
.jpg, .mka, .mhtml, .oqy, .png, .csv, .py, .sql, .indd, .cs, .mp3,
.mp4, .dwg, .zip, .rar, .mov, .rtf, .bmp, .mkv, .avi, .apk, .lnk,
.dib, .dic, .dif, .mdb, .php, .asp, .aspx, .html, .htm, .xml, .psd,
.pdf, .xla, .cub, .dae, .divx, .iso, .7zip, .pdb, .ico, .pas, .db,
.wmv, .swf, .cer, .bak, .backup, .accdb, .bay, .p7c, .exif, .vss,
.raw, .m4a, .wma, .ace, .arj, .bz2, .cab, .gzip, .lzh, .tar, .jpeg,
.xz, .mpeg, .torrent, .mpg, .core, .flv, .sie, .sum, .ibank, .wallet,
.css, .js, .rb, .crt, .xlsm, .xlsb, .7z, .cpp, .java, .jpe, .ini,
.blob, .wps, .docm, .wav, .3gp, .gif, .log, .gz, .config, .vb, .m1v,
.sln, .pst, .obj, .xlam, .djvu, .inc, .cvs, .dbf, .tbi, .wpd, .dot,
.dotx, .webm, .m4v, .amv, .m4p, .svg, .ods, .bk, .vdi, .vmdk, .onepkg,
.accde, .jsp, .json, .xltx, .vsdx, .uxdc, .udl, .3ds, .3fr, .3g2,
.accda, .accdc, .accdw, .adp, .ai, .ai3, .ai4, .ai5, .ai6, .ai7, .ai8,
.arw, .ascx, .asm, .asmx, .avs, .bin, .cfm, .dbx, .dcm, .dcr, .pict,
.rgbe, .dwt, .f4v, .exr, .kwm, .max, .mda, .mde, .mdf, .mdw, .mht,
.mpv, .msg, .myi, .nef, .odc, .geo, .swift, .odm, .odp, .oft, .orf,
.pfx, .p12, .pl, .pls, .safe, .tab, .vbs, .xlk, .xlm, .xlt, .xltm,
.svgz, .slk, .tar.gz, .dmg, .ps, .psb, .tif, .rss, .key, .vob, .epsp,
.dc3, .iff, .opt, .onetoc2, .nrw, .pptm, .potx, .potm, .pot, .xlw,
.xps, .xsd, .xsf, .xsl, .kmz, .accdr, .stm, .accdt, .ppam, .pps, .ppsm,
.1cd, .p7b, .wdb, .sqlite, .sqlite3, .db-shm, .db-wal, .dacpac, .zipx,
.lzma, .z, .tar.xz, .pam, .r3d, .ova, .1c, .dt, .c, .vmx, .xhtml, .ckp,
.db3, .dbc, .dbs, .dbt, .dbv, .frm, .mwb, .mrg, .txz, .mrg, .vbox, .wmf,
.wim, .xtp2, .xsn, .xslt
加密实现细节:
-
文件处理流程:
- 通过
Directory.GetFiles获取指定目录下所有文件 - 遍历文件,通过
Path.GetFileName获取文件名并与目标扩展名列表比对 - 修改文件属性:如果是只读文件,通过
fileInfo.Attributes = FileAttributes.Normal移除只读属性
- 通过
-
加密方式选择:
- 文件大小小于524288字节:调用
Class0.smethod_6进行完整加密 - 文件大小大于524288字节:调用
Class0.smethod_4进行分段加密 - 递归处理子目录中的文件
- 文件大小小于524288字节:调用
-
小文件加密(
smethod_6):- 使用
File.ReadAllBytes读取所有字节到数组 - 生成随机加密密钥(text)和初始向量IV(text2)
- 使用
fileStream.SetLength(0L)清空文件内容 - 使用
AesCryptoServiceProvider创建AES加密对象(CBC模式) - 将加密内容写入原文件,末尾附加标识符
- 使用
-
大文件分段加密(
smethod_4):- 通过
fileStream.Position设置文件指针位置 - 从指定位置读取指定长度的数据
- 调用
Class0.smethod_5对数据进行加密 - 将加密后的数据写回原位置
- 循环处理,直到加密整个文件
- 通过
3.4 桌面背景修改
- 通过
smethod_12函数实现 - 获取屏幕分辨率
- 使用
Bitmap生成图像 - 将图像保存为JPEG格式
- 调用Windows API
SystemParametersInfo设置桌面背景- 参数
20U表示SPI_SETDESKWALLPAPER - 参数
3U表示更新INI文件
- 参数
3.5 备份功能禁用
3.5.1 服务停止
- 首先检查当前用户是否为管理员
- 定义一组服务名称数组,包含备份和虚拟化相关服务:
veeam和VeeamDeploymentSvc:Veeam备份软件相关服务BackupExecVSSProvider:Veritas Backup Exec的VSS提供程序vss:Windows卷影复制服务(Volume Shadow Copy Service)
3.5.2 命令执行
通过smethod_10执行以下命令:
-
删除卷影复制:
cmd.exe "/C vssadmin delete shadows /all /quiet & wmic shadowcopy delete" -
禁用系统恢复功能:
cmd.exe "bcdedit /set {default} bootstatuspolicy ignoreallfailures & bcdedit /set {default} recoveryenabled no" -
删除备份目录:
cmd.exe "wbadmin delete catalog -quiet"
3.6 正常服务禁用
- 通过
smethod_13函数实现 - 定义一组进程名称数组
- 使用
Process.GetProcessesByName查找具有给定名称的所有进程 - 尝试使用
process.CloseMainWindows关闭这些进程
4. 整体执行流程
- 创建单一实例
- 解密并显示勒索信息
- 遍历驱动器,对不同盘符采用不同加密策略
- 非系统盘:直接异步加密
- 系统盘:排除关键目录后异步加密
- 更改桌面背景为勒索信息
- 检查管理员权限,若具备则:
- 停止备份相关服务
- 删除卷影副本
- 禁用系统恢复功能
- 删除备份目录
- 终止正常服务进程
5. 分析注意事项
-
环境隔离:
- 必须在虚拟环境中进行分析
- 确保物理机与虚拟机完全隔离
-
快照管理:
- 分析前创建完整快照
- 该勒索软件可能导致虚拟机无法正常恢复
- 可能影响物理机(如报告中所述)
-
防护措施:
- 禁用共享文件夹
- 禁用剪贴板共享
- 确保网络隔离
-
调试技巧:
- 重点监控文件系统操作
- 关注加密密钥生成过程
- 跟踪网络通信行为
6. 防御建议
-
预防措施:
- 定期备份重要数据,并离线存储
- 限制用户权限,避免使用管理员账户日常操作
- 禁用不必要的服务(如远程桌面、文件共享等)
-
检测措施:
- 监控异常文件加密行为
- 关注大量文件属性修改操作
- 检测vssadmin等备份工具的非正常使用
-
响应措施:
- 发现感染立即隔离系统
- 不要支付赎金
- 从干净备份恢复系统
-
技术防护:
- 部署行为检测型杀毒软件
- 启用文件扩展名过滤
- 限制PowerShell和CMD的使用权限
7. 解密可能性分析
由于该勒索软件使用:
- 随机生成的AES密钥(每次加密不同)
- 硬编码的RSA公钥加密AES密钥
- 私钥由攻击者持有
在没有私钥的情况下,目前没有公开的有效解密方法。可能的恢复途径:
- 从内存转储中提取AES密钥(如果系统未重启)
- 查找未加密的临时文件或备份
- 等待安全厂商发布解密工具(如果密钥被泄露或算法存在漏洞)
8. 扩展分析方向
-
网络通信分析:
- 跟踪.onion网站的连接行为
- 分析可能的C2通信机制
-
传播方式研究:
- 初始感染途径
- 可能的漏洞利用
-
同源分析:
- 与其他已知勒索软件的代码相似性
- 可能的发展演变路径
-
防御绕过技术:
- 反调试、反沙箱技术
- 持久化机制