10.05.2015 Views

Peter Schuler & Julien Rentrop - Net

Peter Schuler & Julien Rentrop - Net

Peter Schuler & Julien Rentrop - Net

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

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!