Andreas Wiegenstein Xu Jia (3) … (2) … (1) … (SAP_ALL) „Sicherheit und Prüfung von SAP Systemen“ – 13. und 14. September, Hamburg www.ibs-schreiber.de (3) SAP Audits und Eigenentwicklungen (2) Sicherheitsrisiken in ABAP (1) Prüfung von Eigenentwicklungen (SAP_ALL) Demos www.ibs-schreiber.de (3) SAP Audits und Eigenentwicklungen www.ibs-schreiber.de SAP Audits • Prüfungsaktivitäten beziehen sich auf den SAP Standard – Schutz von Transaktionen – Schutz von Tabellen – SoD • Prüfungen basieren auf SAP Standard – Kritische Transaktionen sind bekannt – Kritische Tabellen sind bekannt www.ibs-schreiber.de SAP Standard - Schutz nach Standard Transaktionaler Schutz : Anlegen von ABAP Programmen S_TCODE ? ABAP Workbench (SE80) S_DEVELOP ? Produktivsystem ? INSERT REPORT Erzeugt ABAP Programme www.ibs-schreiber.de SAP Audits Segeln in vertrauten Gewässern www.ibs-schreiber.de Eigenentwicklungen Aber was, wenn die Regeln nicht mehr gelten? www.ibs-schreiber.de Eigenentwicklungen in Zahlen Unternehmen haben ~ 1.65 Mio LOC Custom ABAP (netto) * Dies entspricht etwa 1% des SAP Standards (ECC 6.0) Das wären 8 Bermuda Dreiecke auf der Erde, was der doppelten Fläche des Mittelmeeres entspräche. * Virtual Forge Studie mit 45 Firmen und 100 Mio LOC (netto) Netto = Code ohne Kommentare und Leerzeilen www.ibs-schreiber.de ABAP Code im IKS Kontext IKS-Struktur im ERP-Umfeld Generellen IT Kontrollen (ITGC - IT General Controls) Änderungswesen (Change Management) ABAP Code Risiken für Geschäftsprozesse Vollständigkeit Richtigkeit Funktionstrennung Rechte Nachvollziehbarkeit Datenschutz … www.ibs-schreiber.de SAP Audits Ein Unternehmen haftet immer für eigenen Code* Relevanz • Hausinterne Entwicklung • Outsourcing • Firmenzukäufe * (Chuprunov, SAP Revision, SAP Press, 2012) www.ibs-schreiber.de Eigenentwicklungen Eigenentwicklungen können sämtliche Regeln außer Kraft setzen Risiko Transaktion ZTRANS1 Erzeugt ABAP Programme Risiko Funktionsbaustein ZFB1 INSERT REPORT Risiko Transaktion ZTRANS2 Risiko Funktionsbaustein ZFB2 Risiko REPORT ZREP Risiko Business Server Page ZBSP Risiko Web Dynpro Anwendung ZWD www.ibs-schreiber.de (2) Sicherheitsrisiken in ABAP Grafikquelle: http://de.wikipedia.org/wiki/Europa www.ibs-schreiber.de Kritische ABAP Befehle Befehl Wirkung INSERT REPORT Erstellung von ABAP Code - Keine S_DEVELOP Prüfung - Keine Prüfung auf Produktivsystem - Ermöglicht direkte Modifikation des Standards CALL 'SYSTEM' CALL 'ThWpInfo' Ausführung beliebiger Betriebssystem-Kommandos - Bypass von SM49/SM69 - Keine S_LOG_COM Prüfung CALL 'C_DB_EXECUTE' CALL 'C_DB_FUNCTION' Ausführung beliebiger nativer SQL Kommandos - Bypass von S_TABU_* Prüfungen - Bypass von Änderungsbelegen - Umgehen der Mandantentrennung - Umgehen der OSQL Einschränkungen CLIENT SPECIFIED Option Umgehen der Mandantentrennung INSERT UPDATE MODIFY DELETE Direkte Modifikation auf der Datenbank - Bypass von S_TABU_* Prüfungen - Bypass von Änderungsbelegen dbtab dbtab dbtab dbtab www.ibs-schreiber.de Sicherheitsrisiken im ABAP Was kann schief gehen? 1. Berechtigungsfehler 2. Injection Schwachstellen 3. Hintertüren und Standard-Bypasses 4. Datenlecks www.ibs-schreiber.de #1 Berechtigungsfehler IF sy-uname <> for_user. AUTHORITY-CHECK OBJECT 'S_DEVELOP' ID 'DEVCLASS' DUMMY ID 'OBJTYPE' FIELD ID 'OBJNAME' FIELD ID 'P_GROUP' DUMMY ID 'ACTVT' FIELD ELSE. AUTHORITY-CHECK OBJECT 'S_DEVELOP' ID 'DEVCLASS' DUMMY ID 'OBJTYPE' FIELD ID 'OBJNAME' DUMMY ID 'P_GROUP' DUMMY ID 'ACTVT' FIELD IF sy-subrc <> 0. cx_wd_general=>raise( text-001 ). ENDIF. ENDIF. 'DEBUG' for_user '90'. 'DEBUG' '03'. www.ibs-schreiber.de #1 Berechtigungsfehler - Statistik Es gibt im Schnitt 1 kritischen Berechtigungsfehler alle 1.400 LOC* * Virtual Forge Studie mit 45 Firmen und 100 Mio LOC (netto) Netto = Code ohne Kommentare und Leerzeilen www.ibs-schreiber.de #2 Injections DATA promotion TYPE string. DATA filename TYPE string. DATA mytext TYPE string. promotion = request->get_form_field('promo'). CONCATENATE '/sap/tmp/data/' promotion INTO filename. OPEN DATASET filename FOR INPUT IN TEXT MODE ENCODING DEFAULT. mytext = ''. WHILE sy-subrc = 0. IF mytext IS NOT INITIAL AND mytext NE ''. page->write( mytext ). ENDIF. READ DATASET filename INTO mytext. ENDWHILE. www.ibs-schreiber.de #2 Injections „Normale“ Eingabe durch Benutzer promo=flightapp/promotion/summer.txt Resultierender Dateizugriff /sap/tmp/data/flightapp/promotion/summer.txt ( Injection durch Zeichenfolge ../ ) Unerwartete Eingabe durch Benutzer promo=../../../etc/passwd Resultierender Dateizugriff /sap/tmp/data/../../../etc/passwd /sap/tmp/../../etc/passwd /sap/../etc/passwd /etc/passwd DEMO www.ibs-schreiber.de #2 Injections – Statistik Es gibt im Schnitt 1 kritische Injection Schwachstelle alle 5.800 LOC* * Virtual Forge Studie mit 45 Firmen und 100 Mio LOC (netto) Netto = Code ohne Kommentare und Leerzeilen www.ibs-schreiber.de #3A Hintertüren beim Kunden „Die drei Entwickler“ Produktive BSP Anwendung mit versteckter Seite • Für „normale“ Benutzer leer • Für drei Entwickler Hintertür, um beliebige Tabellen auszulesen DEMO www.ibs-schreiber.de #3B Hintertüren im Standard Direkte Eingabe von “OK Codes” in Transaktion RSRV 1. 2. Normaler Programmfluss: Versteckter Programmfluss: "display" "editor_call" Keine „echte“ Hintertür, aber ein schönes „Osterei“ www.ibs-schreiber.de #4 Datenlecks Fehlerhafter RFC-fähiger Funktionsbaustein • Input: PERID ppp und PERNR nnn • Output im Fehlerfall: „Die angegebene PERID und PERNR passen nicht zusammen. Der PERNR nnn ist PERID xxx zugeordnet.“ STORY www.ibs-schreiber.de (1) Prüfung von Eigenentwicklungen www.ibs-schreiber.de BIZEC APP/11 Prüfempfehlungen ID Schwachstelle Beschreibung APP-01 ABAP Command Injection Ausführung beliebigen ABAP Codes APP-02 OS Command Injection Ausführung beliebiger Betriebssystem-Kommandos APP-03 Improper Authorization Fehlende oder fehlerhafte Berechtigungsprüfung APP-04 Generic Module Execution Unerlaubte Ausführung von Modulen (Reports, FuBas, etc) APP-05 Cross-Client Database Access Mandantenübergreifender Zugriff auf Geschäftsdaten APP-06 SQL Injection Schadhafte Manipulation von Datenbankbefehlen APP-07 Unmanaged SQL Verwendung nativer Datenbankbefehle APP-08 Cross-Site Scripting Manipulation des Browser UI, Diebstahl von Berechtigungen APP-09 Cross-Site Request Forgery Ausführung von Business Logik im Namen eines anderen Benutzers. APP-10 File Upload (Malware) Speicherung schadhafter Dateien auf dem SAP Server APP-11 Directory Traversal Unerlaubter Schreib-/Lesezugriff auf Dateien (SAP Server) (Missing, Broken, Proprietary, Generic) www.ibs-schreiber.de Weitere Informationen Organisationen BIZEC – Business Security Initiative http://www.bizec.org Literatur Sichere ABAP-Programmierung (SAP PRESS, 372 S., 2009) Andreas Wiegenstein, Markus Schumacher, Sebastian Schinzel, Frederik Weidemann Handbuch SAP-Revision (SAP PRESS, 700 S., 2012) Maxim Chuprunov www.ibs-schreiber.de (SAP_ALL) Demos www.ibs-schreiber.de ABAP Command Injection Funktionale Analyse des Befehls INSERT REPORT 1. Auswirkungen auf die Authorization Trace 2. Auswirkungen auf einem Produktivsystem 3. Modifikation des SAP Standards DEMO www.ibs-schreiber.de Quiz Was ist der kürzeste Weg mittels ABAP Code SAP_ALL Berechtigung zu erhalten? www.ibs-schreiber.de Lösung 56 Zeichen UPDATE usrbf2 SET bname = sy-uname WHERE bname = '????'. 54 Zeichen UPDATE usrbf2 SET bname = 'JIAX' WHERE bname = '????'. www.ibs-schreiber.de Vielen Dank für Ihr Interesse www.ibs-schreiber.de Haben Sie noch Fragen? VIRTUALFORGE GmbH [email protected] [email protected] Speyerer Straße 6 69115 Heidelberg Deutschland Telefon: + 49 (0) 6221 86 89 0 - 0 Fax: + 49 (0) 6221 86 89 0 - 101 www.ibs-schreiber.de Disclaimer Dieser Vortrag demonstriert Sicherheitsrisiken in der Sprache ABAP. Das bestimmte Sicherheitsfehler in ABAP möglich sind, bedeutet nicht, dass solche Fehler im SAP Standard Code vorhanden sind. Virtual Forge hat allerdings sämtliche hier beschriebenen Fehler in Eigenentwicklungen bei SAP Kunden entdeckt. Virtual Forge rät ausdrücklich von Reisen in das Bermuda Dreieck ab. www.ibs-schreiber.de