852 Aufrufe
Gefragt in Linux von
Hallo!

Nachdem ich ein Passwort für ein Plain DM-CRYPT (ohne LUKS) Image vergessen hatte, stand ich vor einem Problem. Dafür gibt es einfach bisher nichts im Netz, nur für LUKS.

Ich war in der Lage, es zu lösen und möchte hier der Nachwelt eine kleine Unterstützung bei Ähnlichem anbieten..

Problembeschreibung
· dmcrypt verschlüsseltes Dateisystem in einer Datei (Image)
· Passwort teilweise noch in Erinnerung

Lösungsmöglichkeiten
· Brute Force auf Hash Ebene. Theoretisch in der Lage, sehr viele Passworte durchzuprobieren. Dazu gibts dm-crypt.saout.narkive.com/oTez7S7I/brute-force-attack-on-dm-crypt. Eine verwendbare Lösung ist das leider nicht. Weiter gibt es auch eine angepasste cryptsetup unter https://github.com/kholia/luks*Z*plus, jedoch hat das bei mir nicht funktioniert wie angepriesen.
· Manuelles Brute Force mit cryptsetup über ein Script

angewendete Lösung

Um über ein Script das richtige Passwort aus einer Liste von Möglichkeiten herauszufinden, brauchen wir eine Rückmeldung, ob es das richtige Passwort ist. Den gefallen tut uns jedoch dmcrypt nicht. Ein nachgeschalteter mount des zu erwartenden Dateisystems bringt jedoch Klarheit: Dieser scheitert, wenn das Passwort falsch war und nur Datenmüll anliegt.

#!/bin/sh

# Ein freies Loop device
LOOPDEV=/dev/loop815

# Der verschlüsselte Container
SAFE=/home/user/safe.crypt

# Ein belangloser Name für den device mapper
CRYPTNAME=Safe

# Der Einhängepunkt für das entschlüsselte Dateisystem
MNT=/mnt

# Das verwendete Dateisystem innerhalb des verschlüsselten Containers. Siehe "man mount".
FS=ext2

# Die Passwortdatei zum ausprobieren
PASSWORTE=/home/user/passworte.lst


echo "Create Loop device $LOOPDEV from $SAFE"
/sbin/losetup $LOOPDEV $SAFE > /dev/null 2>&1

while read a; do
echo "Testing: $a"
echo $a | cryptsetup open --type plain $LOOPDEV $CRYPTNAME
/bin/mount -t $FS /dev/mapper/$CRYPTNAME $MNT >/dev/null 2>&1 && break
/sbin/cryptsetup remove $CRYPTNAME
done < $PASSWORTE

echo "Removing Loop device"

/bin/umount $MNT > /dev/null 2>&1 && echo "Key found: $a"
/sbin/cryptsetup remove $CRYPTNAME > /dev/null 2>&1
/sbin/losetup -d $LOOPDEV > /dev/null 2>&1


Das angegebene Script versucht nun die Passworte durch und bricht bei gefundenem korrektem Schlüssel ab. Daran denken: Das Scipt läuft nur als root!


Die Passwortdatei

Variante 1

Mir waren nur fragmente des Passwortes in Erinnerung. Folglich brauchen wir noch eine Möglichkeit, eine entsprechende Passwortdatei mit Permutationen aus den Fragmenten zu erstellen:

Das Programm "combinator" aus den "hashcat-utils" bringt's:


/home/user/ # cat fragmente.lst
pass
wort
14
2014
14!
passwort

/home/user # combinator fragmente.lst fragmente.lst > passworte.lst
/home/user # cat passworte.lst
passpass
passwort
pass14
pass2014
pass14!
passpasswort
pass
wortpass
wortwort
wort14
wort2014
wort14!
wortpasswort
wort
14pass
14wort
1414
142014
1414!
14passwort
14
2014pass
2014wort
201414
20142014
201414!
2014passwort
2014
14!pass
14!wort
14!14
14!2014
14!14!
14!passwort
14!
passwortpass
passwortwort
passwort14
passwort2014
passwort14!
passwortpasswort
passwort
pass
wort
14
2014
14!
passwort



Wichtig ist hier natürlich, eine freie Zeile in der Datei fragmente.lst zu lassen, damit auch einzelne worte getestet werden.

Variante 2

Manch einer weiß sich auch nicht mehr so genau an Einzelheiten des Passwortes erinnern. Da hilft das programm "maskprocessor" weiter.


/home/user # mp "passwort?d?d" > passworte.lst


erzeugt eine Liste von "passwort00" bis "passwort99". Es sind recht komplexe Masken möglich. Die Anzahl der erzeugten Permutationen ist jedoch eine kritische Größe, da unser Script recht lahm ist.. bei mir komme ich so auf ca. 180 passworte/s.

3 Antworten

0 Punkte
Beantwortet von
Passwörter muss man sich nicht merken: Einfach einen Zettel kleben rechts oben an dem Bildschirm.

Wenn der Zettel weg ist, hilft raten: Meistens ist es der Name plus Geburtsdatum.
0 Punkte
Beantwortet von halfstone Profi (16.5k Punkte)
Hi  jaja-ohne-pw,

vielen Dank für die ausführliche Beschreibung.

Gruß Fabian
0 Punkte
Beantwortet von
@hellseher: eben. Ist doch quasi geraten. Nur eben maschinell. Bei mir waren ja dann auch ein paar hundert Kandidaten. Das hätte ich von Hand nicht leisten können.

@halfstone: Danke. Vielleicht kannst du mir ja auch mein altes Passwort für das Forum senden? :)
...