websockets för applikationstestare

23
WebSockets för applikationstestare Owasp Sweden Martin Holst Swende 2011-01-31

Upload: holiman

Post on 21-Jun-2015

1.973 views

Category:

Documents


0 download

DESCRIPTION

Talk given at Owasp Sweden 2011-01-31 about WebSockets for application testers

TRANSCRIPT

Page 1: WebSockets för applikationstestare

WebSockets för applikationstestareOwasp Sweden

Martin Holst Swende

2011-01-31

Page 2: WebSockets för applikationstestare

Summary

• Applikationstestning

– Vanliga misstag

• WebSockets

– På serversidan

– På klientsidan

– Analys av kommunikation

Page 3: WebSockets för applikationstestare

Applikationstestning i urval

Page 4: WebSockets för applikationstestare

Applikationstestning

• Kartlägga kommunikationsflöden– Vad skickas?

• Direkta eller indirekta referenser

• ”Hemlig” data?

• ”Icke editerbar” data?

– Var sker datavalidering?• På serversidan eller klientsidan?

– Hur ser datavalidering ut?• Vitlistebaserad eller svartlistebaserad?

Page 5: WebSockets för applikationstestare

Vanliga misstag• Direkta referenser, typiska konsekvenser:

– Path traversal– Remote file inclusion– Byta användarkonto

• Datavalidering på klientsidan– Diverse injection-brister: XSS, SQLi etc. – Ändra priset på en vara / summan på betalning

• Svartlistebaserad filtrering– Alltför snäv lista (släpper igenom för mycket). UTF-7? Overlong UTF-8?

• Fokus på filtrering istället för korrekt transcoding– Injection-brister är egentligen fel i transformering av data mellan olika

format-kontexter.

Page 6: WebSockets för applikationstestare

Okej, vad är det för speciellt med WebSockets?

Page 7: WebSockets för applikationstestare

WebSockets

• Paradigmskifte i HTTP-världen.

– Verktyg för att analysera HTTP-trafik (proxies) stöder inte WebSockets (än).

– Oftast inte bara en quickfix, eftersom det är en helt annan modell.

Page 8: WebSockets för applikationstestare

WebSocket - användning• Server:

– Java: Jetty, jWebSocket– PHP: phpWebSocket, WaterSpout– Python: pyWebSocket (Apache httpd), Tornado (Facebook)– Javascript: Node.js

• Klient:– WebSocket stöd:

Protocol IE FF Ch Safari Opera

draft-hixie-thewebsocketprotocol-75

4 5.0.0

draft-hixie-thewebsocketprotocol-76draft-ietf-hybi-thewebsocketprotocol-00

4.0 beta (DISABLED)

6 5.0.1 11.00(DISABLED)

Page 9: WebSockets för applikationstestare

Klientstöd, forts• Javascript API definierat av W3C, dock bara ’native’ support i vissa

browsers.• Både Flash och Silverlight har stöd för råa sockets, så det kräver inget nytt i

’core’ för att prata websockets. Det finns olika ramverk för att skapa implementera javascript-WebSockets via Flash– gimite/web-socket-js– jWebSocket/FlashBridge

• Eller Silverlight:– http://40interop.ep.interop.msftlabs.com/html5/ClientBin/Microsoft.ServiceM

odel.Websockets.xap– http://40interop.ep.interop.msftlabs.com/html5/js/jquery.slws.js

• WebSockets finns även för IE med CromeFrame• Således kan websockets användas på de flesta browsers som stöder

Flash/Silverlight/JavaFX(?)

Page 10: WebSockets för applikationstestare

I praktiken

Page 11: WebSockets för applikationstestare

Jetty Java server API

Page 12: WebSockets för applikationstestare

Node.js Socket.IO API

Page 13: WebSockets för applikationstestare

Browser API

Page 14: WebSockets för applikationstestare

Klient exempel

Page 15: WebSockets för applikationstestare

Analys av WebSocket-kommunikation

OS

Sköter nätverkskommunikation på låg nivå

Browser-API

Hanterar WebSocket

Applikation

Initierar Websocket

• Man kan använda javascript-debugger för att påverka applikationen

Javascript

• Man kan koppla in sig mellan applikationen och Browser-API

Javascript

• Man kan övervaka och modifiera trafiken på TCP-nivå

TCP-proxies

Page 16: WebSockets för applikationstestare

Manipulering av klient-API

Monkeypatching

Page 17: WebSockets för applikationstestare

Javascript tampering

• När applikation skickar data, kallas send()-metoden: socket.send(’foo’);

• Implicit kallas på send()-metoden i ”prototyp”-objektet, (ungf superklassen).

• Det går att skriva över send i prototypen:

Page 18: WebSockets för applikationstestare

Javascript tampering

• När data tas emot är det svårare, eftersom onMessage-metoden sitter på instansen, inte i en supertyp.

• Man kan dock skriva över hela WebSocket-konstruktornoch ’minera’ den

Page 19: WebSockets för applikationstestare

Att nämna

• Nackdel: Koden måste köras innan någon websocket-uppkoppling gjorts för att receive() skall kunna fungera

• Nackdel: Fungerar bara för javascript websockets, ej för Silverlight eller Flash

• Fördel: går att lägga som bookmarklet, bör vara oberoende av browser

• Finns även packeterat som en plugin till chrome

Page 20: WebSockets för applikationstestare

Demo

Page 21: WebSockets för applikationstestare

TCP tampering

• Lura datorn att koppla upp sig till en (tcp-)proxy– Ändra i /etc/hosts eller motsv

– Använda Mallory som default gateway

• Proxyn vidarebefordrar all data till den korrekta hosten

• Fördelar: Oberoende av klientteknik (js, silverlight, flash)

• Nackdelar: väldigt låg nivå (bits & bytes)

• Exempel: Mallory, Hatkit proxy, em-proxy (?), socat (?) etc…

Page 22: WebSockets för applikationstestare

Demo - Mallory

VictimMalloryDefault

GatewayInternet

Page 23: WebSockets för applikationstestare

Frågor?

Presenterat av:Martin Holst Swende

http://[email protected]

twitter:@mhswende