Einleitung
In diesem Labor erhalten Sie ein praktisches Verständnis von Wörterbuchangriffen (dictionary attacks) mit John the Ripper, einem leistungsstarken Werkzeug zur Passwortknackung. Sie lernen, wie Sie Wörterbücher effektiv auswählen und kombinieren, die inhärenten Grenzen dieser Angriffsmethode verstehen und sogar benutzerdefinierte Wörterbücher generieren, um Ihre Knackfähigkeiten zu verbessern. Am Ende dieses Labors werden Sie in der Lage sein, die Erfolgsraten von Wörterbuchangriffen zu analysieren und ihre Rolle in der Cybersicherheit zu würdigen.
Geeignete Wörterbücher auswählen
In diesem Schritt lernen Sie, wie Sie eine geeignete Wörterbuchdatei für einen Wörterbuchangriff mit John the Ripper auswählen und verwenden. Ein Wörterbuchangriff versucht, Passwörter zu knacken, indem jedes Wort aus einer vordefinierten Liste (Wörterbuch) ausprobiert wird. Die Effektivität dieses Angriffs hängt stark von der Qualität und Relevanz des verwendeten Wörterbuchs ab.
Zuerst überprüfen wir, ob John the Ripper installiert ist und ob die Dummy-Passwortdatei passwords.txt sowie die Wörterbuchdatei rockyou.txt in Ihrem ~/project-Verzeichnis vorhanden sind.
john --version
ls -l ~/project/passwords.txt ~/project/rockyou.txt
Sie sollten eine Ausgabe ähnlich dieser sehen, die die Anwesenheit der Dateien bestätigt:
John the Ripper password cracker, version 1.9.0-jumbo-1 ...
-rw-r--r-- 1 labex labex XX Mar XX:XX /home/labex/project/passwords.txt
-rw-r--r-- 1 labex labex XX Mar XX:XX /home/labex/project/rockyou.txt
Nun führen wir einen grundlegenden Wörterbuchangriff mit dem Wörterbuch rockyou.txt gegen unsere Datei passwords.txt durch. Die Option --wordlist gibt die zu verwendende Wörterbuchdatei an.
john --wordlist=/home/labex/project/rockyou.txt /home/labex/project/passwords.txt
John the Ripper versucht, die Passwörter zu knacken. Wenn erfolgreich, werden die geknackten Passwörter angezeigt. Möglicherweise sehen Sie eine Ausgabe ähnlich dieser:
Using default input encoding: UTF-8
Loaded 4 password hashes with no different salts (MD5 [MD5])
Will run till all hashes are cracked, or till a key is found for each (whichever comes first)
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
admin (user2)
123456 (user3)
labex (user4)
4g 0:00:00:00 DONE (2023-03-15 10:30) 100.0% (ETA: 2023-03-15 10:30) 4g/s 16.0p/s 16.0c/s 16.0C/s password...labex
Session completed.
Um die geknackten Passwörter jederzeit anzuzeigen, können Sie die Option --show verwenden:
john --show /home/labex/project/passwords.txt
Dieser Befehl zeigt die geknackten Passwörter und die entsprechenden Benutzernamen an.
user1:password (user1)
user2:admin (user2)
user3:123456 (user3)
user4:labex (user4)
4 password hashes cracked, 0 left
Dies zeigt, wie ein Wörterbuch für einen grundlegenden Angriff ausgewählt und verwendet wird. Die Datei rockyou.txt ist ein gängiges Beispiel für ein Wörterbuch, das häufig verwendete Passwörter enthält.
Wörterbücher für umfassende Angriffe kombinieren
In diesem Schritt lernen Sie, wie Sie mehrere Wörterbücher kombinieren, um eine umfassendere Wortliste für John the Ripper zu erstellen. Das Kombinieren von Wörterbüchern kann die Erfolgschancen beim Knacken von Passwörtern erheblich erhöhen, insbesondere wenn die Zielpasswörter nicht in einem einzelnen Wörterbuch enthalten sind.
Zuerst erstellen wir eine weitere kleine Wörterbuchdatei namens common_words.txt in Ihrem ~/project-Verzeichnis.
echo "welcome" > ~/project/common_words.txt
echo "security" >> ~/project/common_words.txt
echo "network" >> ~/project/common_words.txt
Nun kombinieren wir rockyou.txt und common_words.txt zu einer neuen Datei namens combined_dictionary.txt. Wir können den Befehl cat verwenden, um die Dateien zu verketten, und dann die Einträge sortieren und eindeutig machen, um Duplikate zu entfernen.
cat ~/project/rockyou.txt ~/project/common_words.txt | sort | uniq > ~/project/combined_dictionary.txt
Wir inspizieren den Inhalt der neuen combined_dictionary.txt, um sicherzustellen, dass sie Wörter aus beiden ursprünglichen Wörterbüchern enthält und keine Duplikate aufweist.
cat ~/project/combined_dictionary.txt
Sie sollten eine sortierte Liste eindeutiger Wörter aus rockyou.txt und common_words.txt sehen.
123456
admin
labex
network
password
secret
security
test
welcome
Nun verwenden wir diese combined_dictionary.txt für einen Wörterbuchangriff. Für diese Demonstration löschen wir zunächst die vorherige Knacksitzung von John, um einen sauberen Start zu gewährleisten.
john --session=clear
Führen Sie dann den Angriff mit dem kombinierten Wörterbuch durch:
john --wordlist=/home/labex/project/combined_dictionary.txt /home/labex/project/passwords.txt
John the Ripper versucht, die Passwörter mit der erweiterten Wortliste zu knacken. Wenn neue Passwörter zu passwords.txt hinzugefügt wurden, die in common_words.txt enthalten sind, würden diese nun geknackt werden. Da unsere passwords.txt nur Passwörter aus rockyou.txt enthält, wird die Ausgabe ähnlich wie im vorherigen Schritt sein, aber sie demonstriert den Prozess der Verwendung eines kombinierten Wörterbuchs.
Using default input encoding: UTF-8
Loaded 4 password hashes with no different salts (MD5 [MD5])
Will run till all hashes are cracked, or till a key is found for each (whichever comes first)
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
admin (user2)
123456 (user3)
labex (user4)
4g 0:00:00:00 DONE (2023-03-15 10:35) 100.0% (ETA: 2023-03-15 10:35) 4g/s 16.0p/s 16.0c/s 16.0C/s password...labex
Session completed.
Dieser Prozess unterstreicht die Bedeutung eines vielfältigen und umfassenden Wörterbuchs für effektives Passwortknacken.
Grenzen von Wörterbuchangriffen verstehen
In diesem Schritt untersuchen Sie die Grenzen von Wörterbuchangriffen. Obwohl mächtig, sind Wörterbuchangriffe nur gegen Passwörter wirksam, die im Wörterbuch enthalten sind. Sie sind unwirksam gegen komplexe, einzigartige oder zufällig generierte Passwörter, die nicht in der Wortliste vorhanden sind.
Um diese Einschränkung zu demonstrieren, fügen wir unserer Datei passwords.txt einen neuen Benutzer mit einem starken, zufälligen Passwort hinzu. Wir verwenden ein Passwort, das höchstwahrscheinlich nicht in einem Standardwörterbuch zu finden ist. Zum Beispiel P@ssw0rd!23AbC. Wir generieren seinen MD5-Hash.
echo "user5:$(echo -n 'P@ssw0rd!23AbC' | md5sum | awk '{print $1}')" >> /home/labex/project/passwords.txt
Nun löschen wir die vorherige Sitzung von John und versuchen erneut, die Passwörter mit unserer combined_dictionary.txt zu knacken.
john --session=clear
john --wordlist=/home/labex/project/combined_dictionary.txt /home/labex/project/passwords.txt
Beobachten Sie die Ausgabe. John the Ripper wird wahrscheinlich die ersten vier Passwörter (user1, user2, user3, user4) knacken, aber das Passwort von user5 nicht knacken können, da P@ssw0rd!23AbC nicht in unserem Wörterbuch enthalten ist.
Using default input encoding: UTF-8
Loaded 5 password hashes with no different salts (MD5 [MD5])
Will run till all hashes are cracked, or till a key is found for each (whichever comes first)
Press 'q' or Ctrl-C to abort, almost any other key for status
password (user1)
admin (user2)
123456 (user3)
labex (user4)
4g 0:00:00:00 DONE (2023-03-15 10:40) 80.0% (ETA: 2023-03-15 10:40) 4g/s 16.0p/s 16.0c/s 16.0C/s password...labex
Session completed.
Zur Bestätigung verwenden Sie die Option --show:
john --show /home/labex/project/passwords.txt
Sie werden sehen, dass das Passwort von user5 ungeknackt bleibt.
user1:password (user1)
user2:admin (user2)
user3:123456 (user3)
user4:labex (user4)
4 password hashes cracked, 1 left
Dies zeigt, dass Wörterbuchangriffe durch den Inhalt des Wörterbuchs begrenzt sind. Passwörter, die nicht im Wörterbuch enthalten sind, insbesondere starke, einzigartige, werden mit dieser Methode nicht geknackt. Dies unterstreicht die Bedeutung der Verwendung starker, unvorhersehbarer Passwörter.
Benutzerdefinierte Wörterbücher generieren
In diesem Schritt lernen Sie, wie Sie ein benutzerdefiniertes Wörterbuch generieren. Obwohl große vorgefertigte Wörterbücher wie rockyou.txt nützlich sind, müssen Sie manchmal ein Wörterbuch erstellen, das auf ein bestimmtes Ziel oder Szenario zugeschnitten ist. Dies kann die Verwendung bekannter Informationen über das Ziel (z. B. Firmennamen, gängige Phrasen, Daten) zur Generierung potenzieller Passwörter beinhalten.
Wir werden das Tool crunch verwenden, das sich hervorragend zur Generierung von Wortlisten basierend auf angegebenen Zeichensätzen und Mustern eignet. crunch ist nicht standardmäßig installiert, daher installieren wir es zuerst.
sudo apt install -y crunch
Nun generieren wir ein einfaches benutzerdefiniertes Wörterbuch. Wir können beispielsweise alle möglichen Kombinationen von Kleinbuchstaben einer bestimmten Länge generieren. Erstellen wir ein Wörterbuch mit allen 4-stelligen Wörtern in Kleinbuchstaben.
crunch 4 4 -o ~/project/custom_4char_dictionary.txt -t @@@@
4 4: Gibt die minimale und maximale Länge der zu generierenden Wörter an (hier beide 4).-o ~/project/custom_4char_dictionary.txt: Gibt die Ausgabedatei an.-t @@@@: Gibt ein Muster an.@steht für Kleinbuchstaben.
Dieser Befehl generiert eine große Datei. Zu Demonstrationszwecken generieren wir ein kleineres, besser handhabbares benutzerdefiniertes Wörterbuch. Wir generieren Wörter der Länge 3 bis 4, verwenden nur Kleinbuchstaben und beginnen mit 'a'.
crunch 3 4 abcdefghijklmnopqrstuvwxyz -o ~/project/custom_small_dictionary.txt -t a%@
3 4: Minimale Länge 3, maximale Länge 4.abcdefghijklmnopqrstuvwxyz: Gibt den zu verwendenden Zeichensatz an.-o ~/project/custom_small_dictionary.txt: Ausgabedatei.-t a%@: Muster.aist ein Literal 'a',%steht für Zahlen,@steht für Kleinbuchstaben. Korrigieren wir dies, um nur Kleinbuchstaben zu generieren.
Versuchen wir ein relevanteres Beispiel für ein benutzerdefiniertes Wörterbuch: Generieren von Variationen eines bekannten Wortes wie "labex" mit angehängten Zahlen. Hierfür verwenden wir die integrierten Regeln von john für Wortlisten, was für gängige Passwortvariationen praktischer ist.
Zuerst erstellen wir eine Basis-Wortliste nur mit "labex".
echo "labex" > ~/project/base_word.txt
Nun verwenden wir die Option --rules von John mit einem gängigen Regelwerk (wie Wordlist), um Variationen zu generieren. Dies wird oft mit einer Basis-Wortliste verwendet.
john --wordlist=/home/labex/project/base_word.txt --rules=Wordlist --stdout > ~/project/labex_variations.txt
--wordlist: Die Basis-Wortliste.--rules=Wordlist: Wendet die Standardregeln für Wortlisten an (z. B. Anhängen von Zahlen, Ändern der Groß-/Kleinschreibung usw.).--stdout: Gibt die generierten Wörter auf der Standardausgabe aus.> ~/project/labex_variations.txt: Leitet die Ausgabe in eine Datei um.
Wir inspizieren die generierten Variationen:
head -n 10 ~/project/labex_variations.txt
Sie sehen Variationen wie labex1, Labex, labex! usw.
labex
Labex
LABEX
labex1
labex2
labex3
labex4
labex5
labex6
labex7
Dies zeigt, wie benutzerdefinierte Wörterbücher oder Wortvariationen generiert werden können, was für gezielte Angriffe entscheidend sein kann, bei denen spezifische Muster oder bekannte Informationen über das Ziel verfügbar sind.
Erfolgsqouten von Wörterbuchangriffen analysieren
In diesem Schritt analysieren Sie die Erfolgsqouten von Wörterbuchangriffen basierend auf den verwendeten Wörterbüchern und der Komplexität der Zielpasswörter. Das Verständnis der Erfolgsqouten hilft bei der Bewertung der Effektivität Ihrer Knackversuche und der Sicherheitslage von Systemen.
Wir haben bereits gesehen, dass einfache Wörterbuchwörter leicht geknackt werden, während komplexe Passwörter dies nicht sind. Quantifizieren wir dies, indem wir die Anzahl der geknackten Passwörter mit der Gesamtzahl der Hashes vergleichen.
Stellen Sie zunächst sicher, dass die Sitzung von John gelöscht ist.
john --session=clear
Nun führen wir den Angriff erneut mit unserer combined_dictionary.txt gegen passwords.txt (die jetzt user5 mit einem starken Passwort enthält) aus.
john --wordlist=/home/labex/project/combined_dictionary.txt /home/labex/project/passwords.txt
Nach Abschluss des Angriffs verwenden Sie die Option --show, um die Ergebnisse anzuzeigen.
john --show /home/labex/project/passwords.txt
Die Ausgabe zeigt die geknackten Passwörter und die Anzahl der geknackten Hashes im Verhältnis zur Gesamtzahl.
user1:password (user1)
user2:admin (user2)
user3:123456 (user3)
user4:labex (user4)
4 password hashes cracked, 1 left
Aus dieser Ausgabe können wir die Erfolgsqoute berechnen: (Anzahl der geknackten Hashes / Gesamtzahl der Hashes) _ 100 %. In diesem Fall (4 / 5) _ 100 % = 80 %.
Diese Erfolgsqoute von 80 % zeigt, dass zwar viele gängige Passwörter geknackt wurden, das starke Passwort für user5 jedoch gegen diesen Wörterbuchangriff sicher blieb. Dies unterstreicht, dass Wörterbuchangriffe gegen schwache, gängige oder wörterbuchbasierte Passwörter sehr effektiv sind, aber gegen starke, einzigartige Passwörter fehlschlagen.
Zur weiteren Analyse könnten Sie mit verschiedenen Wörterbüchern experimentieren (z. B. einem sehr kleinen, spezifischen Wörterbuch im Vergleich zu einem sehr großen, allgemeinen) und beobachten, wie sich die Erfolgsqoute ändert. Je größer und relevanter das Wörterbuch ist, desto höher ist die potenzielle Erfolgsqoute gegen gängige Passwörter. Für wirklich zufällige und komplexe Passwörter wird die Erfolgsqoute von Wörterbuchangriffen jedoch immer gering sein, was die Notwendigkeit anderer Knacktechniken (wie Brute-Force) oder, noch wichtiger, starker Passwortrichtlinien unterstreicht.
Diese Analyse bekräftigt die Bedeutung der Verwendung starker, einzigartiger Passwörter, die nicht leicht zu erraten oder in gängigen Wörterbüchern zu finden sind, um sich vor solchen Angriffen zu schützen.
Zusammenfassung
In diesem Labor haben Sie praktische Erfahrungen mit John the Ripper und Wörterbuchangriffen gesammelt. Sie haben gelernt, wie man Wörterbücher auswählt und kombiniert, um die Knackversuche zu verbessern. Sie haben auch die inhärenten Grenzen von Wörterbuchangriffen verstanden, insbesondere gegen starke, einzigartige Passwörter. Darüber hinaus haben Sie Methoden zur Generierung benutzerdefinierter Wörterbücher untersucht und die Erfolgsqouten dieser Angriffe analysiert. Dieses Labor hat Ihnen praktische Einblicke in eine grundlegende Passwortknacktechnik vermittelt und die Bedeutung robuster Passwortsicherheitspraktiken unterstrichen.


