---
title: '美國國防部 DOD 5220.22-M 標準銷毀儲存媒體資料'
disqus: hackmd
---
依據美國國防部 DOD 5220.22-M 標準 銷毀儲存媒體資料
===
## Table of Contents
[TOC]
>[!Note]
> 利用 SystemRescue 製作 USB 開機碟進行抹除\
>Official Doucument:\
>https://www.system-rescue.org/ \
>
## 1. 製作 wipe 開機碟
- 查看需要製作的 USB 硬碟編號:
```
diskutil list
```
- 卸載 USB
```
diskutil unmountDisk /dev/<disk name>
```
- 格式化 USB
```
diskutil eraseDisk FAT32 MYDISK MBRFormat /dev/<disk name>
```
- 下載 SystemRescue Image
Image: https://www.system-rescue.org/Download/ \

## 2. 將 image 燒錄至 USB
>[!Tip]
>將 SystemRescue Image 寫入 USB
各系統燒錄 image 工具:
### 2.1 Linux
linux 可透過 `dd` 寫入
```
sudo dd if="<systemrescue.iso PATH>" of=/dev/<disk name> bs=4m conv=sync,noerror status=progress
```
> status=progress 顯示寫入進度
```
sync
diskutil eject /dev/<disk name>
```
確保資料完全寫入後,再拔除 USB
### 2.2 MacOS
MacOS 可透過 [balenaEtcher](https://github.com/balena-io/etcher) 燒錄

### 2.3 Windows
Windows 可利用 [Rufus](https://rufus.ie/) 燒錄

> - Partition scheme 選擇 `MBR` 同時相容 BIOS 和 UEFI
> - Target: `BIOS or UEFI`
> - Filesystem 選擇 `FAT32` (UEFI 啟動過程僅適用於 FAT 檔案系統)
## 3. 啟用 SystemRescue
開機進入 BIOS 選擇使用 HardDisk (USB) 開機,進入 SystemRescue 開機選單
### 3.1 選擇 Boot SystemRescue using default options
選擇 Boot SystemRescue using default options 進入預設開機模式:

> 1) Boot SystemRescue using default options\
> 正常開機進 SystemRescue(預設參數)
> 2) Boot SystemRescue and copy system to RAM (copytoram)\
> 整個 live 系統載入到記憶體再啟動 (開機後可以拔掉 USB)
> 3) Boot SystemRescue and verify integrity of the medium (checksum)\
開機前/開機時做 media 驗證(校驗 ISO/檔案)
> 4) Boot SystemRescue using basic display drivers (nomodeset)\
> 用基本顯示模式(禁用顯示卡 modesetting)
> 5) Boot a Linux operating system installed on the disk (findroot)\
不進 SystemRescue,而是找硬碟上已安裝的 Linux 並嘗試開機
> 6) Stop during the boot process before mounting the root filesystem\
除錯用(開機掛載 root 失敗、手動查 initramfs)
> 7) Boot existing OS\
直接跳過開啟原本硬碟上的作業系統
>8) Run Memtest86+ (RAM test)\
跑記憶體測試
>9) Reboot
>10) Power Off
### 3.2 SystemRescue CLI
進入到 SystemRescue CLI\

透過 `lsblk` 查詢要清除的內建 SSD/NVMe
```
lsblk -o NAME,SIZE,MODEL,TYPE
```
(範例)\

或 `nvme list` 查看
```
nvme list
```
(範例)\

>[!Important]
>符合 DoD 5220.22-M 或 NIST SP 800-88,兩條 Wipe SSD 路徑:
> - [NIST 800-88](https://csrc.nist.gov/pubs/sp/800/88/r2/final):使用 Purge(Sanitize/Crypto-Erase/Block-Erase),或 Clear(覆寫)
> - [DoD 5220.22-M](https://www.dau.edu/sites/default/files/Migrated/CopDocuments/DoD%205220.22%20M%20NISPOM%2020060228.pdf):用 nwipe 的 DoD 3-pass / 7-pass 選項多次複寫
### 3.3 (Option 1) DoD 5220.22-M
以 DoD 5220.22-M 為例,在 Terminal 使用 nwipe
```
sudo nwipe
```
進入 nwipe 介面,可選擇要清除的硬碟

- Print `m` : method\
可選擇 Wipe Method (抹除方法/演算法)\

- Print `p`: PRNG / Pattern\
設定隨機資料的產生器(PRNG)或寫入 pattern的細節\
顯示 Pseudo Random Number Generator

> 🥚 因為 DoD method 每一輪都是固定 pattern(0x00/0xFF/隨機),若包含 random pass,才會用到設定的 PRNG
- Print `v`: Verify\
設定驗證策略,常見:No Pass / Last Pass / All Passes
- Print `c`: Config / Options\
全域選項包含 System Date & Time 設定、可以將 Wipe 過程匯出成 PDF Report
上述內容設定完後點擊 `SHIFT + S` 開始抹除 (如圖)\

### 3.4 (Option 2) NIST SP 800-88
若要符合 NIST SP 800-88 可利用 NVMe Sanitize 執行 Purge
>[!Tip]
> NVMe management:\
> https://github.com/linux-nvme/nvme-cli
```
sudo nvme sanitize /dev/<disk name> -a 4
sudo nvme sanitize /dev/<disk name> -a 2
```
> - `-a 4`: Crypto Erase(加密抹除)
> - `-a 2`: Block Erase (若 SSD 不支援 crypto erase)
查看抹除進度:
```
sudo nvme sanitize-log /dev/nvme0
```
> 讀取 NVMe 的 Sanitize Log Page,查看執行進度
詳細 nvme 操作可參考:[manpages](https://manpages.debian.org/testing/nvme-cli/)
## 4. 抹除完成 ✅