Sicheres Löschen von Dateien im btrfs-Dateisystem

22

Manchmal muss eine Datei in einem Dateisystem gelöscht werden, und es muss sichergestellt werden, dass die Datei wirklich nicht mehr vorhanden ist. Eine Datei, die beispielsweise vertrauliche Kennwörter enthält, sollte vollständig von der Festplatte gelöscht werden.

Wenn Sie ein einfaches rmDateisystem auswählen, wird der Inode ("Zeiger") auf die Datei gelöscht. Der Inhalt der Datei auf der physischen Festplatte wird jedoch nicht gelöscht. Diese werden dort belassen, bis sie überschrieben werden, wenn das Dateisystem den freien Speicherplatz benötigt.

Auf vielen Dateisystemen ermöglicht das Shred-Programm ein derart sicheres Löschen. Auf einem CoW-Dateisystem wie btrfs ist dieser Ansatz jedoch unbrauchbar . Das Problem wird durch die Tatsache verschlimmert, dass die Datei möglicherweise auf Volume-Snapshots vorhanden ist.

Gibt es eine Möglichkeit, eine Datei auf einem btrfs-Dateisystem sicher zu löschen ? Reicht es aus, alle Zeiger (auf allen Datenträgern) zu löschen und den freien Platz mit Nullen zu füllen ?

Goncalopp
quelle
2
Gute Frage, daran habe ich noch nie gedacht. Eine Möglichkeit, dieses Problem zu umgehen, besteht darin, solche Dateien zu verschlüsseln. Sie können auch die gesamte Festplatte verschlüsseln, aber wenn ein Angreifer Root-Zugriff auf das laufende System erhält, hilft Ihnen das nicht ...
mreithub
@mreithub In der Tat ist das Verschlüsseln solcher Dateien immer eine gute Idee, ebenso wie FDE. Es kann jedoch nicht alle Anwendungsfälle berücksichtigen (z. B. ein eingebettetes System - obwohl es fraglich ist, ob auf einem solchen System ohnehin btrfs ausgeführt wird ...). Eigentlich frage ich das, weil ich vergessen habe, die Verschlüsselung
einzurichten,

Antworten:

9

Sicheres Löschen ist für jedes Dateisystem eine schwierige Aufgabe. Sofern das Dateisystem nicht sehr eigenartig ist und garantiert, dass keine anderen Kopien der Datei herumliegen, müssen Sie den gesamten freien Speicherplatz auf dem Gerät freigeben. Während Sie mit größerer Wahrscheinlichkeit viele Teile der Datei auf Copy-on-Write-Dateisystemen finden, haben selbst "statische" Dateisysteme diese Garantie in der Praxis nicht, da viele Dateien bearbeitet werden und daher Teile aus früheren Versionen der Datei vorhanden sind Datei herumliegen.

Beachten Sie, dass das Löschen mit Nullen so gut ist wie das Löschen mit zufälligen Bytes, und dass Sie nicht mehrere Durchgänge benötigen. Das Löschen mit Nullen hinterließ Restdaten, die unter Laborbedingungen mit den Festplattentechnologien der 1980er Jahre teilweise wiederhergestellt werden konnten. das gilt heute nicht mehr. Siehe Warum ist es um ein Vielfaches besser, Nullen (oder zufällige Daten) auf eine Festplatte zu schreiben, als es nur einmal zu tun?

Sie können die vertraulichen Klartextdaten entfernen, indem Sie alles auf der Festplatte verschlüsseln. Richten Sie ein ecryptfs- Volume über diesem Dateisystem ein und verschieben Sie alle Ihre (vertraulichen) Dateien dorthin . Überschreiben Sie dann den gesamten freien Speicherplatz des Dateisystems. Sie können das meiste davon löschen, indem Sie das Dateisystem mit füllencat /dev/zero >zero . Möglicherweise sind noch einige Informationen in unvollständigen Blöcken enthalten (Blöcke, die den letzten Teil einer Datei enthalten, gefolgt von etwas Müll - möglicherweise Reste einer vertraulichen Datei). Um sicherzustellen, dass keine unvollständigen Blöcke vorhanden sind, verschieben Sie alles im Dateisystem in ecryptfs (die Dateien von ecryptfs verwenden ganze Blöcke, zumindest bei typischen Setups mit Blöcken von 4 KB). Stellen Sie sicher, dass Sie dies auf alle Volumes anwenden und alle Snapshots löschen, die vertrauliche Klartextdaten enthalten.

Möglicherweise befinden sich noch einige Informationen im Journal. Ich weiß nicht, wie ich das schrubben soll.

Auf SSDs können aufgrund der Blockneuzuweisung möglicherweise Daten verbleiben, die nicht mit normalen Softwaremitteln gelesen werden können, sondern durch Hacken der Firmware oder durch physischen Zugriff wiederhergestellt werden können. Dort können Sie nur die SSD vollständig löschen.

Gilles 'SO - hör auf böse zu sein'
quelle
3
Nullen haben den Nachteil, dass sie komprimiert oder ganz weggelassen werden können (eine SSD kann TRIM verwenden, anstatt Nullen zu schreiben, da TRIM-Sektoren beim Lesen Nullen zurückgeben). Das macht heutzutage Nullen unsicher. Durch die Verwendung zufälliger Daten werden das Dateisystem und die Festplatte gezwungen, die Daten tatsächlich so zu schreiben, wie sie sind.
Frostschutz
@frostschutz Würde das Schreiben eines anderen Zeichens als 0ok und nicht TRIMING-abhängig sein, 1stattdessen alle schreiben ? Oder verwenden einige Laufwerke die Komprimierung für alles?
Xen2050
@frostschutz Wenn Sie ein Ecryptfs-Volume mit Nullen füllen (was meiner Meinung nach die Antwort hier vorschlägt, aber bei näherer Betrachtung sehe ich, dass seine Formulierung tatsächlich mehrdeutig ist), werden Sie im Wesentlichen zufällig schreiben (unkomprimierbar / Uncheatable) Daten auf die Festplatte, nicht wahr?
JamesTheAwesomeDude
@JamesTheAwesomeDude Nein, ich habe vorgeschlagen, die Nullen in den unverschlüsselten Teil zu schreiben, aber ich habe erwähnt, dass dies auf einer SSD weiter unten nicht ausreicht.
Gilles 'SO - hör auf böse zu sein'
6

Hmmm, btrfs scheint alle gängigen Zerkleinerungsmethoden zu besiegen ...

  • Es gibt eine Mount-Option mit dem Namen nodatacow, die jedoch keine Auswirkungen auf bereits vorhandene Dateien zu haben scheint.
  • Da Sie bereits vernünftige Dateien auf Ihrer Festplatte haben, hilft Ihnen dieser btrfs-FAQ- Eintrag auch nicht weiter.
  • Dann ist da noch was debugfs. Es ist nur für ext-Dateisysteme, aber es gibt einen Patch dafür, der funktionieren könnte. Sie können es verwenden, um die betroffenen Blockadressen herauszufinden und sie dann direkt in / dev / sdXY zu überschreiben. Dies ist jedoch sehr gefährlich und funktioniert möglicherweise nicht (insbesondere, wenn mehr Schnappschüsse der Datei vorhanden sind).
  • Schreiben Sie einen btrfs-Patch, mit dem Sie bestimmte Snapshots oder eine ganze Datei ändern (oder zerkleinern) können
  • Der sauberste Versuch (für wirklich wirklich sensible Daten) wäre:

    • Kaufen Sie eine andere Festplatte (es sei denn, Sie haben genügend freien Speicherplatz für eine Kopie der betroffenen Partition auf der ersten).
    • Richten Sie die vollständige Festplattenverschlüsselung und Ihre Dateisysteme darauf ein
    • Kopieren Sie alles von Datenträger a nach b
    • booten Sie in System b und zerkleinern Sie die ganze Festplatte a ...

    Dies ist vielleicht nicht der billigste Ansatz, aber angesichts der geringen Speicherkosten von heute und der Schwierigkeiten, die Sie mit den anderen Optionen haben würden, ist dies möglicherweise der billigste (in Bezug auf die Arbeitsstunden).

mreithub
quelle
nodatacowSetzt den Standardstatus des CFlags für neu erstellte Dateien. Sicher könnte man es genau chattr +C ~/.browser/logins.sqliteund dann shred?
JamesTheAwesomeDude
-6

Es gibt shred(1)für Unix / Linux (sollte in den Paketen Ihrer Distribution enthalten sein). Ich empfehle das EFF .

vonbrand
quelle
3
Wenn Sie die Frage noch einmal überprüfen, werden Sie sehen, dass ich Shred erwähnt habe und warum es nicht genug für den Job ist
Goncalopp
Alles, was ich finde, sind Vorschläge zur Verschlüsselung vertraulicher Dateien, aus dem von Ihnen genannten Grund.
Vonbrand
2
"Auf vielen Dateisystemen ermöglicht das Shred-Programm ein derart sicheres Löschen. Auf einem CoW-Dateisystem wie btrfs ist dieser Ansatz jedoch nutzlos." Da gibt es auch zwei Links.
Goncalopp