Einführung in das Hash-Cracking
Hashing ist eine Einweg-Verschlüsselungsmethode, die zur Gewährleistung der Datenintegrität, zur Authentifizierung von Informationen, zum Schutz von Passwörtern und anderen sensiblen Informationen verwendet wird. Hash-Funktionen wandeln Daten in eine Zeichenkette fester Größe um, die einheitlich und deterministisch ist, was sie zu einer hervorragenden Option für die Aufrechterhaltung der Datensicherheit macht.
Das bedeutet, dass es möglich ist, dasselbe Ergebnis mit denselben Eingabedaten zu erhalten, aber die Eingabedaten können nicht in Kenntnis des Ergebnisses berechnet werden, was die Überprüfung von Benutzeranmeldeinformationen ohne Kenntnis der Originaldaten ermöglicht.
Manchmal müssen wir als Sicherheitsexperten ein Passwort-Cracking durchführen, das im Grunde den Klartextwert „wiederherstellt“, um Benutzer mit schwachen Passwörtern zu identifizieren, andere Benutzerkonten zu kapern, um die Privilegien zu erhöhen, um nur einige Anwendungsfälle dieser Technik zu nennen.
In diesem Blog erfahren Sie, wie SAP Passwörter speichert und welche Cracking-Tools für die Durchführung von Tests verwendet werden können.
Passwortspeicherung in SAP Netweaver ABAP
SAP-Systeme erzeugen und speichern je nach Konfiguration unterschiedliche Typen und Versionen von Hashes. Außerdem können veraltete und unsichere Werte gespeichert werden, um eine Rückwärtskompatibilität zu gewährleisten. Dies ist wichtig, da je nach Konfigurationsparametern schwache Hashes in der Datenbank des SAP-Systems gespeichert werden können, die es einem Bedrohungsakteur erleichtern, hochkritische Informationen über die Anmeldedaten des Benutzers zu erhalten.
Datenbank-Tabellen
SAP Netweaver ABAP speichert Passwörter hauptsächlich in der Datenbanktabelle USR02, hält aber auch historische Benutzerwerte in den Tabellen USH02, USH02_ARC_TMP und nicht zuletzt in der Tabelle USRPWDHISTORY fest.
Obwohl USR02 die aktiven Kennwörter enthält, kann die Analyse aller Hashes Hinweise oder Teilkennwörter liefern, die zur Änderung von Eingabetestdaten oder zur Verbesserung eines bestehenden Wörterbuchs führen können.
Hash-Funktionen und -Formate
SAP-Systeme implementieren mehrere Mechanismen zur Generierung von Hashes, und je nach Konfiguration der Profilparameter können mehrere Werte gespeichert werden.
Das Feld CODVN (Code Version of Password Hash Algorithm) in Tabelle USR02 stellt den Algorithmus dar, der für eine bestimmte Registrierung aktiv ist. Die möglichen Werte und Hash-Methoden sind:
CODVN Value | Description |
B | MD5 based function, limited to 8 uppercased characters ASCII encoded |
D | MD5 based function, limited to 8 uppercased characters UTF8 encoded |
F | SHA1 based function with fixed SALT, 40 characters UTF-8 encoded |
H | SHA1 based function with random SALT, 40 characters UTF-8 encoded |
Jeder spezifische Hash-Wert hat seine eigene Spalte in den vorgenannten Tabellen, und mehrere Hash-Werte können nebeneinander bestehen und entsprechend der SAP-Systemkonfiguration validiert werden.
Für jede Tabelle wird CODVN „B“/„D“ in der Spalte „BCODE“, CODVN „F“ in der Spalte „PASSCODE“ und CODVN „H“ in der Spalte PWDSALTEDHASH gespeichert.
Zwei weitere CODVN-Werte sind möglich: „G“ und „I“, was bedeutet, dass mehrere Hashes erzeugt und gespeichert werden. CODVN „G“ erzeugt „F“ und „B“, und CODVN „I“ erzeugt die Hashes „H“ „F“ und „B“.
Die Passwort-Hashes, die generiert, gespeichert und validiert werden, wenn sich der Benutzer anmeldet, werden über den Profilparameter login/password_downwards_compatibility verwaltet (weitere Informationen über diesen Parameter finden Sie unter https://help.sap.com/doc/saphelp_nw74/7.4.16/en-us/4a/c3f18f8c352470e10000000a42189c/frameset.htm ).
Passwort-Knacken in SAP-Systemen
Um Passwörter knacken zu können, müssen wir zunächst Passwort-Hashes erhalten. Wenn wir direkten Zugriff auf die Datenbank haben, ist diese Aufgabe einfach, aber in SAP-Systemen haben wir andere Möglichkeiten.
Beschaffung von Hashes in SAP-Systemen
Wenn wir keinen direkten Zugriff auf die Datenbank haben, ist es möglich, die Kennwort-Hashes über bestimmte Transaktionen oder Remote Function Calls (RFC) zu beschaffen.
Einige hilfreiche Transaktionscodes für den Export von Datenbankeinträgen sind SE16 und DBACOCKPIT. Beide Transaktionen erlauben es, Datenbanktabellen zu untersuchen und vollständige Werte zu extrahieren.
Wenn diese Transaktionen nicht verfügbar sind, kann die RFC-Funktion RFC_READ_TABLE partielle Hashes liefern. Diese Methode liefert nicht die vollständigen Hash-Werte, aber einige Tools können diese unvollständigen Werte verwenden, um einige Ergebnisse zu erhalten. Es ist auch wichtig hervorzuheben, dass diese RFC-Funktion remote-fähig ist, d. h. sie kann remote ausgeführt werden.
Das folgende Bild zeigt ein Beispiel für den abgerufenen Teilwert des vorherigen Hashes.
Tools und Empfehlungen zum Knacken von Kennwörtern
Das Knacken von Passwörtern ermöglicht die Wiederherstellung von Passwörtern, und aufgrund der Eigenschaften von Hash-Funktionen ist die einzige Möglichkeit, diese Aufgabe zu erfüllen, das Ausprobieren von Werten. Dies kann durch reines Testen jeder Länge und jedes Zeichens erreicht werden, was nicht die leistungsfähigste Option ist, oder durch die Verwendung einer vorab erstellten Wortliste oder von Rainbow-Tabellen, bei denen es sich im Grunde (und vereinfacht ausgedrückt) um eine vorab berechnete Liste von Hash-Werten und dem dazugehörigen Klartext handelt; Rainbow-Tabellen sind jedoch keine gute Wahl, wenn bei der Hash-Berechnung zufällige Salze verwendet werden.
Es kann eine Mischung dieser Techniken verwendet werden, indem man Wortlisten mit Werten kombiniert oder die Wörter anhand von Regeln zu neuen Werten mutiert.
Es ist wichtig zu erwähnen, dass der Erfolg dieses Verfahrens hauptsächlich von der Erstellung der Wortliste und der Regelsätze abhängt. Die Kenntnis von typischen Passwörtern oder Wörtern, die mit der Organisation in Verbindung stehen, kann zu einem effizienteren Weg führen, diese Aufgabe zu erfüllen.
Schwache Hashes oder Teil-Hashes können ungenaue oder veraltete Ergebnisse liefern. Diese Ergebnisse können Hinweise auf den Kennwortbereich liefern. Um ein konkretes Beispiel zu geben, stellen Sie sich vor, dass ein Benutzer das Passwort „Password1234“ hat. Wenn CODVN-B-Hashes generiert werden, ist es viel schneller zu knacken, aber das Ergebnis ist „PASSWORD“ anstelle des echten Benutzerkennworts. Zumindest ist dies ein guter Ausgangspunkt, um mit der Erstellung des Wörterbuchs und der Regeln zum Testen stärkerer und aktiver Hashes zu beginnen.
Derzeit gibt es zwei Standardtools, mit denen diese Aufgabe der Passwortwiederherstellung durchgeführt werden kann, und wir werden ihre Verwendung im Folgenden anhand von Beispielen erläutern; diese Tools sind JohnTheRipper und Hashcat.
SAP System Hashes mit JohnTheRipper knacken
JohnTheRipper bietet mehrere Versionen an und die Jumbo Version ist die beste Option, wenn wir SAP System generierte Hashes knacken wollen, weil sie auch einige Skripte zum Formatieren von Eingabedateien wie sap2john.pl bereitstellt, die erklären, wie man die Hashes als Tabellenkalkulation herunterlädt und in die von john binary erwartete Eingabe umwandelt.
Das von älteren Versionen von JohnTheRipper geforderte Format ist <username><space-padding-to-40>$<hash> für CODVN B/D/F und nur der Hash für CODVN H, aber neuere Versionen akzeptieren die Eingabedatei ohne space-padding bis zu 40.
Die Befehle, die ausgeführt werden müssen, um den Wiederherstellungsprozess zu starten, sind:
For CODVN Bjohn –format=sapb –wordlist=wordlist_file hashes_file
For CODVN Fjohn –format=sapg –wordlist=wordlist_file hashes_file
For CODVN Hjohn –format=saph –wordlist=wordlist_file hashes_file
Knacken von SAP-System-Hashes mit Hashcat
Mit Hashcat können nicht nur vollständige Hashes geknackt werden, sondern es ist auch möglich, partielle Hashes zu knacken, die über RFC_READ_TABLE erhalten wurden.
Für CODVN B/D/F ist das Dateiformat <Benutzername>$<Hash> erforderlich , für CODVN H wird nur der Hash benötigt.
Es ist möglich, Hashcat mit verschiedenen Angriffsmodi auszuführen. Der einfachste Weg ist der Wordlist-Modus, der im Grunde genommen die Hashes aus der Liste mit denen aus der Datenbank vergleicht. Es sind jedoch auch andere Modi verfügbar, wie z. B. Brute-Force für jedes Zeichen oder die Kombination von Wortlisten mit Regeln.
Für das Beispiel kann Hashcat wie folgt ausgeführt werden, um zu versuchen, Passwörter anhand von Wortlisten wiederherzustellen:
For CODVN Bhashcat -a 0 -m 7700 hashes_file wordlist_file
For CODVN Fhashcat -a 0 -m 7800 hashes_file wordlist_file
For CODVN B with partial hash from RFC_READ_TABLEhashcat -a 0 -m 7701 hashes_file wordlist_file
For CODVN F with partial hash from RFC_READ_TABLEhashcat -a 0 -m 7801 hashes_file wordlist_file
For CODVN Hhashcat -a 0 -m 10300 hashes_file wordlist_file
Andere Methoden wie Brute-Forcing oder regelbasierte Verfahren können sehr langsam sein, wenn sie nicht genau definiert sind oder die Erstellung von Regelsätzen erfordern, die ohne Kenntnis des Passwortkontextes suboptimal und erfolglos sein können.
Schlussfolgerungen und Empfehlungen
SAP-Systeme können je nach ihrer Konfiguration verschiedene Hash-Versionen erzeugen, von denen einige heutzutage als schwach und leicht zu knacken gelten.
Basierend auf der Konfiguration der Profilparameter können diese herabgestuften Passwörter als gültig angesehen werden, wenn ein Benutzer versucht, sich anzumelden, wenn die Abwärtskompatibilität aktiviert ist.
Wenn schwache Hashes nicht validiert werden, können die Ergebnisse Hinweise auf echte Passwörter liefern, die zur Verbesserung der Wortlisten oder Regeln beitragen können.
Onapsis empfiehlt dringend, die Abwärtskompatibilität zu deaktivieren und die schwachen Hashes in allen oben erwähnten Tabellen zu entfernen.
Insgesamt ist Hashing nicht nur aus der Sicht von Angreifern ein interessantes Verfahren, sondern kann Infosec-Teams auch dabei helfen, die Wiederverwendung von Passwörtern oder bekannte Passwörter zu identifizieren und entsprechende Maßnahmen zu ergreifen.
Ignacio Favro, Security Researcher, Onapsis