Ansicht
Dokumentation

ABENGENERIC_PROG_SCRTY - GENERIC PROG SCRTY

ABENGENERIC_PROG_SCRTY - GENERIC PROG SCRTY

SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

ABAP Command Injections

ABAP Command Injections, d.h. die Einschleusung von bösartigem ABAP-Code in Programme, kann bei der generischen Programmierung auftreten. Die wesentlichen Anweisungen der generischen Programmierung sind

Mit beiden Anweisungen kann ausführbarer ABAP-Code erzeugt werden, der ganz oder teilweise von außerhalb des Programms stammen kann. Die Anteile der erzeugten Programme, die von außerhalb des Programms stammen müssen sorgfältig überprüft werden. Dies ist umso schwieriger, je größer dieser Anteil ist. Aus diesem Grund wird empfohlen, erst alle Möglichkeiten anderer dynamischer Programmiertechniken auszuschöpfen, bevor auf die Programmgenerierung zurück gegriffen wird. Wenn eine Programmgenerierung unumgänglich ist, sollten dessen dynamischen Anteile so gering wie möglich sein. Hierfür sind persistent abgelegte Masken geeignet, in denen nur Platzhalter durch dynamische Anteile ersetzt werden und die ansonsten statisch überprüfbar sind. Wenn die Inhalte für die Platzhalter der Masken von außerhalb des Programms stammen, müssen sie entsprechend der Verwendung in der Maske überprüft oder maskiert werden.

Hinweise

  • Die ABAP Command Injections umfassen im Prinzip alle einzeln aufgeführten Sicherheitsrisiken. Ein generisches Programm, das vollständig dynamische Anweisungen enthält, ist anfällig für denkbaren Injections. Siehe z.B. SQL-Injections über generische Programmierung.
  • Mit dem Profilparameter abap/dyn_abap_log kann eine Protokollierung aller dynamischen Quelltextänderungen über GENERATE SUBROUTINE POOL INSERT REPORT und auch DELETE REPORT eingeschaltet werden. In der Datenbanktabelle DYNABAPHDR finden sich dann die zugehörigen Ereignisse, die über das Programm RDYNABAP_SHOW ausgewertet werden können. Da die Anweisungen der generischen Programmierung auch von den Entwicklungswerkzeugen verwendet werden, ist eine solche Protokollierung in der Regel nur in Systemen sinnvoll, in denen nicht entwickelt wird.

Beispiel

Das folgende Programm ist ein regelrechter Sicherheits-GAU (worst case scenario). Jeder Benutzer, der Berechtigung für dieses Programm hat, könnte beliebigen Quelltext eingeben und ausführen. Als Mindestmaßnahme müsste die Entwicklungsberechtigung des aktuellen Benutzers überprüft werden (siehe Beispiel zu Berechtigungen). Weiterhin könnte überprüft werden, ob es sich um ein Entwicklungs- oder Produktivsystem handelt. Die Überprüfung von eingegebenem Programmtext selbst ist dagegen äußerst schwierig, insbesondere wenn wie hier das gesamte Programm und nicht nur eine einzelne Zeile eines Musters änderbar ist. Das ausführbare Beispiel Programmgenerierung zeigt einen Versuch, ein frei eingebbares Programm so zu beschränken, dass es sicher ist.

TYPES prog TYPE TABLE OF string WITH EMPTY KEY.
DATA(text) = concat_lines_of( VALUE prog(
  ( |PROGRAM.\n\n| )
  ( |FORM do_it.\n| )
  ( |  ...\n| )
  ( |ENDFORM.| ) ) ).
CALL FUNCTION 'DEMO_INPUT_TEXT'
  CHANGING
    text_string = text
  EXCEPTIONS
    canceled    = 4.
IF sy-subrc = 4.
  LEAVE PROGRAM.
ENDIF.
SPLIT text AT |\n| INTO TABLE DATA(prog).
GENERATE SUBROUTINE POOL prog NAME DATA(pool).
IF sy-subrc = 0.
  PERFORM do_it IN PROGRAM (pool).
ENDIF.






CL_GUI_FRONTEND_SERVICES - Frontend Services   Addresses (Business Address Services)  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 5009 Date: 20240523 Time: 175108     sap01-206 ( 91 ms )