Web Application Security Hacking Your Way In!     Julien Rentrop     Peter Schuler
Wie wij zijn• Julien Rentrop• julien.rentrop@ordina.nl• Java software engineer• Peter Schuler• peter.schuler@gmail.com• Ze...
Agenda•   Injection                    #1 OWASP top 10•   Cross Site Scripting         #2•   Session Hijacking            ...
Injection• Injecteren commando’s in invoer parameters  "select * from User  where name = " + name + ""                    ...
Injection• Injecteren commando’s in invoer parameters  "select * from User  where name = " + name + ""               Hans ...
Demo 1: Injection
• Hoe zag de code er uit?            Demo 1: InjectionString jpql = "select p from Persoon p " +"where emailadres = " + em...
Injection Voorkomen • Parameter binding API’sString jpql = "select p from Persoon p " +"where emailadres = :email " +"and ...
Agenda•   Injection•   Cross Site Scripting•   Session Hijacking•   Cross Site Request Forgery
Cross Site Scripting (XSS)• Hoe werkt het?  – Aanvaller plaatst eigen HTML/JS op site  – Slachtoffer bezoekt site  – Aanva...
Reflected XSS                                 Aanvaller laat script via                                 slachtoffer en ser...
• Hoe zag de code er uit?            Demo 2: Cross Site Scripting<input type="text" name="emailadres"       value="${param...
Stored XSSPOST name="><script>..</script>                                  Bezoekers krijgen                              ...
Cross Site Scripting (XSS)• HTML5 features maken meer mogelijk• Voorkomen  – Escapen voor renderen  – Voor juiste context ...
Agenda•   Injection•   Cross Site Scripting•   Session Hijacking•   Cross Site Request Forgery
HTTP Sessions                    HTTP GET                     HTTP OKHTTP Protocol = Stateless protocol
HTTP SessionsHTTP Protocol = Stateless protocol
HTTP SessionsIRL Moeten wecommuniceren metmeerdere clients
Session CookiesClient sessies krijgenieder een uniek cookie/id.
• Wat is een cookie eigenlijk?            Session Cookies• Een cookie is een HTTP Header vanaf de server:   HTTP/1.1 200 O...
• Wat is een cookie nu eigenlijk?            HTTP Sessions• Een cookie is een HTTP Header vanaf de server:   HTTP/1.1 200 ...
Demo 4: Session Hijacking
Hoe raak je cookies kwijt?• Onbeveiligd HTTP verkeer. Bv. FireSheep.• Via XSS en Javascript: document.cookie.• Via Trojans...
Hoe helpt het HTTP protocol?• Moderne browers helpen met nieuwe opties  voor cookies:  – HttpOnly schermt het cookie af va...
Hoe helpt JEE6?• Servlet 3.0 spec biedt hulp:  – Ondersteuning voor HttpOnly en Secure.  – Vergaande configuratie SessionC...
• Declaratief:            Hoe helpt JEE6? <session-config>   <session-timeout>30</session-timeout> • <cookie-config>   Ser...
• Declaratief:            Hoe helpt JEE6? ServletContext sContext = <session-config>   <session-timeout>30</session-timeou...
Session Hijacking: Wat kan je zelf            doen?1.   Bescherm je session met HttpOnly en Secure.2.   Geef je session co...
Agenda•   Injection•   Cross Site Scripting•   Session Hijacking•   Cross Site Request Forgery
Cross Site Request Forgery                                      serverwww.linkedIn.com   +                   +    peter   ...
Cross Site Request Forgery                                    serverwww.linkedIn.comwww.linkedIn.com   +                   +
Cross Site Request Forgery                                      serverwww.linkedIn.com   evilSite.org                   ev...
Demo 5: CSRF
• Hoe werkte deze aanval?• In de HTML:           Demo 5: CSRF <img src="https://loc.....sie/uitschrijven.do? cursistId=7&c...
CSRF Aanval• Een CSRF request kan overal vandaan komen:  – XSS in de doel website.  – XSS in een willekeurige andere site....
CSRF Voorkomen• De oplossing is simpel:• Autoriseer niet de browser, maar de pagina om  verzoeken te versturen.• Geef iede...
Frameworks helpen!• Een aantal frameworks hebben ingebouwde  bescherming tegen CSRF:• Wicket middels een  CryptedUrlWebReq...
Tot slot• Bedankt!• www.OWASP.org bevat veel informatie over  deze en andere aanvallen.• Voor vragen:• peter.schuler@gmail...
Upcoming SlideShare
Loading in...5
×

Web Application Security; Hacking your way in!

770

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
770
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
17
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Web Application Security; Hacking your way in!

  1. 1. Web Application Security Hacking Your Way In! Julien Rentrop Peter Schuler
  2. 2. Wie wij zijn• Julien Rentrop• julien.rentrop@ordina.nl• Java software engineer• Peter Schuler• peter.schuler@gmail.com• Zelfstandig Java Trainer & Architect
  3. 3. Agenda• Injection #1 OWASP top 10• Cross Site Scripting #2• Session Hijacking #3• Cross Site Request Forgery #5Bezoek www.owasp.org voor meer informatie.
  4. 4. Injection• Injecteren commando’s in invoer parameters "select * from User where name = " + name + "" Hans
  5. 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, …
  6. 6. Demo 1: Injection
  7. 7. • Hoe zag de code er uit? Demo 1: InjectionString jpql = "select p from Persoon p " +"where emailadres = " + emailadrs + " " +"and wachtwoord = " + encodedww + "";Query query = em.createQuery(jpql);• Wat is de oplossing?
  8. 8. Injection Voorkomen • Parameter binding API’sString jpql = "select p from Persoon p " +"where emailadres = :email " +"and wachtwoord = :pass";Query query = em.createQuery(jpql);query.setParameter("email", emailadres);query.setParameter("pass", encodedww); • Escaping • Invoer validatie
  9. 9. Agenda• Injection• Cross Site Scripting• Session Hijacking• Cross Site Request Forgery
  10. 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. 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. 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.
  13. 13. Stored XSSPOST name="><script>..</script> Bezoekers krijgen opgeslagen script.
  14. 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. 15. Agenda• Injection• Cross Site Scripting• Session Hijacking• Cross Site Request Forgery
  16. 16. HTTP Sessions HTTP GET HTTP OKHTTP Protocol = Stateless protocol
  17. 17. HTTP SessionsHTTP Protocol = Stateless protocol
  18. 18. HTTP SessionsIRL Moeten wecommuniceren metmeerdere clients
  19. 19. Session CookiesClient sessies krijgenieder een uniek cookie/id.
  20. 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. 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.
  22. 22. Demo 4: Session Hijacking
  23. 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. 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. 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. 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. 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. 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. 29. Agenda• Injection• Cross Site Scripting• Session Hijacking• Cross Site Request Forgery
  30. 30. Cross Site Request Forgery serverwww.linkedIn.com + + peter **********
  31. 31. Cross Site Request Forgery serverwww.linkedIn.comwww.linkedIn.com + +
  32. 32. Cross Site Request Forgery serverwww.linkedIn.com evilSite.org evilSite.org +
  33. 33. Demo 5: CSRF
  34. 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. 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. 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. 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. 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 .
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×