4. 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?
5. 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.
7. 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.
9. 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(?)
15. Analys av WebSocket-kommunikation
Applikation • Man kan använda
Javascript javascript-debugger för
Initierar Websocket att påverka applikationen
Browser-API • Man kan koppla in sig
Javascript mellan applikationen och
Browser-API
Hanterar WebSocket
TCP- • Man kan övervaka och
OS modifiera trafiken på TCP-
proxies nivå
Sköter nätverkskommunikation på låg nivå
17. 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:
18. 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-konstruktorn
och ’minera’ den
19. 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
21. 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…