深度分析Sorry勒索软件的加密实现与行为特征

2026-05-09 1 阅读 安全客
首页 阅读 安全资讯 安全知识 安全工具 活动 社区 学院 安全导航 内容精选 专栏 精选专题 安全KER季刊 360网络安全周报 深度分析Sorry勒索软件的加密实现与行为特征 阅读量 151911 发布时间 : 2026-04-29 13:32:51 x 译文声明 本文是翻译文章 译文仅供参考,具体内容表达以及含义原文为准。 Sorry勒索软件攻击事件 Sorry勒索软件自今年3月现身以来,利用各类常见企业软件漏洞发起攻击,能够远程加载攻击载荷,并展现出跨平台的勒索攻击能力。 本周,360反病毒团队持续收到与Sorry勒索软件相关的样本反馈与攻击告警信息,本轮勒索攻击的峰值集中爆发于4月中旬的两个周末。 结合样本逆向分析、加密文件结构还原及攻击行为链追踪,本次事件呈现出明显的“利用漏洞自动批量投放”与“目标文件定向加密”的攻击模式。从技术实现角度看,该家族采用分层密钥封装设计。即以RSA+RSA+AES-GCM 的算法组合方案实现文件加密与密钥保护操作。这一设计在兼顾了批量加密速度的同时,也大幅提高了受害者在无密钥的情况下想要破解算法直接恢复文件的难度。 此外,样本在运行时会主动收集主机标识信息,包括但不限于主机名称与基于当前设备环境特征计算出的“host_hash”值,并将其写入相关数据结构中,供攻击运营侧对受害主机与加密会话进行追踪管理。 综合来看,该变种具备完整的工程化实现。 其整体完成度较高,建议广大安全厂商将本次事件列为中高危等级的勒索事件,启动相应的分级响应流程。同时结合其在周末假期较为活跃的特性,对五一假期期间极有可能出现的新一轮攻击高峰做好安全防护预案。 本轮勒索事件攻击流程 本轮的Sorry勒索软件的典型攻击进程链如下: 图1. 攻击进程链示例 而该勒索软件的加密逻辑流程则如下图所示: 图2. 加密流程示意图 我们的分析人员综合完整的入侵、加密链条并结合我们的技术分析与解决方案,厘清了Sorry勒索家族完整的加/解密流程示意图,供大家更加直观地理解本轮攻击的总体情况。 图3. Sorry勒索软件攻击概况 勒索样本技术分析 环境初始化 我们以一个典型的勒索软件样本为例,其在运行后会首先停止MSSQL的相关服务。在诸多数据库服务中,勒索软件唯独停止了MSSQL相关服务,可见其勒索目标对服务器系统的针对性极强。 图4. 定向关闭MSSQL服务 而该样本所要加密的文件扩展名完整列表如下: db、db3、db_journal、dbf、dbx、fdb、mdb、mdf、ndf、sql、sqlite、sqlite3、sqlitedb、ldf、sdf、3db、accdb、accde、accdr、accdt、bdb、edb、adf、dbb、bak、doc、docx、docb、docm、dot、dotm、dotx、pdf、txt、rtf、odt、ods、odp、ott、xls、xlsx、xlsb、xlsm、xlt、xltm、xltx、ppt、pptm、pptx、pot、potm、potx、pps、ppsm、ppsx、ppam、psd、ai、eps、svg、png、jpg、jpeg、gif、bmp、tiff、tif、ico、raw、cr2、nef、orf、dng、raf、arw、webp、fpx、dwg、dxf、skp、indd 在加密扩展名的列表外,为避免不必要的系统异常导致加密失败,勒索软件还排除了部分文件的路径、文件名及扩展名。 被排除的文件名及扩展名如下: thumbs.db, netuser.dat, autorun.inf, iconcache.db, bootfont.bin, desktop.ini, pagefile.sys, .ds_store, .sorry, readme.md 被排除的目录、路径关键词如下 :\windows, \git\mingw64, \git\usr, \go\src, \go\pkg\mod, \java\jdk, \vmware\drivers, \program files\vmware, \inetpub\temp\apppools, programdata, efi.boot, efi.microsoft, all users, node_modules, .git, recycle.bin, system volume information, .trash, .cache, __pycache__, ieidcache, \appdata, .recovery, local settings, site-packages, test_importlib 图5. 前期初始化代码 文件加密算法 该勒索软件采用了AES-GCM算法对文件进行加密。其在开始正式的加密操作时,会首先对每个文件单独生成一个AES密钥和该算法的GCM模式所需的Nonce/IV值。 图6. 生成随机AES密钥 与此同时,勒索软件还会调用RSA算法生成一对公私钥,对用于加密文件所使用的AES-GCM的密钥进行加密。而在生成了该RSA密钥对之后,勒索软件会再次使用内置的主RSA公钥,加密上述现场生成的RSA私钥,并对现场获取到的用户名和机器名等信息进行加密。 图7. 生成RSA密钥对 勒索软件内置的主RSA公钥如下: 图8. 内置的RSA公钥 样本还会以独占或绕过保护的方式打开文件,以防止文件被占用时无法读取,影响其对文件的加密操作。 图9. 独占方式打开文件 勒索软件会基于NTAPI直接调用系统操作,该操作可以有效绕过大多数软件的常规API调用(如文件读/写操作),而直接向系统内核发起调用。这种做法主要为了规避包括EDR在内的各类安全客户端对于用户态接口调用的监控,实现所谓的“盲区加密”。 图10. 利用NTAPI进行盲区加密 数据结构 完成所有加密操作后,最终被加密完成的文件输出结构如下: Magic头部 1字节,固定内容0x11 图11. 写入Magic头 CHUNK长度值 4字节,长度数值大端顺序 图12. CHUNK_LENGTH数据 RSA封装块 前置4字节,长度值大端顺序。后续为密文块。 图13. RSA封装块 各数据区域独立分块的CHUNK_CIPHER 前置为4字节chunk_cipher_length,大端顺序。后续为与之长度对应的密文数据,且chunk_length = plaintext_chunk + 16。 图14. CHUNK_CIPHER_LENGTH数据 终止数据 4字节长度,固定使用0x00数据填充。 图15. 终止数据 分块大小均为0x100000字节(1MB)。 图16. 分块大小定义 而加密后文件附加数据大小计算公式如下: 具体到本次分析的样本,最终L1和L2的值为: L1=2048 L2=256 因此: 综上所述,被Sorry勒索软件加密后的数据长度计算方式如图所示: 图17. 附加数据长度计算方式 根据N值的不同,Δ的值如下表: 原大小 N 值 计算:2317 + 20×N 加密后附加数据大小 Δ 1 MB 1 2317+20 +2337 5 MB 5 2317+100 +2417 10 MB 10 2317+200 +