Verwijderde gegevens herstellen van SQLite: Navigeren door de Freeblock-keten

Inleiding

SQLite databases zijn schatkamers van digitaal bewijsmateriaal die in veel apps te vinden zijn, van chatberichten tot transactielogboeken. Maar wat gebeurt er als records worden verwijderd? Ga naar freeblocks-Verborgen delen van ongebruikte ruimte binnen databasepagina's die restanten van verwijderde gegevens bevatten. Deze freeblocks zijn een goudmijn voor forensisch onderzoekers, waarmee belangrijke records kunnen worden hersteld en verborgen bewijs kan worden blootgelegd.

In deze blog wordt uitgelegd hoe SQLite freeblocks werken, hoe je ze kunt lokaliseren met tools zoals hex editors en hoe je verwijderde records kunt herstellen. Of je nu een onderzoeker bent of een enthousiast digitaal forensisch onderzoeker, deze gids zal je uitrusten met essentiële technieken om verborgen gegevens te achterhalen.

Wat zijn Freeblocks in SQLite?

Freeblocks zijn secties van ongebruikte ruimte binnen een SQLite databasepagina. Wanneer een record verwijderd wordt, wordt de corresponderende ruimte niet onmiddellijk overschreven tenzij een veilig wismechanisme is ingeschakeld. In plaats daarvan wordt het gemarkeerd als een freeblockbeschikbaar voor toekomstig schrijven.

In dit proces:

  • De pointer naar de verwijderde record wordt verwijderd.
  • De koptekst van de pagina is bijgewerkt om de verwijdering weer te geven.
  • Indien van toepassing wordt de offset naar het eerste vrije blok aangepast.

 

Deze freeblocks bevatten vaak nog restanten van de oorspronkelijke gegevens, waardoor ze een belangrijk aandachtspunt zijn voor forensisch onderzoekers die verwijderde records willen terughalen.

Voorbeeld:

In de schermafbeelding hieronder onderzoeken we een SQLite database met DB Browser. De tabel "messages" toont twee actieve records, maar forensische aanwijzingen suggereren de aanwezigheid van extra verwijderde records.

Hoe Freeblocks passen in SQLite paginakoppen

Om freeblocks te lokaliseren en te analyseren, moeten we eerst de structuur van SQLite databasepagina's begrijpen. Elke pagina bevat een header die kritieke metadata bevat, waaronder verwijzingen naar freeblocks.

De onderstaande tabel geeft een overzicht van de kopstructuur voor een 0D-paginatype:

Offset Maat Beschrijving
0 1 byte Pagina Type
1 2 bytes Byte offset naar het eerste vrije blok
3 2 bytes Aantal cellen op de pagina
5 2 bytes Offset naar de eerste byte van de celinhoud
7 1 byte Aantal gefragmenteerde vrije bytes in cellen

Belangrijkste afhaalmaaltijd:

De waarde op offset 1 in de paginatitel wijst naar het eerste vrije blok. Als deze waarde 0x0000Er staan geen freeblocks op de pagina.

Hex-editors gebruiken om Freeblocks te analyseren

Om het eerste freeblock te lokaliseren openen we de database in een hex-editor. De twee-byte waarde op offset 1 van de paginatitel geeft de offset naar de locatie van het vrije blok.

In het onderstaande voorbeeld:

  • De hex-editor markeert offset 0x03A9 (decimaal 937) in rood, wat de locatie van het eerste vrije blok aangeeft.

Navigeren naar deze offset onthult het begin van het vrije blok. Hieronder bekijken we de cel op offset 937.

Freeblock-headers decoderen

Elk freeblock bevat een header van vier bytes:

  1. Eerste 2 bytes: Offset naar het volgende vrije blok (0x0000 als er geen bestaat).
  2. Tweede 2 bytes: Totale grootte van het freeblock, inclusief de header zelf.

Voorbeeld:

Bij offset 0x03A9geeft de freeblock header aan:

  • Het volgende vrije blok is op offset 0x03EA (decimaal 1002).
  • De grootte van het vrije blok is 0x0024 (36 bytes, inclusief de koptekst).

Verwijderde records herstellen met Freeblocks

Freeblocks bevatten vaak restanten van verwijderde records, waardoor forensische onderzoekers gedeeltelijke of volledige gegevens kunnen herstellen. In de schermafbeelding hieronder is de payload van een verwijderde record intact en herstelbaar ondanks dat de aanwijzer is verwijderd.

Voorbeeld:

  • De verwijderde record op offset 0x03A9 bevat het bericht: "Niet veel. Hoe gaat het?"
  • Belangrijke velden blijven intact, inclusief de inhoud van het bericht, ook al zijn andere metagegevens overschreven.

We analyseren daaropvolgende freeblocks om extra verwijderde records te ontdekken. Bij offset 0x03EAonthult de kop van het Freeblock:

  • De grootte van het vrije blok is 0x0016 (22 bytes).
  • Dit is het laatste vrije blok in de keten, zoals aangegeven door 0x0000 in het volgende freeblock pointer veld.

De onderstaande schermafbeelding toont het hele celgebied van het tweede vrije blok in de keten waar het verwijderde bericht stond: "Hoi Andy!".

Extra verwijderde records identificeren

Maar er is toevallig nog een verwijderd record op deze pagina waar de freeblock chain niet naar verwijst. Terugkijkend naar de paginatitel waren er slechts 2 records op deze pagina volgens de twee-byte waarde op offset 3 (0x00002). En omdat er maar 2 records zijn, zijn er maar twee pointers in de pointer array. Die twee pointers wijzen naar record #2 - "Hey, what's up?" en record #4 - "Hey, I was wondering if you have any Scooby snax.". Het kan je opvallen dat er verderop in de pagina nog een lang bericht staat.

De twee-byte waarde op offset 5 in de paginatitel is de offset naar het celinhoudsgebied, in wezen waar het volgende record zou worden geschreven, tenzij het in een van de freeblocks past. Die waarde is 0x0363 wat de decimale offset 867 is.

De pijl in de bovenstaande schermafbeelding wijst naar pagina offset 867. Dit is het begin van de celinhoud. Dit is het begin van de celinhoud, wat betekent dat het volgende record net boven dit record wordt toegevoegd. Het verwijderde record erboven bevat de boodschap: "Ik heb toevallig gisteravond een nieuwe aanvoer binnengekregen. Je hebt geluk. Hoeveel heb je nodig?"

De database beschouwt deze gegevens als niet-toegewezen ruimte. Het kan net zo goed gevuld zijn met 0x00 omdat er geen pointer is in de pointer array die het adres geeft. 

Als een record dat te groot is om binnen de twee freeblocks op de pagina te passen wordt toegevoegd aan de tabel waar deze pagina bij hoort, zal het het bericht overschrijven, wat toevallig record #5 is. 

Laten we eens kijken hoe het eruit ziet nu we de twee freeblocks hebben geïdentificeerd, samen met de derde verwijderde record die wacht om overschreven te worden:

Na het analyseren van de database in zijn ruwe formaat, kunnen we concluderen dat het meer bevatte dan alleen de 2 "live" records die de databaseviewer weergaf. 

Opname #1 was waarschijnlijk het bericht "Hi Andy!" terwijl opname #3 waarschijnlijk het bericht "Niet veel. Hoe gaat het met je?". Opname #5 heeft nog steeds zijn recordnummer binnen zijn cel geïdentificeerd als het bericht, "Ik heb toevallig een nieuwe voorraad binnengekregen afgelopen nacht. Je hebt geluk. Hoeveel heb je nodig?"

 

Conclusie

Freeblocks zijn een krachtig hulpmiddel bij forensisch onderzoek, omdat ze een venster bieden op verwijderde records en niet-toegewezen gegevens. Door deze technieken te beheersen, kunnen onderzoekers de digitale sporen blootleggen die databases achterlaten.

Klaar om uw SQLite forensische vaardigheden naar het volgende niveau te brengen? Ontdek onze geavanceerde trainingsprogramma's of neem contact met ons op om te leren hoe wij u kunnen helpen een forensisch expert te worden.

Facebook
Twitter
E-mail
Afdrukken

Geef een reactie

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *