Attacker med SQL-injektioner utgör en av de äldsta sårbarheterna i webbapplikationer – de har diskuterats ända sedan slutet av 1990-talet – men är relevanta än i dag. Med den här förklaringen beskriver vi vilka de är, hur de fungerar och hur du kan förebygga dem.
SQL-injektion – betydelse och definition
En SQL-injektion, ibland förkortad SQLi, är en typ av sårbarhet där en angripare använder en del av en SQL-kod (Structured Query Language) för att manipulera en databas och få tillgång till potentiellt värdefull information. Det är en av de mest utbredda och hotfulla typerna av attacker eftersom den potentiellt kan användas mot alla webbprogram eller webbplatser som använder en SQL-baserad databas (vilket merparten gör).
Hur fungerar SQL-injektionsattacker?
För att förstå en SQL-injektion måste vi känna till vad Structured Query Language (SQL) innebär. SQL är ett frågespråk som används vid programmering för att få åtkomst till, ändra och radera data som lagrats i relationsdatabaser. Eftersom den övervägande delen av webbplatser och webbapplikationer är beroende av SQL-databaser kan en SQL-injektionsattack få allvarliga konsekvenser för organisationer.
En SQL-fråga är en begäran som skickas till en databas angående någon typ av aktivitet eller funktion, t.ex. urval av data eller exekvering av SQL-kod som ska utföras. Ett exempel är när inloggningsuppgifter skickas via ett webbformulär för att ge en användare åtkomst till en webbplats. Vanligtvis är den här typen av webbformulär endast avsedd för att mata in vissa typer av data, t.ex. namn och/eller lösenord. När den informationen läggs till kontrolleras den mot en databas och om den matchar så beviljas användaren tillträde. I annat fall nekas användaren åtkomst.
Potentiella problem uppkommer eftersom de flesta webbformulär inte har något sätt att stoppa att ytterligare information anges i formulären. Hackare kan utnyttja den här svagheten och använda inmatningsrutor i formuläret för att skicka en egen begäran till databasen. Det skulle kunna innebära att de kan utföra en rad olika illasinnade aktiviteter, från att stjäla känslig information till att manipulera informationen i databasen i egna syften.
Genom det stora antalet webbplatser och servrar som använder databaser har sårbarheten för SQL-injektioner kommit att utgöra en av de äldsta och mest utbredda typerna av cyberangrepp. Flera utvecklingar inom hackersamfundet har ökat risken för den här typen av attacker, främst tillkomsten av verktyg för att upptäcka och utnyttja SQL-injektion. Sådana verktyg är fritt tillgängliga från utvecklare av öppen källkod. De ger cyberbrottslingar möjlighet att utföra automatiska attacker på bara några minuter genom att ge dem tillgång med ett enda klick till alla tabeller eller kolumner i databasen för att kunna starta attacken.
Symptom på SQLi
En lyckad SQL-injektionsattack kan uppfattas som helt symptomfri. Men ibland finns det synliga tecken. Här ingår bland annat:
- Du får ett överdrivet stort antal förfrågningar inom en kort period. Som exempel ser du en mängd e-postmeddelanden från kontaktformuläret på din webbplats.
- Annonser som omdirigerar till misstänkta webbplatser.
- Märkliga popup-fönster och meddelandefel.
Typer av SQL-injektion
Beroende på hur SQL-injektioner får åtkomst till bakgrundsdata och omfattningen av den potentiella skada som de kan orsaka, kan de delas upp i tre olika kategorier:
In-band SQLi:
Den här typen av SQLi-attacker är praktisk för angripare då de använder samma kommunikationskanal för att starta attacker och insamla resultat. Den här typen av SQLi-attack har två undervariationer:
- Felbaserad SQLi: Databasen skapar ett felmeddelande till följd av angriparens åtgärder. Angriparen samlar in information om databasens infrastruktur som baseras på data som genereras av sådana felmeddelanden.
- Union-baserad SQLi: Angriparen använder UNION SQL-operatören för att erhålla önskade data genom att slå samman flera valda uttalanden i ett enda HTTP-svar.
Inferentiell SQLi (även känd som blind SQL-injektion):
Den här typen av SQLi involverar angripare som använder serverns svar och beteendemönster efter att ha skickat nyttolastsdata för att lära sig mer om dess struktur. Data överförs inte från webbplatsens databas till angriparen, varför angriparen inte ser information om attacken in-band (härifrån kommer termen ”blind SQLi”). Inferentiell SQLi kan klassificeras i två undertyper:
- Tidsbaserad SQLi: Angripare skickar en SQL-fråga till databasen, vilket gör att den väntar några sekunder innan den besvarar frågan som sann eller falsk.
- Booleansk SQLi: Angripare skickar en SQL-fråga till databasen och låter programmet svara genom att generera ett sant eller falskt resultat.
Out-of-band SQLi:
Den här typen av SQL-attack äger rum under något av två scenarier:
- När angripare inte kan använda samma kanal för att starta attacken som när de samlar in information, eller
- när en server är alltför långsam eller instabil för att utföra sådana åtgärder.
Påverkan av SQL-injektionsattacker
En genomförd SQL-injektionsattack kan ha allvarliga konsekvenser för ett företag. Orsaken är att en SQL-injektionsattack kan:
- Exponera känsliga data. Angripare kan hämta data, vilket riskerar att känsliga data som lagras på SQL-servern blir utsatta.
- Äventyra dataintegriteten. Angripare kan ändra eller radera information från ditt system.
- Äventyra användarnas sekretess. Beroende på vilka data som lagras på SQL-servern riskerar en attack att blottlägga känslig användarinformation, t.ex. i form av adresser, telefonnummer och information om betalkort.
- Ge en angripare administratörsåtkomst till ditt system. Om en databasanvändare har administrativa behörigheter kan en angripare få åtkomst till systemet med hjälp av skadlig kod.
- Ge en angripare allmän åtkomst till ditt system. Om du använder svaga SQL-kommandon för att kontrollera användarnamn och lösenord, kan en angripare få åtkomst till ditt system utan att känna till en användares inloggningsuppgifter. Därifrån kan en angripare orsaka kaos genom att komma åt och manipulera känslig information.
Kostnaden för en SQL-injektionsattack är inte enbart ekonomisk: den kan också leda till förlust av kundförtroende och skadat anseende om personlig information i form av namn, adresser, telefonnummer och betalkortsinformation råkar bli stulna. När kundförtroendet har skadats kan det vara mycket svårt att återställa.
Exempel på SQL-injektion
Under årens lopp har många organisationer fallit offer för SQLi. Några högprofilerade exempel omfattar:
Fortnite, 2019
Fortnite är ett onlinespel med över 350 miljoner användare. År 2019 upptäcktes en sårbarhet för SQL-injektion som riskerade att ge angripare åtkomst till användarkonton. Sårbarheten åtgärdades.
Cisco, 2018
En sårbarhet för SQL-injektion upptäcktes 2018 i Ciscos primära licenshanterare. Till följd av sårbarheten kunde angripare få skalåtkomst till system där licenshanteraren var utplacerad. Cisco har därefter åtgärdat sårbarheten.
Tesla, 2014
År 2014 meddelade säkerhetsforskare att de kunde göra intrång på Teslas webbplats med hjälp av SQL-injektion och därigenom skaffa administrativa privilegier och stjäla användardata.
Vanliga frågor om SQL-injektionsattacker
I vanliga frågor om SQLi ingår:
Vad är en SQL-injektionsattack?
En SQL-injektionsattack använder skadlig SQL-kod för att manipulera backend-databasen och få åtkomst till privat information. Sådan information kan inkludera känsliga företagsdata, användarlistor eller kunduppgifter. SQL står för ”Structured Query Language”, dvs. strukturerat frågespråk, och SQL-injektion förkortas ibland som SQLi.
Vad gör en SQL-injektion?
Med SQL-injektionsattacker kan angripare förfalska identiteter, ändra befintliga data, avslöja data om systemet, förstöra data eller göra det otillgängligt på andra sätt samt bli administratörer av databasens server. SQL-injektionsattacker kan orsaka allvarlig skada på företagen. Här ingår förlust av kundförtroende om intrång skett i sekretessbelagda användardata.
Hur vanliga är SQL-injektionsattacker?
Då de är relativt lätta att genomföra och den potentiella belöningen är stor, är SQL-injektionsattacker inte ovanliga. Statistiken varierar, men SQL-injektionsattacker beräknas utgöra merparten av attackerna på programvaruapplikationer. Enligt Open Web Application Security Project utgjorde injektionsattacker, där SQL-injektioner ingår, den tredje allvarligaste säkerhetsrisken för webbapplikationer under 2021.
Så här förebygger du SQL-injektionsattacker
För företag som vill förebygga SQL-injektioner ingår följande i de viktiga principerna för att skydda webbplatser och webbapplikationer:
Personalutbildning:Öka medvetenheten om SQLi-baserade risker inom teamet som ansvarar för webbapplikationen och ge nödvändig, rollbaserad utbildning åt alla användare.
Håll koll på användarinmatningar:Alla användarinmatningar som används i en SQL-fråga medför risk. Behandla inmatningar från autentiserade och/eller interna användare på samma sätt som offentliga inmatningar tills de har verifierats. Ge endast nödvändiga behörigheter till de konton som ansluter till SQL-databasen. Använd vitlistor i stället för svartlistor som standardrutin för att verifiera och filtrera användarinmatningar.
Använd de senaste versionerna:För att uppnå maximalt skydd är det viktigt att använda den senaste versionen av utvecklingsmiljön då äldre versioner kan sakna aktuella säkerhetsfunktioner. Se till att installera den senaste programvaran och de senaste säkerhetspatcharna när de är tillgängliga.
Sök kontinuerligt igenom webbapplikationer:
Använd omfattande hanteringsverktyg för programprestanda. Genom att regelbundet genomsöka webbapplikationer kommer du att kunna identifiera och åtgärda potentiella sårbarheter innan någon allvarlig skada har uppstått.
Använd en brandvägg:En webbapplikation med brandvägg (WAF) används ofta för att filtrera bort SQLi och andra onlinehot. En WAF förutsätter en omfattande lista över signaturer som ofta uppdateras och låter den filtrera bort skadliga SQL-frågor. Vanligtvis innehåller listan signaturer som ska adressera specifika attackvektorer. Den justeras regelbundet som svar på nyligen upptäckta sårbarheter.
Relaterade produkter:
- Kaspersky Anti-Virus
- Kaspersky Total Security
- Kaspersky Internet Security
- Kaspersky Password Manager
- Kaspersky Secure Connection
Vidare läsning: