<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