Peter Schuler & Julien Rentrop - Net
Peter Schuler & Julien Rentrop - Net
Peter Schuler & Julien Rentrop - Net
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