1 Bratislava Bezpečnosť v databáze Oracle Aleš Novák Technology Sales Consultant2 The following is intended to outline our general product direction...
Bezpečnosť v databáze Oracle Aleš Novák Technology Sales Consultant
Bratislava
The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
Agenda • Oracle a bezpečnost • SQL Injection • Audit
Komplexní bezpečnost • • • •
User Provisioning & správa rolí Identity and Access Governance Správa přístupů Adresářové služby
Databázová bezpečnost
• • • • •
Šifrování a maskování Kontrola privilegovaných uživatelů Více faktorová autentizace Audit, monitorování aktivit Zabezpečení konfigurací
Bezpečná infrastruktura
• • • •
CPU, ASICs Operační systémy Virtualizace a hypervisory Ukládání dat, sítě
Identity Management
Oracle Database hloubková obrana Šifrování a maskování • Advanced Security • Secure Backup • Data Masking
Správa přístupů • Database Vault • Label Security
Monitorování Šifrování a maskování Správa přístupů
• Database Firewall • Configuration Management
Monitorování
• Audit Vault
Správa uživatelů a rolí
• Total Recall
5
Bezpečnost databázových aplikací • Zabránit neautorizovanému přístup • Znát identitu koncového uživatele • Zajistit prokazatelnost operací
• ...v prostředí vícevrstvých aplikací
Střední vrstva
Oracle DB
SQL Injection • Útok na aplikaci kdy uživatelem vložená data jsou databází interpretována jako SQL příkaz či jeho část. • Útočník může spuštěním neočekávaného dotazu získat neoprávněný přístup k datům nebo je pozměnit. • Konkrétní techniky se různí, základní problém zůstává: • Externí vstup (od uživatelů) je bez korektní validace zapojen do textu SQL příkazu a databází proveden • Dynamické dotazy (SQL jako text)
• Libovolné vývojové prostředí i databáze
SQL Injection – základní příklad • User interface A' AND 2=1 UNION select ...
• Aplikace
sql="SELECT email FROM employees WHERE last_name='" + vstup + "'"; stmt.execute(sql); • Dotaz v databázi SELECT first_name,last_name,salary email FROM employees WHERE last_name=′XXXX′ last_name='A' ANDor 2=1 1=1 UNION –-′ select and dept=7 last_name=′Krch′ and dept=7 to_char(salary) as email from …
!
Obrana před SQL Injection • Nespojovat vstup uživatelů do textu SQL • Používat vázané proměnné • Používat statické SQL v PL/SQL
• Kontrola a filtrování vstupů (je-li nutné sestavovat SQL dynamicky) • Preventivní omezení dopadu případného útoku • Minimalizovat přidělená práva pro spojení • Mechanismy detailního řízení přístupu v databázi
safeStmt=conn.prepareStatement(sql); safeStmt.setString(1,jmeno); safeStmt.execute(); • Výhody: • Bezpečnost – nehrozí SQL Injection • Výkon – nemění se text SQL – použije se nacachovaný exekuční plán
10
Použití vázaných proměnných • Příklad QBE - uživatel hledá záznamy podle hodnot, které zadal do 1-3 políček v aplikaci: • FIRST_NAME • LAST_NAME • CITY
nevyplnil Krch Praha
• Řešení 1 • Dynamicky sestavit a spustit celý dotaz: SELECT * FROM employees WHERE last_name = 'Krch' and city = 'Praha'
• Řešení 2 • Dynamicky sestavit dotaz s vázanými proměnnými: SELECT * FROM employees WHERE last_name = :1 and city = :2 • Spustím dotaz a nastavím hodnoty vázaných proměnných: :1 = Krch :2 = Praha • Nehrozí SQL Injection
Když nelze použít vázané proměnné... • Kontrola a ošetření vstupů • Omezení vstupu na povolené hodnoty • Existující objekt, validní SQL jméno • Kontrola uvozovek/apostrofů
• Pozor na Oracle identifikátory: • Objekt x ″Objekt″ • ″delete from scott.emp;″ může být validní název tabulky • V data dictionary uvozovky nejsou • Podle způsobu použití a způsobu ověření je třeba rozhodnout • Konvertovat písmena na velká? • Doplnit/zrušit uvozovky? • Zrušit úvodní/závěrečné mezery?
DBMS_ASSERT • První pomoc při kontrole vstupních dat • Vrací původní/upravený text nebo Exception • ENQUOTE_LITERAL - Obsahuje parametr literál? • Zkontroluje, že jsou zdvojené vnitřní apostrofy, ev. Doplní apostrof na začátek a konec. • abc =>'abc' 'abc'=>'abc' ab''c=>'ab''c' ab'c => Exception
• ENQUOTE_NAME – Obsahuje parametr validní uvozovky? • Zkontroluje, že jsou zdvojené vnitřní uvozovky, ev. doplní uvozovky na začátek a konec. • abc =>"abc" "abc"=>"abc" ab""c=> "ab""c" ab"c => Exception
•sql_stmt SCHEMA_NAME :=
• Jde o existující schéma? SET salary = salary + :1 WHERE ' 'UPDATE employees
Oracle Database Firewall První linie obrany Povolit Zaznamenat Upozornit Nahradit
Applications
Zablokovat
Upozornění
• • • • • •
Hotové výkazy
Výkazy na míru
Politiky
Monitoruje aktivitu uživatelů Zabraňuje neautorizovanému přístupu, SQL injections, eskalaci práv či rolí Rychlá obrana před novými typy útoků Flexibilní úroveň vynucování pravidel v SQL na základě whitelistů a blacklistů Škálovatelná architektura zajišťuje výsoký výkon ve všech režimech nasazení Zabudované i vlastní výkazy pro SOX, PCI a další
Prevence • Nevěřte databázovému klientu! • Kontrolní body na všech vrstvách • Minimalizujte práva aktivního spojení • • • •
Použijte jiné schéma pro objekty a jiné pro přístup Nepřidělujte zbytečně silná práva a role Řiďte aktivaci rolí pro spojení – Secure Application Role Řiďte detailně přístup k datům přímo v databázi
Střední vrstva
Oracle DB 15
Zná vaše databáze koncového uživatele?
Identifikace ve třívrstvých aplikacích
Connection Pool Účet aplikace “A” Účet aplikace “A” Účet aplikace “A”
1. Uživatelé se přihlašují ke střední vrstvě
2. Střední vrstva se připojuje (anonymně) k účtu aplikace
3. Databáze nezná skutečného uživatele – nemůže řídit přístup, auditovat,...
17
Udržení identity Client Identification, Proxy Authentication Podporované při připojení přes: • OCI • JDBC • ODP.NET
Connection Pool Modrý uživatel Červený uživatel Žlutý uživatel
Závěr • Bezpečnost musí být integritní součástí návrhu a vývoje aplikace • SQL Injection • Vyhněte se mu pomocí statických dotazů a vázaných proměnných • Vstup uživatelů vkládaný do textu SQL je třeba kontrolovat • Útok nemusí být přímý
• Zná-li databáze vaše koncové uživatele, může • Zajistit audit operací • Řídit přístup