直接切入正题。这个项目标题看着就让人想起那段时间的焦头烂额,mallox变种勒索病毒,不少企业都栽在这上面。尤其是这个被戏称为“rmallox”的最新变种,已经不是早几年那种拿到加密文件就只会坐等赎金的雏形了。作为全程参与这次某房地产公司解密恢复项目的一线人员,我把整个从应急、分析、解密到加固的完整过程拆开揉碎讲清楚,希望能帮到正在遭遇类似困境的兄弟团队。
先别急着看解密命令和脚本,先把一个关键认知摆正:这次能成功恢复,不是靠什么“破解密钥池”或者“暴力碰撞”,而是靠对变种加密逻辑的精准逆向,找到了它在密钥生成过程中的致命缺陷。这是整个项目的胜负手,也是最值得复盘和沉淀的部分。
1. 项目概述与勒索病毒最新态势
1.1 这次攻击的核心需求解析
当时接到的需求非常紧迫:某房地产公司的文件服务器和一批办公终端被同一时间加密,文件名后缀统一被改为.rmallox,每个目录下都丢了一个名为how_to_back_files.html的勒索说明文件。业务部门报过来的情况是:财务部、合同部、营销中心的共享文档全部打不开,设计院的CAD图纸、渲染原图也全军覆没。
客户方的核心诉求其实就两句话:把文件恢复回来,别让这次事故影响月底的工程款结算和项目备案。但这背后还有一层需求容易被忽略——摸清入口和路径,防止二次入侵。因为根据以往的经验,如果你只恢复了文件却没堵住漏洞,攻击者大概率在几天内又会回来加密一轮,而且是换一种变种,那场面就彻底失控了。
所以我给自己定的工作拆解是三条线并行:
- 第一,提取加密文件样本,分析加密算法特征,找到是否有可逆的漏洞或者可利用的恢复条件;
- 第二,溯源攻击入口,检查持久化后门,同时把客户的网络隔离和访问控制策略全部梳理一遍;
- 第三,搭建解密恢复环境,编写脚本对可恢复的文件批量处理,同步完善备份恢复方案。
1.2 当前mallox家族的演进概况
很多人对“mallox”这个名字很陌生,但只要做过勒索应急的人,听到.mallox、.mallox3、.rmallox后缀基本就知道怎么回事。它是近两年在国内中小企业圈子里攻击频率快速上升的一个家族,跟Phobos的运营方式有相似之处,都是典型的“初始攻击成功后人工介入”模式——也就是说,它不是纯靠自动化蠕虫感染,背后会有人盯着受害者的网络,手动横向移动、窃取数据、投放勒索程序。
最开始的mallox变种用的加密方式是AES-128 + RSA-1024的混合加密逻辑,文件内容加密得很快,密钥保护也算中规中矩。但问题是,这个家族更新迭代太频繁了,不同变种之间会有代码复用,也会出现一些低级的实现错误。这次的.rmallox变种,恰恰就栽在了密钥销毁不完全这个点。
我们需要冷静看待的一点是:不是所有勒索病毒都能解密。业内说的“能解密”,一般是指安全厂商拿到了主密钥、或者勒索程序本身存在可复用的漏洞。对于企业来说,最稳妥的永远是备份,而不是赌某个安全公司刚好发布了通杀解密工具。但这次我们在样本分析时发现,这个变种有“密钥残留”的罕见特征,这才给了我们用脚本恢复文件的机会。
2. 深度拆解rmallox加密机制与可利用缺陷
2.1 加密算法的技术原理剖析
要讲清楚我们后来为什么能解密,必须先讲清楚它是怎么加密的。
这个变种的加密流程大致可以拆成五步:
- 生成一个随机文件密钥(File Key),用于后续对称加密文件内容;
- 生成一对RSA公私钥对(2048位),公钥用于加密文件密钥,私钥理论上只保存在攻击者手里;
- 遍历磁盘文件,按后缀名列表筛选目标类型(比如
.xlsx、.dwg、.docx、.pdf、.jpg、.bak等),跳过系统文件和程序运行所需文件; - 对文件内容进行分块读取,使用AES 算法对数据块加密,关键逻辑在于每次加密的块大小和模式(这次变种用的是CTR 模式,所以理论上每个块之间是独立的,加密和解密都能随机访问任意位置的数据);
- 加密完成后,把RSA公钥和加密后的文件密钥一起写入文件尾部,并重命名,程序销毁内存中的明文密钥。
这里稍微展开说下CTR 模式(计数器模式)。它的加密方式是把一个递增的计数器值用分组加密算法做处理,生成密钥流,再和明文做异或。异或(XOR)是双向运算,只要我知道了密钥流,就能用同样的方式恢复明文。这跟CBC模式不一样,CBC模式中每个块依赖前一个块,中间错一个节点后面全乱,而CTR模式天然支持随机读取,这也是后来我们能够在部分文件缺失尾部数据的情况下依然恢复大部分内容的原因。
2.2 致命缺陷:密钥残留与部分文件未加密尾块
接下来就是重头戏。我们在分析样本时发现,这个最新变种在加完密之后,没有对文件密钥结构体所在的内存区域做清零处理。这就意味着,在进程退出前,只要内存中的密钥结构体仍然存在,我们就有机会通过转储进程内存的方式把密钥抠出来。
但实际操作中,客户现场已经重启过机器、杀毒软件也清掉了勒索程序本体,所以内存转储这条路在多数终端上是走不通的。不过,另一条线索很快出现了:我们在分析加密文件尾部写入的元数据块时发现,结构体中有相当一部分字节是固定的常数值,并没有真正用随机数填充。这一下子把RSA公钥保护和“密钥加密保护”的强度拉低了一个档次。
更关键的是,部分文件的尾部边缘块没有参与加密,特别是那些文件大小不是AES分块整数倍的文件,最后几个字节会残留原文。这类文件如果损坏不严重,是可以通过直接截断尾部并修复文件结构来恢复的,比如对Office文档和文本文件非常有效。
所以总结一下可利用的点:
- 密钥结构体存在固定字节残留,导致有效密钥空间大幅缩小;
- CTR模式的密钥流在已知部分明文和对应密文后,能够反推出该区域的密钥流,进而解密相邻区域;
- 未加密的尾块和文件内部大量零字节空白区,可以作为已知明文攻击的切入点。
2.3 为什么不能直接用网上公开的通用解密器
在应急过程中,客户一直在问:网上说某某公司发布了mallox解密工具,能不能直接拿来用?
我的回答是分情况。安全厂商发布的解密工具,通常只针对已经逆向彻底的特定版本。而这个.rmallox变种的核心参数(比如加密文件头标识、密钥派生函数的盐值、文件扩展名字符串)都改了,直接套用大概率提示“不支持该样本类型”。即使强行修改后缀去跑,也可能因为加密算法模式判断错误导致二次损坏。
勒索病毒应急的第一条铁律就是:未做镜像备份前,绝不拿原文件去做解密尝试。因为我们碰到过太多案例,受害者在工具不匹配的情况下反复对原始文件操作,结果把原本还能靠备份恢复的部分也彻底搞坏了。
3. 解密恢复项目的完整实操过程
3.1 被加密文件的整体抢救策略
拿到客户环境后的前两个小时,我们没有碰任何加密文件,先做了一整套“保全型”操作:
- 对核心文件服务器做块级别镜像备份,保证后续操作出错还能回到原点;
- 挑选出几十个不同格式、不同大小的加密样本文件,单独拷贝到隔离分析环境;
- 记录加密文件的原始目录结构,为后续批量恢复固定路径做准备;
- 检查系统日志和进程记录,判断攻击者的横向移动路径,排查持久化后门。
这个先后顺序极其重要。很多团队一上来就直接跑解密脚本,万一脚本本身有bug,那就可能把原本通过数据恢复软件还能找回的文件彻底抹掉。先备份、后恢复,永远是动作标准。
3.2 文件格式识别的关键参数
在逆向加密逻辑的同时,我们同步开展了“按文件类型识别破损程度”的工作。因为每个文件格式的内部结构不一样,恢复的策略也会有所区别。
| 文件类型 | 内部结构特征 | 恢复优先级与策略 |
|---|---|---|
| Office文档 | OLE/复合文档或ZIP结构,头部和文件分配表极其重要 | 优先采用“已知文件头+尾部数据截断”策略,修复结构后利用软件自身修复机制 |
| 头部有版本号,xref交叉引用表位于文件尾部附近 | 若能拿到交叉引用表偏移,可以重建文件;若尾部损坏较大,则恢复概率较低 | |
| DWG图纸 | AutoCAD格式有版本标识,内部有对象映射表 | 优先尝试修复头部版本段,需要按版本特征手动重建部分数据 |
| 文本类 | 纯文本或CSV,没有固定二进制结构 | 可通过CTR密钥流恢复大部分内容,修复率高 |
| 图片(JPG等) | JPEG有分段标记(FFD8开头、FFD9结尾) | 若加密覆盖了文件主体,恢复结果不理想,只能尝试碎片重组 |
实际项目里,Office文档族和DWG图纸的恢复优先级最高,因为这直接关系到客户的工程造价和结算业务。而图片类文件由于加密块覆盖面积太大,且缺少类似ZIP目录的冗余结构,最终恢复率确实不理想。不过我们本着“能救一点是一点”的原则,还是把图片里的缩略图、部分EXIF信息这些零散碎片尽力提取了出来,为客户留了一份底。
3.3 基于密钥残留的暴力降复杂度恢复
这里写一下我们最终解密脚本的核心思路,不贴完整代码,给可借鉴的伪代码逻辑:
1. 读取加密文件末尾的元数据块(最后1024字节) 2. 定位到文件密钥密文区 3. 识别结构体中的固定字节常数段,把未知部分单独提取 4. 利用固定常数段 + 已知加密模式的约束条件,对文件密钥候选空间进行分治处理 5. 对每个候选密钥,先解密文件头部某个固定区域块,如果明文匹配已知文件头(如PK、D0CF11E0等),则判定为正确密钥 6. 锁定正确密钥后,按CTR模式对文件数据逐块解密,每解密一块自动重新计算校验听着好像很顺利对吧?但实际上,文件的多样性是最大的敌人。比如客户有一批文件是加密前已经在文件服务器里处于打开状态,内容占用不连续,这部分文件的加密块偏移和正常情况不一样,就导致我们通过头部匹配恢复了一块区域,但中间穿插着大段的旧数据,需要额外做碎片清理。
这块工作非常依赖人工经验,并不存在一键全自动工具能把所有格式都完美还原。所以我在现场一再跟客户强调:解密软件解决的是“数据可读”的问题,而“数据完整还原”往往需要人工根据文件结构做二次拼接修复。这也是勒索恢复项目里最耗时但也最能体现技术深度的地方。
3.4 修复被修改的系统配置与解绑后遗症
除了文件本体恢复,还有一项容易被新手忽略的工作:攻击者往往会修改系统防火墙策略、关闭还原点、篡改服务启动类型,甚至替换部分系统DLL。这些留在暗处的破坏如果不修复,就算文件回来了,系统也随时可能崩。
在这个项目里,我们单独抽了两个人处理这个问题:
- 逐台检查计算机管理中的“任务计划程序”,删除攻击者创建的持久化计划任务;
- 检查注册表
Run、RunOnce键和服务的ImagePath,清理异常指向; - 核查Windows事件日志中的登录记录,找出攻击者使用的账号;
- 校验关键系统文件的hash值,对有问题的客户端进行系统级修复或重装。
这些操作看着琐碎,但都是防止“二次交赎金”的关键。因为勒索团伙一般在首次攻击后会在受害网络里留不止一个入口,如果你只恢复文件不扫后门,你会再被加密一次,那场景就真的令人绝望了。
4. 解密恢复过程中的常见问题与排查手记
4.1 为什么有的文件解密后依旧打不开
解密完成后,自然会有客户当场测试文件。我们分门别类做了一份开放验证记录,发现有几类情况:
- Office三件套:大多数可以正常打开,但部分提示“文件已损坏,是否尝试修复”。这是正常现象,因为文件头部的加密块恢复了,但中间区域少数块的密钥流匹配不精确,导致内容存在微小残缺。让WPS或Office自行修复,大概率能找回大部分文字和表格内容。
- PDF文件:部分老版本PDF恢复成功率较高,因为其结构简单、交叉引用表容易重建。而那些带有大量嵌入字体和矢量图形的复杂PDF,恢复后可能出现缺页错位。
- DWG文件:能打开图框和标题栏,但部分填充、外部参照可能丢失。这需要我们手动按块补缺。
- Excel(xlsx):如果内部XML结构损坏,打开时会有非常明确的提示。我们通常建议使用SpreadsheetLibrarian这类工具先提取内部XML,保留数据的希望远大于直接硬开原文件。
还有一类坑要特别讲:不要在解密后的文件上再次运行文件恢复软件。因为数据恢复软件是扫描空闲簇的原理,每次启动它本身就会往磁盘写入临时数据,反而可能覆盖了原本可以恢复的残余文件簇。
4.2 遇到超大文件和RAID阵列的恢复问题
客户的工程图纸库是存放在RAID5的存储设备上的,卷内有大量几百MB甚至上GB的超大文件。这些文件在恢复时遇到的问题更微妙:
- 大文件被分成很多个加密块,恢复时如果多线程并发解密的顺序控制不到位,就会造成块错位;
- RAID5在数据读写时会夹杂校验块,如果直接从虚拟磁盘层做镜像,可能会导致恢复出来的文件内部在某些区域出现“横切”一样的乱码;
- 某些文件长度并不是加密块大小的整数倍,尾部恢复策略失效。
这部分我们最终的解法是先做完整卷的image镜像,再把image挂载到备份机上,用支持随机读写的恢复程序分段写回,同时开启日志校验,记录每个块的恢复状态。整整跑了一天两夜,最终大文件的恢复率在96%左右,剩下4%的文件因底层物理坏道叠加加密损坏,确实回天乏力。这也是实实在在要告诉客户的:再牛的技术也救不了物理介质的老化问题。
4.3 环境变量残留与杀软误报的坑
解密脚本在客户服务器上运行时,必须关掉或加入白名单的杀毒软件包括:某数字企业版、某管家网络版、Windows Defender。原因很简单:我们的脚本要批量读取加密文件、写回解密数据,行为模式跟勒索程序加密文件高度相似,杀软几乎一定会拦截。第一次现场跑的时候,脚本刚启动一秒钟就被实时防护干掉了,后来调整为“关键目录白名单+延迟扫描”后才顺利跑完。
另外还有个小坑:某些服务器的环境变量里,临时目录指向的是共享文件卷。脚本运行时生成的中间文件会写到共享盘上,满盘之后引发连锁报错。所以在跑批处理前,务必检查TEMP、TMP变量是否指向本地盘,防止中间数据写入被监控盘符。
4.4 经验教训:这类项目为什么必须在隔离区操作
我复盘整个项目,最想强调的一条其实是隔离区操作。有兄弟团队在处理类似事件时,因为图省事,直接在客户的域控服务器上装了逆向分析工具,结果激活了某款安全软件的“域监控模式”,把域内所有客户端的文件都拉了实时扫描,CPU狂飙,业务系统卡死,最后反而把客户惹毛了。
对勒索恢复这类专项工作,正确的环境应该是:
- 独立的分析用虚拟机,与客户业务网物理隔离;
- 下载样本和工具走独立互联网出口,避免病毒样本在内网扩散;
- 恢复用的批量脚本,先在测试机上跑一遍全部文件类型样本,确认无误再批量执行;
- 操作全程记录日志,每个步骤都有可回溯记录。
5. 从灾难中总结的防护加固建议
到这里,解密的活儿基本结束。文件恢复了,业务也恢复了,但真正的工作才刚开始。客户在这次事件里暴露出来的问题,几乎代表了大多数中小企业网络安全的通病。
5.1 外网入口管控与邮件网关策略
这次攻击的原始入口极大概率是暴露在外网的远程桌面服务。客户有部分设计外包人员需要在家连入内网,于是IT就开了一个3389端口映射,密码还是弱口令。攻击者利用密码喷洒工具试图登录,最终成功拿下。
加固方案看起来不那么“高级”但非常实用:
- 禁止向公网直接暴露3389、22、445等服务端口,统一使用堡垒机+多因素认证(MFA);
- RDP账号密码必须强制12位以上,且复杂度策略要求包含特殊字符,确保密码库中不能出现常见键盘序列;
- 如果业务确实需要远程接入,优先考虑合规的零信任方案,而不是裸奔式端口映射。
5.2 数据备份的分层策略与验证机制
谁都知道要做备份,但真正能做到备份可用的公司少之又少。这个项目中我们发现,客户其实有备份系统,但备份任务已经连续三周执行失败,原因是备份目标盘满了,一直没人处理。而且备份策略是单份拷贝,一旦主备份也被加密,基本等于没有备份。
我给出的建议是3-2-1-1备份原则:
- 数据保留三份副本;
- 存储在两种不同介质(服务器磁盘、磁带库/对象存储);
- 至少有一份异地备份;
- 加入不可变快照(WORM存储或云上的备份锁功能),防止勒索程序连备份一起删掉。
同时强调备份验证不是“看任务跑完没”,而是每月做一次抽查恢复,直接在备用环境上挑起一套业务系统,跑一遍关键流程,确认备份真能扛住。
5.3 终端安全与威胁检测体系的落地
市场上没有百分之百能防住所有勒索病毒的安全软件,但良好的终端检测与响应体系绝对能把攻击者的停留时间压缩到极短。这个案例中,攻击者从拿下入口到投放勒索程序,中间隔了近一天时间,如果当时有比较基础的EDR或者SIEM,至少能通过异常登录和横向移动行为触发告警,大大降低损失。
对于预算有限的企业,建议至少做到:
- 全终端安装带有行为检测能力的EDR,开启“勒索软件防护”模块;
- 对特权账号和域管账号做实时审计,设置异常行为阈值;
- 关闭局域网内不必要的文件共享,尤其是“Everyone可写”这种坑爹权限;
- 分段办公网、服务器网、攻防演练环境的访问边界,避免一台电脑中毒全公司陪葬。
这些都是写进报告里的建议,也是我真心希望每一个甲方能真正落地的措施,而不是只看完报告就搁置。
6. 后续扩展与应用前景
这次项目结束后,我们也在思考一个问题:既然这次是通过密钥残留缺陷实现了恢复,后续针对这个家族的新变种,是否也能形成一套自动化分析和恢复平台?
从技术上来看,思路是可行的。把加密样本的文件头特征、元数据块结构、密钥派生过程中的固定字节位置,全部结构化录入威胁情报平台。下次遇到类似变种,只要上传三个加密样本,系统自动比对特征是哪个版本,直接产出可执行方案。这在业内已经有先例,但还远未普及。
我个人在实际操作中的体会是,勒索恢复的核心不在于工具本身有多么高端,而在于你对文件系统的理解、对加密机制的掌握,以及现场处置时的冷静有序。冷静有序尤其重要。出事之后,客户已经很慌了,技术团队如果也跟着手忙脚乱,那整个项目就会陷入恶性循环。先搭镜像、再分析、再编写工具、再批量恢复、再加固,每一步都按部就班,最终大概率能救回大部分数据。
最后再分享一个小技巧:日常操作中,尽量保持对所有文件的扩展名可见,并对重要目录启用文件完整性监控。当勒索病毒开始重命名文件时,你能第一时间看到一大批文件后缀变了,这时候立刻关机断网,比等着杀毒软件弹窗再反应快得多。很多人问我,为什么你们的恢复率比别人高一点?其实就是赢在“第一时间”和“少犯错”。
这个类型的项目,我们不希望越来越多,但它确实是安全行业里绕不开的一环。多沉淀一些解密恢复的实战经验,多给客户留下有效的防护方案,这比渲染恐慌情绪有价值得多。希望这篇复盘,能给正在处理类似问题的团队带来一些参考。