SlideShare a Scribd company logo
1 of 34
Download to read offline
Jak ocalić swoje dane przed
                SQL injection?



                         Krzysztof Kotowicz
                         Web developer

                         http://web.eskot.pl
OWASP                    Medycyna Praktyczna
                         krzysztof@kotowicz.net
czerwiec 2010

                    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
                    http://www.owasp.org
Plan


Co to jest SQL injection?
Jak przebiegają ataki?
Jak możemy się bronić?



                        OWASP   2
Co to jest SQL injection?




                            OWASP   3
Błędy typu injection


   Zmuś aplikację, żeby
  wykonywała Twój kod
    dzięki sprytnemu
  manipulowaniu danymi
      wejściowymi
                       OWASP   4
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
       ...
                                   OWASP   5
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

                               OWASP   6
Jak oni to robią?




                    OWASP   7
Dawno, dawno temu...

 Wyglądało to tak:
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


 Prosty cel dla atakujących
 Łatwo wykryć, łatwo się zabezpieczyć
                                             OWASP   8
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_tab
le--


                                        OWASP     9
A teraz...

 Zaawansowane techniki ataku
  Blind SQLi, 2nd order SQLi,
  zaciemniany SQLi,...
 Narzędzia ułatwiające włamania
 Automatyzacja
 Nowe luki odkrywane codziennie


                             OWASP   10
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…

                                      OWASP     11
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]

                                   OWASP   12
Jak się bronić?




                  OWASP   13
Jak tego nie robić, czyli blacklisting…




          fragm. FAQ banku Sacramento Credit Union

 Takie „zabezpieczenie” nic nie da!
 Obejście:
      DR/**/OP
      I wiele innych...
                                          OWASP      14
Jak się bronić przed SQL injection?

 Skąd ten błąd? Łączysz kod z danymi

 SELECT * FROM users WHERE login = 'login'

 Metody obrony
     Oddziel kod od danych
        prepared statements
        procedury składowane
     Escape’uj dane
     Stosuj metody uzupełniające
                                        OWASP   15
Jak się bronić?
Prepared statements




                      OWASP   16
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();




                                       OWASP   17
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
                                 OWASP   18
Jak się bronić?
Escape'owanie danych




                       OWASP   19
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. ""


                                       OWASP    20
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)");




                                     OWASP      21
Problem z escape’owaniem

Escape’owanie zależy od kontekstu!
 Używany RDBMS
 Konfiguracja bazy
 Zestaw znaków
 Typ danych

Nie ma uniwersalnego sposobu!


                                     OWASP   22
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

                                               OWASP    23
Jak się bronić?
Procedury składowane




                       OWASP   24
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




                                         OWASP    25
Procedury składowane - przykład

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;

                                      OWASP   26
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

                                 OWASP   27
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


                                      OWASP    28
Jak się bronić?
Metody uzupełniające




                       OWASP   29
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]
                                      OWASP     30
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

                                         OWASP     31
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


                                             OWASP   32
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
                                             OWASP       33
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


    krzysztof@kotowicz.net       http://blog.kotowicz.net
                                                             OWASP   34

More Related Content

Similar to Jak ocalić swoje dane przed SQL injection?

Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...PROIDEA
 
Jak tworzyć bezpieczne aplikacje?
Jak tworzyć bezpieczne aplikacje?Jak tworzyć bezpieczne aplikacje?
Jak tworzyć bezpieczne aplikacje?SecuRing
 
OWASP Appsensor in action
OWASP Appsensor in actionOWASP Appsensor in action
OWASP Appsensor in actionLeszekMis
 
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...Logicaltrust pl
 
Wybrane podatności aplikacji webowych - Michał Sajdak
Wybrane podatności aplikacji webowych - Michał SajdakWybrane podatności aplikacji webowych - Michał Sajdak
Wybrane podatności aplikacji webowych - Michał SajdakBartłomiej Cymanowski
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbaćBartosz Ratajczyk
 
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScript
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScriptTworzenie, zaciemnianie i analiza złośliwego kodu JavaScript
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScriptKrzysztof Kotowicz
 
4Developers 2015: Wybrane podatności w aplikacjach webowych - Michał Sajdak
4Developers 2015: Wybrane podatności w aplikacjach webowych - Michał Sajdak4Developers 2015: Wybrane podatności w aplikacjach webowych - Michał Sajdak
4Developers 2015: Wybrane podatności w aplikacjach webowych - Michał SajdakPROIDEA
 
Owasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PLOwasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PLThink Secure
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyqbeuek
 
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITSCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITRedge Technologies
 
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...SecuRing
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz
 
PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać
PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać
PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać PROIDEA
 
10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowaniaSecuRing
 
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech DworakowskiPROIDEA
 
Application security verification standard
Application security verification standardApplication security verification standard
Application security verification standardSecuRing
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaLeszek Mi?
 
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel MikolajczykSecurity B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel MikolajczykGawel Mikolajczyk
 

Similar to Jak ocalić swoje dane przed SQL injection? (20)

Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...
 
Jak tworzyć bezpieczne aplikacje?
Jak tworzyć bezpieczne aplikacje?Jak tworzyć bezpieczne aplikacje?
Jak tworzyć bezpieczne aplikacje?
 
OWASP Appsensor in action
OWASP Appsensor in actionOWASP Appsensor in action
OWASP Appsensor in action
 
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
Urządzenia i usługi bezpieczeństwa IT - pełna ochrona czy... zaproszenie dla ...
 
Wybrane podatności aplikacji webowych - Michał Sajdak
Wybrane podatności aplikacji webowych - Michał SajdakWybrane podatności aplikacji webowych - Michał Sajdak
Wybrane podatności aplikacji webowych - Michał Sajdak
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
 
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScript
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScriptTworzenie, zaciemnianie i analiza złośliwego kodu JavaScript
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScript
 
4Developers 2015: Wybrane podatności w aplikacjach webowych - Michał Sajdak
4Developers 2015: Wybrane podatności w aplikacjach webowych - Michał Sajdak4Developers 2015: Wybrane podatności w aplikacjach webowych - Michał Sajdak
4Developers 2015: Wybrane podatności w aplikacjach webowych - Michał Sajdak
 
HTML5: Atak i obrona
HTML5: Atak i obronaHTML5: Atak i obrona
HTML5: Atak i obrona
 
Owasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PLOwasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PL
 
Jak stworzyć udany system informatyczny
Jak stworzyć udany system informatycznyJak stworzyć udany system informatyczny
Jak stworzyć udany system informatyczny
 
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa ITSCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
SCAP – standaryzacja formatów wymiany danych w zakresie bezpieczeństwa IT
 
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
Czy twoje zabezpieczenia są skuteczne? Błędy i podatności w rozwiązaniach zab...
 
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
Tomasz Kopacz MTS 2012 Wind RT w Windows 8 i tzw aplikacje lob (line of busin...
 
PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać
PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać
PLNOG 8: Tomasz Sawiak - Log management i analizy > to czego nie widać
 
10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania
 
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
 
Application security verification standard
Application security verification standardApplication security verification standard
Application security verification standard
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
 
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel MikolajczykSecurity B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
Security B-Sides Warsaw 2014 - Network Security Treasures - Gawel Mikolajczyk
 

More from Krzysztof Kotowicz

Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)
Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)
Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)Krzysztof Kotowicz
 
Trusted Types and the end of DOM XSS
Trusted Types and the end of DOM XSSTrusted Types and the end of DOM XSS
Trusted Types and the end of DOM XSSKrzysztof Kotowicz
 
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.Biting into the forbidden fruit. Lessons from trusting Javascript crypto.
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.Krzysztof Kotowicz
 
Hacking HTML5 offensive course (Zeronights edition)
Hacking HTML5 offensive course (Zeronights edition)Hacking HTML5 offensive course (Zeronights edition)
Hacking HTML5 offensive course (Zeronights edition)Krzysztof Kotowicz
 
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome Extensions
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome ExtensionsI'm in ur browser, pwning your stuff - Attacking (with) Google Chrome Extensions
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome ExtensionsKrzysztof Kotowicz
 
I'm in your browser, pwning your stuff
I'm in your browser, pwning your stuffI'm in your browser, pwning your stuff
I'm in your browser, pwning your stuffKrzysztof Kotowicz
 
Advanced Chrome extension exploitation
Advanced Chrome extension exploitationAdvanced Chrome extension exploitation
Advanced Chrome extension exploitationKrzysztof Kotowicz
 
Html5: Something wicked this way comes (Hack in Paris)
Html5: Something wicked this way comes (Hack in Paris)Html5: Something wicked this way comes (Hack in Paris)
Html5: Something wicked this way comes (Hack in Paris)Krzysztof Kotowicz
 
Something wicked this way comes - CONFidence
Something wicked this way comes - CONFidenceSomething wicked this way comes - CONFidence
Something wicked this way comes - CONFidenceKrzysztof Kotowicz
 
Html5: something wicked this way comes - HackPra
Html5: something wicked this way comes - HackPraHtml5: something wicked this way comes - HackPra
Html5: something wicked this way comes - HackPraKrzysztof Kotowicz
 
Html5: something wicked this way comes
Html5: something wicked this way comesHtml5: something wicked this way comes
Html5: something wicked this way comesKrzysztof Kotowicz
 
Creating, obfuscating and analyzing malware JavaScript
Creating, obfuscating and analyzing malware JavaScriptCreating, obfuscating and analyzing malware JavaScript
Creating, obfuscating and analyzing malware JavaScriptKrzysztof Kotowicz
 
SQL Injection: complete walkthrough (not only) for PHP developers
SQL Injection: complete walkthrough (not only) for PHP developersSQL Injection: complete walkthrough (not only) for PHP developers
SQL Injection: complete walkthrough (not only) for PHP developersKrzysztof Kotowicz
 

More from Krzysztof Kotowicz (14)

Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)
Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)
Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)
 
Trusted Types @ W3C TPAC 2018
Trusted Types @ W3C TPAC 2018Trusted Types @ W3C TPAC 2018
Trusted Types @ W3C TPAC 2018
 
Trusted Types and the end of DOM XSS
Trusted Types and the end of DOM XSSTrusted Types and the end of DOM XSS
Trusted Types and the end of DOM XSS
 
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.Biting into the forbidden fruit. Lessons from trusting Javascript crypto.
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.
 
Hacking HTML5 offensive course (Zeronights edition)
Hacking HTML5 offensive course (Zeronights edition)Hacking HTML5 offensive course (Zeronights edition)
Hacking HTML5 offensive course (Zeronights edition)
 
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome Extensions
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome ExtensionsI'm in ur browser, pwning your stuff - Attacking (with) Google Chrome Extensions
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome Extensions
 
I'm in your browser, pwning your stuff
I'm in your browser, pwning your stuffI'm in your browser, pwning your stuff
I'm in your browser, pwning your stuff
 
Advanced Chrome extension exploitation
Advanced Chrome extension exploitationAdvanced Chrome extension exploitation
Advanced Chrome extension exploitation
 
Html5: Something wicked this way comes (Hack in Paris)
Html5: Something wicked this way comes (Hack in Paris)Html5: Something wicked this way comes (Hack in Paris)
Html5: Something wicked this way comes (Hack in Paris)
 
Something wicked this way comes - CONFidence
Something wicked this way comes - CONFidenceSomething wicked this way comes - CONFidence
Something wicked this way comes - CONFidence
 
Html5: something wicked this way comes - HackPra
Html5: something wicked this way comes - HackPraHtml5: something wicked this way comes - HackPra
Html5: something wicked this way comes - HackPra
 
Html5: something wicked this way comes
Html5: something wicked this way comesHtml5: something wicked this way comes
Html5: something wicked this way comes
 
Creating, obfuscating and analyzing malware JavaScript
Creating, obfuscating and analyzing malware JavaScriptCreating, obfuscating and analyzing malware JavaScript
Creating, obfuscating and analyzing malware JavaScript
 
SQL Injection: complete walkthrough (not only) for PHP developers
SQL Injection: complete walkthrough (not only) for PHP developersSQL Injection: complete walkthrough (not only) for PHP developers
SQL Injection: complete walkthrough (not only) for PHP developers
 

Jak ocalić swoje dane przed SQL injection?

  • 1. Jak ocalić swoje dane przed SQL injection? Krzysztof Kotowicz Web developer http://web.eskot.pl OWASP Medycyna Praktyczna krzysztof@kotowicz.net czerwiec 2010 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 http://www.owasp.org
  • 2. Plan Co to jest SQL injection? Jak przebiegają ataki? Jak możemy się bronić? OWASP 2
  • 3. Co to jest SQL injection? OWASP 3
  • 4. Błędy typu injection Zmuś aplikację, żeby wykonywała Twój kod dzięki sprytnemu manipulowaniu danymi wejściowymi OWASP 4
  • 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  ... OWASP 5
  • 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 OWASP 6
  • 7. Jak oni to robią? OWASP 7
  • 8. Dawno, dawno temu...  Wyglądało to tak: 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  Prosty cel dla atakujących  Łatwo wykryć, łatwo się zabezpieczyć OWASP 8
  • 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_tab le-- OWASP 9
  • 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 OWASP 10
  • 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… OWASP 11
  • 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] OWASP 12
  • 13. Jak się bronić? OWASP 13
  • 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... OWASP 14
  • 15. Jak się bronić przed SQL injection?  Skąd ten błąd? Łączysz kod z danymi SELECT * FROM users WHERE login = 'login'  Metody obrony  Oddziel kod od danych  prepared statements  procedury składowane  Escape’uj dane  Stosuj metody uzupełniające OWASP 15
  • 16. Jak się bronić? Prepared statements OWASP 16
  • 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(); OWASP 17
  • 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 OWASP 18
  • 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. "" OWASP 20
  • 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)"); OWASP 21
  • 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! OWASP 22
  • 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 OWASP 23
  • 24. Jak się bronić? Procedury składowane OWASP 24
  • 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 OWASP 25
  • 26. Procedury składowane - przykład 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; OWASP 26
  • 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 OWASP 27
  • 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 OWASP 28
  • 29. Jak się bronić? Metody uzupełniające OWASP 29
  • 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] OWASP 30
  • 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 OWASP 31
  • 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 OWASP 32
  • 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 OWASP 33
  • 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  krzysztof@kotowicz.net http://blog.kotowicz.net OWASP 34