SlideShare una empresa de Scribd logo
1 de 23
Descargar para leer sin conexión
WebSockets för applikationstestare
        Owasp 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-                                4    5.0.0
thewebsocketprotocol-75
draft-hixie-                   4.0 beta     6    5.0.1    11.00(DISABLED)
thewebsocketprotocol-76        (DISABLED)
draft-ietf-hybi-
thewebsocketprotocol-00
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
              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å
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-konstruktorn
  och ’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
             Mallory
Victim       Default      Internet
             Gateway
Frågor?
     Presenterat av:
  Martin Holst Swende
http://martin.swende.se
   martin@swende.se
  twitter:@mhswende

Más contenido relacionado

Destacado

искусство,музыка,живопись,кино
искусство,музыка,живопись,киноискусство,музыка,живопись,кино
искусство,музыка,живопись,киноVika Markosyan
 
ամենաաղտոտ գետերը
ամենաաղտոտ գետերըամենաաղտոտ գետերը
ամենաաղտոտ գետերըVika Markosyan
 
VocalPress Overview
VocalPress OverviewVocalPress Overview
VocalPress OverviewVocalPress
 
Մխիթար Սեբաստացի
Մխիթար ՍեբաստացիՄխիթար Սեբաստացի
Մխիթար ՍեբաստացիVika Markosyan
 
Presentación proyecto enuy ingles
Presentación proyecto enuy inglesPresentación proyecto enuy ingles
Presentación proyecto enuy inglesAngel Nuñez
 
талусни растения
талусни растенияталусни растения
талусни растенияPavlina Elinova
 
Republica bolivariana de venezuela1
Republica bolivariana de venezuela1Republica bolivariana de venezuela1
Republica bolivariana de venezuela1Roonald Perez
 
Hatkit Project - Datafiddler
Hatkit Project - DatafiddlerHatkit Project - Datafiddler
Hatkit Project - Datafiddlerholiman
 
The very hungry_caterpillar_book
The very hungry_caterpillar_bookThe very hungry_caterpillar_book
The very hungry_caterpillar_bookvaleriewatt
 
Tranter Australia Information
Tranter Australia InformationTranter Australia Information
Tranter Australia Informationbjs123
 

Destacado (17)

Vietnam power point
Vietnam power pointVietnam power point
Vietnam power point
 
искусство,музыка,живопись,кино
искусство,музыка,живопись,киноискусство,музыка,живопись,кино
искусство,музыка,живопись,кино
 
ամենաաղտոտ գետերը
ամենաաղտոտ գետերըամենաաղտոտ գետերը
ամենաաղտոտ գետերը
 
VocalPress Overview
VocalPress OverviewVocalPress Overview
VocalPress Overview
 
Vietnam Power Point
Vietnam Power PointVietnam Power Point
Vietnam Power Point
 
Մխիթար Սեբաստացի
Մխիթար ՍեբաստացիՄխիթար Սեբաստացի
Մխիթար Սեբաստացի
 
Presentación proyecto enuy ingles
Presentación proyecto enuy inglesPresentación proyecto enuy ingles
Presentación proyecto enuy ingles
 
Halloween
HalloweenHalloween
Halloween
 
талусни растения
талусни растенияталусни растения
талусни растения
 
նախագիծ
նախագիծնախագիծ
նախագիծ
 
Republica bolivariana de venezuela1
Republica bolivariana de venezuela1Republica bolivariana de venezuela1
Republica bolivariana de venezuela1
 
եսապատում
եսապատումեսապատում
եսապատում
 
Hatkit Project - Datafiddler
Hatkit Project - DatafiddlerHatkit Project - Datafiddler
Hatkit Project - Datafiddler
 
The very hungry_caterpillar_book
The very hungry_caterpillar_bookThe very hungry_caterpillar_book
The very hungry_caterpillar_book
 
90’s cartoons
90’s cartoons90’s cartoons
90’s cartoons
 
Tranter Australia Information
Tranter Australia InformationTranter Australia Information
Tranter Australia Information
 
հեքիաթներ
հեքիաթներհեքիաթներ
հեքիաթներ
 

Similar a WebSockets för applikationstestare

HT17 - DA354A - Webbapplikation
HT17 - DA354A - WebbapplikationHT17 - DA354A - Webbapplikation
HT17 - DA354A - WebbapplikationAnton Tibblin
 
HT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web appHT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web appAnton Tibblin
 
VT2019 - DA355A - jQuery och Ajax
VT2019 - DA355A - jQuery och AjaxVT2019 - DA355A - jQuery och Ajax
VT2019 - DA355A - jQuery och AjaxAnton Tibblin
 
VT24 - jQuery & Ajax - Flerplattformsapplikationer med webbtekniker
VT24 - jQuery & Ajax - Flerplattformsapplikationer med webbteknikerVT24 - jQuery & Ajax - Flerplattformsapplikationer med webbtekniker
VT24 - jQuery & Ajax - Flerplattformsapplikationer med webbteknikerAnton Tibblin
 
HT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottleHT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottleAnton Tibblin
 
HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)
HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)
HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)Anton Tibblin
 
VT2019 - DA355A - JS-ramverk
VT2019 - DA355A - JS-ramverkVT2019 - DA355A - JS-ramverk
VT2019 - DA355A - JS-ramverkAnton Tibblin
 
HT15, DA354A - Introduktion till Webbprogrammering - Bottle
HT15, DA354A - Introduktion till Webbprogrammering - BottleHT15, DA354A - Introduktion till Webbprogrammering - Bottle
HT15, DA354A - Introduktion till Webbprogrammering - BottleAnton Tibblin
 
Snabbt och användbart webbgränssnitt
Snabbt och användbart webbgränssnittSnabbt och användbart webbgränssnitt
Snabbt och användbart webbgränssnittMarcus Österberg
 
Molntjänster som it superhjältar
Molntjänster som it superhjältarMolntjänster som it superhjältar
Molntjänster som it superhjältarPer Åström
 
Lär dig ajaxifiera dina tillägg med jQuery
Lär dig ajaxifiera dina tillägg med jQueryLär dig ajaxifiera dina tillägg med jQuery
Lär dig ajaxifiera dina tillägg med jQuerytdhftw
 
PHP och MySQL
PHP och MySQLPHP och MySQL
PHP och MySQLbjornh
 
HT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonHT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonAnton Tibblin
 
HT17 - DA156A - Sammanfattning av kursen
HT17 - DA156A - Sammanfattning av kursenHT17 - DA156A - Sammanfattning av kursen
HT17 - DA156A - Sammanfattning av kursenAnton Tibblin
 
Att bygga webbapplikationer baserade på länkad data
Att bygga webbapplikationer baserade på länkad dataAtt bygga webbapplikationer baserade på länkad data
Att bygga webbapplikationer baserade på länkad dataMatthias Palmer
 
VT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & BootstrapVT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & BootstrapAnton Tibblin
 

Similar a WebSockets för applikationstestare (20)

HT17 - DA354A - Webbapplikation
HT17 - DA354A - WebbapplikationHT17 - DA354A - Webbapplikation
HT17 - DA354A - Webbapplikation
 
HT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web appHT18 - DA354A - Bottle web app
HT18 - DA354A - Bottle web app
 
jQuery & Ajax
jQuery & AjaxjQuery & Ajax
jQuery & Ajax
 
VT2019 - DA355A - jQuery och Ajax
VT2019 - DA355A - jQuery och AjaxVT2019 - DA355A - jQuery och Ajax
VT2019 - DA355A - jQuery och Ajax
 
VT24 - jQuery & Ajax - Flerplattformsapplikationer med webbtekniker
VT24 - jQuery & Ajax - Flerplattformsapplikationer med webbteknikerVT24 - jQuery & Ajax - Flerplattformsapplikationer med webbtekniker
VT24 - jQuery & Ajax - Flerplattformsapplikationer med webbtekniker
 
HT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottleHT19 - DA354A - Webbprogrammering med bottle
HT19 - DA354A - Webbprogrammering med bottle
 
HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)
HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)
HT15, DA354A - Introduktion till Webbprogrammering - Bottle (2)
 
OPTIMERA STHLM! Loadimpact
OPTIMERA STHLM! LoadimpactOPTIMERA STHLM! Loadimpact
OPTIMERA STHLM! Loadimpact
 
VT2019 - DA355A - JS-ramverk
VT2019 - DA355A - JS-ramverkVT2019 - DA355A - JS-ramverk
VT2019 - DA355A - JS-ramverk
 
HT15, DA354A - Introduktion till Webbprogrammering - Bottle
HT15, DA354A - Introduktion till Webbprogrammering - BottleHT15, DA354A - Introduktion till Webbprogrammering - Bottle
HT15, DA354A - Introduktion till Webbprogrammering - Bottle
 
Snabbt och användbart webbgränssnitt
Snabbt och användbart webbgränssnittSnabbt och användbart webbgränssnitt
Snabbt och användbart webbgränssnitt
 
Molntjänster som it superhjältar
Molntjänster som it superhjältarMolntjänster som it superhjältar
Molntjänster som it superhjältar
 
Lär dig ajaxifiera dina tillägg med jQuery
Lär dig ajaxifiera dina tillägg med jQueryLär dig ajaxifiera dina tillägg med jQuery
Lär dig ajaxifiera dina tillägg med jQuery
 
PHP och MySQL
PHP och MySQLPHP och MySQL
PHP och MySQL
 
HT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med PythonHT23 - DA354A - Webbprogrammering med Python
HT23 - DA354A - Webbprogrammering med Python
 
FullStackDeveloper
FullStackDeveloperFullStackDeveloper
FullStackDeveloper
 
Cookies och Websockets
Cookies och WebsocketsCookies och Websockets
Cookies och Websockets
 
HT17 - DA156A - Sammanfattning av kursen
HT17 - DA156A - Sammanfattning av kursenHT17 - DA156A - Sammanfattning av kursen
HT17 - DA156A - Sammanfattning av kursen
 
Att bygga webbapplikationer baserade på länkad data
Att bygga webbapplikationer baserade på länkad dataAtt bygga webbapplikationer baserade på länkad data
Att bygga webbapplikationer baserade på länkad data
 
VT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & BootstrapVT2018 - DA355A - LocalStorage & Bootstrap
VT2018 - DA355A - LocalStorage & Bootstrap
 

WebSockets för applikationstestare

  • 1. WebSockets för applikationstestare Owasp Sweden Martin Holst Swende 2011-01-31
  • 2. Summary • Applikationstestning – Vanliga misstag • WebSockets – På serversidan – På klientsidan – Analys av kommunikation
  • 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.
  • 6. Okej, vad är det för speciellt med WebSockets?
  • 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.
  • 8. 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- 4 5.0.0 thewebsocketprotocol-75 draft-hixie- 4.0 beta 6 5.0.1 11.00(DISABLED) thewebsocketprotocol-76 (DISABLED) draft-ietf-hybi- thewebsocketprotocol-00
  • 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å
  • 16. Manipulering av klient-API Monkeypatching
  • 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
  • 20. Demo
  • 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…
  • 22. Demo - Mallory Mallory Victim Default Internet Gateway
  • 23. Frågor? Presenterat av: Martin Holst Swende http://martin.swende.se martin@swende.se twitter:@mhswende