KodyDennon/DriveWipe
GitHub: KodyDennon/DriveWipe
DriveWipe 是一款符合 NIST/IEEE 标准的跨平台安全数据擦除工具,为企业级驱动器销毁提供从软件覆写到固件级擦除的全面解决方案。
Stars: 0 | Forks: 0
# DriveWipe
**跨平台安全数据擦除与驱动器管理工具** — 符合 NIST SP 800-88 Rev. 2 / IEEE 2883:2022 标准。
DriveWipe 提供军用/企业级驱动器擦除功能:针对 HDD 使用软件覆写,针对 SSD 使用固件级命令,并针对自加密驱动器使用加密擦除。除了擦除功能外,它还包含驱动器健康监测、取证分析、驱动器克隆、分区管理,以及专为数据擦除实验室设计的可引导 Live 环境——所有这些功能都集成在单个工具中,并提供 CLI、TUI 和 GUI 界面。
## 为什么选择 DriveWipe?
- **27 种擦除方法** — 涵盖每种驱动器类型的软件、固件及混合擦除方式
- **Live 环境** — 从 USB 或 PXE 网络引导,可擦除包括系统引导盘在内的任何驱动器
- **直接硬件访问** — 定制内核模块,支持 ATA/NVMe 透传、HPA/DCO 操作以及 DMA I/O
- **完整的取证工具包** — 熵分析、签名扫描以及正式的监管链报告
- **跨平台** — 原生支持 Linux、macOS 和 Windows,并针对不同平台进行了优化
- **三种界面** — CLI 用于自动化,TUI 用于交互式操作,GUI 则追求极致的易用性
## 功能
### 安全数据擦除
- **15 种软件擦除方法** — 零/一/随机填充、NIST SP 800-88 Clear & Purge、DoD 5220.22-M (3 遍与 7 遍)、AFSSI-5020、AR 380-19、NAVSO P-5239-26、Gutmann (35 遍)、HMG IS5 Baseline & Enhanced、RCMP TSSIT OPS-II、VSITR,以及自定义用户方法
- **8 种固件擦除方法** — ATA Secure Erase (标准与增强)、NVMe Format/Sanitize (5 种模式)、TCG Opal 加密擦除
- **4 种 DriveWipe Secure 方法** — 针对 HDD、SATA SSD、NVMe 和 USB 驱动器量身定制的智能多阶段擦除方案
- **全面的回读验证** — 针对每种填充模式在整个盘面进行逐字节验证。对于随机填充遍,数据将从其 AES-256-CTR 种子重新生成以供校验,而非仅进行抽样。可通过 `--verify-each-pass` 开启按遍验证。标准明确要求验证的方法将始终执行该流程。
- **恢复能力** — 每 10 秒自动保存状态,支持中断后继续擦除
- **多驱动器并行擦除** — 支持实时任务队列(可在擦除过程中添加新驱动器)
### Live 环境
- **可引导 USB/ISO** — 基于 Alpine Linux 的 Live 镜像 (~200 MB),引导后直接启动 DriveWipe TUI
- **PXE 网络引导** — 无需 USB 即可擦除整个机柜的驱动器;提供包含 Normal、Safe Mode 和 Serial Console 选项的 iPXE 菜单
- **定制内核模块** — 直接进行 ATA/NVMe 命令透传,绕过 SCSI 转换
- **HPA/DCO 检测与移除** — 查找并移除软件覆写无法触及的隐藏区域
- **驱动器解冻** — 通过自动挂起/恢复循环,解除 ATA 安全冻结状态
- **DMA I/O** — 采用零拷贝、DMA 一致性缓冲区 I/O 以实现最大吞吐量
### 驱动器健康监测
- **SMART 数据解析** — ATA 与 NVMe 健康属性
- **擦除前后健康快照** — 自动进行对比,并输出通过/失败判定
- **顺序读写基准测试** — 性能基线测量
- **温度监控** — 在操作过程中进行实时温度追踪
### 驱动器克隆
- **块级克隆** — 在驱动器之间进行逐扇区复制
- **感知分区的克隆** — 自动调整分区大小以适应目标驱动器
- **镜像 I/O** — 创建并还原压缩、加密的驱动器镜像
- **压缩** — 镜像文件支持 flate2 和 zstd
- **加密** — 镜像文件支持 AES-256 加密
### 分区管理
- **支持 GPT 和 MBR** — 包含 CRC 校验的完整解析与写入
- **创建、删除、调整大小、移动** 分区且保留数据
- **文件系统检测** — NTFS、ext4、FAT32、exFAT、XFS、Btrfs
- **强制对齐** — 4K/1 MiB 边界对齐
- **Dry-run/预览模式** — 在应用前预览更改
### 取证分析
- **熵分析** — 计算每个扇区的熵并生成热图
- **文件签名扫描** — 检测 JPEG、PDF、DOCX、EXE、ZIP 等格式
- **统计抽样** — 具备置信区间的随机扇区抽样
- **隐藏区域检测** — HPA/DCO 扫描(在 Live 模式下增强,支持真实 ATA 探测)
- **正式取证报告** — 包含时间戳、哈希链和监管链
- **导出格式** — DFXML、兼容 NSRL 的哈希集
### 驱动器配置文件
- **制造商专属配置** — 三星、WD、希捷、Crucial、Intel、金士顿等
- **自动驱动器匹配** — 基于正则表达式的型号检测
- **优化建议** — 针对不同驱动器类型推荐最佳擦除方法
- **SLC 缓存及特性感知** — 基于配置文件的性能调优
### 基础设施
- **审计日志** — 为所有操作记录详尽的 JSONL 审计轨迹
- **报告生成** — 输出 JSON 与 PDF 格式的证书
- **桌面通知** — 操作完成后提供跨平台提醒
- **防止休眠** — 操作期间基于 RAII 阻止系统休眠
- **键盘锁定** — 可配置的解锁序列,防止意外输入
- **智能时间估算** — 基于 EMA 平滑的吞吐量与置信区间估算
- **自动化版本控制** — 由 git commit 驱动的版本更新,带有 LOC 安全触发器
### 单个二进制文件,三种接口
单一的 `drivewipe` 二进制文件包含了全部三种接口,并根据您的启动方式自动进行选择:
| 您运行的命令 | 获得的界面 |
|---|---|
| `drivewipe` | 交互式终端 UI (ratatui) |
| `drivewipe --gui` | 桌面应用程序 (iced) |
| `drivewipe list`, `drivewipe wipe …` | 命令行,适用于脚本和自动化 |
| `drivewipe-tui` / `drivewipe-gui` | 别名;由安装程序创建的符号链接 |
使用管道或重定向时会回退到 CLI,因此 `drivewipe | cat` 和 cron 任务
的行为都是可预期的。服务器构建版本可以使用
`--no-default-features --features pdf-report` 完全移除桌面界面。
## 快速开始
### 前置条件
- Rust 1.94+ (2024 edition)
- Root/管理员权限(进行原始设备访问所必需)
### 构建
```
# 构建 drivewipe binary (CLI + TUI + GUI)
cargo build --release
# Headless/server 构建,不带桌面界面
cargo build --release --package drivewipe-cli \
--no-default-features --features pdf-report
# 构建 live USB image (需要 Docker)
cargo xtask live-build
```
### 安装
在 Linux 和 macOS 上只需一条命令:
```
curl -fsSL https://raw.githubusercontent.com/KodyDennon/DriveWipe/main/install.sh | sh
```
它会检测您的平台,下载对应的发布版本,**并与已发布的
SHA-256 校验和进行验证**,安装到 `/usr/local/bin`(如果没有 root 权限,
则安装到 `~/.local/bin`),并添加桌面入口。要再次卸载它:
```
curl -fsSL https://raw.githubusercontent.com/KodyDennon/DriveWipe/main/install.sh | sh -s -- --uninstall
```
其他选项:使用 `--version X.Y.Z` 固定版本,使用 `--prefix DIR` 选择安装位置。
更倾向于手动操作?从 [Releases](https://github.com/KodyDennon/DriveWipe/releases)
页面下载压缩包 —— 支持 **Linux**、**macOS** 和 **Windows**,x86_64 与 ARM64 架构 —— 然后运行
内置的 `install.sh`,或者直接将 `drivewipe` 二进制文件放到您的 `PATH` 中。
*注意:DriveWipe 需要**管理员 / root**权限才能访问原始磁盘,
但安装过程不需要。*
从源码构建:
```
cargo install --path crates/drivewipe-cli
```
### 使用方法
```
# 列出检测到的驱动器
sudo drivewipe list
# 显示详细的驱动器信息
sudo drivewipe info --device /dev/sda
# 擦除驱动器(交互式确认)
sudo drivewipe wipe --device /dev/sda --method dod-short
# 带验证的擦除
sudo drivewipe wipe --device /dev/sda --method dod-short --verify true
# 强制模式(脚本化使用)
sudo drivewipe wipe --device /dev/sda --method zero --force --yes-i-know-what-im-doing
# 验证已擦除的驱动器
sudo drivewipe verify --device /dev/sda --pattern zero
# 从 JSON 生成 PDF 报告
drivewipe report --input session.report.json --format pdf --output certificate.pdf
# 恢复中断的会话
sudo drivewipe resume --list
sudo drivewipe resume --auto
# 将多个驱动器加入队列
sudo drivewipe queue add --device /dev/sda --method dod-short
sudo drivewipe queue add --device /dev/sdb --method zero
sudo drivewipe queue start --parallel 2
# 驱动器健康检查
sudo drivewipe health /dev/sda
# 驱动器配置文件查找
sudo drivewipe profile /dev/sda
# 克隆驱动器
sudo drivewipe clone /dev/sda /dev/sdb --mode block
# 分区管理
sudo drivewipe partition list /dev/sda
# 取证分析
sudo drivewipe forensic scan /dev/sda
# 启动终端 UI(也就是直接运行 `sudo drivewipe` 的效果)
sudo drivewipe --tui
# 启动 GUI
sudo drivewipe --gui
```
## 擦除方法
| ID | 名称 | 遍数 | 类型 |
|---|---|---|---|
| `zero` | Zero Fill | 1 | 软件 |
| `one` | One Fill | 1 | 软件 |
| `random` | Random Fill (AES-256-CTR) | 1 | 软件 |
| `dod-short` | DoD 5220.22-M | 3 | 软件 |
| `dod-ece` | DoD 5220.22-M ECE | 7 | 软件 |
| `gutmann` | Gutmann | 35 | 软件 |
| `hmg-baseline` | HMG IS5 Baseline | 1 | 软件 |
| `hmg-enhanced` | HMG IS5 Enhanced | 3 | 软件 |
| `rcmp` | RCMP TSSIT OPS-II | 7 | 软件 |
| `nist-800-88-clear` | NIST SP 800-88 Clear | 1 | 软件 |
| `nist-800-88-purge` | NIST SP 800-88 Purge (overwrite) | 3 | 软件 |
| `afssi-5020` | AFSSI-5020 (U.S. Air Force) | 3 | 软件 |
| `ar-380-19` | AR 380-19 (U.S. Army) | 3 | 软件 |
| `navso-p-5239-26` | NAVSO P-5239-26 (U.S. Navy) | 3 | 软件 |
| `vsitr` | VSITR (German BSI) | 7 | 软件 |
| `ata-erase` | ATA Secure Erase | firmware | 固件 |
| `ata-erase-enhanced` | ATA Enhanced Secure Erase | firmware | 固件 |
| `nvme-format-user` | NVMe Format (User Data Erase) | firmware | 固件 |
| `nvme-format-crypto` | NVMe Format (Cryptographic Erase) | firmware | 固件 |
| `nvme-sanitize-block` | NVMe Sanitize (Block Erase) | firmware | 固件 |
| `nvme-sanitize-crypto` | NVMe Sanitize (Cryptographic Erase) | firmware | 固件 |
| `nvme-sanitize-overwrite` | NVMe Sanitize (Overwrite) | firmware | 固件 |
| `tcg-opal` | TCG Opal Crypto Erase | firmware | 固件 |
| `drivewipe-secure-hdd` | DriveWipe Secure (HDD) | 4 | 混合 |
| `drivewipe-secure-sata-ssd` | DriveWipe Secure (SATA SSD) | 4 | 混合 |
| `drivewipe-secure-nvme` | DriveWipe Secure (NVMe) | 4 | 混合 |
| `drivewipe-secure-usb` | DriveWipe Secure (USB) | 4 | 混合 |
### DriveWipe Secure 方法
DriveWipe Secure 方法结合了软件覆写与固件命令,以提供最高级别的保障:
- **HDD**: 多遍模式写入,随后进行全面验证
- **SATA SSD**: 覆写 + TRIM + 覆写 + ATA Secure Erase (如果可用) + 验证
- **NVMe**: 覆写 + 解除分配 + NVMe Format/Sanitize (如果可用) + 覆写 + 验证
- **USB**: 多遍覆写 + 验证 (受限于 USB 控制器的能力)
## 架构
```
DriveWipe/
crates/
drivewipe-core/ # Library — all logic, no UI
drivewipe-cli/ # The drivewipe binary — CLI commands + mode dispatch
drivewipe-tui/ # Terminal interface (library)
drivewipe-gui/ # Desktop interface (library)
drivewipe-live/ # Live environment — HPA/DCO, ATA security, DMA I/O
xtask/ # Build automation (bump, release, live-build)
kernel/drivewipe/ # Custom Linux kernel module (/dev/drivewipe)
live/
alpine-config/ # Live USB boot configuration and init scripts
pxe/ # PXE network boot infrastructure
profiles/ # Drive profile TOML files
scripts/ # Build scripts (DRIVEWIPE_LIVE_VERSION=2.0.0 ./scripts/build-live.sh)
docs/ # Documentation
```
### 核心模块
| 模块 | 用途 |
|---|---|
| `audit` | 基于日期轮转的 JSONL 审计日志 |
| `clone` | 块级及感知分区的驱动器克隆 |
| `config` | 加载并管理 TOML 配置 |
| `crypto` | AES-256-CTR 模式生成 |
| `drive` | 驱动器枚举与信息收集 |
| `forensic` | 熵分析、签名扫描及取证报告 |
| `health` | SMART/NVMe 健康监测与基准测试 |
| `io` | 特定于平台的原始设备 I/O (`RawDeviceIo` trait) |
| `keyboard_lock` | 带有可配置解锁序列的输入锁定 |
| `notify` | 跨平台桌面通知 |
| `partition` | GPT/MBR 解析及分区 CRUD 操作 |
| `pattern` |擦除模式生成 |
| `profile` | 驱动器制造商配置文件及匹配 |
| `progress` | 基于 `ProgressEvent` 通道的进度系统 |
| `report` | 生成 JSON 与 PDF 报告 |
| `resume` | 崩溃安全的会话状态持久化 |
| `session` | `WipeSession` 协调器 |
| `sleep_inhibit` | 基于 RAII 的系统休眠阻止机制 |
| `time_estimate` | 基于 EMA 平滑及置信区间的时间估算 |
| `verify` | 回读验证引擎 |
| `wipe` | 擦除方法注册表及实现 |
### Live 环境 Crate (`drivewipe-live`)
| 模块 | 用途 |
|---|---|
| `capabilities` | 探测并报告 Live 环境的能力 |
| `detect` | Live 环境检测 (cmdline, 标记, 模块) |
| `kernel_module` | 包含类型化方法的 `/dev/drivewipe` ioctl 封装 |
| `hpa` | HPA 检测与移除 (内核模块 + SG_IO 回退) |
| `dco` | DCO 检测、恢复与冻结 (内核模块 + SG_IO) |
| `ata_security` | 从 IDENTIFY DEVICE 查询 ATA 安全状态 |
| `unfreeze` | 通过挂起/恢复循环解除驱动器冻结 |
| `dma_io` | 通过内核模块进行零拷贝 DMA I/O |
### 内核模块 (`kernel/drivewipe/`)
| ioctl | 用途 |
|---|---|
| `DW_IOC_ATA_CMD` | 原始 ATA 命令透传 (绕过 SCSI) |
| `DW_IOC_NVME_CMD` | 原始 NVMe 管理命令透传 |
| `DW_IOC_HPA_DETECT` / `REMOVE` | READ NATIVE MAX ADDRESS / SET MAX ADDRESS |
| `DW_IOC_DCO_DETECT` / `RESTORE` / `FREEZE` | Device Configuration Overlay 命令 |
| `DW_IOC_DMA_IO` | 零拷贝 DMA 读/写 |
| `DW_IOC_ATA_SEC_STATE` | 查询 ATA 安全状态 |
| `DW_IOC_MODULE_INFO` | 模块版本 + 能力位掩码 |
## Live 环境
### USB 引导
```
# 构建 live image
cargo xtask live-build
# 写入 USB(将 VERSION 和 /dev/sdX 替换为你的版本和设备)
sudo dd if=drivewipe-live-VERSION.iso of=/dev/sdX bs=4M status=progress
```
### PXE 网络引导
DriveWipe Live 支持通过网络引导,用于擦除整个机柜的驱动器。PXE 制品 (`drivewipe-live-VERSION-pxe.tar.gz`) 包含了部署 TFTP/HTTP 服务器所需的一切。
```
# 从已构建的 image 中提取 PXE artifacts
tar -xzvf drivewipe-live-VERSION-pxe.tar.gz -C /var/lib/tftpboot/
# 使用包含的 config 配置 dnsmasq
sudo cp /var/lib/tftpboot/dnsmasq.conf /etc/dnsmasq.d/drivewipe.conf
sudo systemctl restart dnsmasq
```
有关完整的 PXE 设置说明和 QEMU 测试,请参阅 [`live/pxe/README.md`](live/pxe/README.md)。
### Live TUI 功能
在 Live 环境中运行时,TUI 会增加以下功能:
- **Live 仪表盘** — 包含内核模块状态、CPU/RAM、驱动器摘要的系统概览
- **HPA/DCO 管理器** — 检测、移除 HPA、恢复 DCO、冻结 DCO,对破坏性操作需进行确认
- **ATA 安全管理器** — 查看冻结/锁定/启用状态,一键通过挂起/恢复进行解冻
- **内核模块状态** — 模块版本、能力位掩码、功能可用性
## 配置
默认配置位置:`~/.config/drivewipe/config.toml`
```
default_method = "dod-short"
parallel_drives = 2
auto_verify = true
verify_each_pass = false
remove_hidden_areas = true
auto_report_json = true
log_level = "info"
operator_name = "John Doe"
state_save_interval_secs = 10
notifications_enabled = true
sleep_prevention_enabled = true
auto_health_pre_wipe = true
keyboard_lock_sequence = "unlock"
profiles_dir = "~/.config/drivewipe/profiles"
audit_dir = "~/.local/share/drivewipe/audit"
performance_history_dir = "~/.local/share/drivewipe/performance"
[[custom_methods]]
id = "my-method"
name = "My Custom Method"
description = "Custom 2-pass wipe"
verify_after = true
[[custom_methods.passes]]
pattern_type = "random"
[[custom_methods.passes]]
pattern_type = "zero"
```
## 安全性
DriveWipe 包含多重安全机制:
1. **引导驱动器检测** — 拒绝擦除正在运行操作系统的驱动器
2. **多步确认** — 显示驱动器详细信息,要求输入设备路径,并进行 3 秒倒计时
3. **SSD 软件擦除警告** — 建议对 SSD 使用固件擦除(磨损均衡会使软件覆写变得不可靠)
4. **USB 桥接警告** — 通过 USB 适配器执行固件命令可能会失败
5. **ATA 冻结警告** — 检测安全冻结状态,建议挂起/恢复(在 Live 模式下自动执行)
6. **HPA/DCO 检测** — 警告软件覆写无法触及的隐藏区域;Live 模式可以移除它们
7. **Ctrl+C 处理** — 优雅中断,保存状态以供恢复
8. **键盘锁定模式** — 防止操作期间的意外按键
9. **防止休眠** — 确保在长时间操作期间系统保持唤醒
10. **擦除前健康检查** — 可选的擦除前自动 SMART 检查
## 平台支持
| 功能 | Linux | macOS | Windows |
|---|---|---|---|
| 驱动器枚举 | 完整 (sysfs) | 完整 (diskutil) | 完整 (DeviceIoControl) |
| 原始设备 I/O | 完整 (O_DIRECT) | 完整 (F_NOCACHE) | 完整 (FILE_FLAG_NO_BUFFERING) |
| 引导驱动器检测 | 完整 (/proc/mounts) | 完整 (/sbin/mount) | 完整 (IOCTL_VOLUME_GET_...) |
| 软件擦除方法 | 完整 | 完整 | 完整 |
| ATA Secure Erase | 完整 (SG_IO) | 不支持 | 完整 (IOCTL_ATA_PASS_THROUGH) |
| NVMe Format/Sanitize | 完整 (nvme ioctl) | 通过 nvme-cli | 完整 (IOCTL_STORAGE_...) |
| TCG Opal 加密擦除 | 完整 (sed-opal) | 不支持 | 暂不支持 |
| SMART 健康 | 完整 | 完整 (IOKit) | 完整 |
| 防止休眠 | 完整 (D-Bus) | 完整 (IOPMAssertion) | 完整 (SetThreadExecutionState) |
| 桌面通知 | 完整 (D-Bus) | 完整 (osascript) | 完整 (toast) |
| **Live 环境** | **完整** | N/A | N/A |
| **内核模块** | **完整** | N/A | N/A |
| **PXE 引导** | **完整** | N/A | N/A |
## 开发
### 自动化版本控制
DriveWipe 采用“**安全至上**”的自动化版本控制系统。详情请参阅 [DEVELOPMENT.md](DEVELOPMENT.md)。
所有六个 crate(`drivewipe-core`、`drivewipe-cli`、`drivewipe-tui`、`drivewipe-gui`、`drivewipe-live`、`xtask`)均基于限定的提交消息和 LOC 阈值进行独立版本控制。
### xtask 命令
```
cargo xtask bump # Automated version bumps based on git history
cargo xtask release # Interactive release wizard
cargo xtask live-build # Build the live USB image
DRIVEWIPE_LIVE_VERSION=1.1.2 ./scripts/build-live.sh
```
### 测试
```
# 运行所有测试
cargo test --workspace
# 以详细输出模式运行
cargo test --workspace -- --nocapture
# 运行 live crate 测试
cargo test -p drivewipe-live
# 运行特定 test suite
cargo test -p drivewipe-core --test integration_tests
```
## 许可证
可免费用于个人、爱好及商业用途。期望政府、情报、取证及安全组织支持或为开发做出贡献。完整条款请参阅 [LICENSE.md](LICENSE.md)。
## 贡献
欢迎贡献!请参阅 [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) 了解指南。
标签:CIDR输入, 可视化界面, 数字取证, 数据销毁, 渗透测试, 磁盘管理, 自动化脚本, 请求拦截, 运维工具, 通知系统