Synology NAS Ransomware Hardening Specification|世纪云峰科技
以下事实经多方独立来源交叉证实,可作为决策依据:
.L0CK3D 或 .LOCK3D,每个目录生成 read-me3.txt 勒索信,首行为 C3RB3R INSTRUCTIONS。Synology-SA-26:13(2026-09-18):CVE-2026-13639 / CVE-2026-13684,CVSS 9.8,未授权任意文件读写。Synology-SA-26:14(2026-10-22):PHP2Shell,CVE-2026-109618 / CVE-2026-109619,CVSS 9.8,未授权远程代码执行。Synology-SA-26:15(2026-10-29):Node2Shell,CVE-2026-111497,CVSS 9.8,影响 Chat 客户端。以下事项尚未形成公开定论,方案中按"最坏情况"设防,但不作为追责或索赔依据:
| 事项 | 当前状态 | 说明 |
|---|---|---|
| 具体入侵入口 | 三份口径并存,均未证实 | 群晖官方指向 SA-24:20(2024-12 已修);360 指向 SA-26:13;第三方应急团队指向 SA-26:14 与容器服务 RCE |
| 是否存在新 0day | 假设,证据不足 | 有受害设备运行最新 DSM 7.4.1-90080 Update 1,但"最新版被加密"不等于"最新版存在未知漏洞" |
| Docker/GitLab 容器为入口 | 单一来源,未坐实 | 现场吻合度高,但无完整入侵链证据 |
| 勒索信称"已下载数据、将公开售卖" | 攻击者单方声明,未证实 | 常见施压话术;但企业侧须按"可能已泄露"启动评估(见第六章) |
所有公开受害案例高度一致地同时具备以下三个条件:
| 编号 | 措施 | 操作路径 / 命令 |
|---|---|---|
| 1.1 | 关闭 DSM 管理界面公网映射(默认 5000/5001) | 路由器 / 防火墙:删除对应端口转发规则 |
| 1.2 | 关闭 SSH(22)、Telnet、FTP 的外网可达性 | DSM 控制面板 → 终端机和 SNMP → 取消勾选 SSH(非必要即关闭) |
| 1.3 | 关闭 UPnP 自动端口映射 | 路由器管理界面 → UPnP 禁用 |
| 1.4 | 停用 QuickConnect 与 DDNS 直连 | DSM 控制面板 → 外部访问 → QuickConnect 关闭 |
| 1.5 | 排查并临时下线反向代理、Cloudflare Tunnel 等穿透入口 | 检查 nginx / frp / cloudflared 配置 |
| 1.6 | 远程访问改走 VPN 或零信任组网 | WireGuard / Tailscale / 深信服 aTrust + IP 白名单 |
| 1.7 | 关闭非必要的 SMB/AFP 对外共享,收敛到内网网段 | 控制面板 → 文件服务 → SMB → 高级设置 |
控制面板 → 更新和还原 → DSM 更新。必须比对完整 build 号,不能只看主版本号("我是 DSM 7.4"没有意义,7.4-90075 之前的 7.4 全部暴露)。
| DSM 分支 | 最低安全版本 |
|---|---|
| DSM 7.4 | 7.4-90075 或更高 |
| DSM 7.3 | 7.3.2-86009-4 或更高 |
| DSM 7.2.2 | 7.2.2-72806-9 或更高 |
| DSM 7.2.1 | 7.2.1-69057-12 或更高 |
| DSM 7.2 | 7.2-64570-4 或更高 |
| DSM 7.1.1 | 7.1.1-42962-7 或更高 |
| DSM 6.2 | 6.2.4-25556-8 或更高 |
| BeeStation Manager (BSM) | 1.1-65374 或更高 |
| Synology Unified Controller | 3.1.4-23079 或更高 |
None——除升级外官方未提供任何替代缓解措施。
打开套件中心,逐一核对。DSM 内置的系统 PHP 不对外暴露、风险较低;真正需要处理的是单独安装的 PHP 套件及其依赖应用。
| 套件 | 最低修复版本 | 备注 |
|---|---|---|
| PHP 7.3 | 无补丁(EOL) | 必须卸载或迁移至受支持版本 |
| PHP 7.4 | 7.4.33-0131 或更高 | |
| PHP 8.0 | 8.0.30-0122 或更高 | |
| PHP 8.1 | 8.1.34-0120 或更高 | |
| PHP 8.2 | 8.2.35-0171 或更高 | |
| PHP 8.3 | 8.3.36-0051 或更高 | |
| PHP 8.4 | 8.4.27-0051 或更高 | |
| Synology Calendar | 3.0.4-21435 或更高 | |
| Mail Station | 30000002.3.19-20333 或更高 | |
| Synology Chat | 按 SA-26:15 更新至修复版本 | CVE-2026-111497 |
同样受 PHP2Shell 波及的套件(需一并检查并更新):Web Station、WordPress、phpMyAdmin、Joomla、MediaWiki、KodExplorer、vtigerCRM、IDrive。(Synology Drive 官方服务不受影响。)
这是本次事件的高危区域,且常被遗漏。
| 编号 | 措施 |
|---|---|
| 2.3.1 | 全量升级容器镜像,尤其是 GitLab、Gitea、Confluence 等对外提供服务的应用 |
| 2.3.2 | 禁止整卷挂载:不得将 /volume1 或整个存储卷挂载进容器,改为按目录最小化挂载 |
| 2.3.3 | 禁止 privileged 特权模式运行容器 |
| 2.3.4 | 禁止挂载 /var/run/docker.sock |
| 2.3.5 | 容器服务端口不得直接映射至公网,一律经反向代理 + 认证层 |
| 2.3.6 | 清理无主、停止更新、来源不明的镜像与容器 |
| 编号 | 措施 |
|---|---|
| 3.1 | 停用内置 admin 账号,新建非默认名称的管理员账号,原账号停用而非删除(保留审计链) |
| 3.2 | 对 administrators 组全量开启双重验证(2FA),无例外 |
| 3.3 | 开启自动封锁:建议"5 分钟内失败 5 次封锁 IP"(控制面板 → 安全性 → 账号保护) |
| 3.4 | 全量轮换管理员凭据,并使现有会话失效 |
| 3.5 | 清理长期未登录账号、离职人员账号、测试账号、过期共享链接 |
| 3.6 | 检查共享文件夹权限,按最小必要原则回收 everyone / guest 权限 |
| 3.7 | 开启密码强度策略与定期更换策略 |
打完补丁不等于设备干净。补丁堵的是入口,已经进来的东西还在。
本轮攻击已观察到把恶意拉取脚本写入 crond 定时计划、静默潜伏数日后集中引爆的手法,因此会出现"明明前几天升级过,今天还是中招"。
# 4.1 计划任务排查(逐个看,不能只看 /etc/crontab)
cat /etc/crontab
ls -la /etc/cron.d/ /var/spool/cron/crontabs/
cat /usr/syno/etc/crontab 2>/dev/null
# 4.2 查找典型恶意特征:外联下载后直接执行、base64 解码、.onion 域名
grep -nE '(curl|wget).*\|.*sh|base64 -d|\.onion' /etc/crontab /etc/cron.d/* 2>/dev/null
# 4.3 容器风险排查:哪些容器开了特权、挂了整卷或 docker.sock
docker ps -q | xargs docker inspect \
--format '{{.Name}} priv={{.HostConfig.Privileged}} {{range .HostConfig.Binds}}{{.}} {{end}}'
# 4.4 勒索特征扫描
find /volume* -name "*.L0CK3D" -o -name "*.LOCK3D" 2>/dev/null | head -20
find /volume* -name "read-me3.txt" 2>/dev/null | head -20
# 4.5 Web 目录异常文件排查
ls -la /usr/syno/synoman/webman/
find /volume*/web -name "*.php" -newermt "2026-10-01" 2>/dev/null
# 4.6 登录日志(重点看异地 IP、异常时段)
cat /var/log/synolog/synodsm.log 2>/dev/null | tail -100
# 4.7 异常账号与管理员组
cat /etc/passwd | grep -E ':0:|:100:'
判断标准只有一条:备份必须做到攻击者碰不到,而不是"我也有一份"。
| 常见误解 | 实际情况 |
|---|---|
| RAID 1/5/6 能保护数据 | 只防硬盘物理损坏。加密发生在文件系统层,阵列会忠实把密文镜像到每一块盘——得到的是 N 份完美的加密副本 |
| Btrfs 定时快照是保险 | 拿到管理员权限后快照可被删除;未开防篡改的快照等于没有 |
| 本机 Hyper Backup 是备份 | 备份仓库在同一台设备且可写,加密程序遍历所有挂载卷时,备份也是普通文件 |
| Cloud Sync 云同步是备份 | 只保证两端一致,会把密文反向推送覆盖云端干净副本 |
| 要素 | 要求 |
|---|---|
| 3 份数据副本 | 生产数据 + 本地备份 + 异地备份 |
| 2 种不同介质 | 如 NAS 阵列 + 外接硬盘 / 对象存储 |
| 1 份异地 | 物理隔离的另一站点或云端,独立账号、独立权限,不能是同一 DSM 账号能删掉的那种 |
| 1 份离线或不可变 | 备份完成即断开连接的硬盘,或启用 WORM 保留策略的不可变快照 |
| 0 错误 | 定期做恢复演练,验证文件可打开、内容完整 |
| 层级 | 措施 | 说明 |
|---|---|---|
| 边界 | 将 NAS 划入独立 VLAN,与办公网、访客网隔离 | ACL 仅放行必要的管理网段 |
| 边界 | 启用 IPS 虚拟补丁 | 在漏洞修复窗口期先行拦截攻击流量 |
| 边界 | 检测并阻断外联 Tor、已知 C2 的回连行为 | 勒索软件的典型外联特征 |
| 终端 | 部署 EDR 勒索专项防护(诱饵文件监测 + 加密行为拦截) | 阻断从办公终端经 SMB 横向加密 NAS 的路径 |
| 监测 | 对 NAS 开启日志外送与集中审计 | 确保日志不被本地攻击者清除 |
| 运营 | 建立补丁的常态化响应机制 | 关键基础设施类高危漏洞 48 小时内评估、7 日内修复 |
| # | 核查项 | 达标标准 | 完成 |
|---|---|---|---|
| 1 | DSM 公网端口映射 | 5000/5001/22 等端口无任何公网转发规则 | ☐ |
| 2 | UPnP | 已禁用 | ☐ |
| 3 | QuickConnect / DDNS 直连 | 已停用 | ☐ |
| 4 | 远程访问方式 | 仅 VPN / 零信任组网 + IP 白名单 | ☐ |
| 5 | DSM 版本 | 达到第 2.1 节对应分支最低版本 | ☐ |
| 6 | PHP 套件版本 | 达到 2.2 节对应版本;PHP 7.3 已卸载 | ☐ |
| 7 | Calendar / Mail Station / Chat | 均达修复版本 | ☐ |
| 8 | Web Station / WordPress / phpMyAdmin 等 | 已更新或已下线 | ☐ |
| 9 | 容器镜像 | 全部升级;无私服特权容器、无整卷挂载、无 docker.sock 挂载 | ☐ |
| 10 | 内置 admin 账号 | 已停用 | ☐ |
| 11 | 管理员 2FA | 100% 开启 | ☐ |
| 12 | 自动封锁 | 已启用(5 次/5 分钟) | ☐ |
| 13 | 凭据轮换 | 管理员密码已更换,旧会话失效 | ☐ |
| 14 | 计划任务 | 无 base64 / .onion / curl|sh 类异常条目 | ☐ |
| 15 | 登录日志 | 无未知异地 IP 登录记录 | ☐ |
| 16 | 勒索特征扫描 | 无 .L0CK3D / read-me3.txt | ☐ |
| 17 | 不可变快照 | 关键共享文件夹已启用 WORM 保留策略 | ☐ |
| 18 | 异地备份 | 存在独立账号管理的异地 / 离线副本 | ☐ |
| 19 | 恢复演练 | 近 90 天内执行过一次并留存记录 | ☐ |
| 20 | 日志外送 | NAS 日志已送至独立日志服务器 | ☐ |
| 步骤 | 动作 | 说明 |
|---|---|---|
| STEP 1 | 物理断网:拔网线、关 WiFi、断开聚合口 | 不要只在系统里点"禁用网络"。目的是切断加密继续跑与内网横向扩散 |
| STEP 2 | 停掉所有同步与备份组件:Docker、Hyper Backup、Cloud Sync | 这是阻止密文覆盖云端干净副本的唯一窗口 |
| STEP 3 | 不删、不重装、不格式化、不跑 Data Scrubbing | Btrfs 写时复制机制下历史数据块可能尚未覆写,一次碎片整理可能清掉最后空间 |
| STEP 4 | 保留现场证据 | read-me3.txt、2–3 个加密小样本、/var/log 日志、登录记录、crontab、容器配置 |
| STEP 5 | 只读磁盘镜像 | 不在原盘操作,先镜像后在副本上分析 |
| STEP 6 | 翻快照中心 | 找加密发生前的快照整体回滚;若快照已被删除,此路断 |
| STEP 7 | 先清后门,再恢复数据 | 剥离 crond 等持久化后再恢复,否则等于把攻击者请回门里 |
有受害者报告,在加密进程尚未结束时挂起进程并导出内存,从中取出 ChaCha8 密钥并成功解密。这要求发现时不关机、不重启,并由有经验的人员操作。密钥在内存里,关机就没了——这不是通用方案,但足以说明"不要重启"不是客套话。
勒索信中明确声称"已下载大量数据,不付款将公开售卖"。该声明目前无法证实,属攻击者单方陈述,但企业侧不得按"它是假的"处置。
若受影响设备的共享目录中存储过客户资料、身份证件、合同文本、员工个人信息等,则事件性质不限于"业务停机与数据恢复",须并行启动以下合规流程:
| 事项 | 依据 | 动作 |
|---|---|---|
| 个人信息泄露评估 | 《个人信息保护法》第 57 条 | 评估泄露范围、影响与危害程度 |
| 通知义务 | 同上 | 难以确定是否泄露时,须向主管部门报告;可能造成危害的,通知个人 |
| 数据安全事件报告 | 《数据安全法》 | 按规定向有关主管部门报告 |
| 网络安全事件处置 | 《网络安全法》及等保要求 | 启动应急预案,留存处置记录不少于 6 个月 |
| 证据保全 | — | 事件日志、镜像、勒索信原件须完整保存,作为后续报案与合规举证材料 |
| 告知客户 / 合作方 | 合同约定与保密义务 | 依合同条款评估是否需要通知数据处理委托方 |
| 周期 | 动作 |
|---|---|
| 加固完成后 1 周内 | 按第四章清单逐项复核,签署验收记录 |
| 每月 | 检查 DSM 与套件更新,核对官方安全公告 |
| 每季度 | 备份恢复演练 + 暴露面扫描(外网视角) |
| 每半年 | 账号权限审计、容器资产审计、应急预案演练 |
| 长期 | 订阅群晖官方安全公告(Synology PSIRT)与国家级漏洞库告警,建立高危漏洞 48 小时响应机制 |
验收的核心判据不是版本号,而是从外部打一次确认打不到:
以下脚本为只读操作,不修改任何配置、不删除任何文件。以 SSH 登录后执行,将输出留存备查。
#!/bin/sh
# Synology NAS 勒索风险自查脚本 (read-only)
# 用法: sudo sh synology_ransomware_audit.sh > audit_$(date +%Y%m%d).txt
echo "===== [1] 系统版本 ====="
grep -E '^(productversion|buildnumber|smallfixnumber)=' /etc.defaults/VERSION
echo "===== [2] 勒索特征扫描 ====="
find /volume* \( -name "*.L0CK3D" -o -name "*.LOCK3D" -o -name "read-me3.txt" \) 2>/dev/null | head -30
echo "-- 若上方无输出,未发现勒索特征 --"
echo "===== [3] 计划任务 ====="
cat /etc/crontab
ls -la /etc/cron.d/ 2>/dev/null
echo "-- 可疑特征匹配 --"
grep -nE '(curl|wget).*\|.*sh|base64 -d|\.onion' /etc/crontab /etc/cron.d/* 2>/dev/null
echo "===== [4] 容器风险 ====="
docker ps -q 2>/dev/null | xargs -r docker inspect \
--format '{{.Name}} priv={{.HostConfig.Privileged}} binds={{range .HostConfig.Binds}}{{.}} {{end}}' 2>/dev/null
echo "===== [5] 高权限账号 ====="
awk -F: '$3==0 || $3==100 {print}' /etc/passwd
echo "===== [6] 近期登录记录 ====="
tail -100 /var/log/synolog/synodsm.log 2>/dev/null
echo "===== [7] 监听端口 ====="
netstat -tlnp 2>/dev/null | grep -vE '127.0.0.1|::1'
echo "===== [8] PHP 套件版本 ====="
ls -d /volume*/@app/PHP* 2>/dev/null
synopkg version PHP7.4 PHP8.0 PHP8.1 PHP8.2 PHP8.3 PHP8.4 Calendar MailStation 2>/dev/null
echo "===== 检查结束 ====="
find 仅做列出,不做删除。发现 .L0CK3D 文件时,请立即按第五章流程处置,不要执行任何删除操作。
世纪云峰科技提供NAS安全加固、备份体系建设与勒索事件应急响应服务。
立即咨询:156-2522-0012
获取支持