tisdag 26 oktober 2010

Firesheep, så funkar det

Jag blev idag intervjuad av TV4-nyheterna om cookie-sniffaren Firesheep, en plug-in till Firefox som sniffar upp sessionskakor för populära tjänster på det nätverk man är kopplad till. Intervjun var med som ett inslag i 19-nyheterna också.

Installera och testa Firesheep
Det var lite trassel att få Firesheep att funka så jag tänkte jag postar det här för er som vill testa. Observera att jag inte går i god för programmet. Det kan visa sig vara en elak bakdörr.
  1. Se till att du har Firefox 3.6.* och minst 3.6.10, t ex 3.6.11. Inte 4 beta om du inte vill experimentera.
  2. Ladda hem Firesheep från GitHub.
  3. Öppna xpi-filen med Firefox och installera.
  4. Starta om Firefox om den kräver det.
  5. Nu ska du ha en Firesheep-vy som en kolumn i vänsterkanten. Om inte så Visa -> Sidofält -> Firesheep.
  6. Under Inställningar -> Sekretess: Stäng av ev privat surfningsläge, tillåt cookies och tilllåt tredjeparts-cookies.
  7. Slå på Firesheep med knappen "Start Capturing".
  8. Öppna en annan webbläsare, t ex Chrome.
  9. Logga in på Facebook, Twitter eller Flickr i Chrome.
  10. Kolla Firesheep-vyn i Firefox. Där ska dina olika konton ha dykt upp.
  11. Dubbelklicka på något av dina konton i Firesheep och vips så har du genomfört en session hijacking.
Om du nu suttit på ett öppet trådlöst nät så hade alla andra aktiva sessioner dykt upp i din Firesheep-kolumn. Notera att det är olagligt att utnyttja andras sessioner utan tillstånd. Att avlyssna nätverket och titta på listan är dock helt OK.

Förkonfigurerade tjänster som Firesheep sniffar
Följande tjänster/domäner är förkonfigurerade i Firesheep:
  • Amazon.com
  • Basecamp
  • bit.ly
  • Cisco
  • CNET
  • Dropbox
  • Enom
  • Evernote
  • Facebook
  • Flickr
  • Foursquare
  • GitHub
  • Google (dock ej GMail numer)
  • Gowalla
  • Hacker News
  • Harvest
  • Windows Live
  • New York Times
  • Pivotal Tracker
  • ToorCon: San Diego
  • Slicehost SliceManager
  • tumblr.com
  • Twitter
  • Wordpress
  • Yahoo
  • Yelp

Den underliggande sårbarheten
Vad är då sårbarheten? Jo, tjänster såsom Facebook krypterar bara trafiken vid inloggning (ditt lösenord är alltså skyddat). Efter det så går Facebook tillbaka till okrypterad trafik. Din sessions-cookie är det som Facebook identifierar dig med efter inloggning och den skickas i klartext vid varje anrop till Facebook. Det är den trafiken som Firesheep avlyssnar och plockar upp sessions-info från.

Med din sessions-cookie i min webbläsare så är jag lika inloggad som du är.


PS.
Eftersom det valsat runt så mycket felaktig information så vill jag poängtera två saker:
  1. Firesheep är en plugin till Firefox, dvs ett tilläggsprogram. Det hela handlar alltså inte om något säkerhetshål i Firefox. Det vore lika dumt som att påstå att Windows har problem för att någon skrivit en nätverksskanner som körs på Windows.
  2. Offret kan surfa med valfri webbläsare – Safari, Internet Explorer, Opera, Firefox, Chrome och så vidare. Session hijacking med hjälp av cookies är inte begränsat till en viss webbläsare.
DS.


/John Wilander, chapter co-leader

13 kommentarer:

NiK sa...

Kan "kaparen" sedan fritt surfa runt på min Facebook eller ser han bara samma sida som jag surfar på?

Tack, bra artikel för övrigt.

John Wilander sa...

@NiK:

Attackeraren kan surfa fritt på ditt konto inkl logga ut er båda. Facebook, Twitter och de andra sårbara tjänsterna kan inte skilja på sessioner med samma cookie. Särskilt inte när de kommer från samma nät.

Följ gajden bara så kan du testa med dina egna konton utan att göra något olagligt.

Ero sa...

För mig funkar det inte, bad tjejen logga in på facebook för att testa, funka inte, testade starta upp min netbook för att testa. Ingen succé där heller. Funkar bara på samma dator och annan webläsare.

Jag har: OSX 10.6
Tjejen: Win 7 / Chrome
Netbook: Meego / Chrome

John Wilander sa...

@Ero

Hmm ... vi testade på ett par öppna nät på stan idag (utan att kapa okända konton förstås). Det funkade bra på Waynes Coffee men vi hade problem på biblioteket. Kan ju ha att göra med hur nätverkstrafiken skickas hemma hos er.

Ledsen men jag har inga bra tips. Inte just nu i alla fall.

Pontus sa...

Det bästa var om man skulle tvinga SSL över hela sidan istället för att gå från HTTP till HTTPS och sen tillbaka till HTTP. Det är egentligen idiotiskt.

Som det ser ut i dagsläget går det inte att tvinga 100% SSL i alla sessioner, men man kan göra ett gott försök.

http://www.digissl.eu/Firesheep.pdf för er web-administratörer.

John! Älskar din blogg och försökte få tag på dig när jag fick reda på Firesheep, men hittade inga kontakt uppgifter :(

John Wilander sa...

@Pontus

HTTPS på inloggningssidan och sen HTTP är dumt, ja. Men i fallet Facebook är det ju ännu värre, nämligen en HTTP-sidan för inloggning men POST via HTTPS.

OWASP har skrivit en bra gajd för utveckling med HTTPS som tar upp dessa problem: http://www.owasp.org/index.php/Transport_Layer_Protection_Cheat_Sheet

Sen bloggade jag om STS som ett alternativ från serversidan (http://owaspsweden.blogspot.com/2010/08/sakrare-ssl-med-strict-transport.html) men det lär ju inte locka Facebook eftersom de inte ens kör HTTPS.

Alternativet som jag gärna skulle se Facebook kolla på om de vägrar köra HTTPS fullt ut vore:

1. Ha en extra sessionskaka med secure-attributet satt
2. Göra HTTPS POST för känsliga saker såsom posta meddelanden och länkar, ändra profil ...


[Kul att du gillar bloggen! Jag är lätt att få tag på: john punkt wilander at owasp punkt org ;)]

Anonym sa...

Kör VPN...

Erik Uddenberg sa...

Hej,

Kommer detta att funka med alla slags trådlösa nätverkskort? Krävs det inte att de måste kunna köras i promisc.mode för att du ska kunna se den övriga trafiken på det nätet du befinner dig i?

Mvh Erik

Unknown sa...

Ja, det är en del jag inte tycker förklaras tillräckligt väl av någon. Om jag förstår det hela rätt använder Firesheep pcap-biblioteket som ställer in nätverkskortet i promiscuous-läge. Så på ett okrypterat wifi-nät får man tillgång till allas paket (om ens wifi-kort går att ställa om antar jag?), men på det trådbunda nätet måste attackeraren har kontrollen över någon gateway eller switch (hubb är det väl inte så många som kör med längre kanske ... ) Korrekt?

Michael Boman sa...

@Ero

Om du har en modern accesspunkt och kör (WPA2) kryptering på denna så kan man inte sniffa dom olika datorerna på nätverket (om man inte utnyttjar Hole196) eftersom varje klient (laptop) har en egen nyckel till accesspunkten.

Michael Boman sa...

@Erik Uddenberg

Ja, ditt nätverkskort måste stödja "monitor"-läge och tyvärr gör inte alla det.

Erik Uddenberg sa...

@M.Boman

Fast värt att tänka på är att Monitor-mode != Promisc mode.

Men jag förstår vad du syftar på.
Det är väl först i och med Vistas implementation av 802.11-stacken med NDIS 6 som monitor mode blivit lätt tillgängligt för win-anhängare. Tidigare har endast kommersiella drivers kunnat implementera monitor mode till win. Nu är det betydligt enklare.

I monitor mode lyssnar du på all trafik oavsett frekvens/kanal. I promisc-mode ser du all trafik på ett specificerat/associerat wlan-nätverk. Jag tror att det är promisc-mode som avses i detta fall.

Peter Magnusson sa...

Kort och gott finns det ett par tänkbara scenarios:

1. Trådlöst, okrypterat

2. Trådlöst, sårbar kryptering WEP, där alla krypterar/dekrypterar med samma nyckel.

3. Trådlöst, sårbar kryptering WPA2 PSK + arp poisoning eller WPA2 + hole196

4. Trådbundet, om ifrastruktur och klienter är sårbara mot någon klassisk MitM attack (ex ARP poisoining)


Eftersom firesheep's styrka är just att det gör en äldre attack enkel, så skulle jag hävda att poängen är just att angripa okrypterade och WEP krypterade trådlösa nätverk, eftersom man där inte behöver krångla för att det skall funka.

WPA2 och trådbundet kräver andra attackverktyg för att få attacken att fungera, och då försvinner poängen med att ha ett lättanvänt verkyg för själva session hijackingen.