Ansicht
Dokumentation

ABENSYS_COMM_INJECTIONS_SCRTY - SYS COMM INJECTIONS SCRTY

ABENSYS_COMM_INJECTIONS_SCRTY - SYS COMM INJECTIONS SCRTY

CL_GUI_FRONTEND_SERVICES - Frontend Services   General Data in Customer Master  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

System Command Injections

Eine System Command Injection ist eine Angriffsart, die aus ungenügend abgesicherten Eingaben von außen resultieren kann. Bei einer System Command Injection werden bösartige Betriebssystem-Anweisungen, die von außen in ein Programm gelangen, an das Betriebssystem weitergereicht. In ABAP kann dies bei der Verwendung folgender Programmiertechniken geschehen:

  • In der Applikationsschicht
  • Weitergabe von Eingaben von außen an die Parameter der Funktionsbausteine zum Aufruf von Betriebssystem-Anweisungen über das SXPG-Framework

  • Verwendung des Zusatzes FILTER der Anweisung OPEN DATASET wenn die angegebene Betriebssystem-Anweisung ganz oder teilweise von außerhalb des Programms stammt.

  • Verwendung der internen Anweisung CALL für die spezielle Systemfunktion SYSTEM wenn die angegebene Betriebssystem-Anweisung oder deren Parameter ganz oder teilweise von außerhalb des Programms stammen.

  • In der Präsentationsschicht
  • Weitergabe von Eingaben von außen an die Parameter der Methode, der Klasse, oder des Funktionsbausteins.

Das SXPG-Framework ist die einzige empfohlene Vorgehensweise, um Betriebssystem-Anweisungen des Hostrechners der aktuellen in ABAP auszuführen. Dabei können nur vordefinierte logische Kommandonamen an Funktionsbausteine der Funktionsgruppe SXPG übergeben werden, was eine gewisse Unabhängigkeit vom tatsächlichen Betriebssystem erlaubt. Die vordefinierten logischen Kommandonamen bilden eine Einschlussliste, was eine Ausführung unerwünschter Betriebssystem-Anweisungen Anweisungen und eine direkte System Command Injection verhindert. Beim Aufruf finden Berechtigungs- und andere Überprüfungen statt. Wenn eine Übergabe weiterer Parameter an die Funktionsbausteine erlaubt ist, können diese relativ leicht auf unerwünschten Code überprüft werden.

Die beiden anderen Möglichkeiten zur Ausführung von Betriebssystem-Anweisungen des Hostrechners der aktuellen sind auch ohne Eingaben von außen nicht unproblematisch und sollten in ABAP-Programmen prinzipiell vermieden werden. Insbesondere ist der Aufruf der Funktion SYSTEM über eine interne Anweisung unerwünscht und diese kann über den Profilparameter rdisp/call_system deaktiviert werden, was aus Sicherheitsgründen auch empfohlen wird. Keinesfalls sollten aber Anweisungen oder Teile von Anweisungen von außen ungeprüft an das Betriebssystem übergeben werden. Das Überprüfen und Filtern von Benutzereingaben ist bei Verwendung von FILTER bzw. CALL 'SYSTEM' aber besonders schwierig, da alle möglichen Betriebssysteme und Codepages berücksichtigt werden müssen.

Prinzipiell sollten auch bei Verwendung der Funktionsbausteine des SXPG-Frameworks und genauso bei der Methode oder dem Funktionsbaustein zur Ausführung von Betriebssystem-Anweisungen auf dem Präsentationsserver Eingaben außen, die an deren Parameter übergeben werden, überprüft werden, um unerwünschte Auswirkungen von Betriebssystem-Anweisungen zu verhindern.

Beispiel

Im folgenden Programmabschnitt wird die Betriebssystem-Anweisung ping des Hostrechners der aktuellen für einen Datenbank-Server über die unerwünschte Systemfunktion SYSTEM ausgeführt. Falls diese über den Profilparameter rdisp/call_system deaktiviert ist, kommt es zu einem Laufzeitfehler. Die Anzahl der "Pings" und der Datenbank-Server können von außen gesteuert werden. Das Programm ist durch zwei Attacken verwundbar:

  • Da die Anzahl der "Pings" nicht begrenzt wird, kann eine "Denial of Service"-Attacke stattfinden.
  • Über das Eingabefeld DBSERVER für den Datenbank-Server, dessen Vorgabewert der aktuelle Datenbank-Server ist, besteht die Gefahr einer System Command Injection. Wenn beispielsweise bei einem Unix-Betriebssystem die Folge ; ls -l /etc an den Namen des Datenbank-Servers angehängt wird, wird nach den "Pings" die Betriebssystem-Anweisung ls ausgeführt und der Inhalt des Verzeichnisses /etc ausgegeben.

Beispiel

Im folgenden Programmabschnitt wird die unerwünschte Verwendung der Systemfunktion SYSTEM durch Aufruf des Funktionsbausteins SXPG_CALL_SYSTEM für den von SAP vordefinierten logischen Kommandonamen PING ersetzt. Der Aufruf des Funktionsbausteins zeigt nur einige der dabei möglichen Ausnahmen.

  • Einer "Denial of Service"-Attacke, wird durch eine Begrenzung der Anzahl der "Pings" auf maximal 10 vorgebeugt.
  • Die oben gezeigte System Command Injection ist nicht möglich, da die Eingabe vom SXPG-Framework als ungültige Parameterübergabe an ping erkannt wird.

Sogar das obige Beispiel kann noch dadurch verbessert werden, indem statt des vordefinierten logischen Kommandonamens PING ein selbstdefinierter logischer Kommandoname verwendet wird, der für jedes verwendete Betriebssystem die ping-Anweisung mit einer spezifischen Pfadangabe versieht, wie z.B. /bin/ping für Linux oder c:\Windows\System32\ping.exe für MS Windows. Dadurch wird genau die spezifizierte Anweisung aufgerufen und ein Angreifer kann keine gleichnamige Anweisung mit falscher Funktionalität in einem Verzeichnis einschmuggeln, das in der Umgebungsvariable für den Pfad vor dem gewünschten Zielverzeichnis steht.






ROGBILLS - Synchronize billing plans   ROGBILLS - Synchronize billing plans  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 8257 Date: 20240523 Time: 092514     sap01-206 ( 146 ms )