GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Finden Sie verlorene Dateien mit Scalpel

Als Systemadministrator gehört es zu Ihrer Verantwortung, Benutzern bei der Verwaltung ihrer Daten zu helfen. Einer der wichtigsten Aspekte dabei ist sicherzustellen, dass Ihr Unternehmen über einen guten Backup-Plan verfügt und dass Ihre Benutzer ihre Backups entweder regelmäßig erstellen oder dies nicht tun müssen, weil Sie den Prozess automatisiert haben.

Manchmal passiert jedoch das Schlimmste. Eine Datei wird versehentlich gelöscht, ein Dateisystem wird beschädigt oder eine Partition geht verloren, und aus irgendeinem Grund enthalten die Backups nicht das, was Sie brauchen.

Wie wir unter So verhindern und wiederherstellen von versehentlichem Löschen von Dateien in Linux besprochen haben, müssen Sie vor dem Versuch, verlorene Daten wiederherzustellen, zuerst herausfinden, warum die Daten überhaupt fehlen. Es ist möglich, dass ein Benutzer die Datei einfach verlegt hat oder dass es ein Backup gibt, von dem der Benutzer nichts weiß. Aber wenn ein Benutzer tatsächlich eine Datei ohne Backups entfernt hat, dann wissen Sie, dass Sie eine gelöschte Datei wiederherstellen müssen. Wenn eine Partitionstabelle jedoch verschlüsselt ist, sind die Dateien nicht wirklich verloren, und Sie sollten TestDisk verwenden, um die Partitionstabelle oder die Partition selbst wiederherzustellen.

Was passiert, wenn Ihre Datei- oder Partitionswiederherstellung nicht oder nur teilweise erfolgreich ist? Dann ist es Zeit für Scalpel. Scalpel führt File-Carving-Operationen basierend auf Mustern durch, die eindeutige Dateitypen beschreiben. Es sucht nach diesen Mustern basierend auf binären Zeichenfolgen und regulären Ausdrücken und extrahiert dann die Datei entsprechend.

Dieses Tool wird derzeit nicht gewartet, ist aber immer zuverlässig und wird genau wie erwartet kompiliert und ausgeführt. Wenn Sie Red Hat Enterprise Linux (RHEL) 7, RHEL 8 oder Fedora ausführen, können Sie die RPM-Installationsprogramme von Scalpel zusammen mit der zugehörigen Abhängigkeit libtre herunterladen , von klaatu.fedorapeople.org.

Beginnend mit Scalpel

Scalpel wird mit einer umfassenden Liste von Dateitypen und ihren eindeutigsten Erkennungsmerkmalen geliefert. Manchmal kann eine Datei durch vorhersagbaren Text am Anfang und am Ende identifiziert werden:

htm    n    50000   <html         </html>

Während zu anderen Zeiten kryptisch aussehende Hex-Codes erforderlich sind:

jpg     y     200000000     \xff\xd8\xff\xe0\x00\x10     \xff\xd9

Scalpel erwartet, dass Sie /etc/scalpel.conf duplizieren Bearbeiten Sie Ihre Kopie, um die Dateitypen einzuschließen, die Sie wiederherstellen möchten, und schließen Sie die Dateitypen aus, von denen Sie wissen, dass Sie sie nicht benötigen. Zum Beispiel, wenn Sie wissen, dass Sie .fws nicht haben oder sich nicht darum kümmern Dateien, und kommentieren Sie dann diese Zeile aus der Datei aus. Dadurch kann der Wiederherstellungsprozess beschleunigt und Fehlalarme reduziert werden.

In der Konfigurationsdatei ist das Format einer Dateidefinition von links nach rechts:

  • Die Dateierweiterung.
  • Ob in der Kopf- und Fußzeile zwischen Groß- und Kleinschreibung unterschieden wird (y oder n ).
  • Die minimale und maximale Dateigröße, die Scalpel finden soll.
  • Ein Standard-Header, der den Anfang der Datei identifiziert.
  • Eine Standard-Fußzeile, die das Ende der Datei kennzeichnet.

Die footer Feld ist optional. Wenn keine Fußzeile bereitgestellt wird, extrahiert Scalpel die Anzahl von Bytes, die Sie als Maximalwert des Dateityps festgelegt haben.

Möglicherweise stellen Sie fest, dass ein Wiederherstellungsversuch nur einen Teil einer Datei rettet, wie z. B. dieses größtenteils wiederhergestellte JPG:

Dieses Ergebnis bedeutet, dass Sie wahrscheinlich den Maximalwert der Dateigrenzen erhöhen und dann erneut scannen müssen, damit auch das Ende der Datei wiederhergestellt werden kann:

Neue Dateitypen definieren

Erstellen Sie zunächst eine Kopie der Scalpel-Konfigurationsdatei. Wenn alle Ihre Benutzer ähnliche Daten generieren, benötigen Sie möglicherweise nur eine Konfigurationsdatei für Ihre gesamte Organisation. Oder Sie finden es vielleicht besser, eine Konfigurationsdatei pro Abteilung zu haben.

Um Ihre eigenen Dateitypen zu einer Scalpel-Konfiguration hinzuzufügen, beginnen Sie mit einigen forensischen Ermittlungen.

Bei Textdateien haben Sie idealerweise eine vorhersehbare Struktur, die Sie vorhersehen können. Beispielsweise beginnt eine XML-Datei wahrscheinlich mit <xml und endet mit </xml . Binärdateien sind ähnlich vorhersagbar. Verwenden des hexdump Befehl können Sie einen typischen Header des Dateityps anzeigen, den Sie definieren möchten. Hier sind die Ergebnisse für ein XCF, die standardmäßige Grafikdatei mit Ebenen von GIMP:

$ head --bytes 8 example.xcf | hexdump --canonical
00000000  67 69 6d 70 20 78 63 66         |gimp xcf|
00000008

Diese Ausgabe stammt von einem Red Hat Enterprise Linux 8-System. Auf älteren Systemen kann eine ältere Syntax erforderlich sein:

$ head --bytes 8 example.xcf | hexdump -C
00000000  67 69 6d 70 20 78 63 66         |gimp xcf|
00000008

Die kanonische Ausgabe von hexdump zeigt die Adresse in der Spalte ganz links und die decodierten Werte ganz rechts an. In der mittleren Spalte befinden sich die hexadezimalen Bytes der ersten 8 Bytes der ersten Zeile der XCF-Datei.

Die meisten Binärdateien in /etc/scalpel.conf sehen dieser Ausgabe ziemlich ähnlich, außer dass diesen Werten \x vorangestellt ist Escape-Sequenz, um anzuzeigen, dass die Zahlen tatsächlich Hexadezimalziffern sind. Beispielsweise sieht eine JPG-Datei in der Konfigurationsdatei so aus:

jpg     y     200000000     \xff\xd8\xff\xe0\x00\x10     \xff\xd9

Vergleichen Sie diesen Wert mit einem Test-Hexdump der ersten 6 Bytes (denn so viele Bytes scalpel.conf enthält in seiner JPG-Definition) einer beliebigen JPG-Datei auf Ihrem System:

$ head --bytes 6 example.jpg | | hexdump --canonical
00000000  ff d8 ff e0 00 10                    |......|
00000006

Vergleichen Sie die Fußzeile mit den letzten 2 Bytes, um mit dem übereinzustimmen, was die Konfigurationsdatei zeigt:

$ tail --bytes -2 example.jpg | hexdump --canonical
00000000  ff d9                        |..|
00000002

Diese Werte stimmen überein, sodass Sie sicher sein können, dass gültige JPG-Dateien wahrscheinlich alle in einer vorhersehbaren Reihenfolge beginnen und enden.

Hinweis: Der Ogg-Eintrag in der scalpel.conf Datei ist irreführend, da ihr der \x fehlt Fluchtabfolge. Wenn Sie eine Ogg-Datei wiederherstellen müssen, beheben Sie diese oder ersetzen Sie ihre Definition.

Anreise zur Arbeit

Um nun für alle Dateien, die Sie wiederherstellen müssen, dasselbe Vertrauensniveau zu erreichen (z. B. XCF im vorherigen Beispiel). Um es noch einmal zu wiederholen, dies ist Ihr Arbeitsablauf zum Definieren der Binärdateitypen, die dem Opferlaufwerk gemeinsam sind: 

  1. Erhalten Sie die hexadezimalen Werte der ersten paar Bytes eines Dateityps mit head --bytes n Befehl.
  2. Erhalten Sie die letzten paar Bytes mit tail --bytes -n Befehl.
  3. Wiederholen Sie diesen Vorgang für mehrere verschiedene Dateien desselben Typs, um die Konsistenz dieses Musters zu bestätigen, und passen Sie die Länge Ihrer Kopf- und Fußzeilenmuster nach Bedarf an.
  4. Geben Sie die Kopf- und Fußzeilenwerte in Ihre benutzerdefinierte Scalpel-Konfiguration ein, indem Sie \x verwenden Notation, um jedes Byte als Hexadezimalzeichen zu identifizieren.

Befolgen Sie diese Reihenfolge für jeden wichtigen binären Dateityp, den Sie wiederherstellen müssen.

Wenn es sich bei einer Datei um Klartext handelt, stellen Sie eine gemeinsame Kopf- und Fußzeile bereit, z. B. #!/bin/sh für Shell-Skripte # (das Leerzeichen nach dem # ist wichtig) für Markdown-Dateien mit einem h1-Level-Titel, <xml für XML-Dateien usw.

Wenn Sie bereit sind, Scalpel auszuführen, erstellen Sie ein Verzeichnis, in dem es Ihre geretteten Dateien ablegen kann:

$ mkdir /run/media/seth/rescuer/scalped

Hinweis: Erstellen Sie dieses Verzeichnis nicht auf demselben Volume, das die verlorenen Daten enthält.

Wenn das betroffene Laufwerk noch nicht gemountet ist, mounten Sie es und führen Sie dann Scalpel:

aus
$ scalpel -c my-scalpel.conf \
  -o /run/media/seth/rescuer/scalped \
  /run/media/seth/victim

Sie können Scalpel auch auf einem Disk-Image ausführen:

$ scalpel -c my-scalpel.conf \
  -o ~/scalped ~/victim.img

Wenn Scalpel fertig ist, überprüfen Sie die Dateien in Ihrem festgelegten Rettungsverzeichnis.

Alles in allem ist es am besten, Backups zu erstellen, damit Sie die Wiederherstellung von Dateien überhaupt vermeiden können. Aber sollte das Schlimmste passieren, versuchen Sie es mit Skalpell und schnitzen Sie vorsichtig.


Linux
  1. Finden Sie Dateien und Verzeichnisse unter Linux mit dem Befehl find

  2. Wie finde ich Dateien mit einem bestimmten Unterpfad?

  3. So finden Sie Dateien mit dem fd-Befehl in Linux

  4. So finden Sie rekursiv alle Dateien mit einer Dateigröße von Null (0) Bytes in einem Verzeichnis

  5. Linux-Löschdatei mit Größe 0

Linux-Suchbefehl mit praktischen Beispielen

So finden Sie Dateien in Debian 10

So finden Sie Dateien basierend auf dem Zeitstempel in Linux

So finden Sie Dateien mit dem fd-Befehl in Linux

Tutorial für Linux-Suchbefehle (mit Beispielen)

So finden Sie Dateien mit Dutzenden von Kriterien mit dem Bash-Suchbefehl