web-dev-qa-db-ja.com

データを復元できないように、サムドライブの内容を安全に削除するにはどうすればよいですか。

端末からUSBフラッシュドライブを削除して、データを復元できないようにする方法を教えてください。

33
user

TL/DR:適切なデバイス名を取得し、マウントされていないことを確認し、できる限りランダムに上書きします。最近の十分なディストリビューションを使用している場合は、フラッシュハードウェア用に設計された消去コマンドを使用できます。これらのチェックでは、パーティション名(/ dev/sd h1になる)ではなく、常にドライブ(/ dev/sd hなど)を使用します。

# 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バイトの容量を示さないいくつかの理由の1つです。

フラッシュストレージは、内部でより大きなブロックに編成されており、ドライブで動作するファイルシステムよりもはるかに大きい場合があります。一般的なファイルシステムのブロックサイズは4KBであり、一度に消去できるフラッシュセグメントの範囲は64KBから数メガバイトに及ぶ場合があります。これらの大きなブロックは全体的にのみ消去でき、すべてのブロックを既知の状態(すべて1またはすべて0)にリセットします。その後、データの書き込みは任意のビットを変更できます(必要に応じてデフォルトの1を0に変更するか、デフォルトの0を1に変更します)が、1回だけ 。ビットbackをデフォルトに変更するには、すべてのセグメントを再度消去する必要があります!

したがって、4KBのブロックを変更したい場合(ファイルシステムはファイルの中央の1文字を変更するように求められます)、フラッシュコントローラは古いデータのすべての64KBを読み取ってバッファリングし、すべてを消去する必要があります。新しい内容を書き戻します。これは非常に遅くなり、セグメントの消去は最も遅い操作です。また、セグメントが消去できるのは限られた時間(数万回が一般的)であるため、1つのファイルにあまりにも多くの変更を加えると、ドライブがすぐに劣化します。

しかし、これはその方法ではありません。インテリジェントフラッシュコントローラーは、4KBの新しいデータを別の場所に書き込み、古いブロックの中央にあるこの4KBのデータに読み取りをリダイレクトするようにメモします。リダイレクトに関するこの情報を保存するために、私たちが見ることができない、もう少しスペースが必要です。彼らはまた、データを格納するためにすべてのアクセス可能なセグメントを通過することを確認しようとします。これはwear levellingと呼ばれます。

これは、通常古いデータがまだドライブのどこかに残っていることを意味します!すべてのアクセス可能なブロックをクリアした場合、すべての非表示のブロックはまだ最新バージョンのデータを保持しています。データを保護したい攻撃者がこれにアクセスできるかどうかは、別の問題です。

最近の十分なディストリビューションがあり、USBドライブがフラッシュドライブであることを明らかにするようにプログラムされている場合、blkdiscardは、基になるTRIM操作を使用できます。これは、前述のセグメント消去です。上記。また、非表示の非表示データでさえハードウェアによって完全に消去されるようにするための追加のフラグがあります。

# blkdiscard -s /dev/myusbdevice

-s、--secure安全な破棄を実行します。安全な破棄は、ガベージコレクションによって作成された可能性がある破棄されたブロックのすべてのコピーも消去する必要があることを除いて、通常の破棄と同じです。これには、デバイスからのサポートが必要です。

上で説明したように、これは必ずしも機能するとは限りません。 Operation not supportedを取得した場合、カーネル、ユーティリティ、またはUSBゲートウェイチップ(フラッシュコントローラーをUSB経由でドライブのように見せることができます)はTRIMコマンドの受け渡しをサポートしていません。 (フラッシュコントローラは、それ自体でセグメントを消去できる必要があります)。ドライブのベンダーによってサポートされている場合、これが最も安全な方法です。

古いデータのどこかに残っていることを確実に防ぐためのもう1つの安全性の低い方法は、可能であればランダムな値で数回上書きすることです。

なぜランダムなのですか? USBドライブがインテリジェントになりすぎて、セクターをクリアする必要があることを検出し、ビットマップに変更を加えただけで、このセクターが解放され、後でクリアする必要がある場合を想像してみてください。これは、ゼロの書き込みを高速化できることを意味するので、ペンドライブは表示されるより効率的ですよね?ドライブがそれを行っているかどうかはわかりません。

最も極端な場合、ドライブは最初からクリアした量を記憶するだけでよく、保存する必要があるのはこれを行うための約4バイトの情報であり、消去するデータから何もクリアしません。非常に高速に見えるようにするためです。

ランダムな予測不可能な値でデータを上書きする場合、これらの最適化は不可能です。したがって、ドライブはデータがフラッシュチップ内に保存されることを確認する必要があります。ただし、以前に使用されたセクターの一部がまだ古いデータを保持していることを除外することはできませんが、ドライブは通常はアクセスできないため、まだ消去することが重要であるとは考えていません。それを保証できるのは、実際のTRIMコマンドだけです。

ランダムな値での上書きを自動化するには、次のようにshredの使用を検討することをお勧めします。

# shred -vzn88 /dev/myusbdrive

使用されるオプション:

  • -v進行状況を表示させる
  • -zを最終段階としてゼロにします
  • -n8は、8回のランダムな上書きパスを実行します

可能であれば、blkdiscardshredの両方を使用してください。ドライブがblkdiscard -sをサポートしている場合は、これが最適なソリューションですが、shredを実行しても問題はありません。ファームウェアの間違いを除外するために事前に。

ああ、そしてクリアしようとしているデバイスを常にダブルトリプルチェックしてください! dmesgは、最後に挿入されたデバイスを確認するのに役立ちます。また、デバイスのノード番号についても、クリアする予定のデバイス名をls -alで確認し、blkidの出力を確認することをお勧めします。消去したくないパーティションが利用可能かどうかを確認してください。

使い続けたい内蔵ドライブでこれらのコマンドを使用しないでください-blkdiscardはソリッドステートドライブでのみ機能しますが、データを失わないようにする価値はありません。

テクノロジーの進歩に応じて、データを安全にクリアする方法は他にもあります。

言及されているもう1つの方法は、hdparmコマンドを介して発行できるATA SECURITY ERASEコマンドです。私の経験では、フラッシュドライブでは実際にはサポートされていません。これはエンタープライズハードドライブ用に設計されており、この機能は必ずしも最低コストのストレージデバイスに実装されているわけではありません。

TRIM/DISCARD操作はSECURITY ERASEコマンドよりもはるかに新しく、フラッシュ機能に応じて作成されたため、たとえ実装されていても、安価なUSBドライブですが、まだどこにでもあるわけではありません。 USBドングル内のSD /マイクロSDカードを消去したい場合、blkdiscardはサポートされていないことを報告します。別のドングル/カードリーダーを試すか、または直接SD/MMCスロット。

47
chexum

これは実際にはあなたの質問に対する答えではないことを理解していますが、最も簡単な方法は、ドライブを物理的に破壊することです(大ハンマーで繰り返しそれを破壊することで通常はうまくいきますが、産業用の細断または焼却もオプションです)。データが回復不能であることを確認したいほどセキュリティについて心配している場合、そのデータの価値はおそらくドライブ自体のコストよりも何倍も高く、物理的な方法は安価で信頼性があります。

27
MPLewis

利用可能な安全な削除機能のほとんどすべては、磁気メディアを回転させるために設計されており、コンピューターは通常、ファイルに使用されるブロックの物理的な場所[1]を特定し、それらの同じブロックに上書きできます。ソリッドステートストレージコントローラーチップは、システムからデータの物理的な場所を抽象化し、データの移動を好みます。

あなたの質問は本当にあなたのデータを誰が求めているかによります。ランダムな損失や偶発的な盗難が心配な場合は、通常の形式で問題ありません。非常にやる気があり、技術的に有能なユーザーが自由に使える豊富なリソースを持っていることに懸念がある場合は、ドライブを焼却し、新しいドライブに10ドル費やすだけです。

  1. はい、論理ブロックマッピングがあります。ただし、論理ブロックAは常に物理ブロックBにマッピングされます。

  2. この人はドライブを開き、メモリチップをカードから引き出し、コントローラをバイパスしてフラッシュメモリを直接読み取ります。

2
user149598

私が知っている最も簡単で最速の方法は、ドライブ全体にゼロ(0)を書き込むことです。

dd if=/dev/zero of=/dev/sdX

どこ /dev/sdXはサムドライブのデバイスノードです。

反復やその他のパタ​​ーンを増やして、より徹底的なプロセスを提案する人もいます。これを行うための特定のユーティリティが利用可能です。 GNU coreutilsパッケージには、この目的専用のshredコマンドが含まれています。多くの人がbadblocks -w、これはe2fsprogsパッケージの一部です。 FreeBSDでは、shredユーティリティはgshredと呼ばれ、/usr/ports/sysutils/coreutilsまたは/usr/ports/sysutils/fileutilsポート。

1
RobertL

フラッシュドライブを再利用する場合は、これで安全にワイプできるはずです: http://linux.die.net/man/1/scrub そうでなければそれを溶かす...

0
Nathaniel Suchy