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输入, 可视化界面, 数字取证, 数据销毁, 渗透测试, 磁盘管理, 自动化脚本, 请求拦截, 运维工具, 通知系统