SY-UNAME: Hart kodierte Benutzernamen in ABAP ermitteln
Autor: Tobias Harmes | 11. Juli 2015
Hart kodierte Benutzernamen in ABAP Programmen können ein erhebliches Sicherheitsrisiko darstellen. In diesem Blog-Beitrag werde ich Ihnen erklären, wie Sie diese Schwachstellen mit SY-UNAME ermitteln können.
SY-UNAME
Das Systemfeld SY-UNAME beinhaltet den Namen des derzeit angemeldeten Benutzers. Es kommt immer wieder vor, dass anstatt der Benutzung der AUTHORITY-CHECK der Inhalt des Systemfeldes SY-UNAME direkt abgefragt wird, zum Beispiel für Funktionstests. Ein Beispiel ist der folgende Code:
IF sy-uname <> ‚ENTWICKLER‘.
AUTHORITY-CHECK …
ENDIF.
Verwendung von SY-UNAME ermitteln
Der Standardreport RS_ABAP_SOURCE_SCAN bietet eine gute Möglichkeit, Ihren Quellcode nach der Verwendung von SY-UNAME zu durchsuchen. Sie können den Report / das Programm zum Beispiel durch die Transaktion SE80 aufrufen und ausführen.
In der Eingabemaske „Scan ABAP Report Sourcen“ können Sie nun in das Feld des gesuchten Strings eine Mehrfachselektion vornehmen.
- Durch das Klicken auf die Mehrfachselektion öffnet sich das Eingabefeld für die Mehrfachselektion.
- Geben Sie hier die folgenden Werte ein: „SY-UNAME <> .*“, „SY-UNAME = .*“ und „CASE SY-UNAME“.
- Stellen Sie sicher, dass der Haken bei „String ist regulärer Ausdruck“ gesetzt ist.
- Zur Eingrenzung der zur überprüfenden Programme können Sie hier mit Z* oder / und Y* die SAP Standardprogramme ausgrenzen.
- Damit auch die Includes mit überprüft werden, empfehle ich Ihnen, den Haken bei „Includes auflösen“ zu setzen.
Nach dem Ausführen des Reports erhalten Sie einen Report mit allen Quelldateien, welche die gesuchten Strings beinhalten.
Mit einem Klick auf den angezeigten Quellcode können Sie sich den gesamten Quellcode der Datei anschauen.
SAP Basis Berater - gesamte Projekte oder Berater auf Zeit
Sie suchen Unterstützung durch SAP Basis Berater? Wir bieten mehr als nur einen gewöhnlichen Berater auf Zeit. Informieren Sie sich über Ihre Vorteile!
Grenzen der Ermittlung
Diese eher simple Überprüfung stößt schnell an ihre Grenzen, wie das folgende Beispiel zeigt:
DATA: lv_field TYPE string.
FIELD-SYMBOLS: TYPE any.lv_field = ‚SY-UNAME‘.
ASSIGN (lv_field) TO .
IF = ‚ENTWICKLER‘.
* AUTHORITY-CHECK …
WRITE ‚AUTHORITY-CHECK bypassed!‘.
ENDIF.
Deshalb sollte die Verwendung von SY-UNAME nie zur Überprüfung von ausführbarem Code verwendet werden.
Was sind Ihre Erfahrungen mit dem Ermitteln von hart kodierten Benutzernamen in ABAP Programmen? Ich freue mich auf Ihre Kommentare.