Gelöschte Daten aus SQLite wiederherstellen: Navigieren in der Freeblock-Kette

Einführung

SQLite-Datenbanken sind Schatzkammern digitaler Beweise, die in vielen Anwendungen zu finden sind, von Chat-Nachrichten bis zu Transaktionsprotokollen. Aber was passiert, wenn Datensätze gelöscht werden? Hier kommt Freischaltungen-versteckte Abschnitte von ungenutztem Speicherplatz innerhalb von Datenbankseiten, die Reste von gelöschten Daten enthalten. Diese Freeblocks sind eine wahre Fundgrube für forensische Ermittler, denn sie ermöglichen die Wiederherstellung wichtiger Datensätze und die Aufdeckung versteckter Beweise.

In diesem Blog werden SQLite-Freeblocks entmystifiziert. Sie erfahren, wie sie funktionieren, wie man sie mit Tools wie Hex-Editoren aufspürt und wie man gelöschte Datensätze wiederherstellt. Egal, ob Sie ein Ermittler oder ein Enthusiast der digitalen Forensik sind, dieser Leitfaden wird Sie mit wichtigen Techniken ausstatten, um versteckte Daten zu extrahieren.

Was sind Freeblocks in SQLite?

Freeblocks sind Abschnitte mit ungenutztem Speicherplatz innerhalb einer SQLite-Datenbankseite. Wenn ein Datensatz gelöscht wird, wird der entsprechende Bereich nicht sofort überschrieben, es sei denn, ein sicherer Löschmechanismus ist aktiviert. Stattdessen wird er als freeblock, verfügbar für zukünftige Texte.

In diesem Prozess:

  • Der Zeiger auf den gelöschten Datensatz wird entfernt.
  • Der Seitenkopf wird aktualisiert, um die Entfernung widerzuspiegeln.
  • Falls zutreffend, wird der Offset, der auf den ersten freien Block zeigt, angepasst.

 

Diese Freeblocks enthalten oft noch Reste der ursprünglichen Daten, was sie zu einem kritischen Punkt für forensische Ermittler macht, die gelöschte Datensätze wiederherstellen wollen.

Beispiel:

Im folgenden Screenshot untersuchen wir eine SQLite-Datenbank mit DB Browser. Die Tabelle "Nachrichten" zeigt zwei aktive Datensätze, aber forensische Hinweise deuten auf das Vorhandensein weiterer gelöschter Datensätze hin.

Wie Freeblocks in SQLite-Seitenköpfe passen

Um Freeblocks zu finden und zu analysieren, müssen wir zunächst die Struktur der SQLite-Datenbankseiten verstehen. Jede Seite enthält einen Header, der wichtige Metadaten enthält, darunter auch Verweise auf Freeblocks.

In der nachstehenden Tabelle ist die Kopfstruktur für einen Seitentyp 0D dargestellt:

Versetzt Größe Beschreibung
0 1 Byte Seite Typ
1 2 Bytes Byte-Offset zum ersten freien Block
3 2 Bytes Anzahl der Zellen auf der Seite
5 2 Bytes Offset zum ersten Byte des Zelleninhalts
7 1 Byte Anzahl der fragmentierten freien Bytes in Zellen

Das Wichtigste zum Mitnehmen:

Der Wert an Offset 1 im Seitenkopf verweist auf den ersten freien Block. Wenn dieser Wert 0x0000gibt es keine Freischaltungen auf der Seite.

Verwendung von Hex-Editoren zur Analyse von Freeblocks

Um den ersten Freeblock zu lokalisieren, öffnen wir die Datenbank in einem Hex-Editor. Der Zwei-Byte-Wert an Offset 1 des Seitenkopfes liefert den Offset für den Standort des Freeblocks.

Im folgenden Beispiel:

  • Der Hex-Editor markiert den Offset 0x03A9 (dezimal 937) in rot, was auf die Position des ersten freien Blocks hinweist.

Wenn Sie zu diesem Offset navigieren, sehen Sie den Beginn des Freeblocks. Im Folgenden wird die Zelle mit dem Offset 937 untersucht.

Dekodierung von Freeblock-Headern

Jeder Freeblock enthält einen vier Byte langen Header:

  1. Erste 2 Bytes: Offset zum nächsten freien Block (0x0000 wenn keine vorhanden ist).
  2. Zweite 2 Bytes: Gesamtgröße des Freeblocks, einschließlich des Headers selbst.

Beispiel:

Beim Versatz 0x03A9gibt der Freeblock-Header an:

  • Der nächste freie Block befindet sich im Offset 0x03EA (dezimal 1002).
  • Die Größe des Freeblocks beträgt 0x0024 (36 Bytes, einschließlich des Headers).

Wiederherstellen gelöschter Datensätze mit Freeblocks

Freeblocks enthalten oft Reste von gelöschten Datensätzen, so dass forensische Ermittler die Daten teilweise oder vollständig wiederherstellen können. Im folgenden Screenshot ist die Nutzlast eines gelöschten Datensatzes intakt und wiederherstellbar, obwohl der Zeiger entfernt wurde.

Beispiel:

  • Der gelöschte Datensatz am Offset 0x03A9 enthält die Nachricht: "Nicht viel. Wie geht es Ihnen?"
  • Die Schlüsselfelder bleiben intakt, einschließlich des Nachrichteninhalts, auch wenn andere Metadaten überschrieben wurden.

Wir analysieren die nachfolgenden Freeblocks, um weitere gelöschte Datensätze zu entdecken. Bei Versatz 0x03EAverrät der Freeblock-Header:

  • Die Größe des freien Blocks ist 0x0016 (22 Bytes).
  • Dies ist der letzte freie Block in der Kette, wie durch 0x0000 in das nächste Freeblock-Zeigerfeld.

Der folgende Screenshot hebt den gesamten Zellenbereich des zweiten Freeblocks in der Kette hervor, in dem die gelöschte Nachricht "Hi Andy!" stand.

Identifizierung zusätzlicher gelöschter Datensätze

Es gibt jedoch einen weiteren gelöschten Datensatz auf dieser Seite, auf den die Freeblock-Kette nicht verweist. Ein Blick zurück auf den Seitenkopf zeigt, dass es nur 2 Datensätze auf dieser Seite gab, wie der Zwei-Byte-Wert an Offset 3 (0x00002). Und da es nur 2 Datensätze gibt, gibt es auch nur zwei Zeiger im Zeiger-Array. Diese beiden Zeiger zeigen auf den Datensatz #2 - "Hey, was gibt's?" und den Datensatz #4 - "Hey, ich habe mich gefragt, ob du etwas Scooby Snax hast." Sie werden feststellen, dass weiter oben auf der Seite eine weitere lange Nachricht steht.

Der Zwei-Byte-Wert an Offset 5 im Seitenkopf ist der Offset zum Zellinhaltsbereich, d. h. dorthin, wo der nächste Datensatz geschrieben würde, sofern er nicht in einen der freien Blöcke passt. Dieser Wert ist 0x0363 was dem Dezimal-Offset 867 entspricht.

Der Pfeil im obigen Screenshot zeigt auf den Seitenoffset 867. Dies ist der Anfang des Zellinhalts, d.h. der nächste Datensatz wird direkt über diesem Datensatz hinzugefügt. Der gelöschte Datensatz darüber enthält die Meldung: "Ich habe gestern Abend zufällig eine neue Lieferung erhalten. Sie haben Glück. Wie viel brauchen Sie?"

Die Datenbank betrachtet diese Daten als nicht zugewiesenen Speicherplatz. Er könnte genauso gut gefüllt sein mit 0x00 da es keinen Zeiger im Zeiger-Array gibt, der ihn adressiert. 

Wenn der Tabelle, zu der diese Seite gehört, ein Datensatz hinzugefügt wird, der zu groß ist, um in die beiden freien Blöcke auf der Seite zu passen, überschreibt er die Nachricht, bei der es sich um den Datensatz #5 handelt. 

Schauen wir uns an, wie es jetzt aussieht, nachdem wir die beiden Freeblocks und den dritten gelöschten Datensatz, der darauf wartet, überschrieben zu werden, identifiziert haben:

Nach der Analyse der Datenbank in ihrem Rohformat können wir feststellen, dass sie mehr als nur die 2 "Live"-Datensätze enthält, die der Datenbank-Viewer anzeigt. 

Datensatz #1 war wahrscheinlich die Nachricht "Hi Andy!", während Datensatz #3 wahrscheinlich die Nachricht "Nicht viel. Wie geht es dir?". Der Datensatz #5 hat immer noch seine Datensatznummer in der Zelle, die als die Nachricht "Ich habe gestern Abend zufällig eine neue Lieferung bekommen. Sie haben Glück. Wie viel brauchst du?"

 

Schlussfolgerung

Freeblocks sind ein leistungsfähiges Werkzeug bei forensischen Untersuchungen, da sie einen Einblick in gelöschte Datensätze und nicht zugewiesene Daten bieten. Wenn Ermittler diese Techniken beherrschen, können sie die digitalen Spuren aufdecken, die Datenbanken hinterlassen.

Sind Sie bereit, Ihre SQLite-Forensikkenntnisse auf die nächste Stufe zu heben? Informieren Sie sich über unsere Schulungsprogramme für Fortgeschrittene oder nehmen Sie Kontakt mit uns auf, um zu erfahren, wie wir Ihnen helfen können, ein forensischer Experte zu werden.

Facebook
Twitter
E-Mail
Drucken

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert