jak ocalić swoje dane przed sql injection?
DESCRIPTION
Co to jest SQL injection i jak wyglądają współczesne ataki na serwisy? Dlaczego SQL injection jest takie groźne? Jak w praktyce obronić się przed tą luką w bezpieczeństwie i ocalić swoje dane?TRANSCRIPT
![Page 1: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/1.jpg)
Copyright © The OWASP Foundation
Permission is granted to copy, distribute and/or modify this document
under the terms of the OWASP License.
The OWASP Foundation
OWASP
http://www.owasp.org
Jak ocalić swoje dane przed
SQL injection?
Krzysztof Kotowicz
Web developer
http://web.eskot.pl
Medycyna Praktyczna
czerwiec 2010
![Page 2: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/2.jpg)
OWASP 2
Plan
Co to jest SQL injection?
Jak przebiegają ataki?
Jak możemy się bronić?
![Page 3: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/3.jpg)
OWASP 3
Co to jest SQL injection?
![Page 4: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/4.jpg)
OWASP 4
Błędy typu injection
Zmuś aplikację, żeby wykonywała Twój kod
dzięki sprytnemu manipulowaniu danymi
wejściowymi
![Page 5: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/5.jpg)
OWASP 5
SQL injection w aplikacjach webowych
Kod to polecenia SQL
Dane wejściowe to wszystko, co trafia do bazy:
Parametry z URL
Dane formularzy
Nagłówki HTTP
Cookies (np. ID sesji)
Logi
...
![Page 6: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/6.jpg)
OWASP 6
Czym to grozi?
Nieuprawniony dostęp do aplikacji
Dostęp do całej zawartości bazy / baz na serwerze
Denial of service
Możliwość modyfikacji danych w bazie
Przejęcie serwera baz danych
![Page 7: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/7.jpg)
OWASP 7
Jak oni to robią?
![Page 8: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/8.jpg)
OWASP 8
Dawno, dawno temu...
Wyglądało to tak:
Prosty cel dla atakujących
Łatwo wykryć, łatwo się zabezpieczyć
String query = ”SELECT * FROM accounts WHERE
custID = ” + request.getParameter(”id”)
http://example.com/accountView?id=1 or 1=1
SELECT * FROM accounts WHERE custID = 1 or 1=1
![Page 9: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/9.jpg)
OWASP 9
A teraz…
http://www.site.com/auktion/auktion.php?id_auk=
1+and+1=1+and+ascii(substring((SELECT
password FROM fh_user+WHERE+iduser=1 LIMIT
0,1),1,1))>1
http://127.0.0.1/[path]/?do=featured&action=sho
wmaincatlanding&maincatid=-99999/**/union/**/
all/**/select/**/group_concat(admin_name,char(5
8),admin_password)v3n0m/**/from/**/admin_table--
![Page 10: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/10.jpg)
OWASP 10
A teraz...
Zaawansowane techniki ataku Blind SQLi, 2nd order SQLi, zaciemniany SQLi,...
Narzędzia ułatwiające włamania
Automatyzacja
Nowe luki odkrywane codziennie
![Page 11: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/11.jpg)
OWASP 11
Przykłady z życia
Maj 2010 - Transport publiczny w Holandii –
wyciek danych 168 000 klientów
2009/2010 – TinKode włamuje się na strony
NASA, IBM, US Army, Kaspersky, Yahoo,
Apple
2009 – wyciek 32 mln loginów i haseł z
RockYou.com
W efekcie…
![Page 12: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/12.jpg)
OWASP 12
Wygrywamy!
Błędy injection na pierwszym
miejscu OWASP Top 10 2010 [owasp.org]
Drugie miejsce w CWE/Sans Top
25 Most Dangerous Programming
Errors 2010 [cwe.mitre.org]
40–60% przypadków wycieku
danych i 19% przypadków naruszenia bezpieczeństwa [7safe.com] [blogs.zdnet.com]
[computerworld.com]
![Page 13: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/13.jpg)
OWASP 13
Jak się bronić?
![Page 14: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/14.jpg)
OWASP 14
Jak tego nie robić, czyli blacklisting…
fragm. FAQ banku Sacramento Credit Union
Takie „zabezpieczenie” nic nie da!
Obejście:
DR/**/OP
I wiele innych...
![Page 15: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/15.jpg)
OWASP 15
Jak się bronić przed SQL injection?
Skąd ten błąd? Łączysz kod z danymi
Metody obrony
Oddziel kod od danych
prepared statements
procedury składowane
Escape’uj dane
Stosuj metody uzupełniające
SELECT * FROM users WHERE login = 'login'
![Page 16: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/16.jpg)
OWASP 16
Jak się bronić?
Prepared statements
![Page 17: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/17.jpg)
OWASP 17
Prepared statements – przykład
// przygotuj zapytanie $stmt = $pdo->prepare( "INSERT INTO registry (name, value) VALUES (:n, :v)"); $stmt->bindValue(':n', $_GET['n']); $stmt->bindValue(':v', $_GET['v']); // wykonaj zapytanie $stmt->execute();
![Page 18: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/18.jpg)
OWASP 18
Prepared statements - podsumowanie
Oferują całkowite zabezpieczenie
Wystarczą niewielkie zmiany w kodzie
Mają dobre wsparcie we wszystkich środowiskach
ALE
Nie wszystkie typy poleceń można parametryzować
Nie w każdym miejscu polecenia można wstawić parametr
![Page 19: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/19.jpg)
OWASP 19
Jak się bronić?
Escape'owanie danych
![Page 20: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/20.jpg)
OWASP 20
Escape'owanie – zasada działania
Dane i polecenia wciąż trzymaj w jednej
zmiennej
Zabezpiecz dane przed „przecieknięciem” do
kodu
Liczby rzutuj na (int) / (float)
Teksty otocz apostrofami, apostrof wewnątrz tekstu poprzedź odpowiednim znakiem specjalnym, np. "\"
![Page 21: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/21.jpg)
OWASP 21
Escape’owanie – przykład
// escape'uj dane $n = $pdo->quote($_GET['n'], PDO::PARAM_STR); $v = $pdo->quote($_GET['v'], PDO::PARAM_STR); // wstaw je do tresci zapytania $pdo->exec("INSERT INTO registry (name, value) VALUES ($n, $v)");
![Page 22: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/22.jpg)
OWASP 22
Problem z escape’owaniem
Escape’owanie zależy od kontekstu!
Używany RDBMS
Konfiguracja bazy
Zestaw znaków
Typ danych
Nie ma uniwersalnego sposobu!
![Page 23: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/23.jpg)
OWASP 23
Escape'owanie danych - podsumowanie
Jest proste, ale musisz znać kontekst
Łatwiej zapomnieć o pojedynczej zmiennej
Jeśli ją pominiesz – aplikacja wciąż działa!
Skłania do stosowania niebezpiecznych konstrukcji
sklejanie poleceń
ignorowanie zmiennych numerycznych
Stosuj tylko, jeśli
Programujesz pod konkretną bazę
Nie ma innej możliwości
![Page 24: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/24.jpg)
OWASP 24
Jak się bronić?
Procedury składowane
![Page 25: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/25.jpg)
OWASP 25
Procedury składowane
Polecenie SQL (lub seria poleceń) przenieś na
serwer i zapisz jako procedurę
Po stronie klienta wywołaj ją z określonymi
parametrami
Dane są formalnie oddzielone od kodu
To NIE wystarcza
![Page 26: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/26.jpg)
OWASP
CREATE PROCEDURE SP_ProductSearch(Prodname IN VARCHAR2) AS sql VARCHAR; code VARCHAR; BEGIN sql := 'SELECT ProductID, ProductName, Category, Price WHERE' + ' ProductName=''' || Prodname || ''''; EXECUTE IMMEDIATE sql INTO code; END;
26
Procedury składowane - przykład
![Page 27: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/27.jpg)
OWASP 27
Procedury składowane – problem
Dynamic SQL Dane znów „przemieszane” z kodem w jednej zmiennej
Jak się obronić?
Oddziel kod od danych
Escape'uj
Nie stosuj Dynamic SQL
![Page 28: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/28.jpg)
OWASP 28
Procedury składowane - podsumowanie
Czasochłonne przenoszenie logiki SQL z aplikacji na serwer
Nie są łatwo przenośne pomiędzy RDBMS
Źle zaimplementowane mogą zwiększyć
podatność
Zarówno wywołanie procedury, jak i jej
kod jest podatny
Procedura może mieć większe
uprawnienia niż kod ją wywołujący
![Page 29: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/29.jpg)
OWASP 29
Jak się bronić?
Metody uzupełniające
![Page 30: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/30.jpg)
OWASP 30
Walidacja i filtrowanie danych
Kontrola poprawności danych zewnętrznych
Odbywa się przed przetwarzaniem tych danych
Nie myl z escape'owaniem!
Filter INPUT - escape OUTPUT
Osobne reguły walidacji dla każdego
parametru - sprawdzaj m.in.
Typ zmiennej
Skalar / tablica
Wartości min / max
Długość danych tekstowych! [1]
![Page 31: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/31.jpg)
OWASP 31
Uzupełniające metody obrony
Komplementarne do poprzednich!
Zasada najmniejszych uprawnień
Regularne aktualizacje
Dobra konfiguracja środowiska (np. w PHP)
magic_quotes_* = false
display_errors = false
Dobrze zaprojektowana baza danych
Web Application Firewall / Intrusion Detection
System / Intrusion Prevention System
![Page 32: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/32.jpg)
OWASP 32
Podsumowanie
SQL injection to jeden z największych błędów bezpieczeństwa
Pojedyncza luka może spowodować duże szkody
Łatwo się przed nim zabezpieczyć:
Stosuj prepared statements wszędzie, gdzie
możesz
W pozostałych wypadkach - escape'uj
Uważaj na Dynamic SQL w procedurach
składowanych
Filtruj dane przychodzące
![Page 33: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/33.jpg)
OWASP 33
Open Web Application Security Project
Ogólnoświatowa, otwarta społeczność skupiona na podnoszeniu poziomu bezpieczeństwa aplikacji
130 lokalnych oddziałów (polski od maja 2007 r.)
Można zupełnie za darmo dołączyć
Organizujemy cykliczne spotkania
Tworzymy narzędzia (wykrywanie zagrożeń, edukacja,
bezpieczne tworzenie aplikacji)
Wydajemy dokumenty dot. bezpieczeństwa aplikacji
www.owasp.org
www.owasp.org/index.php/Poland
![Page 34: Jak ocalić swoje dane przed SQL injection?](https://reader033.vdocument.in/reader033/viewer/2022042606/54b6d38c4a7959703e8b45b0/html5/thumbnails/34.jpg)
OWASP 34
Linki
O SQL injection
www.owasp.org/index.php/SQL_Injection
unixwiz.net/techtips/sql-injection.html
delicious.com/koto/sql+injection
slideshare.net/kkotowicz/owasp-sql-injection
Hack me
threats.pl/bezpieczenstwo-aplikacji-internetowych
tinyurl.com/webgoat
mavensecurity.com/dojo.php
Bezpieczeństwo
owasp.org
niebezpiecznik.pl
[email protected] http://blog.kotowicz.net