10.05.2015 Views

Peter Schuler & Julien Rentrop - Net

Peter Schuler & Julien Rentrop - Net

Peter Schuler & Julien Rentrop - Net

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Web Application Security<br />

Hacking Your Way In!<br />

<strong>Peter</strong> <strong>Schuler</strong> & <strong>Julien</strong> <strong>Rentrop</strong><br />

1


Agenda<br />

• Injection<br />

• Cross Site Scripting<br />

• Session Hijacking<br />

• Cross Site Request Forgery<br />

#1 OWASP<br />

#2 top 10<br />

#3<br />

#5<br />

Bezoek www.owasp.org voor meer informatie.<br />

3


Injection<br />

• Injecteren commando’s in invoer<br />

parameters<br />

"select * from User<br />

where name = '" + name + "'"<br />

Hans<br />

4


Injection<br />

• Injecteren commando’s in invoer<br />

parameters<br />

"select * from User<br />

where name = '" + name + "'"<br />

Hans' or '1'='1<br />

• Injection is niet alleen SQL<br />

– XML, XPath, LDAP, dynamic code eval, …<br />

5


Demo 1: Injection<br />

6


Injection Voorkomen<br />

• Parameter binding API’s<br />

− Java: NamedQueries in JPA, PreparedStatement<br />

− PHP: PDO PDOStatement::bindParam<br />

− .NET: SqlCommand met binding parameters<br />

• Escaping<br />

− Indien binding niet mogelijk is<br />

• Invoer validatie<br />

− Extra laag van verdediging<br />

7


Agenda<br />

• Injection<br />

• Cross Site Scripting<br />

• Session Hijacking<br />

• Cross Site Request Forgery<br />

8


Cross Site Scripting (XSS)<br />

• Hoe werkt het?<br />

− Aanvaller plaatst eigen HTML/JS op site<br />

− Slachtoffer bezoekt site<br />

− Aanvaller heeft controle over site en de browser.<br />

9


Reflected XSS<br />

Aanvaller laat script via<br />

slachtoffer en server<br />

reflecteren.<br />

http://bank.it/?name=">..<br />

......<br />

Aanvaller lokt slachtoffer<br />

• Email met link, redirect, frame, url shortener, ..<br />

10


Demo 2: Cross Site Scripting<br />

11


Stored XSS<br />

POST name=">..<br />

Bezoekers krijgen<br />

opgeslagen script.<br />

12


Cross Site Scripting (XSS)<br />

• HTML5 features maken meer mogelijk<br />

− Bijv. XSS triggeren via autofocus<br />

• Voorkomen<br />

− Escapen voor renderen<br />

− Voor juiste context escapen<br />

◦ HTML, JavaScript, CSS, URL<br />

− Invoer validatie<br />

◦ White listing, strong typing, limiteren lengte<br />

13


Agenda<br />

• Injection<br />

• Cross Site Scripting<br />

• Session Hijacking<br />

• Cross Site Request Forgery<br />

14


Hoe werken HTTP Sessions<br />

HTTP GET<br />

HTTP OK<br />

HTTP Protocol = Stateless protocol<br />

15


Hoe werken HTTP Sessions<br />

HTTP Protocol = Stateless protocol<br />

16


Hoe werken HTTP Sessions<br />

IRL Moeten we<br />

communiceren met<br />

meerdere clients<br />

17


Hoe werken HTTP Sessions<br />

Client sessies krijgen<br />

ieder een uniek<br />

cookie/id.<br />

18


Hoe werken HTTP Sessions<br />

• Wat is een cookie eigenlijk?<br />

• Een cookie is een HTTP server Header:<br />

HTTP/1.1 200 OK<br />

Content-type: text/html<br />

Set-Cookie: name=value<br />

Set-Cookie: JSESSIONID=5A53044AA6CB36363D3;<br />

Expires=Wed, 09 Jun 2021 10:18:14 GMT<br />

• De client stuurt deze data bij ieder<br />

verzoek mee:<br />

GET /spec.html HTTP/1.1<br />

Host: www.example.org<br />

Cookie: JSESSIONID=5A53044AA6CB36363D3;<br />

name=value<br />

• Een cookie is dus plain text data.<br />

19


• Wat is een cookie nu eigenlijk?<br />

• Een cookie is een HTTP Header vanaf<br />

de server:<br />

HTTP/1.1 200 OK<br />

Content-type: text/html<br />

Set-Cookie: name=value<br />

Plain text HTTP<br />

verkeer kan je sniffen!<br />

Set-Cookie: JSESSIONID=5A53044AA6CB36363D3;<br />

Expires=Wed, 09 Jun 2021 10:18:14 GMT<br />

• De client stuurt deze data bij ieder<br />

verzoek mee:<br />

GET /spec.html HTTP/1.1<br />

Host: www.example.org<br />

Cookie: SESSIONID=5A53044AA6CB36363D3;<br />

name=value<br />

• Een cookie is dus plain text data.<br />

20


Demo 4: Session Hijacking<br />

21


Hoe raak je cookies kwijt?<br />

• Onbeveiligd HTTP verkeer. Bv. FireSheep.<br />

• Via XSS en Javascript: document.cookie.<br />

• Via Trojans en Virussen die specifiek jacht<br />

maken op actieve sessions.<br />

• Social Engineering.<br />

• Andere optie: Session Fixation.<br />

• Aanvaller lokt slachtoffer met URL<br />

rewriting:<br />

• http://......page/;JSESSIONID=FFB683DF13<br />

22


Hoe helpt het HTTP protocol?<br />

• Moderne browers helpen met nieuwe opties<br />

voor cookies:<br />

− HttpOnly schermt het cookie af van Javascript.<br />

− Secure alleen meegestuurd met SSL verbindingen.<br />

HTTP/1.1 200 OK<br />

Content-type: text/html<br />

Set-Cookie: JSESSIONID=5A53044AA6CB36363D3;<br />

Secure; HttpOnly<br />

23


Session Hijacking: Wat kan je zelf doen?<br />

1. Bescherm je session altijd met HTTPS.<br />

2. Bescherm je session met HttpOnly en Secure.<br />

3. Geef je session cookie een andere naam.<br />

4. Schakel URL rewriting uit met tracking mode.<br />

5. Reset je Session bij iedere inlog poging.<br />

• Gebruik je nog oude technologie? Geen nood.<br />

− De middleware kan je ook helpen.<br />

− Bijvoorbeeld: Tomcat ondersteunt Secure en HttpOnly<br />

al vanaf versie 5.5 in de context.xml.<br />

24


Agenda<br />

• Injection<br />

• Cross Site Scripting<br />

• Session Hijacking<br />

• Cross Site Request Forgery<br />

25


Hoe werkt Cross Site Request Forgery?<br />

www.linkedIn.com +<br />

server<br />

peter<br />

**********<br />

26


Hoe werkt Cross Site Request Forgery?<br />

www.linkedIn.com +<br />

server<br />

27


Hoe werkt Cross Site Request Forgery?<br />

www.linkedIn.com evilSite.org +<br />

server<br />

28


Demo 5: CSRF<br />

29


Demo 5: CSRF<br />

• Hoe werkte deze aanval?<br />

• In de HTML:<br />

<br />

• Openen van de pagina trigger het ophalen<br />

van het image en daarmee de aanval.<br />

• Een CSRF aanval kan overal verstop zijn:<br />

– In een iFrame.<br />

– Een eigen hidden HTML form.<br />

– Etc etc..<br />

30


CSRF Aanval<br />

• Een CSRF aanval kan overal vandaan<br />

komen:<br />

− Een HTML bestand van de lokale disk.<br />

− Een email.<br />

• Goede combinatie met XSS.<br />

− XSS in de doel website.<br />

− XSS in een willekeurige andere site.<br />

• Bekend voorbeeld is de Sammy Worm<br />

31


CSRF Voorkomen<br />

• De oplossing is simpel:<br />

• Autoriseer niet de browser, maar de pagina<br />

om verzoeken te versturen.<br />

• Geef ieder request een random token.<br />

• Controleer het token bij ieder verzoek .<br />

• Gebruik hiervoor b.v. ServletFilter.<br />

32


Technologie helpt!<br />

• Example:<br />

− ASP.net: AntiForgeryToken<br />

− PHP: Niet out of the box, optie OWASP<br />

CSRFGuard<br />

− Java: Niet out of the box, afhankelijk framework<br />

of libraries zoals OWASP CSRFGuard<br />

33


Tot slot<br />

• Bedankt!<br />

• www.OWASP.org bevat veel informatie over<br />

deze en andere aanvallen.<br />

• Voor vragen:<br />

• peter.schuler@gmail.com<br />

• julien.rentrop@ordina.nl .<br />

34

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!