SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
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

Contenu connexe

Similaire à “Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot Tech #1

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
 

Similaire à “Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot Tech #1 (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
 

Plus de krakspot

KrakSpot - podsumowanie, Marcin Jaśkiewicz
KrakSpot - podsumowanie, Marcin JaśkiewiczKrakSpot - podsumowanie, Marcin Jaśkiewicz
KrakSpot - podsumowanie, Marcin Jaśkiewiczkrakspot
 
„Need for speed, czyli jak wycisnąć siódme poty z bazy PostgreSQL” - Wojciech...
„Need for speed, czyli jak wycisnąć siódme poty z bazy PostgreSQL” - Wojciech...„Need for speed, czyli jak wycisnąć siódme poty z bazy PostgreSQL” - Wojciech...
„Need for speed, czyli jak wycisnąć siódme poty z bazy PostgreSQL” - Wojciech...krakspot
 
„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...
„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...
„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...krakspot
 
"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6
"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6
"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6krakspot
 
"Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da...
"Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da..."Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da...
"Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da...krakspot
 
"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6
"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6
"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6krakspot
 
"Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa...
"Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa..."Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa...
"Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa...krakspot
 
Prezentacja startupu Listonic - KSES, KrakSpot#5
Prezentacja startupu Listonic - KSES, KrakSpot#5Prezentacja startupu Listonic - KSES, KrakSpot#5
Prezentacja startupu Listonic - KSES, KrakSpot#5krakspot
 
"AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi...
"AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi..."AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi...
"AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi...krakspot
 
"Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr...
"Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr..."Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr...
"Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr...krakspot
 
"Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J...
"Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J..."Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J...
"Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J...krakspot
 
Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5
Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5
Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5krakspot
 
"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5
"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5
"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5krakspot
 
"Second Poland - budowa Polski w Second Life (społeczność, technologia, możli...
"Second Poland - budowa Polski w Second Life (społeczność, technologia, możli..."Second Poland - budowa Polski w Second Life (społeczność, technologia, możli...
"Second Poland - budowa Polski w Second Life (społeczność, technologia, możli...krakspot
 
"Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -...
"Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -..."Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -...
"Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -...krakspot
 
"Art World" - Rahim Blak, KrakSpot#4 (KSES)
"Art World" - Rahim Blak, KrakSpot#4 (KSES)"Art World" - Rahim Blak, KrakSpot#4 (KSES)
"Art World" - Rahim Blak, KrakSpot#4 (KSES)krakspot
 
"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3
"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3
"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3krakspot
 
"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3
"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3
"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3krakspot
 
Timecamp - KSES, KrakSpot#3
Timecamp - KSES, KrakSpot#3Timecamp - KSES, KrakSpot#3
Timecamp - KSES, KrakSpot#3krakspot
 
"Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp...
"Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp..."Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp...
"Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp...krakspot
 

Plus de krakspot (20)

KrakSpot - podsumowanie, Marcin Jaśkiewicz
KrakSpot - podsumowanie, Marcin JaśkiewiczKrakSpot - podsumowanie, Marcin Jaśkiewicz
KrakSpot - podsumowanie, Marcin Jaśkiewicz
 
„Need for speed, czyli jak wycisnąć siódme poty z bazy PostgreSQL” - Wojciech...
„Need for speed, czyli jak wycisnąć siódme poty z bazy PostgreSQL” - Wojciech...„Need for speed, czyli jak wycisnąć siódme poty z bazy PostgreSQL” - Wojciech...
„Need for speed, czyli jak wycisnąć siódme poty z bazy PostgreSQL” - Wojciech...
 
„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...
„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...
„Projektowanie CMSów i opartych o nie serwisów WWW” - Paweł Preneta na KrakSp...
 
"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6
"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6
"Jak wygrywać konkursy startupów" - Marcin Grodzicki na KrakSpot#6
 
"Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da...
"Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da..."Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da...
"Jak wykorzystać Facebook do budowania wartości marki na przykładzie akcji Da...
 
"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6
"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6
"Krakow Wide Web, czyli Kraków w Internecie" - Magdalena Sroka na KrakSpot#6
 
"Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa...
"Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa..."Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa...
"Twój serwis kluczem do pieniędzy, czyli co zrobić żeby wzbudzić zainteresowa...
 
Prezentacja startupu Listonic - KSES, KrakSpot#5
Prezentacja startupu Listonic - KSES, KrakSpot#5Prezentacja startupu Listonic - KSES, KrakSpot#5
Prezentacja startupu Listonic - KSES, KrakSpot#5
 
"AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi...
"AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi..."AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi...
"AdTaily.com - Platforma reklamowa dla mediów społecznych" - Jakub Krzych, Mi...
 
"Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr...
"Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr..."Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr...
"Proces planowania kampanii przez interaktywny dom mediowy" - Carolina Pietyr...
 
"Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J...
"Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J..."Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J...
"Jak stworzyć popularną grupę blogów tematycznych bez agresywnej reklamy" - J...
 
Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5
Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5
Open Source - czy aby napewno zło?” - Piotr Pyciński, KrakSpot#5
 
"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5
"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5
"Co słychać w Rzeszowie - «stolicy innowacji»" - Mateusz Tułecki, KrakSpot#5
 
"Second Poland - budowa Polski w Second Life (społeczność, technologia, możli...
"Second Poland - budowa Polski w Second Life (społeczność, technologia, możli..."Second Poland - budowa Polski w Second Life (społeczność, technologia, możli...
"Second Poland - budowa Polski w Second Life (społeczność, technologia, możli...
 
"Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -...
"Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -..."Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -...
"Zagrożenia w stosowaniu technologii open-source w projektach komercyjnych" -...
 
"Art World" - Rahim Blak, KrakSpot#4 (KSES)
"Art World" - Rahim Blak, KrakSpot#4 (KSES)"Art World" - Rahim Blak, KrakSpot#4 (KSES)
"Art World" - Rahim Blak, KrakSpot#4 (KSES)
 
"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3
"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3
"Globalizator vs. Google Translate" - Monika Rosińska, KrakSpot#3
 
"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3
"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3
"Kto nie da kasy na startup i dlaczego?" - Anton Komarov, KrakSpot#3
 
Timecamp - KSES, KrakSpot#3
Timecamp - KSES, KrakSpot#3Timecamp - KSES, KrakSpot#3
Timecamp - KSES, KrakSpot#3
 
"Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp...
"Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp..."Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp...
"Aplikacje mobilne w budowaniu lojalności klienta" - Łukasz Zjawiński, KrakSp...
 

“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot Tech #1

  • 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