Flash-Memory

如何安全地刪除拇指驅動器的內容,使數據無法恢復。

  • January 2, 2016

如果可能,我想知道如何通過終端刪除 USB 快閃記憶體驅動器,以便無法恢復數據。

TL/DR:確保您獲得正確的設備名稱,確保它沒有安裝,並儘可能多地進行隨機覆蓋。如果您使用的是足夠近的發行版,則可以使用專為快閃記憶體硬體設計的擦除命令來跟踪它。在這些檢查中,始終使用驅動器(如 /dev/sd h)而不是分區名稱(即 /dev/sd h1

# dmesg|grep sdXX
[3600.000001] sd 6:0:0:0: [sdXX] 125106176 512-byte logical blocks: (64.0 GB/59.6 GiB)
# blkid|grep sdXX
/dev/sdXX1: PARTUUID="88a03bb2-ced8-4bb2-9883-0a51b4d460a8"
# df|grep /dev/sdXX
# shred -vzn8 /dev/sdXX
shred: /dev/sdXX: pass 1/9 (random)...
shred: /dev/sdXX: pass 1/9 (random)...46MiB/3.8GiB 1%
...
shred: /dev/sdXX: pass 9/9 (000000)...3.8GiB/3.8GiB 100%
# blkdiscard -s /dev/sdXX
blkdiscard: /dev/sdXX: BLKSECDISCARD ioctl failed: Operation not supported
# blkdiscard /dev/sdXX
blkdiscard: /dev/sdXX: BLKDISCARD ioctl failed: Operation not supported
#

理論上,用零覆蓋dd就可以了。但是,由於快閃記憶體驅動器的內部結構,如果您使用單次覆蓋通道,則可能有幾層數據隱藏在仍在儲存剩餘資訊的實際塊後面。

通常,快閃記憶體的一部分出現故障,並在製造過程中被標記。還有其他可能出錯的位(變得不可更改、不可設置或無法清除),這些元件在生命週期內也必須標記為故障。此資訊儲存在與您的數據相同的晶片上的保留空間中。這是 4GB 拇指驅動器未顯示 2^32 字節容量的幾個原因之一。

快閃記憶體儲存也在內部組織成更大的塊,有時比驅動器上工作的文件系統大得多。典型的文件系統塊大小為 4KB,一次可擦除的快閃記憶體段可能從 64KB 到幾兆字節不等。這些大塊只能被整體擦除,這會將所有塊重置為已知狀態(全 1 或全 0)。之後,數據寫入可以更改任何位(在需要時將預設的 1 更改為 0,或將預設的 0 更改為 1),但只能更改一次。要將任何位更改預設值,需要再次擦除所有段!

因此,當您想要更改 4KB 塊時(要求文件系統更改文件中間的單個字元),快閃記憶體控制器將需要讀取和緩衝所有 64KB 舊數據,擦除所有數據,然後寫回新的內容。這將非常慢,擦除段是最慢的操作。此外,一個段只能在有限的時間內擦除(通常為數万次),因此如果您對單個文件進行太多更改,則會迅速損壞驅動器。

但這不是它的完成方式。智能快閃記憶體控制器只需將 4KB 新數據寫入其他位置,並記下將讀取重定向到舊塊中間的這 4KB 數據。他們需要更多空間,我們看不到這些空間來儲存有關重定向的資訊。他們還嘗試確保通過所有可訪問的段來儲存數據,這稱為磨損均衡

這意味著通常舊數據仍在驅動器上的某個地方!如果您剛剛清除了所有可訪問的塊,則所有隱藏的塊仍保留最新版本的數據。您希望保護您的數據免受攻擊的攻擊者是否可以訪問它是一個不同的問題。

如果你有足夠新的發行版,並且 USB 驅動器被程式為顯示它是快閃記憶體驅動器,blkdiscard則可以使用底層TRIM操作,即我們上面討論的段擦除。它還有一個額外的標誌,以確保即使是不可見的隱藏數據也被硬體完全擦除:

# blkdiscard -s /dev/myusbdevice

-s, –secure 執行安全丟棄。安全丟棄與正常丟棄相同,只是可能由垃圾收集創建的丟棄塊的所有副本也必須被擦除。這需要設備的支持。

正如我上面展示的那樣,它不一定會起作用。如果您得到Operation not supported,您的核心、實用程序或 USB 網關晶片(它允許快閃記憶體控制器通過 USB 看起來像一個驅動器)不支持傳遞TRIM命令。(快閃記憶體控制器必須仍然能夠自行擦除段)。如果您的驅動器供應商支持它,這是最安全的方法。

另一種不太安全的方法來確保您允許較少的舊數據在某個地方徘徊,如果可能的話,用隨機值覆蓋它幾次。

你問為什麼隨機?想像一下,如果 USB 驅動器過於智能,並且檢測到您想要清除一個扇區,並且只是在點陣圖中進行了更改,該扇區現在是空閒的,並且稍後需要清除。因為這意味著它可以加快寫入零的速度,所以它使 Pendrive看起來更高效,對吧?你的驅動器是否正在這樣做,很難說。

在最極端的情況下,驅動器只能記住你從一開始就清除了多少,它只需要儲存大約 4 個字節的資訊來執行此操作,並且不會從你想要消失的數據中清除任何內容。一切都是為了讓它看起來非常快。

如果你用隨機的、不可預測的值覆蓋數據,這些優化是不可能的。因此驅動器必須確保數據最終儲存在快閃記憶體晶片中。但是您仍然無法排除之前使用的某些扇區仍然存在您的一些舊數據,但是驅動器只是暫時不認為擦除它很重要,因為它無法正常訪問。只有實際的TRIM命令才能保證。

要使用隨機值自動覆蓋,您可能需要研究 using shred,例如:

# shred -vzn88 /dev/myusbdrive

使用的選項:

  • -v 讓它顯示進度
  • -z 將其歸零作為最後階段
  • -n8 是進行 8 次隨機覆蓋

如果可能,請同時使用blkdiscardshred,如果blkdiscard -s您的驅動器支持,這是最佳解決方案,但事先做一個shred以排除韌體錯誤也無妨。

哦,請務必仔細檢查您要清除的設備!dmesg 可以幫助查看最近插入的設備,並且值得檢查您打算清除的設備名稱ls -al,即使是設備節點號,以及blkid輸出以查看您不可以使用的分區想清楚。

切勿在您想繼續使用的內部驅動器上使用這些命令 -blkdiscard僅適用於固態驅動器,但不值得嘗試失去數據!

隨著技術的進步,可能還有其他方法可以安全地清除數據。

SECURITY ERASE提到的另一種方式是可以通過命令發出的 ATAhdparm命令。根據我的經驗,快閃記憶體驅動器並不真正支持它。它是為企業硬碟設計的,並且該功能並不總是在成本最低的儲存設備中實現。

/操作比命令更新得多TRIM,並且是為響應快閃記憶體功能而創建的,因此即使在便宜的 USB 驅動器中,它也有更高的實現機會,但它仍然不是無處不在。如果您想擦除 USB 加密狗中的 SD/micro SD 卡,並且報告不支持它,您可能需要嘗試不同的加密狗/讀卡器,和/或在具有直接 SD/MMC 插槽的機器上執行此操作.DISCARD``SECURITY ERASE``blkdiscard

引用自:https://unix.stackexchange.com/questions/252593