SAP Pentest Favoriten: Angriff via Code Injection
Autor: Holger Stumm | 5. März 2019
Eine Code Injection ist einer der Haupt-Sicherheits-Risiken von Anwendungen, die Eingaben von Usern weiterverarbeitet. Und deshalb ist es auch ein wichtiges, wenngleich oft verborgendes Problem bei SAP ABAP Programmen. Bei SAP-Penetration-Tests (kurz Pentest) sollte daher mindestens eine ABAP Code Analyse durchgeführt werden, um typische Angriffspunkte für Code Injections in der Programmierung aufzudecken.
Welche Angriffe auf ABAP Anwendungen gibt es?
Ein typischer Angriffsvektor ist die Code-Injection. Das bedeutet, dass ein Angreifer einen künstlichen eigenen Code in eine Anwendung einbindet und die Möglichkeit hat, diese auf dem Server auszuführen. Das kann zum Beispiel eine manipulierte Eingabefolge in einem Suche-Eingabefeld sein, welcher dann als Teil der SQL-Datenbankabfrage interpretiert wird („SQL-Injection“). Ein erfolgreicher Code-Injection-Angriff hat zur Folge, dass der Angreifer einen beliebigen Schaden auf dem Webserver anrichten und auch die komplette Datenbank auslesen und manipulieren kann. Inspiration für mögliche Ansätze gibt es viele. Zum Einen ist der Zugriff auf den Quelltext oft für Anwender möglich, da diese in den Debugger wechseln können („/h“ im OK-Code-Feld und Enter -> schon springt der nächste Schritt in den Quellcode). Zum Anderen wird oft seitens des Entwicklers einfach nicht mit Angriffen gerechnet und daher fehlen teilweise auch grundlegendste Sicherheitsmechanismen.
Was unterscheidet SAP ABAP von anderer Software?
Die Muster der Sicherheitslücken im ABAP-Code unterscheiden sich technisch recht deutlich von denen in Java-Stacks oder Windows-Programm. Das gern genutzte gleichzeitige Ausüben von einem Angriff via sogenannten Buffer Overflow und parallel einer Code Injection sind in einem ABAP-System praktisch nicht möglich. Ein Absturz eines Prozesses erzeugt einen Eintrag in der Log-Datenbank (Dump ST22) und zieht ein anschließendes Beenden des Programms sowie die Rückkehr an den Menüstartpunkt nach sich. Eine direkte Manipulation wie in anderen Hochsprachen oder Servern funktioniert aus diesem Grund also nicht – es gibt jedoch andere Manipulationsmöglichkeiten.
SAP Penetration Test - kontrollierte Überprüfung ihres Systems
Wir führen eine kontrollierte Überprüfung des Sicherheits-Zustandes Ihres SAP-Systems durch - mit unserem SAP Penetration Test.
Was sind typische Beispiele für Schwachstellen im ABAP Code?
So kann der Weg über die Eingabe von Daten von außen kann leider sehr oft ausgenutzt werden. Beispielsweise wenn Eingaben in einem (Web-)Dynpro-Formular nicht geprüft werden. Wenn die Eingabedaten dann als Bestandteil von dynamischen Reports („führe jetzt die Variante aus, die in der Formular-Variable steht“) genutzt werden, kann der Angreifer den Programmfluss ungewollt manipulieren. Wenn eine Datenbankanfrage á la „führe jetzt die Abfrage select * from USR02 where [SUCHBEGRIFF=’1 = 1 ; lösche tabelle USR02′]“ wird das gesamte System still gelegt. Dazwischen sind alle Arten von mangelhaften oder fehlenden Berechtigungsprüfungen im Code. Ein Tabellen-Update ohne Authority-Check? Eigene Update/Abfrage-Mechanismen programmiert anstatt mit Berechtigungsprüfungen ausgestattete SAP API-Funktionsbausteine genutzt? Und natürlich der Evergreen: sich mehr Datensätze anzeigen lassen, als vorgesehen ist.
… auf YouTube
YOUTUBE-CHANNEL abonnieren: https://www.youtube.com/c/Rz10De_ms
Risiken von Schwachstellen im ABAP Code für das Unternehmen
Angesichts neugeregelter Datenschutzanforderungen sind nicht nur Datenverlust sondern gerade auch Datendiebstahl ernst zunehmende Geschäftsrisiken. Dazu kommen natürlich Gefahren für die Betriebssicherheit, die System- und Datenintegrität und nicht zuletzt auch die Gefahr von Diebstählen durch manipulierte Finanz-Transaktionen. Feststellungen von Schwächen in der Code Security werden von Wirtschaftsprüfern auch mit in die Liste der Feststellungen aufgenommen und führen in schweren Fällen zur Verweigerung der Abnahme des Systems.
Wie funktioniert eine ABAP Code Analyse im Rahmen eines Pentests?
Die Code Analyse dient der Auswertung von kundeneigenen ABAP-Programmen auf Schwachstellen. Es gibt Werkzeuge, mit denen sich die kundeneigene Programme in einem Massenverfahren analysieren lassen. Diese haben umfangreiche Regel-Datenbanken, die typische Muster für schwache Programmierung identifizieren und melden können.
Im Rahmen eines Pentests werden in der Regel mobile Varianten von solchen Code Scannern eingesetzt, die keine umfangreiche Installation benötigen. Sie sollen im Rahmen der Prüfung für eine Bestandsaufnahme sorgen. Im Anschluss an die Analyse werden die daraus gewonnen Ergebnisse und Erkenntnisse oft in ein internes Projekt zur Schwachstellen-Behebung („Get Clean“) und optimaler weise in ein Projekt „Sichere ABAP-Programmierung“ („Stay Clean“) überführt.
Der richtige Umgang mit Ergebnissen aus einem Pentest
Die Ergebnisse eines entsprechenden Pentests bieten eine Blick auf die Ausgangssituation. Wichtig ist an dieser Stelle noch, dass diese Art von Code-Analyse nicht ein großes Programm-Projekt mit einem Big-Bang Go Live zur Konsequenz haben sollte. Kritischer Erfolgsfaktor ist hier eher das Bewusstsein dieser Thematik bei den Entwicklern, der evolutionären Änderung der Programmierung durch sichere Programmiermuster und damit verbunden der kontinuierlichen Schulung und „Awareness“ für Entwickler. Im Zusammenhang mit SCRUM-Methoden aus der agilen Entwicklung können optimale Projektmechanismen und Projektelemente geschaffen werden, die zu einer langfristigen Verbesserung der Sicherheit bei kundeneigenen SAP ABAP Entwicklungen führen. Die Maßnahmen und gegebenenfalls sogar die Projekte zur Steigerung der Sicherheit von ABAP Programmen sollten mit allen Beteiligten sorgfältig abgestimmt werden.
Links & Downloads
Standard SAP Pentest unverbindlich anfordern: https://rz10.de/angebot/sap-penetration-test/
Software-Produkte für die SAP ABAP Code Security Analyse: https://rz10.de/sap-berechtigungen/abap-code-security-codeprofiler-vulnerability-analyzer/
Weitere Artikel in der Serie Pentest Favoriten:
- Zugang per RFC
- Angriff via Code Injection (dieser Artikel)
- Bekannte Passwörter und unsichere Passwortspeicherung