Presentatie van Julien Rentrop en Peter Schuler voor de J-fall 2011 conferentie van de NLJUG.
Presentatie behandeld de voglende aanvallen uit de OWASP top 10:
* SQL injection
* Cross Site Scripting
* Session Hijacking
* Cross Site Request Forgery
Laat ook zien wat je in Java kan doen om de kans op bovenstaande aanvallen te voorkomen.
5. Injection
• Injecteren commando’s in invoer parameters
"select * from User
where name = '" + name + "'"
Hans' or '1'='1
• Injection is niet alleen SQL
– XML, XPath, LDAP, dynamic code eval, …
9. Agenda
• Injection
• Cross Site Scripting
• Session Hijacking
• Cross Site Request Forgery
10. Cross Site Scripting (XSS)
• Hoe werkt het?
– Aanvaller plaatst eigen HTML/JS op site
– Slachtoffer bezoekt site
– Aanvaller heeft controle over site en de
browser.
11. Reflected XSS
Aanvaller laat script via
slachtoffer en server
reflecteren.
http://bank.it/?name="><script>..</script>
..<input value=""><script>..</script>..
• Aanvaller lokt slachtoffer
• Email met link, redirect, frame, url shortener, ..
12. • Hoe zag de code er uit?
Demo 2: Cross Site Scripting
<input type="text" name="emailadres"
value="${param.emailadres}"/>
• Emailadres wordt rechtstreeks uit EL
overgenomen.
14. Cross Site Scripting (XSS)
• HTML5 features maken meer mogelijk
• Voorkomen
– Escapen voor renderen
– Voor juiste context escapen
• HTML, JavaScript, CSS, URL
– Invoer validatie
• White listing, strong typing, limiteren lengte
15. Agenda
• Injection
• Cross Site Scripting
• Session Hijacking
• Cross Site Request Forgery
16. HTTP Sessions
HTTP GET
HTTP OK
HTTP Protocol = Stateless protocol
20. • Wat is een cookie eigenlijk?
Session Cookies
• Een cookie is een HTTP Header vanaf de server:
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value
Set-Cookie: JSESSIONID=5A53044AA6CB36363D3;
Expires=Wed, 09 Jun 2021 10:18:14 GMT
• De client stuurt deze data bij ieder verzoek mee:
GET /spec.html HTTP/1.1
Host: www.example.org
Cookie: JSESSIONID=5A53044AA6CB36363D3;
name=value
• Een cookie is dus plain text data.
21. • Wat is een cookie nu eigenlijk?
HTTP Sessions
• Een cookie is een HTTP Header vanaf de server:
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: name=value
Plain text HTTP verkeer
Set-Cookie: JSESSIONID=5A53044AA6CB36363D3;
Expires=Wed, 09 Jun 2021 10:18:14 GMT
kan je sniffen!
• De client stuurt deze data bij ieder verzoek mee:
GET /spec.html HTTP/1.1
Host: www.example.org
Cookie: SESSIONID=5A53044AA6CB36363D3;
name=value
• Een cookie is dus plain text data.
23. Hoe raak je cookies kwijt?
• Onbeveiligd HTTP verkeer. Bv. FireSheep.
• Via XSS en Javascript: document.cookie.
• Via Trojans en Virussen die specifiek jacht
maken op actieve sessions.
• Social Engineering.
• Andere optie: Session Fixation.
• Aanvaller lokt slachtoffer met URL rewriting:
• http://......page/;JSESSIONID=FFB6583DF13
24. Hoe helpt het HTTP protocol?
• Moderne browers helpen met nieuwe opties
voor cookies:
– HttpOnly schermt het cookie af van Javascript.
– Secure alleen meegestuurd met SSL
verbindingen.
HTTP/1.1 200 OK
Content-type: text/html
Set-Cookie: JSESSIONID=5A53044AA6CB36363D3;
Secure; HttpOnly
25. Hoe helpt JEE6?
• Servlet 3.0 spec biedt hulp:
– Ondersteuning voor HttpOnly en Secure.
– Vergaande configuratie SessionCookie mogelijk.
• Applicatief en via de web.xml.
26. • Declaratief:
Hoe helpt JEE6?
<session-config>
<session-timeout>30</session-timeout>
• <cookie-config>
Servlet 3.0 spec biedt hulp:
– <name>id</name> HttpOnly en Secure.
Ondersteuning voor
<http-only>true</http-only>
– <secure>true</secure>
Vergaande configuratie SessionCookie mogelijk.
</cookie-config>
• <tracking-mode>COOKIE</tracking-mode>
Applicatief en via de web.xml.
<tracking-mode>URL</tracking-mode>
</session-config>
• cookie-config laat je de cookie setting instellen.
• Tracking mode laat je URL rewriting uitschakelen!
27. • Declaratief:
Hoe helpt JEE6?
ServletContext sContext =
<session-config>
<session-timeout>30</session-timeout>
sce.getServletContext();
• <cookie-config>
SessionCookieConfig sessionCookieConfig
Servlet 3.0 spec biedt hulp:
– <name>id</name> HttpOnly en Secure.
= sContext.getSessionCookieConfig();
Ondersteuning voor
<http-only>true</http-only>
– <secure>true</secure>
sessionCookieConfig.setName("ID"); mogelijk.
Vergaande configuratie SessionCookie
sessionCookieConfig.setSecure(true);
</cookie-config>
sessionCookieConfig.setHttpOnly(true);
• <tracking-mode>COOKIE</tracking-mode>
Applicatief en via de web.xml.
• </session-config>cookies via Cookie class.
Bescherm je eigen
• URL rewriting uitschakelen kan niet via code.
• cookie-config laat je de cookie setting instellen.
• Tracking mode laat je URL rewriting uitschakelen!
28. Session Hijacking: Wat kan je zelf
doen?
1. Bescherm je session met HttpOnly en Secure.
2. Geef je session cookie een andere naam.
3. Schakel URL rewriting uit met tracking mode.
4. Reset je Session bij iedere inlog poging.
• Geen Servlet 3.0? Geen nood.
– De middleware kan je ook helpen.
– Tomcat ondersteunt Secure en HttpOnly al
vanaf versie 5.5 in de context.xml.
29. Agenda
• Injection
• Cross Site Scripting
• Session Hijacking
• Cross Site Request Forgery
34. • Hoe werkte deze aanval?
• In de HTML:
Demo 5: CSRF
<img
src="https://loc.....sie/uitschrijven.do?
cursistId=7&cursusSessieId=2" />
• Openen van de pagina activeerde het
downloaden van het image en de aanval.
• Een CSRF aanval kan overal verstop zijn:
– In een iFrame.
– Een eigen hidden HTML form.
– Een gekaapt HTML form.
– Etc etc..
35. CSRF Aanval
• Een CSRF request kan overal vandaan komen:
– XSS in de doel website.
– XSS in een willekeurige andere site.
– Een email.
• Bekend voorbeeld is de Sammy Worm
36. CSRF Voorkomen
• De oplossing is simpel:
• Autoriseer niet de browser, maar de pagina om
verzoeken te versturen.
• Geef ieder request een random token.
• Controleer het token bij ieder verzoek .
• Gebruik hiervoor b.v. ServletFilter.
37. Frameworks helpen!
• Een aantal frameworks hebben ingebouwde
bescherming tegen CSRF:
• Wicket middels een
CryptedUrlWebRequestCodingStrategy.
• In JSF biedt de javax.faces.ViewState
enige bescherming! Implementatie afhankelijk.
• Van JSF 2.1 meer mogelijkheden.
38. Tot slot
• Bedankt!
• www.OWASP.org bevat veel informatie over
deze en andere aanvallen.
• Voor vragen:
• peter.schuler@gmail.com
• julien.rentrop@ordina.nl .