Top 20 Sicherheitsrisiken in ABAP Anwendungen Detail-Level Ausarbeitung Version 0.5 Oktober 2014 Version 1.0 | Juli 2014 Einführung Dieses Dokument liefert detaillierte Informationen über die häufigsten und gefährlichsten Sicherheitsrisiken, die in ABAP Programmen anzutreffen sind. Es soll ABAP Entwicklern und Sicherheitstestern relevante technische Risiken aufzeigen, die sich durch ABAP Eigenentwicklungen ergeben. Insbesondere liefert es Anleitungen, die Risiken zu mitigieren. Die Einstufung der Risiken basiert auf den Ergebnissen jahrelanger Sicherheitsforschung im SAP/ABAP Umfeld, dem BIZEC APP/11 Standard* und einer statistischen Auswertung der Schwachstellen aus über 170 SAP Installationen** in deutschen Unternehmen. Im Dokument verwendete Zahlen und Informationen, die dieser statistischen Auswertung entspringen, sind mit <STAT> markiert. Die in diesem Dokument behandelten Sicherheitsfehler stellen aus Sicht des Autors den aktuellen Stand der Forschung der relevantesten Sicherheitsrisiken im ABAP Umfeld dar. Die meisten dieser Risiken können sich negativ auf die Generellen IT Kontrollen (IT General Controls / ITGC) auswirken, da sie das Change Management betreffen. Das kann in Audits unangenehme Konsequenzen haben, da praktisch alle Compliance Standards auf den ITGC basieren. Entsprechende Kenntnisse in ABAP und im Umgang mit ABAP Entwicklungswerkzeugen sind Voraussetzung für das Verständnis dieses Dokuments. * http://www.bizec.org/wiki/BIZEC_APP11 ** https://www.virtualforge.com/de/labs/benchmark.html © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. -2- ABAP Sicherheit Generelle Hinweise Nur etwa 0,3%<STAT> aller ABAP Anwendungen in Kundenimplementierungen sind Webanwendungen. Entsprechend sind Web-spezifische Schwachstellen (fast) nicht im Fokus dieses Dokuments. Die bedeutet auch, dass Web-spezifische Sicherheitslösungen wie z.B. Web Application Firewalls die speziellen Sicherheitsrisiken von ABAP Anwendungen fast ausnahmslos nicht mitigieren können. Die Sicherheit Ihrer ABAP Anwendungen beginnt in den Köpfen Ihrer Entwickler und Tester. Es sind daher regelmäßige Schulungen für Entwickler und Tester notwendig, um diese zu sensibilisieren. Schulungen sind eine Grundvoraussetzung, um dauerhaft die TOP Sicherheitsrisiken in ABAP Code zu verhindern. Fordern Sie gegebenenfalls auch entsprechende Nachweise von Zulieferern ein. Bei der großen Menge an Eigenentwicklungen - im Schnitt 2,2 Millionen Zeilen <STAT> Code pro System - und dem steten Wandel in dem sie sich befinden, ist es in der Praxis nicht möglich/rentabel den Code vollständig manuell auf Schwachstellen zu untersuchen. Es empfiehlt sich daher zusätzlich Tools einzusetzen, die den Quellcode automatisiert regelmäßig auf Schwachstellen prüfen. Tools finden nicht alle Fehler. Aber sie sind ein effizientes Mittel, zumindest bestimmte Arten von Fehlern effizient aufzuspüren. Alle in diesem Dokument dargestellten Risiken können durch ein gutes statisches Codeanalyse-Werkzeug erkannt werden. Es ist elementar wichtig zu verstehen, dass bereits ein Sicherheitsfehler im ABAP Code ausreichen kann, um die Sicherheit sämtlicher Geschäftsdaten eines ganzen SAP Systems vollständig zu kompromittieren. Jedes SAP System enthält 9<STAT> solcher hochkritischen Fehler. Sicherheitsbereiche Die Sicherheitsrisiken sind verschiedenen, logisch zusammengehörigen Bereichen zugeordnet. Bereich Kürze Beschreibung l Berechtigunge AUTH Alle Geschäftsprozesse müssen ausreichend durch formal korrekte n Berechtigungsprüfungen abgesichert sein. Testbarkeit TEST Sämtliche Programme müssen testbar und sämtlicher Quellcode für Audits einsehbar sein. Datenschutz DAT ABAP Code darf kritische Daten ohne Berechtigungsprüfung weder anzeigen noch aus dem Schutzbereich des SAP Systems verschieben. Injection INJ Schwachstelle n Sämtliche Eingaben müssen hinreichend von Schadcode befreit werden, bevor sie in potentiell gefährlichen ABAP Befehlen verwendet werden. Standard-Schu MECH Vorhandene SAP Sicherheitsmechanismen dürfen durch ABAP Code nicht tz umgangen werden. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. -3- © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. -4- Sicherheitsrisiken 1. Berechtigungen Berechtigungen sind ein zentraler Faktor in SAP Sicherheitsprojekten. Unternehmen investieren viel Geld in die Entwicklung von Rollen- und Berechtigungskonzepten. SAP verwendet ein explizites Berechtigungsmodell. Das bedeutet, dass eine Berechtigungsprüfung nur erfolgt, wenn ein Programm die Prüfung selbst explizit ausführt. Anders ausgedrückt: ohne eine explizite Berechtigungsprüfung im Code wird nicht geprüft, ob ein Benutzer auch wirklich berechtigt ist. In selbst entwickeltem Code werden (wichtige) Berechtigungsprüfungen sehr häufig vergessen. Somit kommt das Berechtigungskonzept nicht zum tragen. Dadurch entstehen Compliance-Verstöße, die insbesondere bei Wirtschaftsprüfungen schwerwiegende Folgen haben können. Es ist daher essentiell wichtig, dass in Eigenentwicklungen Berechtigungsprüfungen überall wo sie erforderlich sind programmatisch geprüft werden und dass sämtliche Berechtigungsprüfungen auch formal korrekt programmiert sind. Berechtigungsfehler sind die häufigsten Sicherheitsfehler in ABAP Eigenentwicklungen <STAT> . Grundsätzliche Anforderungen 1. Alle Berechtigungsprüfungen in ABAP müssen mit SAP Standardmechanismen durchgeführt werden. Das bedeutet, dass entweder der Befehl AUTHORITY-CHECK OBJECT verwendet werden muss oder ein Modul, dass speziell für die Prüfung einer bestimmten Berechtigung entwickelt wurde (wie beispielsweise der SAP Funktionsbaustein 'AUTHORITY_CHECK_DATASET'). Spezielle Sicherheitsrisiken und Anforderungen Im Folgenden werden spezielle Risiken behandelt, die im Kontext von Berechtigungen auftreten. Dabei wird immer eine Empfehlungen für die Mitigation (Abschwächung) des beschriebenen Risikos abgegeben. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. -5- AUTH-01 Fehlender AUTHORITY-CHECK in Reports I. Hintergrund und Risiko Es gibt eine Vielzahl von Möglichkeiten Reports mit SAP Standardmitteln oder selbst geschriebenen Programmen zu starten. Es ist entsprechend schwierig alle diese "Report Starter" zu identifizieren und mittels restriktiver Vergabe von Berechtigungen abzusichern. Daher ist es wichtig, dass alle selbst entwickelten Reports durch explizite Berechtigungsprüfungen sicherstellen, dass nur autorisierte Benutzer mit ihnen arbeiten können. Denn wenn ein Report selbst prüft, ob der Aufrufer berechtigt ist, dann spielt es keine Rolle wie der Report gestartet wurde. Er wird nicht laufen, wenn der Benutzer nicht berechtigt ist. Hat ein Report keine Berechtigungsprüfung, besteht das Risiko dass ein Benutzer einen nicht abgesicherten Weg findet den Report zu starten und dann die darin enthaltene Geschäftslogik unberechtigt ausführt. II. Technische Beschreibung des Risikos Das Starten eines Reports erfolgt technisch immer durch den ABAP Befehl SUBMIT. Alle SAP Standardtransaktionen und Bausteine die Reports starten basieren auf diesem Befehl. Beim Aufruf eines SUBMIT Befehls führt der SAP Kernel automatisch eine Berechtigungsprüfung auf S_PROGRAM durch, sofern in den Programmeigenschaften des Reports eine Berechtigungsgruppe gepflegt ist. Ist keine Berechtigungsgruppe gepflegt, dann wird der Report ohne Berechtigungsprüfung gestartet. Wenn der Report Geschäftsdaten verarbeitet oder anzeigt, kann das je nach Kontext ein Compliance- und/oder ein Sicherheitsrisiko sein. III. Technische Beschreibung der Mitigation Es gibt zwei Möglichkeiten das Risiko zu mitigieren. 1. Explizite Verwendung des Befehls AUTHORITY-CHECK OBJECT im Report. Dadurch können Sie eine genau für diesen Report relevante Berechtigungsprüfung durchführen. 2. Zuweisung einer Berechtigungsgruppe in den Programmeigenschaften. Dadurch wird bereits der Start des Reports verhindert. Unter bestimmten Umständen führt der SAP Standard die S_PROGRAM Prüfung nicht aus, auch wenn eine Berechtigungsgruppe gepflegt ist. Wir empfehlen daher Mitigation 1. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. -6- AUTH-02 Fehlender AUTHORITY-CHECK vor CALL TRANSACTION I. Hintergrund und Risiko Der ABAP Befehl CALL TRANSACTION startet eine beliebige SAP Transaktion. Allerdings führt dieser Befehl nicht zwingend eine Startberechtigungsprüfung (S_TCODE) durch. Dadurch kann es sein, dass Benutzer Transaktionen unberechtigt starten können. II. Technische Beschreibung des Risikos Das Starten einer Transaktion erfolgt technisch immer durch die ABAP Befehle CALL TRANSACTION und LEAVE TO TRANSACTION. Alle SAP Standardtransaktionen und Bausteine die Transaktionen starten basieren auf diesen Befehlen. Während LEAVE TO TRANSACTION eine implizite Startberechtigungsprüfung durchführt, tut CALL TRANSACTION dies nicht. Im SAP Standard gibt es verschiedene Möglichkeiten diesem Sicherheitsmangel per Konfiguration beizukommen. Diese Konfigurationsmöglichkeiten sind komplex und lassen leider Raum für Fehler. Daher sollten Entwickler immer eine explizite Startberechtigungsprüfung durchführen wenn sie den Befehl CALL TRANSACTION verwenden. Ohne eine explizite (programmatische) Prüfung könnten unberechtigte Benutzer an kritische Daten gelangen. III. Technische Beschreibung der Mitigation Bevor der Befehl CALL TRANSACTION ausgeführt wird, sollte eine Berechtigungsprüfung stattfinden, um sicherzustellen, dass der aktuelle Benutzer auch berechtigt ist die Transaktion zu starten. Eine hinreichende Berechtigungsprüfung ist auf zwei Arten möglich. 1. Explizite Verwendung des Funktionsbausteins 'AUTHORITY_CHECK_TCODE', dessen umfassende Prüfung gleichzeitig verschiedene Konfigurationsvarianten berücksichtigt. 2. Seit SAP Basis Release 7.40 verfügt der Befehl CALL TRANSACTION über die Optionen WITH AUTHORITY-CHECK und WITHOUT AUTHORITY-CHECK. Entsprechend sollten Sie die Option WITH AUTHORITY-CHECK verwenden, die funktional dem Funktionsbaustein 'AUTHORITY_CHECK_TCODE' gleichwertig ist. Beispiel TRY. CALL TRANSACTION 'SM30' WITH AUTHORITY-CHECK. CATCH cx_sy_authorization_error. EXIT. ENDTRY. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. -7- AUTH-03 Fehlender AUTHORITY-CHECK in RFC-fähigen Funktionsbausteinen I. Hintergrund und Risiko Funktionsbausteine sind ein spezieller Typ ABAP Module, weil sie als "remote-fähig" konfiguriert werden können. Remote-fähige Funktionsbausteine können über das RFC Protokoll von jedem Rechner aufgerufen werden, der eine Netzwerkverbindung zum SAP System hat. * Da in den meisten Unternehmen wegen der komplexen Rechtevergabe (zu) viele Benutzer S_RFC ("Stern") Berechtigung haben können sie potentiell jeden Funktionsbaustein ausführen, der keine gesonderte Berechtigungsprüfung für die tatsächlich ausgeführte Businesslogik durchführt. Wenn beispielsweise ein Funktionsbaustein Finanzdaten verarbeitet, könnte er via RFC ausgeführt werden, obwohl die Rolle des Benutzers nicht die notwendigen relevanten (Finanz-)Berechtigungsobjekte enthält. II. Technische Beschreibung des Risikos Remote-fähige Funktionsbausteine können von externen Servern und Clients über das RFC Protokoll ausgeführt werden. Dafür müssen folgende Bedingungen erfüllt sein: Das aufrufende System benötigt Netzwerkzugriff auf den SAP Server, auf dem der Funktionsbaustein aktiv ist Das aufrufende Programm muss eine RFC Verbindung herstellen können, z.B. in dem es die JCO API der SAP einbindet, die SAP allen Kunden frei zur Verfügung stellt. Es muss ein Benutzerkonto verwendet werden, das S_RFC Privilegien zur Ausführung des Funktionsbausteins hat. Das bedeutet, dass jeder Rechner im Intranet eines Unternehmens potentiell einen remote-fähigen Funktionsbaustein ausführen kann. Auf einem SAP System existieren durchschnittlich 498<STAT> selbst entwickelte remote-fähige Funktionsbausteine. Bei 61%<STAT> davon fehlt die Berechtigungsprüfung. III. Technische Beschreibung der Mitigation Alle remote-fähigen Funktionsbausteine müssen prüfen, ob der Aufrufer berechtigt ist die zugehörige Businesslogik auszuführen. Dies sollte durch eine explizite Berechtigungsprüfung im Code erfolgen. Die zu prüfenden Berechtigungen hängen von der Business Logik ab und sollten zusammen mit den Fachverantwortlichen oder mit Sicherheitsexperten bestimmt werden. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. -8- AUTH-04 Fehlender AUTHORITY-CHECK bei PAI Ereignissen I. Hintergrund und Risiko Klassische Dynpro-Anwendungen sind bei vielen Unternehmen immer noch verbreitet im Einsatz. Häufig werden dabei Menüeinträge und Bildschirmelemente je nach den Berechtigungen der Benutzer ein- oder ausgeblendet. Es ist jedoch möglich Events gezielt auch durch direkt Eingabe ihrer Funktionscodes im SAPGUI auszulösen, selbst wenn das zugehörige Bildschirmelement nicht vorhanden bzw. deaktiviert ist. Wenn ein Bildschirmelement abgeschaltet wurde, dann darf eine Anwendung nicht (ohne adäquate Berechtigungsprüfungen) auf Events dieses Elements reagieren. Andernfalls können Benutzer ohne jedes Hilfsmittel und praktisch ohne Fachkenntnisse Berechtigungsprüfungen umgehen. II. Technische Beschreibung des Risikos Beim Anklicken von Menüeinträgen oder Buttons werden sogenannte Funktionscodes an die Anwendung gesendet. Diese Funktionscodes kann ein Benutzer aber auch direkt im Kommandofeld des SAP GUI eingeben, sofern sie ihm bekannt sind. Beispielsweise entspricht der Event des "Anzeigen" Buttons in Transaktion SE24 dem Funktionscode "WB_DISPLAY". Es ist zu beobachten, dass Entwickler diese Eigenschaft auch verwenden, um versteckte Events in Anwendungen zu platzieren - also Funktionscodes für die es gar kein Bildschirmelement gibt. Dies stellt ein hohes Risiko dar, da man auf diese Weise Hintertüren in eine Anwendung einschleusen kann. III. Technische Beschreibung der Mitigation 1. Es dürfen nur Funktionscodes verarbeitet werden, die auch einem Bildschirmelement zugeordnet sind. 2. Wenn bestimmte Einträge eines Dynpro-Menüs ausgeblendet oder einzelne Buttons deaktiviert werden sollen, dann muss die Behandlung der zugehörigen Funktionscodes programmatisch ebenfalls verhindert werden. Daher müssen die Berechtigungsprüfungen nicht nur zum Zeitpunkt PBO (Deaktivierung der Bildschirmelemente) stattfinden, sondern auch zum Zeitpunkt PAI (Prüfung der zugehörigen Funktionscodes). © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. -9- AUTH-05 Fehlende Ergebnisprüfung nach AUTHORITY-CHECK I. Hintergrund und Risiko Eine explizite Berechtigungsprüfung im Code besteht aus zwei Aktionen: der Anfrage durch den Befehl AUTHORITY-CHECK OBJECT und der Auswertung des Ergebnisses in der Systemvariable sy-subrc. Findet die Ergebnisauswertung nicht (formal korrekt) statt, ist die Berechtigungsprüfung wirkungslos. II. Technische Beschreibung des Risikos Der ABAP Befehl AUTHORITY-CHECK OBJECT führt eine Berechtigungsprüfung im SAP Kernel durch. Dabei wird auch gegebenenfalls ein entsprechender Trace-Eintrag angelegt. Allerdings leitet sich aus der Prüfung im Kernel zunächst keine Konsequenz für die weitere Ausführung eines ABAP Programms ab. Nur wenn der Rückgabewert geprüft und bei unzureichender Berechtigung eine entsprechende Reaktion eingeleitet wird, ist die Berechtigungsprüfung hinreichend. III. Technische Beschreibung der Mitigation Der Wert der Systemvariablen sy-subrc muss unmittelbar nach jedem Aufruf des Befehls AUTHORITY-CHECK OBJECT ausgelesen und analysiert werden. Eine Berechtigungsprüfung ist nur dann erfolgreich, wenn sy-subrc den Wert "0" hat. Beispiel AUTHORITY-CHECK OBJECT 'S_DEVELOP' ID 'DEVCLASS' FIELD 'ZHR' ID 'OBJTYPE' FIELD 'CLAS' ID 'OBJNAME' FIELD 'Z_CL_HRPAY' ID 'P_GROUP' DUMMY ID 'ACTVT' FIELD '02'. " Programm verlassen, falls Benutzer die angefragte Berechtigung nicht hat IF sy-subrc <> 0. EXIT. ENDIF. Achtung: Wird sy-subrc nicht unmittelbar nach der Berechtigungsprüfung ausgelesen, kann ein anderer ABAP Befehl den Wert überschreiben. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 10 - AUTH-06 Unvollständiger AUTHORITY-CHECK I. Hintergrund und Risiko Bei einer Berechtigungsprüfung im Code müssen alle Felder des relevanten Berechtigungsobjekts explizit einbezogen werden. Falls ein Feld bei der Prüfung vergessen wird, dann werden die Rechte des Benutzers in Bezug auf das Feld nicht geprüft. In Konsequenz ist die Prüfung unvollständig und kann zu unberechtigtem Zugang führen. II. Technische Beschreibung des Risikos Der Befehl AUTHORITY-CHECK OBJECT führt eine Berechtigungsprüfung auf das Berechtigungsobjekt und alle für das Berechtigungsobjekt angegebenen Felder aus. Jedoch werden die einem Benutzer zugewiesenen Werte ignoriert, wenn ein oder mehrere Felder des Berechtigungsobjekts nicht geprüft werden. Dies kann zu einer unerwünschten Rechteerweiterung führen, wenn ein Benutzer sehr restriktive Werte in einem Feld hat das (irrtümlich) nicht geprüft wird. III. Technische Beschreibung der Mitigation Der Befehl AUTHORITY-CHECK OBJECT muss alle Felder auflisten, die dem zu prüfenden Berechtigungsobjekt angehören. Sollte ein Feld nicht benötigt werden, so ist dies explizit mittels der Option DUMMY anzuzeigen und zu dokumentieren. Der Einsatz von DUMMY zur Unterdrückung einer Feldprüfung gibt einem Auditor Aufschluss, dass (und warum) das Feld absichtlich nicht überprüft werden soll. Der Auditor kann dadurch ausschließen, dass das Feld irrtümlich vergessen wurde. Beispiel AUTHORITY-CHECK OBJECT 'S_DEVELOP' ID 'DEVCLASS' FIELD 'ZHR' ID 'OBJTYPE' FIELD 'CLAS' ID 'OBJNAME' FIELD 'Z_CL_HRPAY' " Dieses Feld wird für Klassen nicht benötigt ID 'P_GROUP' DUMMY ID 'ACTVT' FIELD '02'. IF sy-subrc <> 0. EXIT. ENDIF. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 11 - AUTH-07 Proprietäre Berechtigungsprüfung (sy-uname) I. Hintergrund und Risiko Alle Berechtigungen in SAP Systemen basieren auf den für die Benutzer gepflegten Rollen und Profilen. Die SAP Standardfunktionalität protokolliert die Ergebnisse sämtliche Berechtigungsprüfungen revisionssicher für Auditoren und Wirtschaftsprüfer. Verwendet ein Programm jedoch proprietäre Berechtigungsprüfungen, so werden weder die Rollen und Profile der Benutzer geprüft, noch korrekte Protokolle erzeugt. II. Technische Beschreibung des Risikos Es ist zu beobachten, dass Entwickler häufig Berechtigungsprüfungen basierend auf den Benutzernamen von Mitarbeitern/Entwicklern programmieren. Solche Funktionalität wird meist zu Testzwecken erstellt, aber häufig nicht entfernt bevor die Anwendung produktiv gesetzt wird. Es kommt jedoch auch vor, dass Entwickler mit diesem Mechanismus vorsätzlich Hintertüren in Anwendungen bauen. Auf SAP Systemen befinden sich mit einer Wahrscheinlichkeit von 90%<%STAT> proprietäre Berechtigungsprüfungen. Im Schnitt finden sich pro System etwa 200<%STAT> Berechtigungs-prüfungen die auf sy-uname basieren. Proprietäre Berechtigungsprüfungen stellen ein hohes Risiko für Unternehmen dar. Sie können nicht nur bei Wirtschaftsprüfungen massive Probleme verursachen, sondern auch insgesamt ein Risiko für die Geschäftsgeheimnisse eines Unternehmens darstellen. III. Technische Beschreibung der Mitigation 1. Jegliche Berechtigungsprüfung im SAP muss technisch ausschließlich durch dem Befehl AUTHORITY-CHECK OBJECT erfolgen. Der Befehl kann dabei auch indirekt verwendet werden, d.h. z.B. durch den Aufruf von SAP Modulen, die ihn verwenden. 2. Die Ausführung von Geschäftslogik basierend auf sy-uname muss per Entwicklungsrichtlinie verboten sein. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 12 - 2. Testbarkeit Ein zentrales Sicherheitskonzept im SAP Standard ist die Trennung von Entwicklungs-, Test- und Produktivsystemen. Das Testsystem hat hierbei eine wichtige Rolle. Auf dem Testsystem wird entschieden, ob eine Anwendung den Anforderungen des Unternehmens genügt. Hierbei werden sowohl funktionale als auch nicht-funktionale Qualitätsaspekte der Anwendung überprüft. Damit eine Qualitätsprüfung verlässliche Ergebnisse liefert, müssen nicht nur die Prüfer umfassende Kenntnisse im Bereich Qualitätssicherung haben. Die Anwendung selbst muss auch prüfbar sein. Das bedeutet, dass ein Prüfer die Anwendung zu Testzwecken ausführen und dass er im Zweifelsfall den Quellcode der Anwendung analysieren kann. Wenn bestimmte Funktionalitäten einer Anwendung sich auf dem Testsystem (von einem Prüfer) nicht ausführen lassen, kann der Prüfer nicht erkennen, ob sie den Qualitätsanforderungen entsprechen. In Folge dessen würde ungeprüfter Code auf ein Produktivsystem übertragen, was ein erhebliches Risiko für ein Unternehmen darstellt. Es ist daher essentiell wichtig, dass Eigenentwicklungen auf dem Testsystem hinreichend untersucht werden können. Grundsätzliche Anforderungen 1. Sämtliche Eigenentwicklungen müssen prüfbar sein. Das bedeutet, dass sämtliche Funktionalität dokumentiert, auf einem Testsystem analysierbar und ausführbar ist. Spezielle Sicherheitsrisiken und Anforderungen Im Folgenden werden spezielle Risiken behandelt, die im Kontext von Testbarkeit auftreten. Dabei wird immer eine Empfehlungen für die Mitigation (Abschwächung) des beschriebenen Risikos abgegeben. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 13 - TEST-01 Versteckter ABAP Code I. Hintergrund und Risiko Der SAP Standard erlaubt es Entwicklern, den Zugriff auf ABAP Quellcode zu verhindern. Hierzu gibt es einen Mechanismus, der auf einem speziellen Kommentar basiert. Alternativ ist zu beobachten, dass Entwickler Ihren Quellcode durch Verschleierungstechniken als Zeichenketten maskieren, zur Laufzeit wieder demaskieren, als Code speichern und ausführen. Solche Methoden ermöglichen es Schadcode auf ein System zu transportieren, der weder durch manuelle noch durch automatisierte Codeanalysen erkannt werden kann. II. Technische Beschreibung des Risikos Wenn die erste Zeile eines ABAP Quellcodes eine bestimmte Signatur enthält, dann blockiert der SAP Kernel den Lesezugriff auf diesen Quellcode. Beim Versuch versteckten Quellcode durch den Befehl READ REPORT (aus der Tabelle REPOSRC) zu lesen, kommt es entsprechend zu einem Fehler. Diesen speziellen Fehler erkennt man daran, dass sy-subrc auf den Wert 8 gesetzt wird. Beispiel *@#@@[SAP] " FORM Routine mit Hintertür in einem versteckten Include FORM geheime_backdoor. READ REPORT 'YYY_BACKDOOR' INTO icode. EDITOR-CALL FOR icode. INSERT REPORT 'YYY_BACKDOOR' FROM icode. ENDFORM. III. Technische Beschreibung der Mitigation Die Verwendung von Techniken, die das Lesen von Quellcode verhindern muss per Entwicklungsrichtlinie verboten sein. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 14 - TEST-02 Systemabhängige Ausführung I. Hintergrund und Risiko Die Systemvariable sy-sysid liefert einem ABAP Programm Informationen darüber auf welchem SAP System es gerade ausgeführt wird. Diese Funktionalität wird häufig verwendet, um systemspezifische Unterschiede programmatisch abzubilden. D.h. dass sich manche Funktionen je nach dem System auf dem sie laufen leicht anders verhalten. Das führt jedoch dazu, dass die tatsächliche Funktionalität wie sie für den produktiven Einsatz der Anwendung vorgesehen ist auf dem Testsystem nicht geprüft werden kann. Dadurch wird Code ungetestet auf ein Produktivsystem transportiert. II. Technische Beschreibung des Risikos Wenn Funktionen eines Programms auf einem Qualitätssicherungssystem nicht genauso durchlaufen werden, wie auf dem Produktivsystem, kann die Qualitätssicherung keine hinreichende Testabdeckung leisten. Wenn die produktive Funktionalität eines Programms nicht testbar ist können sowohl Hintertüren als auch fehlerhafte Geschäftslogik ins Produktivsystem ausgeliefert werden. Beispiel IF sy-sysid = 'P23' lv_mailtarget = '[email protected]'. ELSE. lv_mailtarget = '[email protected]'. ENDIF. III. Technische Beschreibung der Mitigation Die Verwendung von Techniken, die die Ausführung bestimmter Code-Zweige von einem bestimmten SAP System abhängig macht muss per Entwicklungsrichtlinie verboten sein. Sollten solche Praktiken tatsächlich erforderlich sein, muss detailliert dokumentiert werden, wo sie verwendet werden und warum. Dann kann die Qualitätssicherung zumindest mittels manueller Code-Analyse erfolgen. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 15 - TEST-03 Mandantenabhängige Ausführung I. Hintergrund und Risiko Die Systemvariable sy-mandt liefert einem ABAP Programm Informationen darüber auf welchem Mandanten es gerade ausgeführt wird. Diese Funktionalität wird häufig verwendet, um mandantenspezifische Unterschiede programmatisch abzubilden. D.h. dass sich manche Funktionen je nach dem Mandanten an dem ein Benutzer angemeldet ist leicht anders verhalten. Das führt jedoch dazu, dass die tatsächliche Funktionalität wie sie für den produktiven Einsatz der Anwendung vorgesehen ist auf dem Testsystem potentiell nicht geprüft wird. Dadurch wird Code möglicherweise ungetestet auf einen produktiven Mandanten transportiert. II. Technische Beschreibung des Risikos Wenn Funktionen eines Programms auf einem Qualitätssicherungssystem nicht genauso durchlaufen werden, wie auf dem Produktivsystem, kann die Qualitätssicherung keine hinreichende Testabdeckung leisten. Wenn die produktive Funktionalität eines Programms nicht testbar ist können sowohl Hintertüren als auch fehlerhafte Geschäftslogik ins Produktivsystem ausgeliefert werden. Beispiel IF sy-mandt = '007' lv_mailtarget = '[email protected]'. ELSE. lv_mailtarget = '[email protected]'. ENDIF. III. Technische Beschreibung der Mitigation Die Verwendung von Techniken, die die Ausführung bestimmter Code-Zweige von einem bestimmten Mandanten abhängig macht muss per Entwicklungsrichtlinie verboten sein. Sollten solche Praktiken tatsächlich erforderlich sein, muss detailliert dokumentiert werden, wo sie verwendet werden und warum. Dann kann die Qualitätssicherung auf den entsprechenden Mandanten stattfinden oder zumindest mittels manueller Code-Analyse erfolgen. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 16 - 3. Datenschutz SAP Systeme enthalten eine große Menge an unternehmenskritischen Daten. Der SAP Standard sieht verschiedene Mechanismen vor, diese kritischen Daten vor unerlaubtem Zugriff zu schützen. Allerdings können auch durch Fehler in Eigenentwicklungen unerlaubte Zugriffe und Datenabflüsse ermöglicht werden. Erhält ein Mitarbeiter unerlaubt Zugriff auf Daten, so kann er diese in einem zweiten Schritt in eine vom Unternehmen nicht mehr kontrollierbare Umgebung transferieren. Grundsätzliche Anforderungen 1. Unternehmenskritische Daten müssen auch programmatisch vor unerlaubtem Zugriff geschützt sein. 2. Insbesondere gesetzliche Vorschriften (z.B. Bundesdatenschutzgesetz) sind einzuhalten. Spezielle Sicherheitsrisiken und Anforderungen Im Folgenden werden spezielle Risiken behandelt, die im Kontext von Datenlecks auftreten. Dabei wird immer eine Empfehlungen für die Mitigation (Abschwächung) des beschriebenen Risikos abgegeben. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 17 - DAT-01 Datenlecks I. Hintergrund und Risiko In SAP Systemen sind unter anderem folgende Arten von Daten gespeichert: - Finanzdaten - Personenbezogene Daten - Geschäftsgeheimnisse - Passwörter Der Schutz dieser Daten ist aus verschiedenen Aspekten für Unternehmen, Organisationen und Behörden wichtig. Dazu gehören gesetzliche Anforderungen, öffentliches Ansehen und nicht zuletzt die Wahrung von Wettbewerbsvorteilen. Beim Verlust bestimmter Daten besteht darüber hinaus auch eine Meldepflicht (siehe z.B. §42a BDSG). Bei selbstgeschriebenen ABAP Programmen wird häufig nicht die notwendige Sorgfalt im Umgang mit unternehmenskritischen Daten angewendet. Sollte ein Mitarbeiter dadurch unbefugt Zugang zu kritischen Daten erhalten, ist er in der Lage diese Daten anschließend an Dritte zu übermitteln. II. Technische Beschreibung des Risikos Ein Risiko liegt insbesondere dann vor, wenn kritische Daten unberechtigt - angezeigt (z.B. SAP GUI, HTML, UI5, Smartforms, Adobe Forms, ...) - in Dateien gespeichert (sowohl Server- als auch Client-seitig) - an andere Anwendungen oder Benutzer übertragen (z.B. via RFC, HTTP, FTP, ...) werden. III. Technische Beschreibung der Mitigation Bei der Anzeige, der Übermittlung und dem Export kritischer Daten muss eine hinreichende Berechtigungsprüfung erfolgen. Als Vorstufe zu diesem Schutz ist es erforderlich, dass Unternehmen einen Überblick haben, welche Daten im SAP System unternehmenskritisch sind bzw. gesetzlichen Anforderungen unterliegen. Sämtliche lesenden Zugriffe auf kritische Daten müssen mit Berechtigungsprüfungen abgesichert und jeder (beabsichtigte) Abfluss dieser Daten dokumentiert sein. Vermeiden Sie insbesondere Anwendungen, die generischen Zugriff auf Daten ermöglichen (siehe MECH-03). © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 18 - 4. Injection Schwachstellen Injection Schwachstellen basieren darauf, dass ein Angreifer Steuerzeichen und/oder Kommandos durch den Datenkanal (Input) in eine Anwendung einschleust. Ein erfolgreicher Angriff kann den geplanten Programmablauf durch unerwartete Kommandos schadhaft verändern. Durch Eigenentwicklungen erhöht sich die Zahl der Eingabefelder (Input) des Systems im Schnitt um 15.230 < %STAT>. Injection Schwachstellen stellen das größte Sicherheitsrisiko durch Eigenentwicklungen dar. Je nach Art der Injection kann ein Angreifer die vollständige Kontrolle über das betroffene SAP System erlangen. Generell sind die technischen Details von Injection Schwachstellen komplex, äußerst variantenreich und insgesamt sehr schwer zu verstehen. Es ist daher sowohl für Entwickler als auch für Tester ohne spezielle Schulung schwierig Schwachstellen zu erkennen bzw. zu beheben. Grundsätzliche Anforderungen 1. Bei der Verarbeitung von Benutzereingaben ist generell eine Plausibilitätsprüfung der Daten durchzuführen. Dies nennt man auch "Input Validierung". Input Validierung leistet nicht nur einen grundlegenden Sicherheitsschutz (da Steuer- und Sonderzeichen in den meisten Datenfeldern keinen Sinn machen und entfernt werden können), sondern verbessert auch die Datenqualität allgemein. Input Validierung ist so zu implementieren, dass die Eingaben mit einer Liste erlaubter Werte abgeglichen werden, d.h. mit dem sogenannten "White List Filter" Verfahren. 2. Es ist besondere Vorsicht geboten wenn Benutzereingaben mit Steuerzeichen oder Sprachelementen (Semantik) vermischt werden und das Ergebnis anschließend als Ganzes verarbeitet oder ausgeführt wird. In diesem Fall müssen sämtliche im verwendeten Kontext relevanten Steuerzeichen in den Daten unschädlich gemacht werden. Diesen Vorgang nennt man auch "Output Encodierung" oder "Escaping". Spezielle Sicherheitsrisiken und Anforderungen Im Folgenden werden spezielle Risiken behandelt, die im Kontext von Injection Schwachstellen auftreten. Dabei wird immer eine Empfehlungen für die Mitigation (Abschwächung) des beschriebenen Risikos abgegeben. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 19 - INJ-01 ABAP Command Injection I. Hintergrund und Risiko Der ABAP Sprachumfang erlaubt es ABAP Programmen zur Laufzeit neue ABAP Programme dynamisch zu erstellen und auszuführen. Dieser Mechanismus lässt sich durch Konfiguration nicht abschalten. Er funktioniert technisch ohne jede Berechtigungsprüfung und lässt sich auch ausführen, wenn ein Mandant als produktiver Mandant konfiguriert und für Änderungen gesperrt ist. Auf diesem Weg ist es auch ganz einfach möglich den SAP Standard zu ändern. Wenn ein ABAP Programm von dieser Funktionalität Gebrauch macht, dann besteht ein sehr hohes Sicherheitsrisiko für das gesamte SAP System, wenn Benutzereingaben als Teil der erstellten ABAP Programme verwendet werden. Wenn ein ABAP Programm schadhaft manipuliert wird, kann ein Angreifer die totale Kontrolle über das gesamte SAP System übernehmen. Ebenso umgeht das dynamische Erstellen von ABAP Programmen auf dem Produktivsystem implizit die Möglichkeit einer Qualitätssicherung auf dem QA System. II. Technische Beschreibung des Risikos Die Sprache ABAP hat weitgehende Zugriffsrechte auf einem SAP System. Insbesondere ist es von ABAP aus möglich beliebige Datenbankeinträge ohne jede Berechtigungsprüfung auszulesen, zu löschen oder zu manipulieren. Dadurch können sowohl Geschäfts- als auch Konfigurationsdaten beliebig verändert werden. Eine ABAP Command Injection Schwachstelle gibt einem Angreifer die totale Kontrolle über das SAP System, egal welche sonstigen Sicherheitsmaßnahmen getroffen wurden. Die ABAP Befehle INSERT REPORT und GENERATE SUBROUTINE POOL erlauben beide das dynamische Erstellen von ABAP Programmen. III. Technische Beschreibung der Mitigation Die Verwendung der ABAP Befehle INSERT REPORT und GENERATE SUBROUTINE POOL muss per Entwicklungsrichtlinie verboten sein. Sollte dennoch dynamisch ABAP Code erstellt werden müssen, so muss detailliert dokumentiert werden, wo und warum dies geschieht. Dann kann die Qualitätssicherung auch mittels manueller Code-Analyse erfolgen. In keinem Fall darf Input Teil der dynamischen Erstellung von ABAP Programmen sein. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 20 - INJ-02 OS Command Injection I. Hintergrund und Risiko Der ABAP Sprachumfang erlaubt es ABAP Programmen über mehrere, technisch verschiedene Wege Kommandos an das Betriebssystem zu senden, auf dem der SAP Server installiert ist. Wenn ein ABAP Programm von dieser Funktionalität Gebrauch macht, dann besteht ein sehr hohes Sicherheitsrisiko für das gesamte SAP System, wenn Benutzereingaben als Teil der Betriebssystem-kommandos verwendet werden oder wenn vorsätzlich schadhafte Kommandos ausgeführt werden. Wenn ein Betriebssystemkommando schadhaft manipuliert wird, kann ein Angreifer die totale Kontrolle über das Betriebssystem des SAP Servers übernehmen. Vom Betriebssystem aus kann er dann in einem zweiten Schritt auch Kontrolle über das SAP System und die Datenbank erlangen. II. Technische Beschreibung des Risikos Es ist zu beobachten, dass Entwickler von folgenden ABAP Befehlen Gebrauch machen, um generisch Betriebssystemkommandos auszuführen: CALL CALL OPEN CALL CALL 'SYSTEM' 'ThWpInfo' DATASET FILTER FUNCTION 'RFC_REMOTE_EXEC' FUNCTION 'RFC_REMOTE_PIPE' Alle diese Kommandos sind gefährlich, da sie die Ausführung beliebiger Betriebssystemkommandos ermöglichen und damit die Sicherheitsmechanismen des SAP Standards aushebeln. III. Technische Beschreibung der Mitigation Betriebssystemkommandos dürfen von ABAP Programmen aus nur über die Standardfunktionsbausteine 'SXPG_CALL_SYSTEM' (lokale Ausführung) und 'SXPG_COMMAND_EXECUTE' (Ausführung auf einem anderen SAP System) ausgeführt werden. Einzig diese beiden Funktionsbausteine sind im SAP Standard für die Ausführung von Betriebssystemkommandos vorgesehen. Sie ermöglichen es die Kommandos auszuführen, die zuvor mit den Transaktionen SM49 oder SM69 erstellt wurden. Durch diese Transaktionen hat ein Administrator die Kontrolle darüber welche Betriebssystemkommandos auf einem SAP Server ausgeführt werden können. Die Ausführung der generell erlaubten Betriebssystemkommandos muss zusätzlich über das Berechtigungsobjekt S_LOG_COM nur den befugten Benutzern freigeschaltet werden. In keinem Fall darf Input Teil der Ausführung von Betriebssystemkommandos sein. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 21 - INJ-03 Native SQL Injection I. Hintergrund und Risiko ABAP Programme können über die ADBC (ABAP Database Connectivity) Schnittstelle beliebige native SQL Befehle an die Datenbank senden. Dadurch können auch viele Befehle ausgeführt werden, die die Standard Open SQL Schnittstelle von ABAP gar nicht ausführen kann. Insbesondere können auch mehrere Befehle hintereinander durch Verkettung ausgeführt werden. Sollte ein Befehl, der an die ADBC Schnittstelle gesendet wird Benutzereingaben enthalten, besteht das Risiko, dass der Befehl schadhaft verändert wird. Da fast alle kritischen Geschäfts- und Konfigurationsdaten in der Datenbank liegen, kann ein Angreifer durch eine Native SQL Injection die totale Kontrolle über den SAP Server übernehmen. Beispielsweise gibt ein UPDATE auf die "richtige" Tabelle einem Benutzer SAP_ALL Rechte. II. Technische Beschreibung des Risikos Die ADBC Schnittstelle erlaubt es ABAP Programmen dynamisch Zeichenketten zusammenzusetzen und dann als native(n) SQL Befehl(e) an die Datenbank zu senden. ADBC basiert technisch auf mehreren Kernel Calls und ist durch die Klassen CL_SQL_STATEMENT, CL_SQL_PREPARED_STATEMENT und CL_SQL_CONNECTION verschalt. Da die gängigen Datenbanken die Verkettung von SQL Befehlen erlauben, kann eine native SQL Injection den aktuellen SQL Befehl abschließen und einen ganz anderen Befehl ausführen. Native SQL Befehle ermöglichen über den Funktionsumfang von Open SQL hinaus unter anderem: - das Anlegen von neuen Datenbankbenutzern - das Entfernen von Tabellen - das Löschen der gesamten Datenbank Beachten Sie bitte, dass der Einsatz von ADBC noch andere Sicherheitsrisiken (jenseits von SQL Injection) birgt, da bestimmte Standardmechanismen wie z.B. die automatische Mandantentrennung nicht greifen. III. Technische Beschreibung der Mitigation Die Verwendung von ADBC sollte per Entwicklungsrichtlinie verboten sein. Das verhindert zusätzlich Risiken im Zusammenhang mit MECH-01. Sollte es wichtige Gründe für den Einsatz von ADBC geben, so muss detailliert dokumentiert werden, wo und warum dies geschieht. Ziehen Sie beim Einsatz von ADBC auf jeden Fall Sicherheitsexperten hinzu, da sowohl die Wahrscheinlichkeit als auch die Auswirkung von Sicherheitsfehlern sehr hoch ist. In keinem Fall darf Input Teil der Ausführung von ADBC Befehlen sein. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 22 - INJ-04 Directory Traversal I. Hintergrund und Risiko ABAP Programme greifen in verschiedenen Anwendungsszenarien lesend und/oder schreibend auf das Dateisystem des SAP Servers zu. Häufig werden dabei Dateiname und/oder Pfad durch Benutzereingaben bestimmt. Gelingt es einem Benutzer durch schadhafte Eingaben den Dateinamen/-Pfad zu verändern, kann dies zu einem unberechtigten Zugriff führen. Dadurch können potentiell beliebige Dateien auf dem SAP Server (je nach Art des Zugriffs) unbefugt gelesen oder überschrieben werden. Dies ist z.B. im Falle von Konfigurationsdateien, Logs, und Systemprogrammen ein Sicherheitsrisiko. II. Technische Beschreibung des Risikos In Pfad- bzw Dateinamen haben die Zeichenfolgen '../' und '..\' eine besondere Bedeutung. Je nach Betriebssystem wechseln sie den Pfad eine Ebene in Richtung Hauptverzeichnis. Die Zeichenkette 'C:\tmp\sap\customer\..\..\..\windows\saplogon.ini' verweist effektiv auf die Datei 'C:\windows\saplogon.ini'. Gibt wie in diesem Beispiel die Anwendung den Pfad vor und der Anwender den (vermeintlichen) Dateinamen (im Beispiel rot markiert), so kann dies zu unerwarteten Nebeneffekten führen. Durch geschicktes traversieren der Verzeichnisstruktur kann der Anwender unerlaubt Zugriff auf Dateien in beliebigen anderen Verzeichnissen erhalten. Relevant für einen Angriff sind die Zeichenfolgen '../' und '..\'. Führt die Anwendung keine hinreichende Prüfung der Benutzereingaben durch, gibt sie damit unbefugten Anwendern weitreichenden Zugriff. III. Technische Beschreibung der Mitigation Wenn auf Dateien eines SAP Servers zugegriffen wird, sollten möglichst keine Benutzereingaben für den Dateinamen bzw Pfad verwendet werden. Muss ein Teil des Pfades oder des Dateinamens per Benutzereingaben bestimmbar sein, dann muss der SAP Standard Funktionsbaustein 'FILE_VALIDATE_NAME' für die Validierung verwendet werden. Dieser Baustein prüft, ob die für den Dateizugriff erstellte Zeichenkette auch tatsächlich eine Datei innerhalb oder unterhalb des vorgegebenen Anwendungsverzeichnisses darstellt. Im obigen Beispiel würde der Baustein erkennen, dass das vorgegebene Anwendungsverzeichnis verlassen wurde. Weiter Details dazu finden Sie in SAP Note 1497003. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 23 - INJ-05 Open SQL Injection I. Hintergrund und Risiko Open SQL bietet die Möglichkeit, Teile eines bereits kompilierten SQL Befehls erst zur Laufzeit zu definieren. Dies nennt man auch dynamisches Open SQL. Werden im dynamischen Teil des Open SQL Befehls Benutzereingaben verarbeitet, kann der betroffene Open SQL Befehl schadhaft manipuliert werden. Dadurch kann ein Angreifer sich unberechtigten Zugang zu Daten beschaffen. II. Technische Beschreibung des Risikos Folgende Elemente der Open SQL Befehle können zur Laufzeit gesetzt werden: Tabellenname WHERE Bedingung SET Bedingung GROUP BY Bedingung HAVING Bedingung Beispiel PARAMETERS value type string. CONCATENATE `bname='` value `'` INTO lv_where. DELETE FROM usr01 WHERE (lv_where). Im obigen Beispiel werden alle Datensätze gelöscht, wenn die WHERE Bedingung wie folgt manipuliert wird: Input ' OR MANDT LIKE '% Zusammengesetzte WHERE Bedingung bname='' OR MANDT LIKE '%' III. Technische Beschreibung der Mitigation Die Verwendung von dynamischem Open SQL sollte per Entwicklungsrichtlinie verboten sein. Dadurch reduziert sich das Risiko erheblich, da es mehrere technisch verschiedene Angriffsvektoren gibt. Die Klasse CL_ABAP_DYN_PRG enthält einige Methoden, die Manipulationen durch Benutzereingaben verhindern können. Die Anwendung dieser Methoden ist jedoch nicht einfach. Daher empfiehlt es sich die Entwicklungsrichtlinien hinreichend detailliert zu erweitern oder einen Sicherheitsexperten hinzuzuziehen. Beispiel PARAMETERS value type string. " Mitigation einer SQL Injection in einer dynamischen WHERE Bedingung lv_safe = cl_abap_dyn_prg=>quote_str( value ). © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 24 CONCATENATE `bname=` lv_safe INTO lv_where. DELETE FROM usr01 WHERE (lv_where). INJ-06 Cross-Site Scripting I. Hintergrund und Risiko Bei der Entwicklung von BSP Anwendungen müssen Entwickler häufig spezielle Layoutvorgaben umsetzen. Dazu müssen sie eigenes HTML Markup schreiben und Benutzereingaben einbetten. Werden die Benutzereingaben ohne Output Encodierung eingebettet, kann das HTML Markup schadhaft manipuliert werden. Dadurch können insbesondere schadhafte JavaScript Programme in die BSP Anwendung eingeschleust werden, die auf dem Rechner der Benutzer ausgeführt werden. Diese Art von Angriff nennt man Cross-Site Scripting oder XSS. II. Technische Beschreibung des Risikos Durch Cross-Site Scripting sind verschiedene Angriffe möglich: Zugriff auf sämtliche Daten der Anwendung Zugriff auf das Dateisystem und die Dateien des angegriffenen Anwenders Portscans auf das angebundene Intranet vom Rechner des angegriffenen Anwenders aus Digitaler Identitätsdiebstahl Ausführen von Geschäftslogik im Namen und mit den Berechtigungen des angegriffenen Anwenders Eine umfängliche Analyse von XSS Risiken können Sie dem englischsprachigen Dokument "The Cross Site Scripting Threat" entnehmen: https://www.virtualforge.com/de/library/white-papers/the-cross-site-scripting-threat.html III. Technische Beschreibung der Mitigation Cross-Site Scripting ist eine extrem variantenreiche Schwachstelle. Es empfiehlt sich daher, auf selbst entwickeltes HTML in BSP Anwendungen oder HTTP Handlern möglichst zu verzichten. Rendering Mechanismen wie Web Dynpro oder UI5 generieren HTML automatisiert. Da Entwickler nicht mehr in das HTML Rendering eingreifen können, sind diese Plattformen deutlich sicherer in Bezug auf XSS. Eine Umfassende Anleitung zum Schutz vor XSS Schwachstellen würde den Rahmen dieses Dokuments sprengen. Entwickler brauchen unbedingt eine fallabhängige Anleitung, wie sie die Risiken vermeiden. Einige technische Informationen finden Sie in folgenden SAP Hinweisen: Hinweis 822881 Hinweis 887168 Hinweis 944279 Hinweis 1582867 - offizielle Dokumentation bzgl HTMLB Encodierung - offizielle Dokumentation bzgl forceEncode - offizielle Dokumentation bzgl forceEncodeOTR - offizielle Dokumentation verschiedener Encodierungsfunktionen © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 25 - 5. Standard-Schutz Der SAP Standard stellt Unternehmen verschiedene Sicherheitsmechanismen zum Schutz Ihrer Daten zur Verfügung. Entsprechend basieren viele Sicherheitsstrategien von Unternehmen darauf, dass die Mechanismen im SAP Standard ein solides Fundament darstellen und nicht unterlaufen werden (können). Zu diesem Mechanismen gehören unter anderem: - Mandantentrennung - Identity Management - Rollen und Berechtigungen - Getrennte Entwicklungs-, Test- und Produktivsysteme - Logging Grundsätzliche Anforderungen 1. ABAP Programme dürfen Sicherheitsmechanismen des SAP Standards nicht aushebeln. 2. Wenn der SAP Standard einen Sicherheitsmechanismus für bestimmte Aufgaben vorsieht, dann muss dieser Sicherheitsmechanismus auch in ABAP Programmen verwendet werden. Spezielle Sicherheitsrisiken und Anforderungen Im Folgenden werden spezielle Risiken behandelt, die im Kontext von bestehenden SAP Sicherheitsmechanismen auftreten. Dabei wird immer eine Empfehlungen für die Mitigation (Abschwächung) des beschriebenen Risikos abgegeben. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 26 - MECH-01 Zugriff auf Daten eines anderen Mandanten I. Hintergrund und Risiko Der SAP Kernel sorgt dafür, dass Open SQL Befehle nur auf Daten aus demjenigen Mandanten zugreifen, an dem der Benutzer angemeldet ist. Dadurch eine Trennung der Daten aus unterschiedlichen Mandanten gewährleistet. Es gibt jedoch verschiedene Möglichkeiten die automatische Mandantentrennung (bewusst) abzuschalten. Sollte eine Anwendung Daten aus einem anderen Mandanten verarbeiten, umgeht sie die für die Verarbeitung notwendigen Berechtigungen. Für einen legitimen Zugriff ist nämlich ein Benutzerkonto mit entsprechenden Rechten auf dem relevanten Mandanten erforderlich. Der Zugriff auf Daten eines anderen Mandanten ist vor allem bei Systemen gefährlich, deren SAP Mandanten verschiedene Unternehmen abbilden. Das betrifft insbesondere Hosting Systeme. II. Technische Beschreibung des Risikos Die Open SQL Befehle SELECT, OPEN CURSOR, DELETE, INSERT, MODIFY und UPDATE können durch die Option CLIENT SPECIFIED die Mandantentrennung des SAP Kernels gezielt deaktivieren. Beispiel " Mandantenübergreifende Ausgabe aller Rentenversicherungsnummern im System SELECT RVNUM FROM PA0013 INTO lv_rvnum CLIENT SPECIFIED. WRITE: / lv_rvnum. ENDSELECT. Mandantenübergreifender Datenzugriff mittels Open SQL kann nicht durch die Vergabe von Berechtigungen verhindert werden. Open SQL macht keinerlei implizite Berechtigungsprüfungen. Eine Mandantentrennung findet darüber hinaus bei nativem SQL nicht automatisch statt. Das bedeutet, dass sämtliche Datenbankzugriffe mittels ADBC oder der Verwendung des Befehls EXEC SQL in einem Audit geprüft werden müssen. Auch natives SQL macht keinerlei implizite Berechtigungsprüfungen. III. Technische Beschreibung der Mitigation Die Verwendung der Open SQL Option CLIENT SPECIFIED sollte per Entwicklungsrichtlinie verboten sein. Datenzugriff mittels EXEC SQL sollte per Entwicklungsrichtlinie verboten sein. Die Verwendung von ADBC sollte per Entwicklungsrichtlinie verboten sein. Das verhindert zusätzlich Risiken im Zusammenhang mit INJ-03. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 27 - Sollte es wichtige Gründe für den Einsatz von mandantenübergreifenden Zugriffen geben, so muss detailliert dokumentiert werden, wo und warum dies geschieht. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 28 - MECH-02 Generische Ausführung von Programmen oder Funktionen I. Hintergrund und Risiko Für die Ausführung von Programmen, Methoden, Funktionsbausteinen und anderen Modulen stehen im SAP Standard verschiedene Transaktionen zur Verfügung. Der Zugriff auf diese Transaktionen kann durch eine gezielte Vergabe von Berechtigungen reguliert werden. Der eingeschränkte Zugriff auf diese Transaktionen ist ein wichtiger Bestandteil von Audits. Technisch gesehen basiert die Ausführung von ABAP Modulen wiederum auf ABAP Befehlen. Das bedeutet, dass Eigenentwicklungen durchaus in der Lage sind, beliebige Arten von ABAP Modulen generisch zu starten. Somit besteht das Risiko, dass die Absicherung von Transaktionen wie z.B. SE24, SE37 und SA38 durch Eigenentwicklungen ausgehebelt wird. II. Technische Beschreibung des Risikos Die ABAP Befehle CALL TRANSACTION, CALL FUNCTION und CALL METHOD führen keine Berechtigungsprüfung für die Ausführung von Transaktionen, Funktionsbausteinen und Methoden durch. Bei SUBMIT findet nur dann eine Berechtigungsprüfung auf S_PROGRAM statt, wenn für das auszuführende Programm eine Berechtigungsgruppe hinterlegt ist. Wenn Eigenentwicklungen Anwendern erlauben generisch ABAP Module auszuführen, umgehen Sie damit die (abgesicherten) Standardtransaktionen, die dafür vorgesehen sind. Beispiel " Generischer Report-Starter PARAMETERS prog TYPE string. SUBMIT prog. III. Technische Beschreibung der Mitigation Die generische Ausführung von Transaktionen, Programmen, Funktionsbausteinen und Methoden sollte per Entwicklungsrichtlinie verboten sein. Sollte es wichtige Gründe für eine generische Ausführung geben, so muss detailliert dokumentiert werden, wo und warum dies geschieht. Insbesondere müssen auch alle erforderlichen (Berechtigungs-)Prüfungen durchgeführt werden, die die entsprechenden SAP Standardtransaktionen zur Absicherung dieses Risikos durchführen. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 29 - © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 30 - MECH-03 Generischer Zugriff auf Tabelleninhalte I. Hintergrund und Risiko Der SAP Standard stellt verschiedene Transaktionen zur Verfügung, die den Zugriff auf Datenbanktabellen ermöglichen. Beispielsweise SM30, SE16 und SE16N. Diese SAP Transaktionen führen umfangreiche (Berechtigungs-)Prüfungen durch, um den Zugriff auf kritische Daten einzuschränken. Der Zugriff auf diese Transaktionen kann durch eine gezielte Vergabe von Berechtigungen reguliert werden. Der eingeschränkte Zugriff auf diese Transaktionen ist ein wichtiger Prüfbestandteil von Audits. Technisch gesehen basieren die SAP Standardtransaktionen, die die Datenbank auslesen auf dem Befehl SELECT. Das bedeutet, dass auch Eigenentwicklungen in der Lage sind, generisch Daten aus der Datenbank zu lesen. Somit besteht das Risiko, dass die Absicherung von Transaktionen wie z.B. SM30, SE16 und SE16N durch Eigenentwicklungen ausgehebelt wird. II. Technische Beschreibung des Risikos Mittels dynamischem Open SQL kann ein Entwickler Programme mit generischem Tabellenzugriff entwickeln. Da Open SQL keine Berechtigungsprüfungen durchführt, kann dadurch eine Hintertür entstehen. Beispiel " Generischer Tabellen-Leser PARAMETERS table TYPE string. DATA alv TYPE REF TO cl_salv_table. DATA lr_data TYPE REF TO data. FIELD-SYMBOLS <ft_table> TYPE STANDARD TABLE. CREATE DATA lr_data TYPE STANDARD TABLE OF (table). ASSIGN lr_data->* TO <ft_table>. SELECT * FROM (table) INTO TABLE <ft_table>. cl_salv_table=>factory(IMPORTING r_salv_table = alv CHANGING t_table = <ft_table> ). alv->display( ). III. Technische Beschreibung der Mitigation Generisches Auslesen von Tabelleninhalten sollte per Entwicklungsrichtlinie verboten sein. Sollte es wichtige Gründe für eine generische Ausführung geben, so muss detailliert dokumentiert werden, wo und warum dies geschieht. Insbesondere müssen auch alle erforderlichen (Berechtigungs-)Prüfungen durchgeführt werden, die die entsprechenden SAP Standardtransaktionen zur Absicherung dieses Risikos durchführen. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 31 - © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 32 - Weiterführende Informationen Autor / Expertise Andreas Wiegenstein - der Autor dieses Dokuments - arbeitet beim deutschen SAP Sicherheitsunternehmen Virtual Forge GmbH und befasst sich seit 2003 mit SAP Sicherheit. Er ist Co-Autor verschiedener Standardwerke im Bereich SAP/ABAP Sicherheit: "Sichere ABAP Programmierung" - SAP Press (August 2009) ISBN: 978-3-8362-1357-8 "Best Practice Leitfaden Development" - DSAG 2013 Experten von Virtual Forge haben insgesamt über 100 Anerkennungen von der SAP AG für Ihre Beiträge an gemeldeten 0-Day Schwachstellen im SAP Standard erhalten. Virtual Forge hält regelmäßig Vorträge über SAP Sicherheit auf internationalen SAP- / Sicherheits-Konferenzen wie Troopers, DeepSec, IT Defense, DSAG, BlackHat, RSA, Hack in the Box, SAP TechEd. Sie können bei Fragen jederzeit mit dem Autor in Kontakt treten (via Xing oder Twitter: @codeprofiler). Über Virtual Forge Virtual Forge ist ein unabhängiger Anbieter von Sicherheits-, Compliance- und Qualitätsprodukten für SAP-Systeme und -Anwendungen mit Hauptsitz in Heidelberg. Virtual Forge unterstützt SAP-Kunden bei der automatischen Risikoerkennung und Fehlerkorrektur sowie bei präventiven Maßnahmen und dauerhaften Kontrollen von Risiken in der gesamten SAP-Landschaft. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 33 - Haftungsausschluss In dieser Publikation enthaltene Informationen können ohne vorherige Ankündigung geändert werden. Die vorliegenden Angaben werden von der Virtual Forge GmbH bereitgestellt und dienen ausschließlich Informationszwecken. SAP, ABAP und weitere im Text erwähnte SAP-Produkte und –Dienstleistungen sowie die entsprechenden Logos sind Marken oder eingetragene Marken der SAP AG in Deutschland und anderen Ländern weltweit. Alle anderen Namen von Produkten und Dienstleistungen sind Marken der jeweiligen Firmen. Die Angaben im Text sind unverbindlich und dienen lediglich zu Informationszwecken. Die Virtual Forge GmbH übernimmt keinerlei Haftung oder Garantie für Fehler oder Unvollständigkeiten in dieser Publikation. Aus den in dieser Publikation enthaltenen Informationen ergibt sich keine weiterführende Haftung. Kein Teil dieser Publikation darf in irgendeiner Form oder zu irgendeinem Zweck reproduziert oder übertragen werden ohne die ausdrückliche Einwilligung der Virtual Forge GmbH. © 2014 Virtual Forge | www.virtualforge.com | Alle Rechte vorbehalten. - 34 -