btrfsファイルシステム上のファイルを安全に削除します


22

時には、ファイルシステム内のファイルを削除し、ファイルが本当になくなっていることを確認する必要があります。たとえば、機密パスワードを含むファイルは、ディスクから完全に消去する必要があります。

rm一般的なファイルシステムでシンプルを発行すると、ファイルへのiノード(「ポインター」)が削除されますが、物理ディスク内のファイルのコンテンツは削除さません

多くのファイルシステムでは、細断処理プログラムによってこのような安全な削除が可能になります。ただし、btrfsなどのCoWファイルシステムでこのアプローチは役に立ちません。問題は、ファイルがボリュームスナップショットに存在する可能性があるという事実によって悪化します。

btrfsファイルシステム上のファイルを安全に削除する方法はありますか?(すべてのボリューム上の)すべてのポインターを削除し、空きスペースをゼロで埋めるだけで十分ですか?


2
良い質問です、私は以前にその問題について考えたことがありません。その問題を回避する1つの方法は、そのようなファイルを暗号化することです。ディスク全体を暗号化することもできますが、攻撃者が実行中のシステムへのルートアクセスを取得しても、それは役に立ちません
...-mreithub

@mreithub実際、このようなファイルを暗号化することは、FDEと同様、そもそも常に良い考えです。ただし、すべてのユースケースを想定することはできません(たとえば、組み込みシステム-そのようなシステムがいずれにせよbtrfsを実行している場合は議論の余地がありますが...)。機密ファイルをコピーする前に暗号化を設定するのを忘れたため、実際にこれを求めていますが、パーティション全体を
消去

回答:


9

安全な削除は、どのファイルシステムでも難しい提案です。ファイルシステムが非常に特殊で、ファイルのコピーが他にないことを保証しない限り、デバイスのすべての空き領域をクリアする必要があります。コピーオンライトファイルシステムでファイルの多くのビットを見つける可能性が高くなりますが、多くのファイルが編集されるため、さらに「静的」なファイルシステムでは実際にこの保証はありません。横になっているファイル。

ゼロで消去することは、ランダムバイトで消去するのと同じくらい良好であり、複数のパスを必要としないことに注意してください。ゼロで消去すると、1980年代のハードディスクテクノロジーを備えたラボ条件で部分的に回復できる残留データが残りました。これは現在適用されていません。ハードドライブにゼロ(またはランダムデータ)を1回だけ書き込むよりも複数回書き込む方が良い理由をご覧ください

ディスク上のすべてを暗号化することにより、クリアテキストの機密データを取り除くことができます。そのファイルシステム上にecryptfsボリュームをセットアップし、すべての(機密)ファイルをそこに移動します。次に、ファイルシステムの未使用スペースをすべて上書きします。ファイルシステムにを入力することで、ほとんどを消去できますcat /dev/zero >zero。まだ不完全なブロック(ファイルの最後のチャンクを含むブロックと、それに続くいくつかのガベージ-機密ファイルからの残り物)に情報が残っている場合があります。不完全なブロックがないことを確認するには、ファイルシステム上のすべてをecryptfsに移動します(ecryptfsのファイルは、少なくともブロックが4kBの一般的なセットアップではブロック全体を使用します)。これをすべてのボリュームに適用し、プレーンテキストの機密データを含むすべてのスナップショットを消去してください。

ジャーナルにはまだ情報が残っている場合があります。それをスクラブする方法がわかりません。

SSDでは、ブロックの再割り当てにより、通常のソフトウェアでは読み取れないデータが残っている場合がありますが、ファームウェアをハッキングしたり物理アクセスしたりすることで回復できます。そこでは、SSDを完全に消去するしかありません。


3
ゼロには、圧縮したり完全に省略したりできるという欠点があります(TRIMされたセクターを読み取るとゼロが返されるため、SSDはゼロを書き込む代わりにTRIMする場合があります)。これにより、最近ではゼロが安全ではなくなりました。ランダムデータを使用すると、ファイルシステムとディスクがデータを実際にそのまま書き出すように強制されます。
frostschutz

@frostschutz 0OK 以外の文字を書いて、TRIMingの対象ではなく、1代わりにすべての文字を書くでしょうか?または、一部のドライブはすべてで圧縮を使用していますか?
Xen2050

@frostschutz ecryptfsボリュームをゼロで埋めている場合(答えはここで提案していると思いますが、さらに詳しく調べると、彼のフレージングは​​実際にはあいまいです)、本質的にランダム(非圧縮/不可解な)データをディスクに保存しますか?
JamesTheAwesomeDude

@JamesTheAwesomeDudeいいえ、暗号化されていない部分にゼロを書き込むことを提案していましたが、さらに下のSSDではこれでは不十分だと言いました。
ジル「SO-悪であるのをやめなさい」

6

うーん、btrfsはすべての通常のシュレッディング方法を打ち負かすようです...

  • というマウントオプションがありますが、nodatacow既存のファイルには影響しないようです。
  • すでにディスク上に適切なファイルがあるので、このbtrfs FAQエントリも役に立ちません。
  • 次にありdebugfsます。extファイルシステム専用ですが、機能するパッチがあります。これを使用して、影響を受けるブロックアドレスを見つけ、/ dev / sdXYで直接上書きできます。しかし、それは非常に危険であり、動作しない可能性があります(特にファイルのスナップショットがさらにある場合)
  • 特定のスナップショットまたはファイル全体を変更(または細断)できるbtrfsパッチを作成する
  • (実際に非常に機密性の高いデータに対する)最もクリーンな試みは次のとおりです。

    • 別のディスクを購入します(最初のディスクの影響を受けるパーティションのコピーに十分な空き容量がない場合)
    • フルディスク暗号化とファイルシステムをセットアップします
    • ディスクaからbにすべてをコピーします
    • システムbを起動し、ディスク全体を細断処理します...

    これは最も安価なアプローチではないかもしれませんが、今日の低いストレージコストと他のオプションで発生する問題を考慮すると、実際には(労働時間の点で)最も安価なアプローチかもしれません。


nodatacow新しく作成されたファイルのCフラグのデフォルトステータスを設定します。確かにそれができますか?chattr +C ~/.browser/logins.sqliteshred
JamesTheAwesomeDude

-6

ありますshred(1)(お使いのディストリビューションのパッケージにする必要があります)のUnix / Linux用。私はEFFが推奨するものです。


3
質問を再確認すると、私が細断処理について言及していることがわかり、なぜそれが仕事に十分でないのかが
わかります-goncalopp

私が見つけたのは、あなたが言及した理由のために、機密ファイルの暗号化を使用する提案です。
フォンブランド

2
「多くのファイルシステムでは、細断処理プログラムによってそのような安全な削除が可能になります。ただし、btrfsなどのCoWファイルシステムでは、このアプローチは役に立ちません。」そこには2つのリンクもあります。
goncalopp
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.