<Insert Picture Here>
APEX? Aber sicher!
Tipps und Tricks für eine sichere APEX-Umgebung
Carsten Czarski, ORACLE Deutschland B.V. Co. KG
Themen
Grundsätzliches zur APEX-Architektur
Security-Attribute in APEX
APEX-Instanz, Workspace, Anwendung
Sicherheit in der APEX-Anwendung ...
–
–
–
–
Grundsätzliche Dinge: Code-Organisation und mehr ...
Autorisierung: Was sollte beachtet werden?
Session State Protection, SQL Injection, XSS
Verwendung von Plugins
Das APEX-Dictionary für 'Security-Audits' nutzen
Sichere APEX Umgebungen
APEX ARCHITEKTUR
Application Express: Architektur
APEX: Beteiligte Datenbankschemas -I APEX-Engine: APEX_040200
–
–
–
Enthält APEX-Engine und Metadaten
Hochprovilegiert
Sollte stets gesperrt sein
SQL> ALTER USER APEX_040200 IDENTIFIED BY VALUES 'APEX'
2 ACCOUNT LOCK;
Connect-User: APEX_PUBLIC_USER
–
–
–
–
Physikalische DB-Verbindung als dieser User
Hält nur das CREATE SESSION Privileg
Nur für APEX Webserver verwenden
Passwort schützen!
APEX: Beteiligte Datenbankschemas -II APEX-Engine: FLOWS_FILES
–
–
Enthält hochgeladene Dateien
Sollte stets gesperrt sein
SQL> ALTER USER FLOWS_FILES IDENTIFIED BY VALUES 'APEX'
2 ACCOUNT LOCK;
Workspace Schema: SCOTT, USER01, ...
–
–
–
–
Hält die Anwendungsobjekte
Parsing Schema für Anwendungs-SQL
Hält für die Anwendung nötige Privilegien
Bei reinem APEX-Betrieb kann der Account
gesperrt werden
APEX SQL Parsing
Vorgehensweise
Physikalische Verbindung: APEX_PUBLIC_USER
Aufruf der APEX-Engine
–
Bspw. Prozedur "F" APEX_040200.WWV_FLOW.SHOW
Request wird komplett von APEX ausgeführt
–
–
–
Alle
–
–
–
Ermitteln der Anwendungs-ID aus der URL
Abrufen der Anwendungs-Metadaten
aus dem Repository
Und wie geht das ...?
Ermitteln des Parsing Schemas aus Metadaten
SYS.DBMS_SYS_SQL erlaubt das Ausführen eines
SQL mit denwerden
Privilegienausgeführt
eines anderen Users.
SQL-Kommandos
...
Physikalisch Package
verbunden
als APEX_PUBLIC_USER
ist undokumentiert
und nur für Oracle
– eigene
… am besten gar nicht.
Innerhalb derVorgesehen
Prozeduren
von Nutzung
APEX_040200
Mit den Rechten des Parsing Schemas der Anwendung
Sichere APEX Umgebungen
SICHERHEITS-ATTRIBUTE
IN APEX
Sicherheit in der APEX-Instanz
Sicherheit in der APEX-Instanz
Sicherheit in der APEX-Instanz
Enable / Disable Admin-Login
Enable / Disable Public File Upload
Restrict Connection by IP-Address
Erzwinge HTTPS-Verbindungen
Maximale Dauer einer APEX-Session einstellen
Verhalten bei fehlerhaftem Login einrichten
–
–
Automatisches Account-Locking nach X Fehlversuchen
Wartezeiten nach einem Fehlversuch
Passwort-Policies einrichten
–
–
Für APEX-Workspace
Für die APEX-Instanz Workspace INTERNAL
Sicherheit im APEX Workspace
3 Nutzerklassen
–
–
–
Administratoren
Entwickler
Endbenutzer
Workspace-Login nur mit
Workspace User möglich
Anwendungs-Login anhand
Authentifizierungsschema
–
–
LDAP, SSO, etc ...
Workspace-User nicht zu empfehlen
Sicherheit in der APEX-Anwendung
Sicherheitseinstellungen
Gemeinsame Komponenten Definition Sicherheit
–
–
–
–
–
–
Authentifizierungsschema
Deep Linking erlaubt oder nicht?
Einstellung des Parsing Schemas
Session-Timeout (Instanzwerte überschreiben)
Session State Protection (SSP)
Browser-Security (Cache, Escaping, IFrame)
Beispiel: Browser Security
Browser Cache abschalten
Einbindung in IFRAMEs verbieten
HTML Escaping auch für UTF8-Sonderzeichen
Auch Sicherheitsrelevant: Debugging
Gemeinsame Komponenten Definition
In Produktion: Abschalten!
Sichere APEX Umgebungen
TIPPS FÜR ENTWICKLER
Zunächst: Sicherheit auf allen Ebenen!
Auch APEX-Anwendungen sind mehrschichtig
1.
2.
3.
Tabellen
Views und PL/SQL-Pakete
APEX-Applikation
Keine Schicht sollte der anderen trauen!
–
–
Parameter-Prüfung auf allen Ebenen
Privilegien-Check nicht nur in APEX, sondern
auch in den PL/SQL-Paketen
Autorisierungen in APEX - Generelles
Bereich Sicherheit in Gemeinsame Komponenten
Können an jede Komponente gehängt werden
Berichte, Seiten, Prozesse und mehr ...
– Beantwortet die Frage Darf der das?
– Implementierung ist frei
Autorisierungen durchgehend einsetzen
Was ist damit gemeint?
Die Reiterkarte alleine reicht nicht ...
–
–
Man kann eine Seite auch direkt aufrufen
Alle Komponenten schützen!
Autorisierungsschemas: Der Code ...
Es ist wie überall ...
Autorisierungsschemas: Der Code ...
Der Code gehört in ein PL/SQL-Paket!
APEX Session State Protection
Schützt APEX-Urls vor Manipulationen
f?p=129:2:3630255836525375::::P2_DEPTNO:30 ' or 1=1 --
APEX Session State Protection
Schützt APEX-Urls vor Manipulationen
f?p=129:2:3630255836525375::::P2_DEPTNO:301
Prüfsumme in URL erforderlich
–
–
APEX-Komponenten generieren diese automatisch
Links in APEX-Berichten
Erzeugung mit APEX_UTIL.PREPARE_URL
APEX Session State Protection
SSP hat Grenzen!
–
–
Schutz nur vor manipulierten URLs
Kein Schutz beim Page Submit
Eine Browser-UI ist nicht kontrollierbar!
–
–
–
–
Inhalte von Pulldown-Listen können manipuliert werden
Java-Script-Checks können umgangen werden
Früher mit Browser-Plugins machbar (Firebug)
Heute Standardfunktion aller Browser
SSP alleine ist kein Schutz!
Alle APEX-Items müssen immer geprüft werden!
SQL Injection 'Awareness' immer noch nötig
SQL Injection und APEX
APEX-Elemente: Auf die Syntax kommt es an!
–
–
Substitution-Syntax (&PX_ITEM.)
Die Ersetzung findet vor dem SQL-Parsing statt
Bindevariablen-Syntax (:PX_ITEM)
Die Ersetzung findet nach dem SQL-Parsing statt
Der Zeitpunkt ist wichtig
–
Vor dem SQL-Parsing:
Inhalt wird als SQL interpretiert: SQL Injection-Gefahr!
–
Nach dem SQL-Parsing
Inhalt wird als Literal ausgefasst: Keine SQL Injection-Gefahr
SQL Injection: Ein weiteres Beispiel
Ersetzung findet vor dem SQL Parsing statt
Cross Site Scripting ...
Fremder JavaScript-Code wird im Kontext der
APEX-Anwendung ausgeführt ...
Und wie soll das gehen ...?
Cross Site Scripting ...
Fremder JavaScript-Code wird im Kontext der
APEX-Anwendung ausgeführt ...
Und wie soll das gehen ...?
Cross Site Scripting ...
Fremder JavaScript-Code wird im Kontext der
APEX-Anwendung ausgeführt ...
Und wie soll das gehen ...?
XSS: Schutz ...
Im Prinzip einfach:
–
–
Alle Inhalte vor Verwendung prüfen
HTML-Sonderzeichen maskieren
APEX-Komponenten richtig einstellen
XSS-Gefahr!
XSS: Schutz ...
Im Prinzip einfach:
–
–
Alle Inhalte vor Verwendung prüfen
HTML-Sonderzeichen maskieren
APEX-Komponenten richtig einstellen
Sicher!
XSS: Schutz im PL/SQL Code
PL/SQL Funktionen und Packages
–
–
Funktion HTF.ESCAPE_SC
Package APEX_ESCAPE (ab APEX 4.2)
Jede Eingabe "behandeln" ...
SQL> select htf.escape_sc('Hallo <b>Welt</b>') from dual;
HTF.ESCAPE_SC('HALLO<B>WELT</B>')
----------------------------------------------------------Hallo &lt;b&gt;Welt&lt;/b&gt;
1 Zeile wurde ausgewählt.
APEX Plugins
Plugins erweitern die Möglichkeiten von APEX
–
–
–
–
–
–
Neue Typen für Formularelemente
Neue Regionstypem
Dynamic Action Plugins für AJAX-Funktionen
Process Type Plugins
Authorziation Plugins
Authentication Plugins
Einige Plugins von Oracle
Community-Plugins von apex-plugin.com
Community-Plugins
Plugins ... ist das sicher ...?
Plugins werden Teil der Anwendung
–
–
SQL-Ausführung mit Rechten des Parsing Schemas
Für den Browser ist das Plugin "die Anwendung"
Community-Plugins kommen 'as is'
–
Kein Vertrag - keine Gewährleistung
Wer ein Plugin einsetzt, sollte es verstehen!
–
–
Code Review durchführen
"Plugin-Whitelist" im Unternehmen einführen
Sichere APEX-Umgebungen
DAS APEX-DICTIONARY NUTZEN
Das APEX Dictionary nutzen
Welche Berichte sind anfällig für XSS ..?
Welche Anwendungen verwalten ihre
Passwörter selbst ...?
Welche Anwendungen nutzen nicht
freigegebene Plugins ...?
Welche Anwendungen sind anfällig für SQL
Injection ...?
Welche Anwendungen verwenden Session
State Protection nicht ...?
Das APEX Dictionary nutzen
Welche Berichte sind anfällig für XSS ..?
SQL>
2
3
4
select application_id, page_id, region_name
from apex_application_page_rpt_cols
where display_as = 'Standard Report Column'
order by 1,2;
APPLICATION_ID
PAGE_ID REGION_NAME
-------------- ---------- ----------------------------------100
7 Orders for this Customer
100
20 Product Image
100
29 Items for Order #&P29_ORDER_ID.
100
29 Items for Order #&P29_ORDER_ID.
110
1 My Most Recently Edited Meetings
110
5 Most Recently Edited Meetings
110
70 Decisions
110
70 Notes
110
70 Notes
Das APEX Dictionary nutzen
Welche Anwendungen verwalten ihre
Passwörter selbst ...?
SQL> select application_id, AUTHENTICATION_SCHEME_TYPE
2 from apex_applications
APPLICATION_ID
-------------149
140
185
178
195
191
9000
1801
AUTHENTICATION_SCHEME_TYPE
---------------------------------------Oracle Application Server Single Sign-On
Oracle Application Server Single Sign-On
No Authentication (using DAD)
Oracle Application Server Single Sign-On
No Authentication (using DAD)
Application Express Accounts
Oracle Application Server Single Sign-On
No Authentication (using DAD)
8 Zeilen ausgewählt.
Das APEX Dictionary nutzen
Wo werden welche Plugins genutzt ...?
SQL> select application_id, name from apex_appl_plugins;
APPLICATION_ID
-------------100
101
99999
110
106
112
112
112
112
NAME
--------------------------------------------COM.ORACLE.APEX.MASKED_FIELD
COM.ORACLE.APEX.TIMER
COM.ORACLE.APEX.TIMER
COM.ORACLE.APEX.SIMPLE_CHECKBOX
COM.ORACLE.DE.CCZARSKI.DYNAMICQUICKPICKS
COM.ORACLE.APEX.TAG_CLOUD
COM.ORACLE.APEX.CSS_BAR_CHART
COM.ORACLE.APEX.TAGS
COM.ORACLE.APEX.SIMPLE_CHECKBOX
Weitere Informationen: APEX Community
[email protected]
http://tinyurl.com/apexcommunity
http://sql-plsql-de.blogspot.com
http://oracle-text-de.blogspot.com
http://oracle-spatial.blogspot.com
http://plsqlexecoscomm.sourceforge.net
http://plsqlmailclient.sourceforge.net
Twitter: @cczarski @oraclebudb