APEX? Aber sicher!

Werbung
<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 <b>Welt</b>
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
Herunterladen