websockets för applikationstestare
DESCRIPTION
Talk given at Owasp Sweden 2011-01-31 about WebSockets for application testersTRANSCRIPT
WebSockets för applikationstestareOwasp Sweden
Martin Holst Swende
2011-01-31
Summary
• Applikationstestning
– Vanliga misstag
• WebSockets
– På serversidan
– På klientsidan
– Analys av kommunikation
Applikationstestning i urval
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?
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.
Okej, vad är det för speciellt med WebSockets?
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.
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)
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(?)
I praktiken
Jetty Java server API
Node.js Socket.IO API
Browser API
Klient exempel
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
Manipulering av klient-API
Monkeypatching
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:
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
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
Demo
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…
Demo - Mallory
VictimMalloryDefault
GatewayInternet