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.
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).
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.
En lyckad SQL-injektionsattack kan uppfattas som helt symptomfri. Men ibland finns det synliga tecken. Här ingår bland annat:
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:
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:
Out-of-band SQLi:
Den här typen av SQL-attack äger rum under något av två scenarier:
En genomförd SQL-injektionsattack kan ha allvarliga konsekvenser för ett företag. Orsaken är att en SQL-injektionsattack kan:
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.
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.
I vanliga frågor om SQLi ingår:
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.
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.
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.
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:
Vidare läsning: