ÜBER MICH
� 1998-2005 Studium Informatik
� Oracle seit 2001
� APEX (HTMLDB) seit 2004
� Blog: apex2rule-the-world.blogspot.com
� Twitter: @anjeli2001
WARUM SIND SO VIELE ANWENDUNGEN UNSICHER?
� ist ja nur intern
� das kriegen die User eh nicht raus
� geht ja nur um unwichtige Daten
� nicht genug Zeit
� ist nur eine kleine Anwendung
� ist nicht meine Aufgabe
REZEPT FÜR DIE KATASTROPHE
Anwendung soll möglichst schnell in Produktion gehen
+
Wir haben zu wenig Zeit
Die Anwendung hat mit hoher Wahrscheinlichkeit Sicherheitslücken, die wir einfach fixen könnten, wenn wir
sie finden würden und die Zeit dazu bekämen.
DIE ANDERE SEITE� Angriffe passieren nicht nur von
außen� Angegriffen werden nicht nur
Seiten, die auf den ersten Blick die „fette Beute“ versprechen
� Social Engineering nicht unterschätzen
DIE TOOLS – BEISPIEL: KALI LINUX
� auf Debian basierende Linux-Distribution, die auf Sicherheits- und Penetrationstests spezialisiert ist
� frei verfügbar
� enthält mehr als 600 Tools
XSS - CROSS SITE SCRIPTING
� bezeichnet das unauthorisierte Ausführen von Code in einer Webanwendung− Referenz oder Code selbst wird in die Datenbank geschrieben
− Werden bei der Anzeige Sonderzeichen nicht escaped, wird somit der Code ausgeführt, statt nur angezeigt
� APEX Beispiel:− zusätzlich zum Departmentnamen soll in der selben Zelle, aber in 2. Zeile die Anzahl der zur Abteilung gehörenden Mitarbeiter
angezeigt werden
�Einfache Lösung: <br/>, aber der Code wird angezeigt, statt ausgeführt
�Attribut „Escape Special Characters“ auf no gesetzt und schon klappt es
�Done!!! ☺
XSS VERHINDERN
� niemals Escaping auf Reportspalten ausschalten− falls es doch nötig ist, genau überprüfen, woher die Daten kommen und ggf. APEX_ESCAPE nutzen
� immer APEX_ESCAPE nutzen when HTML via htp.p oder htp.prn ausgegeben wird
� Achtung bei Application Items, die als HTML ausgegeben werden − werden nicht per default escaped
ANGREIFBARE ANWENDUNG
� es genügt EINE SQL Injection Schwachstelle, um das Tor zum DB System für einen Angriff weit zu öffnen
� Beispiel:
select dname, deptno
from dept
where dname like '%&P1_MATCH.%‘
� Benutzung der &ITEM. Syntax ermöglicht das ändern des SQL Statements
select dname, deptno
from dept
where dname like '% ' union all select ename, sal from emp where ename like ' %'
SQL MAP MACHT‘S MÖGLICH
“open source penetration testing tool that automates the process of detecting andexploiting SQL injection flaws and taking over of database servers”
• Command Line Tool, das auf Angreifbarkeit durch SQL Injection prüft und diese ausnutzt
• unterstützt die meisten bekannten Datenbanken� MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase, SAP MaxDB, HSQLDB
& Informix
VORRAUSSETZUNGEN
https://apex.oracle.com/pls/apex/wwv_flow.show?p_flow_id=76668&p_flow_step_id=1&p_instance=&p_arg_name=P1_MATCH&p_arg_value=ACC
wwv_flow.show
AUFRUF VON SQLMAP
sqlmap
-u "https://apex.oracle.com/pls/apex/wwv_flow.show?p_flow_id=76668
&p_flow_step_id=1
&p_instance=0
&p_arg_name=P1_MATCH
&p_arg_value=ACC"
--batch
--dbms Oracle
-p p_arg_value
--flush-session
WEITERE AUFRUFE
sqlmap -u "<url>" -b --current-user
sqlmap -u "<url>" -b --schema --stop=25
sqlmap -u "<url>" -D doag2018 --stop=25 --sql-query="select username from all_users“
sqlmap -u "<url>" -D doag2018 -T demo_customers --dump
sqlmap -u "<url>" -b --tables --stop=10
sqlmap -h
sqlmap -hh
Bei Seiten mit Authentifizierung…
--cookie "<name> = <value>"
SQL INJECTION VERHINDERN
� möglichst überall &ITEM. Syntax vermeiden
� Vorsicht bei der Verwendung von EXECUTE IMMEDIATE und DBMS_SQL− wenn Parameter vom User beeinflusst werden können, dann immer die Eingaben prüfen
� nur Tabellen und Spalten freigeben, die für die Anwendung nötig sind
� unnötige Berechtigungen entfernen, um DDL zu vermeiden
� SQL Injection umgeht die meisten APEX basierten Sicherheitsmechanismen
� Logs überprüfen− SQLMAP hat spezifischen User Agent: sqlmap/1.2.3.4#dev (http://sqlmap.org)
APEX-SERT
� ehemals eSert (kommerziell)
� Evaluierungstool
� APEX Anwendung zur Evaluierung und Identifizierung potentieller Sicherheitsprobleme in anderen APEX Anwendungen
� verfügbar für 4.2, 5.0 und 5.1
� einmal installiert, kann es von allen Workspaces genutzt werden
� Open Source
WIE FUNKTIONIERTS?
� untersucht Metadaten der Anwendung nach möglichen Sicherheitslücken
� Ergebnis ist eine interaktive APEX Anwendung, die es auf einfache Weise möglich macht, Probleme zu finden und zu beheben
� zeigt deutlich auf, welche Bereiche problematisch sind und bietet direkten Link zur entsprechenden Einstellung
WELCHE PROBLEME WERDEN GESUCHT?URL
Tampering
ApplicationSettings
Page Settings
Cross Site Scripting
SQL Injection
KOMPLETTER SCAN
� ALLE Komponenten werden untersucht� unabhängig von Condition und Authorization
� kann mit einer Liste von gültigen Werten und Regeln vorkonfiguriert werden
„Security ist kein Produkt,
sondern ein Prozess.“
FORTLAUFENDE EVALUIERUNG
� Ergänzung von Ausnahmeregeln für die Erkennung von „false positives“ und akzeptierbaren Risiken� alle definierte Ausnahmen müssen bestätigt werden
� werden Ausnahmen geloggt, werden auch die Werte der entsprechenden Attribute geloggt� ändert sich ein Wert, muss die Ausnahme neu bestätigt werden
ZUSAMMENFASSUNG
� SQL Injection & XSS sind in fast jeder Sprache möglich
� meistens werden Risiken (unabsichtlich) durch Entwickler verursacht
� wenn richtig verwendet, ist APEX eine der sichersten Entwicklungsplattformen
� Verwendung von Evaluierungstools wie etwa APEX-SERT und Einhaltung von Security Best Practices sichert weitreichende Minimierung von Risiken
ZUSAMMENFASSUNG
Mit APEX-SERT …
… hat man keine Ausrede mehr, die Sicherheitsprobleme nicht anzugehen.
� kann in wenigen Minuten installiert werden
� vollständig integriert in APEX Builder
� einfach zu verstehen und anzuwenden
� Evaluierung kann automatisiert werden
� keine Lizenzkosten
LINKS
�https://github.com/OraOpenSource/apex-sert
�http://oraopensource.com/apex-sert
�https://www.offensive-security.com/kali-linux-vm-vmware-virtualbox-hyperv-image-download/
�https://www.python.org/downloads/
�http://sqlmap.org/
�https://github.com/sqlmapproject/sqlmap