Presentation från OWASP Swedens seminariekväll 31/1 2011 om HTTP-säkerhet. Den här presentationen handlar om tre tämligen nya säkerhetsfeatures i form av HTTP-headers, nämligen HTTP Strict Transport Security, X-Frame-Options och Content Security Policy.
11. XSS blir inte ovanligare
<img src="javascript:alert('XSS');">
<body onload!#$%&()*~+-_.,:;?@[/|
]^`=alert("XSS")>
<body background="javascript:alert('XSS')">
<video poster=javascript:alert(1)//
<form id=test
onforminput=alert(1)><input></form><button
form=test onformchange=alert(2)>X
12. D Crockford anser !XSS
viktigare än HTML5
http://blip.tv/play/g_MngeaxVgI%2Em4v
13. Tillåt endast skript från vitlistade domäner
och
tillåt bara skript från filer, dvs inga inline-skript
OWASP
14. 'self' = samma URL, protokoll och port
'none' = inga godkända domäner
X-Content-Security-Policy: allow 'self'
trustedscripts.foo.com
Acceptera skript från min URL+port och från trustedscripts.foo.com
X-Content-Security-Policy: allow 'self'; img-src 'self'
Acceptera skript och bilder från min URL+port
https://developer.mozilla.org/en/Security/CSP/CSP_policy_directives
OWASP
22. Från nuvarande specar
• For security reasons, you can't use the <meta>
element to configure the X-Content-Security-
Policy header.
• The X-Frame-Options directive is ignored if
specified in a META tag.
• UAs MUST NOT heed http-equiv="Strict-
Transport-Security" attribute settings on <meta>
elements in received content.
OWASP
26. Olika mekanismer för
olika problem?
1. HTTP Strict Transport Security (Paypal)
2. X-Frame-Options (Microsoft)
3. Content Security Policy (Mozilla)
OWASP
27. Olika mekanismer för
olika problem?
1. Site Security Policy
(Mozilla+Google+Microsoft+PayPal+Facebook)
OWASP
28. Vad är det vi vitlistar?
X-Content-Security-Policy: allow 'self' foo.com
Vitlistade domäner
<!-- Begin XSS zone 9cb3c2fd7ef861d762471c90de0496 -->
<!-- End XSS zone 9cb3c2fd7ef861d762471c90de0496 -->
Vitlistade skriptzoner via kommentarselement och nycklar
(http://www.thespanner.co.uk/2010/09/24/xss-zones)
<meta name="script-nonce" content="142342fd7e">
<script nonce=142342fd7e>...</script>'
Vitlistade element, segment av kod
(http://www.gerv.net/security/script-keys + http://lists.w3.org/Archives/Public/public-web-security/2011Jan/0004.html)
<script type="text/javascript" src="/acs.js">/
*signature here*/</script>
Vitlistad kod via signerade hashar
(http://secinn.appspot.com/pstzine/read?issue=4&articleid=8)
OWASP
30. Header och/eller Meta?
HTTP/1.1 200 OK Mer globalt
X-Site-Security-Policy: ... Vem styr över
appens headers?
<html>
<head>
<META HTTP-EQUIV="X-Site-Security-
Policy" CONTENT="...">
</head>
<body>
</body>
</html>
OWASP
31. Header och/eller Meta?
HTTP/1.1 200 OK Mer globalt
X-Site-Security-Policy: ... Vem styr över
appens headers?
<html>
<head>
<META HTTP-EQUIV="X-Site-Security-
Policy" CONTENT="...">
</head>
<body> Mer ”per sida”
</body> Risk för injection
</html>
OWASP
32. Header och/eller Meta?
HTTP/1.1 200 OK Mer globalt
X-Site-Security-Policy: ... Vem styr över
appens headers?
<html>
<head>
<META HTTP-EQUIV="X-Site-Security-
Policy" CONTENT="...">
</head>
<body> Mer ”per sida”
</body> Risk för injection
Båda?
</html>
Hierarkiska policies?
First one wins?
OWASP
33. Eller kanske som css?
<link href="http://owasp.org/policy.csp"
rel="policy" type="text/policy" />
script {
src:url(https://chart.googleapis.com);
inline: false;
}
#emailContent {
javascript:false;
forms: false;
img: true;
}
34. Hur bygger vi ut?
• img-src: bilder
• media-src: <video>, <audio>
• object-src: plugin-innehåll
• frame-src: domäner som får laddas i <iframe>
• font-src: typsnitt
• xhr-src: domäner man får ajax:a till
• style-src: stylesheets
35. Hur bygger vi ut?
• allow[img] = ..., allow[embed] = ...
36. Verkligheten
”We were able to get Bugzilla working with
CSP and preventing XSS attacks (i.e. inline
scripts disabled), but it was not trivial and
the performance is not great.”