SQL-injeksjonsangrep er ett av de eldste sikkerhetshullene i webapplikasjoner – de går tilbake til slutten av 1990-tallet, men er stadig aktuelle i dag. Denne artikkelen beskriver hva disse angrepene går ut på, hvordan de fungerer og hvordan du kan hindre dem.
SQL-injeksjon – mening og definisjon
En SQL-injeksjon, som av og til forkortes til SQLi, er en type sikkerhetshull der en angriper bruker en bit SQL-kode (SQL betyr som kjent Structured Query Language eller "strukturert spørrespråk") til å manipulere en database og få tilgang til potensielt verdifull informasjon. Dette er en av de vanligste og mest truende typer angrep fordi de potensielt kan brukes mot enhver webapplikasjon eller nettside som bruker en SQL-basert database (de fleste databaser er SQL-basert).
Hvordan fungerer SQL-injeksjonsangrep?
For å forstå SQL-injeksjon er det viktig å vite hva strukturert spørrespråk (SQL) er. SQL er et spørrespråk som brukes i programmering for å få tilgang til, endre og slette data som er lagret i relasjonelle databaser. Siden de fleste nettsteder og webapplikasjoner er basert på SQL-databaser, kan et SQL-injeksjonsangrep ha alvorlige følger for bedrifter og organisasjoner.
En SQL-spørring er en forespørsel som sendes til en database for en bestemt type aktivitet eller funksjon, for eksempel en forespørsel om data eller utførelse av SQL-kode. Et eksempel er når påloggingsinformasjon sendes inn via et webformular med sikte på å gi en bruker tilgang til et nettsted. Vanligvis er denne typen webformular beregnet på å godta bare spesifikke typer data som for eksempel navn og/eller passord. Når disse opplysningene legges til, sammenlignes de med en database og hvis de stemmer, får brukeren tilgang. Hvis ikke, nektes tilgang.
Potensielle problemer oppstår fordi de fleste webformularer ikke har noen funksjon for å hindre at ekstra informasjon tastes inn i dem. Angripere kan utnytte denne svakheten og bruke inntastingsfeltene på formularene til å sende sine egne forespørsler til databasen. Dette kan potensielt gi dem sjansen til å utføre en rekke fiendtlige aktiviteter, fra tyveri av sensitive data til manipulering til egen fordel av informasjon i databasen.
Siden så mange nettsteder og servere bruker databaser, er sikkerhetshull fra SQL-injeksjon en av de eldste og mest utbredte formene for nettangrep. Flere nye funksjoner i hackermiljøet har økt risikoen for denne typen angrep. De mest kjente er verktøyene som gjør det mulig å detektere og utnytte SQL-injeksjon. Med disse verktøyene, som kan skaffes gratis fra åpen kilde-utviklere, kan nettforbrytere automatisk utføre angrep på bare et par minutter ved at de får tilgang til alle tabeller eller kolonner i databasen med en enkel klikk-og-angrip-prosess.
Symptomer på SQLi
Et SQL-angrep kan nå sitt mål uten å vise noen symptomer overhodet. Men enkelte ganger kan det foreligge ytre tegn, blant annet:
- Mottak av et usannsynlig stort antall forespørsler på kort tid. Du kan for eksempel se mange e-postmeldinger fra din nettsides kontaktformular.
- Reklamer som kobler til mistenkelige nettsteder.
- Underlige popup-meldinger og meldingsfeil.
Typer SQL-injeksjon
Avhengig av hvordan de får tilgang til bakenforlggende data og i hvilken grad de utløser potensiell skade, faller SQL-injeksjonene inn i tre kategorier:
Innenbånds SQLi:
Denne typen SQLi-angrep er enkle og likefremme for angriperne fordi de bruker samme kommunikasjonskanal til å starte angrep og samle inn resultatene. Denne typen SQLi-angrep har to undervariasjoner:
- Feilbasert SQLi: Databasen generer en feilmelding på grunn av angriperens handlinger. Angriperen samler informasjon om databasens infrastruktur ut fra dataene disse feilmeldingene genererer.
- Union-basert SQLi: Angriperen bruker UNION SQL-operatøren til å oppnå ønskede data ved å samle flere valgte setninger i ett enkelt HTTP-svar.
Inferential SQLi (også kjent som Blind SQL-injeksjon):
Denne typen SQLi involverer angripere som bruker svar- og oppførselsmønstrene på serveren etter å ha sendt datanyttelast for å lære mer om serverens struktur. Dataene overføres ikke fra nettsidens database til angriperen så sistnevnte ser ikke informasjon om angrepet "innenbånds" (derav uttrykket "blind SQLi"). Inferential SQLi kan deles inn i to undertyper:
- Tidsbasert SQLi: Angriperne sender en SQL-spørring til databasen og tvinger den til å vente noen sekunder før den reagerer på spørringen som sann eller falsk.
- Boolsk SQLi: Angriperne sender en SQL-spørring til databasen og lar applikasjonen reagere ved å generere et sant eller falskt resultat.
Utenfor bånd-SQLi:
Denne typen SQL-angrep skjer i to tilfeller:
- Når angriperne ikke kan bruke samme kanal for å sette i gang angrepet og til å samle inn informasjon; eller
- Når en server er for langsom eller ustabil ved utførelsen av disse handlingene.
Følger av SQL-injeksjonsangrep
Et effektivt SQL-injeksjonsangrep kan ha alvorlige følger for en bedrift. Det kan nemlig:
- Eksponere sensitive data. Angripere kan hente inn data, noe som risikerer å eksponere sensitive data som er lagret på SQL-serveren.
- Svekke dataintegriteten. Angripere kan endre eller slette informasjon på systemet ditt.
- Ramme brukernes privatsfære. Avhengig av dataene som er lagret på SQL-serveren, kan et angrep eksponere sensitive brukeropplysninger som adresser, telefonnumre og kredittkortinformasjon.
- Gi en angriper administratortilgang til systemet ditt. Hvis en databasebruker har administrasjonsrettigheter, kan angriperen få tilgang til systemet via skadelig kode.
- Gi en angriper generell tilgang til systemet ditt. Hvis du bruker svake SQL-kommandoer til å kontrollere brukernavn og passord, kan en angriper oppnå tilgang til systemet ditt uten å kjenne til en brukers påloggingsopplysninger. Derfra kan en angriper volde skade ved å åpne og manipulere sensitiv informasjon.
Kostnadene ved SQL-injeksjonsangrep er ikke bare finansielle: De kan også innebære tap av kundetillit og goodwill dersom personlige opplysninger som navn, adresser, telefonnumre og kredittkortinformasjon stjeles. Brutt tillit kan være vanskelig å gjenopprette.
Eksempler på SQL-injeksjon
Mange bedrifter har bukket under for SQLi i årenes løp. Her er noen høyprofilerte eksempler:
Fortnite, 2019
Fortnite er et online-spill med over 350 millioner brukere. I 2019 ble det oppdaget sikkerhetshull fra SQL-injeksjon som kunne la angriperne få tilgang til brukerkontoene. Sikkerhetshullet ble korrigert.
Cisco, 2018
Et sikkerhetshull fra SQL-injeksjon ble funnet i Cisco Prime License Manager i 2018. Sikkerhetshullet ga angriperne Shell-tilgang til systemer der lisensbehandlingen var installert. Cisco har siden korrigert sikkerhetshullet.
Tesla, 2014
I 2014 annonserte sikkerhetsforskere at de kunne bryte seg inn på Teslas nettsted ved hjelp av SQL-injeksjon, skaffe seg administrasjonsprivilegier og stjele brukerdata i prosessen.
Ofte stilte spørsmål om SQL-injeksjonsangrep
Her er noen hyppige spørsmål om SQLi:
Hva er et SQL-injeksjonsangrep?
Et SQL-injeksjonsangrep bruker skadelig SQL-kode til å manipulere bakenforliggende databaser og få tilgang til personlige opplysninger. Dette kan omfatte sensitive data om bedriften, brukerlister eller kundeopplysninger. SQL betyr "Structured Query Language" (strukturert spørrespråk), og SQL-injeksjon forkortes ofte til SQLi.
Hva kan skje ved SQL-injeksjon?
SQL-injeksjon gir angripere mulighet til å forfalske identitet, endre eksisterende data, kommunisere data på systemet, ødelegge data eller gjøre dem utilgjengelige og bli administratorer av databaseserveren. SQL-injeksjonsangrep kan påføre bedrifter alvorlig skade, blant annet tap av kundenes tillit hvis konfidensielle brukerdata avsløres.
Hvor vanlige er SQL-injeksjonsangrep?
Fordi de er relativt lette å implementere og fordi den potensielle gevinsten er stor, er SQL-injeksjonsangrep ikke uvanlige. Statistikken varierer, men det anslås at SQL-injeksjonsangrepene omfatter brorparten av angrepene på programvareapplikasjoner. I henhold til Open Web Application Security Project (OWASP) var injeksjonsangrep, som omfatter SQL-injeksjoner, den tredje største sikkerhetsrisikoen for webapplikasjoner i 2021.
Hvordan forebygge SQL-injeksjonsangrep
For bedrifter som er opptatt av SQL-injeksjonsforebygging, gjelder blant annet følgende nøkkelprinsipper for å bidra til å forsvare nettsteder og webapplikasjoner:
Stabsopplæring:Generer bevissthet om SQLi-baserte risikoer i teamet som er ansvarlig for din webapplikasjon og gi alle brukere nødvendig rollebasert opplæring.
Hold kontroll med brukernes inntasting:All brukerinntasting i en SQL-spørring medfører risiko. Anse inntasting fra autentiserte og/eller interne brukere på samme måte som offentlig inntasting til den er kontrollert. Gi kontoer som kobler til SQL-databasen, minimumsrettighetene som trengs, ikke mer. Bruk hvitlister som standard praksis i stedet for svartelister til å sjekke og filtrere brukernes inntasting.
Bruk de siste versjonene:Det er viktig å bruke den siste versjonen av utviklingsmiljøet for å maksimere beskyttelsen, da eldre versjoner kan mangle de aktuelle sikkerhetsfunksjonene. Pass på å installere de siste programvare- og sikkerhetsoppdateringene så snart de er tilgjengelige.
Skan webapplikasjoner kontinuerlig:
Bruk komplette verktøy til å styre applikasjonsytelser. Ved regelmessig skanning av webapplikasjoner identifiseres og behandles potensielle sikkerhetshull før de blir i stand til å forårsake alvorlig skade.
Bruk en brannmur:En webapplikasjons brannmur (WAF) brukes ofte til å filtrere bort SQLi samt andre nettrusler. En WAF bygger på en lang, hyppig oppdatert liste over signaturer som gjør at den kan filtrere bort skadelige SQL-spørringer. Listen inneholder vanligvis signaturer rettet mot spesifikke angrepsvektorer. Den oppdateres jevnlig som svar på nylig oppdagede sikkerhetshull.
Relaterte produkter:
- Kaspersky Anti-Virus
- Kaspersky Total Security
- Kaspersky Internet Security
- Kaspersky Password Manager
- Kaspersky Secure Connection
Videre lesning: