Partitionsforensik mit ext3grep, bless & Co.

Jan 'RedBully' Seiffert redbully at cc.hs-owl.de
Sun Aug 16 23:44:49 CEST 2009


RalfGesellensetter wrote:
> Hallo,
> 
> ich habe bereits leidlich Erfahrung mit Festplattenforensik (Backups 
> sind etwas für Feiglinge ;) - und möchte hier einen Fall schildern, der 
> mir neue Einblicke in das Ext3-System gibt.
> 
> Ausgangssituation: Eine große ext3-Partition (Sidux-Installation incl. 
> Home + Daten) wurde versehentlich "überinstalliert" - also neu 
> formatiert und nochmals mit Sidux installiert.
> 
> Frozen Image:
> In der (optimistischen aber weitestgehend zutreffenden) Annahme, dass 
> die Formatierung nicht jeden Sektor mit Nullen überschreibt, und Sidux 
> seine Dateien ungefähr an dieselbe Stelle schreibt, wie bei der letzten 
> Installation,

Genau das ist das problem, er hat auch das Dateisystem an die gleiche stelle
geschrieben, Bitfields, Inode Tabelle, alles ueberschrieben...

 wurde die Partition umgehende r/o gesetzt und per "dd" als
> Imagedatei eingefroren.
> 
> Es gibt nun verschiedene Tools wie ext3grep, die Sektoren einzeln 
> auslesen, nach inodes mit Verzeichnissen suchen usw. Diese sehen aber 
> v.a. das neue System.
> 

..darum findest du auch nix mehr vom alten Dateisystem.

> Mit einem reinen Grep konnte ich z.B. schon eine Textdatei aufspüren. 

^^,
Ich hab einen Freund, der steht mit rm und /home auf Kriegsfuss.
Es ist doch erstaunlich was man an Hausarbeiten/Diplomarbeiten (thank god its
LaTex) und SourceCode (ASCII ftw.) mit einem grep -C xxx "catch phrase"
/dev/hda5 retten kann...

> Die meisten Hexeditoren (selbst lfhexedit) versagten allerdings bei 
> einer 10GB-Datei, allein "bless" war in der Lage, das Image komfortabel 
> nach Spuren zu durchsuchen und diese per C&P zu exportieren.
> 

Die meisten ASCII Texte mit grep retten.
Danach foremost drauf jagen.

> Nun ist ganz offensichtlich ein Problem, dass die Dateien aus dem neuen 
> (überschreibenden, gültigen) Ext3-System den Blick auf die alten Daten 
> verstellen. 
> 
> Es wäre also vielleicht eine sinnvolle Herangehensweise, alle Dateien 
> dort mit Nullen zu füllen (nur wie?).

versuchs mal hiermit, in Compiler werfen, dann z.B. "find /usr/ -type f -exec
./nullify \{\} \;":

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>

static char zero_mem[4096];

int main(int argc, char *argv[])
{
	int i;

	if(argc < 2) {
		fprintf(stderr, "%s: need filename[s]\n", argv[0]);
		return EXIT_FAILURE;
	}

	for(i = 1; i < argc; i++) {
		struct stat st;
		int f = open(argv[i], O_WRONLY);
		blkcnt_t j;

		if(-1 == f) {
			fprintf(stderr, "couldn't open \"%s\": %s\n",
			        argv[i], strerror(errno));
			continue;
		}
		if(fstat(f, &st)) {
			fprintf(stderr, "couldn't stat \"%s\": %s\n",
			        argv[i], strerror(errno));
			goto next;
		}
		if(!S_ISREG(st.st_mode)) {
			fprintf(stderr, "\"%s\" isn't a regular file\n",
			        argv[i]);
			goto next;
		}

		for(j = st.st_blocks; j;) {
			size_t k = (sizeof(zero_mem)/512) < j ?
			           sizeof(zero_mem) : j * 512;
			write(f, zero_mem, k);
			j -= k/512;
		}
next:
		close(f);
	}
	return EXIT_SUCCESS;
}


> Alternativ könnte man eine Imagekopie machen, die nur unbenutzte Inodes 
> des neuen Filesystems enthält.
> 
> Anregungen - Ideen willkommen.
> Gruß
> Ralf
Gruss
	Jan

-- 
Nur selten nimmt der Handelsmann statt baren Geldes Stuhlgang an



More information about the Linux mailing list