Posted by Silvan am 17 - August - 2010 8 Kommentare

Weil sich mein Intel Core 2 Quad Processor Q9550 in meinem “Server-PC” langweillt und dieser eigentlich 24 * 7 läuft habe ich ein Miniprogramme (wenn man das schon Programm nennen darf) in der Bash geschrieben, welches eine Brute Force Passwortliste erstellen soll.

Der Beitrag besteht aus einem Praxis- und einem Theorieteil. Ich schreibe den Praxisteil absichtlich vor dem Theorieteil, weil man nach der Theorie die Praxis wegen entmutigung nicht mehr lesen würde ;-) .

Praxis
Das Miniprogramm besteht aus verschiedenen Dateien:

signs
Enthält alle Zeichen die man im Passwort haben möchte.

a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
0
1
2
3
4
5
6
7
8
9

main.bash
Mit dieser Datei kann das Generieren der Passwortliste gestartet werden.

#!/bin/bash
# Checks, if the folder passwords is writable.
test -w passwords || mkdir passwords

# Reads all signs from the file signs into the array signs
u=0
while read line
do
        signs[$u]=$line
        u=$u+1
done < signs

# For every sign it starts a subprocess and save the pid in the file pids.
z=${#signs[*]}
for (( i=0; $i < $z; i=i+1 )) do         ./sub.bash ${signs[$i]} &         echo $! >> pids
done

sub.bash
Dieses Script wird von main.bash aufgerufen und generiert Passwörter.


#!/bin/bash
# Location of the lists.
pwfolder=passwords

u=0
while read line
do
        signs[$u]=$line
        u=$u+1
done < signs

z=${#signs[*]}
for (( i=0; $i < $z; i=i+1 )) do         echo $1${signs[$i]} >> $pwfolder/$1"2".password
done

while read line
do
        for (( i=0; $i < $z; i=i+1 ))         do                 echo $line${signs[$i]} >> $pwfolder/$1"3".password
        done
done < $pwfolder/$1"2".password

while read line
do
        for (( i=0; $i < $z; i=i+1 ))         do                 echo $line${signs[$i]} >> $pwfolder/$1"4".password
        done
done < $pwfolder/$1"3".password

while read line
do
        for (( i=0; $i < $z; i=i+1 ))         do                 echo $line${signs[$i]} >> $pwfolder/$1"5".password
        done
done < $pwfolder/$1"4".password

while read line
do
        for (( i=0; $i < $z; i=i+1 ))         do                 echo $line${signs[$i]} >> $pwfolder/$1"6".password
        done
done < $pwfolder/$1"5".password

while read line
do
        for (( i=0; $i < $z; i=i+1 ))         do                 echo $line${signs[$i]} >> $pwfolder/$1"7".password
        done
done < $pwfolder/$1"6".password

while read line
do
        for (( i=0; $i < $z; i=i+1 ))         do                 echo $line${signs[$i]} >> $pwfolder/$1"8".password
        done
done < $pwfolder/$1"7".password

stop.bash
Damit kann das ganze Miniprogramm beendet werden.

#!/bin/bash
while read line
do
        kill $line
done < pids
rm pids

Die Scripts können 1:1 kopiert und ausprobiert werden. Gestern habe ich das Script gestartet. Nach ca. 22 Stunden, weiteren 31GB belegtem Speicherplatz und einem Marathon für die CPU habe ich heute das Miniprogramm bei 9baoori abgebrochen. Das sind ca. 4’418’538’970 Kombinationen was ca. 55’789 Kombinationen / s sind. Dies waren jedoch nur die Kleinbuchstaben a-z und die Ziffern 0-9. Grossbuchstaben und Sonderzeichen müssten in der Passwortliste auch enthalten sein.

Selbstverständlich hat das Script und die Methode (es könnte zum Beispiel auch eine SQL Datenbank anstatt Files zur Speicherung der Möglichkeiten verwendet werden) noch Verbesserungspotenzial, der Theorie zur Folge ist eine Passwortliste mit allen Klein- und Grossbuchstaben, den Ziffern 0-9 und Sonderzeichen jedoch schier unmöglich, weshalb ich jetzt auch nicht mehr weiterhirne ;-) .

Trotzdem hat es Spass gemacht zu versuchen eine Passwortliste zu erstellen und solch eine Aufgabe ist super geeignet in einer neuen Programmiersprache die Schleifen zu üben.

Theorie
Nehmen wir an, dass die Passwortliste aus dem Alphabet (gross und klein), allen Ziffern und den Sonderzeichen + ” * % & / ( ) = ? ! ü ö ä – _ besteht. Das sind 78 Zeichen. Die nachfolgenden Tabellen geben Aufschluss über Anzahl Möglichkeiten, benötigter Speicherplatz und benötigte Zeit.

Möglichkeiten
78 = 78^1, 78*78 = 78^2 und so weiter, die Tabelle sollte also stimmen.

Möglichkeiten Stellen
78 1
78^2 = 6’084 2
78^3 = 474’552 3
78^4 = 37’015’056 4
78^5 = 2’887’174’368 5
78^6 = 225’199’600’704 6
78^7 = 17’565’568’854’912 7
78^8 = 1’370’114’370’683’140 8
78^9 = 106’868’920’913’285’000 9
78^10 = 8’335’775’831’236’200’000 10

Benötigter Speicherplatz
Wir nehmen an, dass 1 Zeichen 1 Byte gross ist. Der Speicherplatz berechnet sich so: Anzahl Stellen * Anzahl Möglichkeiten * 1Byte.

Speicherplatz Stellen
78 Byte 1
78^2 = 12,168 Kilobyte 2
78^3 = 1,423656 Megabyte 3
78^4 = 148,060224 Megabyte 4
78^5 = 14,435871840 Gigabyte 5
78^6 = 1,351197604224 Terabyte 6
78^7 = 122,958981984384 Terabyte 7
78^8 = 10,960914965465100 Petabyte 8
78^9 = 961,820288219561000 Petabyte 9
78^10 = 83,357758312362000000 Exabyte 10

Benötigte Zeit
Wir nehmen an, dass wir 55’789 Kombinationen / s erstellen können. Die Zeit berechnet sich so: Anzahl Möglichkeiten / 55’789 Kombinationen / s.

Zeit Stellen
<1s 1
<1s 2
9s 3
11m 4
14,37h 5
46,7d 6
9,98j 7
778,76j 8
60’743j 9
4’737’954j 10

Diese Werte basieren natürlich nur auf der Performance meines Computers. Um eine Brute Force Passwortliste zu erstellen würde man einen Supercomputer oder einen Computercluster und extrem viel Storage benötigen.

Zudem frage ich mich, soll man überhaupt so viel Rechenpower und Storage für eine Brute Force Passwortliste verschwenden? Denn jemand, der seine Daten / sein Login gut schützen will, wird bestimmt ein Passwort mit 20 Zeichen und mehr verwenden. Zudem müssen all diese Passwörter auch noch durchprobiert werden, was nochmals Zeit benötigt. Solch eine Brute Force Passwortliste lohnt sich also nur für Passwörter bis 6 Zeichen, falls man mal zum Beispiel ein Passwort für ein RAR Archiv vergessen hat. Bei 6 Zeichen wird aber schon 1,35 TB Speicherplatz benötigt!

Ich hoffe ich konnte euch einen Einblick in die Dimensionen, welche solch eine Brute Force Passwortliste annehmen kann, geben.

Ähnliche Beiträge

8 Kommentare.

  1. Hippi4wil sagt:

    mich würde interessieren welche endung die dateien haben sollen/ txt oder so ??

  2. Silvan sagt:

    Die Endung der Textdateien ist in diesem Fall unter Linux egal. Könntest die Dateien auch .blubb nennen ;-) . Hauptsache, ein Programm welches die Brutteforce Attacke durchführen soll kann die Liste öffnen und benutzen.

  3. Jonny Bravo sagt:

    Danke funktioniert super :)

  4. Silvan sagt:

    Danke, kein Problem. Sagst wenn du deine Liste in ein paar Jahren hast ^^.

  5. dävä sagt:

    darf ich fragen, wie mann dein “programm” ausführen kann?
    (Unter Win 7) oder mus ich dazu Linux runterladen?

  6. Silvan sagt:

    Du kannst es unter Linux ausführen. Hast du aber ein paar Batchkenntnisse, kannst du das gleiche auch mit Batch machen ;-) . Aber eben, so eine Passwortliste zu generieren ist eigentlich unsinnig, da es zu lange dauert und zu viel Speicherplatz benötigt um ein normales Passwort zu knacken.

  7. dävä sagt:

    das es unsinnig ist is mir auch klar ;) (und zudemm bräuchte man ja auch noch ein programm wo das ganze ausführt)
    also batch kentnisse hab ich leider keine… kannst du mir veraten wo resp. wie man das (er-)lernt?

    lg

  8. Silvan sagt:

    Guck mal hier. Da stehen schon ein paar Dinge. Am einfachsten ist es, wenn du den Ablauf des Programms zuerst auf ein Papier schreibst (einen sogenannten Programmablaufplan ^^) und diesen dann ausprogrammierst mit einer Sprache, eben z.B. Batch. Für das Beispiel im Beitrag benötigst du FOR Schleifen. Gruss Silvan.


Spam protection by WP Captcha-Free