Ich möchte ein "Red Teaming"
Michael Schneider
Im Jahr 2016 ereigneten sich erneut viele erfolgreiche Angriffe auf Nutzerdatenbanken, davon waren die wohl bekanntesten die Angriffe auf Yahoo und Dropbox. Dank neulicher Fortschritte in der Technologie von Grafikkarten (GPUs), aber auch von Software zum Knacken von Passwörtern, ist es mittlerweile auch für Privatpersonen erschwinglich geworden, Nutzerpasswörter im grossen Stil zurückzurechnen.
Aufgrund der Tatsache, dass in den letzten 15 Jahren manche Angriffe auf Nutzerdatenbanken erfolgreich waren, begannen Softwareentwicklerinnen, Passwörter in reduzierter Form, den sogenannten Hashes, anstelle von Klartext zu speichern.
Hashes stellen die Ausgabe von gerichteten Algorithmen, den Hashfunktionen, dar. Das heisst, dass die Ausgabe dieser Algorithmen nur sehr schwer auf den ursprünglichen Eingabewert zurückzurechnen sind. Auf diese Weise können Programme die Authentizität von Passwörtern überprüfen, ohne diese selbst speichern zu müssen. Beispiele oft verwendeter Hashfunktionen sind MD5, SHA-1, SHA-256, SHA-512, NTLM oder eine Kombination dessen. Die Wikipediaartikel zu kryptologischen Hashfunktionen und Key Derivation Functions bieten einen guten Überblick über die Thematik, allerdings bevorzuge ich die Vorlesungen von Zulfikar Ramzan und Srinivas Devadas.
Damit sind jedoch nicht sämtliche Probleme gelöst. Nicht alle Hashfunktionen wurden zur sicheren Speicherung von Passwörtern entwickelt und viele davon besitzen Schwachstellen, wie häufige Kollisionen (wenn zwei verschiedene Eingabewerte den gleichen Ausgabewert besitzen) oder effizientere Berechnungsweisen, also Abkürzungen. Moderne Programme zur Berechnung von Passwörtern verwenden diese Schwachstellen, um Passwörter aus den Hashes zu berechnen, ohne die Hashfunktionen umkehren zu müssen.
Darüber hinaus sind Hashfunktionen deterministisch. Das heisst, wenn zwei Personen das gleiche Passwort verwenden, resultiert dies auch in einem identischen Hashwert. Sobald eine Angreiferin oder ein Angreifer den Hash zu einem Passwort kennt, werden alle Personen, die dieses Passwort verwenden, in Mitleidenschaft gezogen. Als Gegenmassnahme haben Entwicklerinnen begonnen, einen individuellen zufälligen Wert, das sogenannte Salt, zu jedem Passwort hinzuzufügen, bevor der Hash berechnet wird. Damit haben zwei unterschiedliche Personen einen anderen Hash, auch wenn sie dasselbe Passwort benützen.
Moderne GPU Architekturen werden für einen hohen Grad an Rechenparallelität entwickelt. Zur Zeit schafft es eine für Konsumentinnen geeignete Grafikkarte in der Grössenordnung von 1’000 simultanen Berechnungen auszuführen. Beispielsweise, gelingt es mit zwei aktuellen, herkömmlichen Grafikkarten die Hashfunktion NTLM ungefähr 27 Milliarden Mal in der Sekunde zu berechnen! In 2012, publizierte das Team MOSIX erstmals Software zum Bilden von grossen GPU Clustern, was praktisch unbegrenztes Skalieren der Hardware ermöglicht. So ist es möglich geworden, sogar Hashes mit Salt in absehbarer Zeit zu knacken, vorausgesetzt, die verwendete Hashfunktion kann leicht parallelisiert werden.
Angreiferinnen verwenden für Gewöhnlich eine Kombination verschiedenster Programme zum Berechnen von Passwörtern – die meisten davon sind frei erhältlich. Zur Zeit vermögen es die Programme John the Ripper und Hashcat verfügbare GPUs zu verwenden. Andere Programme sind z.B. Ophcrack und Cain and Abel.
Menschen, die aus dem Knacken von Passwörtern Profit schlagen können, haben sich in den letzten Jahren zunehmends professionalisiert. Die hier präsentierten Strategien sind deshalb keineswegs abschliessend und bieten nur einen groben Überblick über das Feld.
Was die Hardware betrifft, verwenden Angreiferinnen alles zwischen einem Laptop und einem 128 GPU Rechencluster. Aufgrund der Tatsache, dass aktuelle GPUs kräftig und zugleich relativ günstig sind, können es sich mittlerweile auch Einzelpersonen leisten, geeignete Hardware zusammenzustellen.
Im Sinne der Kurzweiligkeit beschränken wir uns hier auf einen leistungsfähigen Desktopcomputer mit einer aktuellen Version von Hashcat. Das Programm Hashcat stellt mehrere Angriffsweisen zur Verfügung, kann mit vielen Hashfunktionen umgehen und verwendet automatisch alle verfügbaren CPUs und GPUs. Meiner Meinung nach ist diese Konfiguration gut dafür geeignet, die Effizienz heutiger Methoden vor Auge zu führen.
In den nachfolgenden Abschnitten werden wir versuchen, die Passwörter von sechs Personen zu knacken. Die Personen user1 und user2 verwenden jeweils eines der häufigsten Passwörter, user3 und user4 verwenden jeweils ein kurzes zufällig generiertes Passwort und user5 wie user6 verwenden ein leicht zu merkendes Passwortformat. Die Hashfunktion in diesem Fall ist SHA-1 ohne Salt.
d819b82566e9b601d87e168d0dffe31cee1a9229
.01b307acba4f54f55aafc33bb06bbbf6ca803e9a
.a357d8269ef8f96973a98c820b2fb47251f11696
.338cb709d331e5bb6361300f59fcea03bec56111
.1c15c4f9a0da91443205f58f5731a3c850c34b6d
.72bf66db2315e75dfb569ba3d3a09203e906c111
.Hashcat liest diese Daten aus der Textdatei hashes.txt
im Format Nutzername:Hash
.
Wörterbuchangriffe, oder Dictionary Angriffe, stützen sich auf Wortlisten und Regeln, um Passwortkandidaten zu finden. Dieser Angriffstyp liefert oftmals am schnellsten Resultate und deckt nach unserer Erfahrung etwa 10% bis 30% der Passwörter auf. Wörterbuchangriffe funktionieren, weil Menschen es bevorzugen, Passwörter aus bekannten Wörtern mit einfachen Variationen zu erstellen.
Die beliebteste Wortliste ist jene aus dem Rockyou Leak aus 2009, weil sie viele echte, englischsprachige Passwörter enthält. Wir bevorzugen jedoch zusätzlich eine Kombination aus lokalisierten und zielgerichteten Wortlisten.
Regeln werden dann dazu verwendet, die vorhandenen Wörter mit häufigen Variationen, wie zum Beispiel hallo90! oder Hallo” anzupassen. Die GitHub Repository von Hashcat stellt eine gute Liste von Regeln zur Verfügung.
Der folgende Befehl knackt die Passwörter der Personen user1, user2 und user5 binnen einiger Minuten, schlägt bei den anderen drei jedoch fehl.
$ hashcat -a 0 -m 100 -w 3 —username -r InsidePro-PasswordsPro.rule hashes.txt wordlists-dir/
Ein beträchtlicher Prozentsatz von Nutzerinnen verwendet nach wie vor ein Passwort, das mit einem Grossbuchstaben beginnt, ein vollständiges Wort enthält und mit einer Zahl und/oder einem Sonderzeichen aufhört. Dieser Typ von Passwörtern ist meistens zwischen 8 und 10 Zeichen lang. Auffälligerweise erfüllt dieses Format ganz schön die standard Passwortvorgaben von Windows Domänen.
Von Nutzerinnen gewählte Passwörter folgen einem Muster. In Hashcat, können diese Muster als sogenannte Masken, z.B. ?u?l?l?l?l?d?d?s
, ausgedrückt werden. In einem Maskenangriff führt Hashcat einen gezielten Bruteforce Angriff durch, das heisst, es werden alle möglichen Werte der vorgegebenen Maske durchprobiert. Dies ist effizienter als ein blosses Durchprobieren aller vorstellbarer Möglichkeiten.
Die GitHub Seite von Hashcat stellt bereits gute Masken zur Verfügung. Für nicht englischsprachige oder geschäftliche Umfelder, ist es oft von Nutzen, statistische Informationen über Passwörter oder eine bekannte Passwortvorgabe zu verwenden, um gute Passwortkandidaten zu finden. Die PACK Programme wurden speziell dafür entwickelt und sind von grosser Hilfe. In gewissen Fällen kann es helfen, bestehende Masken gegen eine Passwortvorgabe zu prüfen, um den Suchraum weiter einschränken zu können. Dafür habe ich das Paket Policymatch entwickelt. Feedback ist willkommen!
Der folgende Befehl errechnet das Passwort der Person user3 innert einer Minute.
$ hashcat -a 3 -m 100 -w 3 —username hashes.txt rockyou-1-60.hcmask
Um das Passwort des Person user4 zu errechnen bedurfte es mit ca, 72 Stunden etwas mehr geduld:
$ hashcat -a 3 -m 100 -w 3 —username hashes.txt 8char-1l-1u-1d-1s-compliant.hcmask
Hashcat erlaubt es uns, die vorhergehenden Methoden in einem Hybridangriff zu kombinieren. Der folgende Befehl schafft es schlussendlich, das Passwort der letzten Person, user6 innert einer Viertelstunde zurückzurechnen. Dieser spezifische Angriff funktioniert gut, weil Personen oft ein Datum oder eine Jahreszahl im Passwort verwenden.
$ hashcat -a 6 -m 100 -w 3 —username hashes.txt wordlists-dir/ “?d?d?d?d?s”
Als ein Beweis dafür, wer du bist, gehören Passwörter zu der Gruppe von was du alleine weisst. Aber weil man sich nur sehr schwer an Passwörter erinnern kann, eignen sie sich nicht wirklich als sichere Form der Authentisierung. An den vorhergehenden Beispielen stellen wir mit Schrecken fest, mit wie wenig Aufwand sogar als relativ sicher angesehene Passwörter geknackt werden können.
Aus der Perspektive der Nutzerinnen ist die beste Strategie, einen Passwortmanager wie z.B. KeePassX LastPass oder 1Password zu verwenden. Der wichtigste Aspekt von Passwortmanagern ist, dass sie Menschen erlauben, hochkomplexe Passwörter zu generieren und diese nie von Hand eingeben zu müssen. Meiner Meinung nach liefern die Talks von Pierre-Antoine Haidar-Bachminska und David Jaeger perfekte Einführungen in die Welt besserer Passwortstrategien.
Aus der Perspektive der Entwicklerinnen ist es zentral, dass Passwörter auf sichere Weise mit dafür gedachten Algorithmen gehandhabt und gespeichert werden. Für einen Überblick empfehle ich die OWASP Cheat Sheets zu Password Storage, Forgot Password, Authentication und Pinning. Für Interessierte verweise ich auf den Talk von Per Thorsheim.
Wir führen gerne für Sie ein Monitoring des Digitalen Untergrunds durch!
Michael Schneider
Marisa Tschopp
Michèle Trebo
Andrea Covello
Unsere Spezialisten kontaktieren Sie gern!