从伪装成勒索软件的擦除器(wiper)攻击中恢复,该攻击针对暴露于互联网的 Proxmox 基础设施(PSA-2026-00043-1 / CVE-2023-54391)。
攻击者擦除了客户机并破坏了文件系统。根据客户机的类型,有两条恢复路径:
以下是工具和方法论,经过泛化处理,以便对处于相同境况的任何人都有用。对源数据只读,CC0 许可。不包含任何真实恢复数据;示例输出使用占位符。
受损磁盘现在是你仅存的副本。不要修复它。先做镜像。
blockdev --setro /dev/<source> # 1. 立即设为只读
dd if=/dev/<source> of=/safe/disk.img bs=4M conv=noerror,sync # 2. 镜像到安全存储
# 3. 不要执行 fsck、以读写方式挂载或“修复”;这会覆盖雕刻器所需的块
# 4. 将所有源数据读取操作包裹在 scripts/source_guard.sh 中
# 5. 仅从镜像恢复,绝不使用原始磁盘
共享纪律,分离雕刻器。任何脚本均可使用 -h 运行。需要 Python 3.8+ / bash,无第三方依赖。source_guard.sh 需要 Linux 的 /proc/diskstats。
python3 scripts/make_demo.py
python3 scripts/bson_frame.py --total demo/*.bson
python3 scripts/sensitivity_scan.py demo/*.bson
python3 scripts/integrity_verify.py --compare demo/source demo/copy
按此顺序执行。雕刻步骤按客户机类型分支;setro+镜像的收尾步骤和基于内容键控的验证在两种情况下相同。
受损磁盘 ──setro+镜像──► 只读镜像
│
数据库 ──────────►│◄────────── 文件系统
雕刻 WT 页面 │ 雕刻文件
计数文档 │ 按内容分类 + 清单
│
暴露分级(RED/AMBER/GREEN)
验证副本(基于内容键控)
│
恢复
find | sort | xargs sha256sum | sha256sum 也会哈希路径和区域设置。使用 LC_ALL=C 或逐文件清单。sha256sum -c 在打印 FAILED 时仍以 0 退出。读取列而非 $?。这是起点而非开箱即用的方案。生产环境 WiredTiger 使用页面压缩(snappy/zstd)和单元编码,通用雕刻器对此仅做了桩实现。为压缩页面编写你自己的强解码器。将每个数字与阳性对照和第二个不同的工具交叉验证:共享同一假设的两个工具会因该假设而一致,而非因为结果正确;读取字节才能真正发现问题。
如果你的数据不同(不同的数据库、应用或文件系统),方法论仍然适用:将源设为只读、做镜像、从副本雕刻、在相信零结果前做阳性对照、计数整个内容、按内容验证。更换雕刻器;保持纪律。
加固根本原因:Proxmox Web UI 的 :8006 端口不应可从互联网访问。请遵循官方 Proxmox 安全公告:
https://forum.proxmox.com/threads/proxmox-virtual-environment-security-advisories.149331/
作者关于恢复和加固的一般性建议的更友好说明: https://claude.ai/code/artifact/621495ce-4972-405a-ad90-f7703f7dc2f1
CC0 / 公有领域。参见 LICENSE。
| 脚本 | 路径 | 功能 |
|---|
scripts/source_guard.sh | 共享 | 包裹恢复命令;通过写入计数器差异证明源数据保持只读。在任何源数据写入时失败。 |
scripts/wt_leaf_carve.py | 数据库 | 从原始 WiredTiger 叶页面中雕刻 BSON。页面大小通过解码而非拟合确定;强制阳性对照。 |
scripts/bson_frame.py | 数据库 | 通过磁盘帧结构计数/验证 BSON 文档。默认全文件扫描;抽样结果标记为下限。 |
scripts/fs_carve_classify.py | 文件系统 | 按内容而非文件名分类雕刻出的文件片段;写入逐文件清单;穷举式机密扫描。 |
scripts/sensitivity_scan.py | 共享 | 将恢复数据分级为 RED/AMBER/GREEN,用于凭据/PII 暴露评估。仅打印计数,绝不打印值。 |
scripts/integrity_verify.py | 共享 | 证明重组副本与源数据一致。基于内容键控(可承受重命名);读取 OK/FAILED 列而非退出码。 |
scripts/make_demo.py | — | 生成合成 BSON 测试数据(无真实数据)以演练工具包。 |