Sie möchten Ihr SAP System gegen Zugriffe, die mittels eines bestehenden Passwortes erfolgen, schützen. Dabei werden zuvor ermittelte Hashwerte der/des Anwender(s) außerhalb des SAP Systems errechnet. Ich möchte in diesem Beitrag keine Anleitung zum cracken von Hashwerten geben. Tools, mit denen die verwendeten Hash-Algorithmen entschlüsselt werden können, finden Sie bei entsprechender Suche im Internet. Vielmehr möchte ich Ihnen zeigen wo der Passwort Hashwert zu finden ist und wie Sie einen Zugriffsschutz aktivieren und gewährleisten können.
Allgemeines
Für den Zugang zu einem SAP System ist immer ein Benutzername und ein Passwort erforderlich. Abgelegt werden diese Daten in der Tabelle USR02. Das Passwort selbst wird über eine Hashfunktion in einem Kennwort-HASH verschlüsselt. Bedeutet, das Kennwort wird im System nie im Klartext aufzufinden sein. Doch wie erfolgt die Verifizierung ? Gibt der Anwender sein Kennwort ein, so wird vom SAP System dies in einen Hashwert umgerechnet und mit dem hinterlegten Passwort Hashwert der USR02 Tabelle verglichen. Sind die Werte identisch so erhält der Anwender den Zugang.
Tabellen mit Hashwerten
Nicht nur die Tabelle USR02 beinhaltet die Hashwerte der einzelnen Anwender, es gibt noch ein paar andere Tabellen. Diese hängen vom jeweiligen Release ab.
USH02 | in allen Releases |
USH02_ARC_TMP | nur ab Release 6.20 |
USR02 | in allen Releases |
USRPWDHISTORY | nur ab Release 7.00 |
VUSER001 | nur ab Release 4.5B (und höher) |
VUSR02_PWD | nur ab Release 7.10 |
Tabellenzugriff schützen
Prüfen Sie zunächst in welchen Rollen ist das Berechtigungsobjekt S_TABU_DIS aktiv vorhanden und wie ist das Feld DICBERCLS ausgeprägt ist. Wird S_TABU_DIS nicht verwendet so sind die Tabellenausprägungen im Objekt S_TABU_NAM zu analysieren. Für beide Analysen können Sie die Tabelle AGR_1251 verwenden oder Sie nutzen die entsprechende Funktion innerhalb der Transaktion SUIM. Weiterhin sollte geprüft werden zu welcher Berechtigungsgruppe die genannten Tabellen gehören. Sie sollten alle der Berechtigungsgruppe „SPWD“ zugeordnet sein. Schauen Sie dazu in die Tabelle TDDAT und prüfen die Berechtigungsgruppe. Sollten die genannten Tabellen noch nicht klassifiziert sein so führen Sie die Arbeiten aus dem Hinweis 1484629 durch. Ausprägungen mit „STERN“ in den beiden Berechtigungsobjekten sollten generell aufgelöst werden.
Interne als auch externe Auditoren schauen sich dieses Thema in einem ERP System gerne etwas genauer an. Um an dieser Stelle keine Angriffsmöglichkeit zu liefern sind in einem guten Berechtigungskonzept die betroffenen Tabellen für die Anwender nicht zugänglich. Eine Anzeigeberechtigung sollte nur einem kleinen Personenkreis vorbehalten sein, z.B. Berechtigungs- und Basisteam.
USR02 Historie
Wenn Sie den Einträgen in der USR02 bisher nicht die gewünschte Beachtung geschenkt haben, dann könnten die Einträge wie folgt aussehen.
Betrachten wir die folgenden Felder der Tabelle USR02 (BCODE, PASSCODE, PWDSALTEDHASH, CODVN).
BCODE = Kennworthash (MD-5 based)
CODVN = Codeversion des Kennworthash-Algorithmus (neue Systeme)
PASSCODE = Passwort-Hashwert (SHA1, 160 Bit)
PWSALTEDHASH = Passwort-Hashwert (diverse Algorithmen und Kodierungen)
Beispiele
Nehmen wir drei Einträge aus der gezeigten Tabelle (von oben nach unten)
- alte Hashwerte in den Feldern BCODE und PASSCODE, die mit Codeversion „G“ verschlüsselt wurden. Kein neuer Hashwert.
- alte Hashwerte in den Feldern BCODE und PASSCODE sowie ein neuer Hashwert im Feld PWDSALTEDHASH. Codeversion „I“
- die Felder BCODE und PASSCODE sind mit „00000“ gefüllt und ein neuer Hashwert ist eingetragen. Codeversion „H“. So sollte eine USR02 aussehen, wenn das System korrekt eingestellt ist.
Erläuterung zu den Beispielen
Codeversion „G“ bedeutet: Kombination aus Codeversion B + F, BCODE und PASSCODE werden gefüllt.
Codeversion „I“ bedeutet: Kombination aus Codeversion B + F + H, alle drei Felder werden befüllt.
Codeversion „H“ bedeutet: nur das Feld PWSALTEDHASH wird verwendet
Informationen zu den verwendeten Algorithmen können Sie hier nachlesen oder in den SAP Notes zur Codeversion.
Codeversion B: Hinweis 735356
Codeversion F: Hinweis 1488159
Codeversion H: Hinweis 991968
Systemeinstellungen
Wie in den Tabellenzugriffen angesprochen sollte der Zugriff auf die Passwort Hashwerte eingeschränkt werden. Des weiteren ist sicherzustellen, dass der neuste Hash-Algorithmus verwendet wird. Dazu ist der Profilparameter „login/password_downwards_compatibility“ auf den Wert „0“ zu stellen. Der Wert „1“ veranlasst das System unsichere Hashwerte zu erzeugen. Der Profilparameter ist erst nach einem Neustart aktiv. Betrachten Sie auch die anderen Profilparameter zum Thema „Kennwortsicherheit“. So zum Beispiel „login/min_password_lowercase“ = Verwendung von Kleinbuchstaben. Alle weiteren Profilparameter werden im Prüfleitfaden SAP®ERP der DSAG aus 2015 , Abschnitt „3.4. PRÜFPROGRAMM: SYSTEMPARAMETER FÜR DIE ANMELDEKONTROLLE“ und im Abschnitt „3.5 VORSCHLAGSWERTE FÜR DIE SYSTEMPARAMETER DER ANMELDEKONTROLLE“ beschrieben.
Bereinigen
Zum Abschluss der Vorarbeiten sollte der Report „CLEANUP_PASSWORD_HASH_VALUES“ ausgeführt werden. Dieser löscht mandantenübergreifend alle alten Hash Einträge. Danach weißt die USR02 nur noch PWSALTEDHASH Werte aus. Schauen Sie sich das obere Bild der USR02 noch einmal an. Die letzten Zeilen zeigen sichere Einträge.
Anmerkung
Der Report verfügt über keine Selektionsmöglichkeit. Er zeigt nach dem Start nur eine Übersicht der geprüften Tabellen USR02, USH02 und USRPWDHISTROY. Entfernen der alten Hashwerte bei Dialogusers (Usertyp A) ist aus meiner Sicht unproblematisch. Jeder Anwender kann sich ggf. ein neues Kennwort anfordern. Vor der Löschung sollte den Systemusern (Usertyp B,C) eine besondere Beachtung geschenkt werden. Diese Systemuser besitzen ebenfalls ein initiales Kennwort. Kritisch sind Schnittstellen, die ggf. das vorhandene Kennwort für einen Anmeldeprozess nutzen. Um nach dem Löschlauf unnötige Probleme mit diesen auszuschließen ist vorher ein kleiner Kennwortcheck sinnvoll. Dazu sind idealerweise die initialen Kennwörter bekannt. Für diese Prüfung kann der Funktionsbaustein SUSR_LOGIN_CHECK_RFC verwendet werden. Dieser bietet die Möglichkeit die Gültigkeit eines bekannten Kennworts zu prüfen. Ein kleines ABAP Programm, welches diesen Funktionsbaustein nutzt, finden Sie bei der „Codezentrale„.
Haben Sie noch Fragen ?
Tipps, Anmerkungen und Anregungen sind immer willkommen. Nutzen Sie dazu das Kontaktformular.