Siirry pääsisältöön

SQL-injektiohyökkäykset kuuluvat vanhimpiin verkkosovellusten haavoittuvuuksiin – niistä on puhuttu jo 1990-luvun loppupuolelta, mutta ne ovat ajankohtaisia tänäkin päivänä. Tässä tiedotteessa kerrotaan, mitä ne ovat, miten ne toimivat ja miten voit estää ne.

SQL-injektio – merkitys ja määritelmä

SQL-injektio, josta käytetään joskus lyhennettä SQLi, on haavoittuvuus, jossa hakkeri käyttää osaa koostettu kyselykieli (structured query language, SQL) -koodista manipuloidakseen tietokantaa ja päästääkseen käsiksi mahdollisesti arvokkaaseen tietoon. Se lukeutuu yleisimpiin ja uhkaavimpiin hyökkäystyyppeihin, koska sitä voidaan käyttää mitä tahansa SQL-pohjaista tietokantaa hyödyntävää verkkosovellusta tai verkkosivustoa vastaan (mikä kattaa useimmat sovellukset tai sivustot).

Miten SQL-injektiohyökkäykset toimivat?

SQL-injektion ymmärtämiseksi on tärkeää tietää, mikä on koostettu kyselykieli (SQL). SQL on kyselykieli, jota käytetään ohjelmoinnissa relaatiotietokantoihin tallennettuihin tietoihin pääsemiseksi, niiden muokkaamiseksi ja poistamiseksi. Koska suurin osa verkkosivustoista ja verkkosovelluksista pohjautuu SQL-tietokantoihin, SQL-injektiohyökkäys voi aiheuttaa vakavia seurauksia organisaatioille.

SQL-kysely on pyyntö, joka lähetetään tietokannalle jonkinlaista toimintaa tai toimintoa varten, kuten tiedon kyselyä tai suoritettavan SQL-koodin toteutusta varten. Esimerkiksi kun sisäänkirjautumistiedot annetaan verkkolomakkeen välityksellä, jotta käyttäjä pääsee sivustolle. Tyypillisesti tämän kaltainen verkkolomake on suunniteltu hyväksymään vain tietynlaisia tietoja, kuten nimi ja/tai salasana. Kun tämä tieto lisätään, se tarkistetaan tietokannan avulla ja jos se täsmää, käyttäjälle sallitaan sisäänpääsy. Jos se ei täsmää, pääsy evätään.

Potentiaalisia ongelmia syntyy, koska useimmissa verkkolomakkeissa ei ole keinoa pysäyttää ylimääräisten tietojen lisäystä lomakkeille. Hakkerit voivat käyttää tätä heikkoutta hyväkseen ja käyttää lomakkeen syöttöruutuja lähettääkseen omat pyyntönsä tietokantaan. Tämä saattaa mahdollistaa sen, että he voivat suorittaa erilaisia rikollisia toimia, arkaluonteisten tietojen varastamisesta tietokannan tietojen peukaloimiseksi omiin tarkoituksiinsa.

Koska suurin osa verkkosivustoista ja palvelimista käyttää tietokantoja, SQL-injektion haavoittuvuudet kuuluvat kyberhyökkäysten vanhimpiin ja levinneisimpiin tyyppeihin. Useat hakkeriyhteisön kehitykset ovat lisänneet tämän tyyppisen hyökkäyksen riskiä, näistä tärkeimmät SQL-injektion tunnistamisen ja hyödyntämisen työkalut. Nämä työkalut ovat vapaasti saatavilla avoimen lähdekoodin kehittäjiltä, ja niiden avulla kyberrikolliset pystyvät tekemään hyökkäyksiä automaattisesti vain muutamassa minuutissa ja pääsemään mihin tahansa tietokannan taulukkoon tai sarakkeesen vain yhdellä napsautuksella ja hyökkäämään prosessiin.

Mistä tunnistaa SQLi:n

Onnistunut SQL-injektiohyökkäys ei välttämättä näy mitenkään. Joskus siitä on kuitenkin merkkejä, kuten:

  • Liiallisten pyyntöjen vastaanottaminen lyhyellä aikavälillä. Saatat esimerkiksi nähdä lukuisia sähköposteja verkkosivuston yhteydenottolomakkeeltasi.
  • Mainoksia, jotka uudelleenohjaavat epäilyttäville verkkosivustoille.
  • Omituisia ponnahdusikkunoita ja virheviestejä. 

SQL-injektion tyypit

Riippuen siitä, miten SQL-injektiot pääsevät taustatietoihin ja miten paljon vahinkoa ne voivat saada aikaan, ne on jaettu kolmeen kategoriaan:

Kaistan sisäinen SQLi: 

Tämän tyyppinen SQLi-hyökkäys on helppo hyökkääjille, sillä ne käyttävät samaa viestintäkanavaa hyökkäämiseen ja tulosten keräämiseen. Tällä SQLi-hyökkäyksellä on vielä kaksi variaatiota:

  • Virheperusteinen SQLi: Tietokanta tuottaa virheviestin hyökkääjän toimien perusteella. Hyökkääjä kerää tietoa tietokannan infrastruktuurista näiden virheviestien tuottaman tiedon perusteella.
  • Yhdistysoperaation SQLi: Hyökkääjä käyttää UNION SQL -operaattoria saadakseen tarvittavat tiedot yhdistämällä monivalintalausekkeita yhteen HTTP-vastaukseen.

Sokea SQL-injektio: 

Tämän tyyppisessä SQLi:ssä hakkerit käyttävät palvelimen vastaus- ja käytösmalleja sen jälkeen, kun he ovat lähettäneet datan tietosisältöä saadakseen lisätietoja sen rakenteesta. Data ei siirry verkkosivuston tietokannasta hyökkääjälle, joten tämä ei näe tietoa kaistan sisäisestä hyökkäyksestä (tämän vuoksi käytetään nimitystä "Sokea SQLi"). Sokea SQLi voidaan luokitella edelleen kahteen alatyyppiin:

  • Ajan viivästyttämisen SQLi: hakkerit lähettävät SQL-kyselyn tietokantaan, jolloin tietokanta odottaa muutaman sekunnin ennen kuin se antaa kyselyn vastaukseksi tosi tai epätosi.
  • Boolean tekniikan SQLi: hakkerit lähettävät SQL-kyselyn tietokantaan ja antavat sovelluksen vastata luoden joko tosi- tai epätosi-vastauksen.

Kaistan ulkopuolinen, Out-of-band SQLi: 

Tämän tyyppinen SQL-hyökkäys tapahtuu kahdessa eri tilanteessa:

  • kun hakkerit eivät kykene käyttämään samaa kanava sekä hyökkäämiseen että tiedonkeruuseen tai
  • kun palvelin on joko liian hidas tai epävakaa näiden toimien suorittamiseksi.
Interior of a server room. SQL injection attacks are one of the oldest web application vulnerabilities

SQL-injektiohyökkäysten vaikutus

Onnistuneella SQL-injektiohyökkäyksellä voi olla vakavia seurauksia yritykselle. Tämä johtuu siitä, että SQL-injektiohyökkäyksellä voidaan

  • paljastaa arkaluonteisia tietoja. Hyökkääjät voiva saada tietoja, jolloin vaarana on SQL-palvelimelle tallennettujen arkaluonteisia tietojen paljastuminen.
  • vaarantaa tietojen eheys. Hyökkääjät voivat muuttaa tai poistaa tietoa järjestelmästäsi.
  • vaarantaa käyttäjien yksityisyys. SQL-palvelimelle tallennettujen tietojen perusteella hyökkäys saattaa paljastaa arkaluonteisia käyttäjätietoja, kuten osoitteita, puhelinnumeroita ja luottokorttitietoja.
  • antaa hakkerille järjestelmänvalvojan oikeudet järjestelmääsi. Jos tietokannan käyttäjällä on järjestelmänvalvojan käyttöoikeudet, hyökkääjä voi päästä järjestelmään haittakoodia käyttämällä.
  • antaa hakkerille yleinen pääsy järjestelmääsi. Jos käytät heikkoja SQL-komentoja käyttäjänimien ja salasanojen tarkistamiseen, hyökkääjä voi päästä järjestelmääsi tietämättä käyttäjätietoja. Sieltä käsin hyökkääjä voi aiheuttaa sekaannusta pääsemällä arkaluonteisiin tietoihin ja peukaloimalla niitä.

SQL-injektiohyökkäyksen aiheuttamat tappiot eivät ole vain rahallisia: hyökkäys voi johtaa asiakkaan luottamuksen ja maineen menetykseen, mikäli henkilökohtaisia tietoja, kuten nimiä, osoitteita, puhelinnumeroja ja luottokortin numeroita varastetaan. Kun asiakkaan luottamus on menetetty, sitä voi olla vaikea saada takaisin.

Esimerkkejä SQL-injektiosta

Vuosien mittaan monet yritykset ovat joutuneet SQLi:n kohteeksi. Näihin lukeutuvat myös seuraavat tunnetut nimet:

Fortnite, 2019

Fortnite on verkkopeli, jolla on yli 350 miljoonaa käyttäjää. Vuonna 2019 havaittiin SQL-injektion haavoittuvuus, joka mahdollisti sen, että hakkerit pääsivät käsiksi käyttäjätileihin. Haavoittuvuus korjattiin.

Cisco, 2018

SQL-injektion haavoittuvuus löydettiin Cisco Prime License Manager -ohjelmasta vuonna 2018. Haavoittuvuuden ansiosta hakkerit pääsivät komentotulkkiin järjestelmissä, joissa License Manageria käytettiin. Cisco on sittemmin korjannut haavoittuvuuden.

Tesla, 2014

Vuonna 2014 tietoturvatutkijat ilmoittivat kykeneensä hakkeroimaan Teslan verkkosivuston SQL-injektion avulla, saaneensa järjestelmänvalvojan käyttöoikeudet ja varastaneensa käyttäjätietoja.

Usein kysytyt kysymykset SQL-injektiohyökkäyksistä

SQLi:n usein kysyttyjä kysymyksiä ovat seuraavat:

Mikä on SQL-injektiohyökkäys?

SQL-injektiohyökkäyksessä hyödynnetään SQL-haittakoodeja taustatietojen tietokannan manipuloimiseen ja yksityisten tietojen saamiseen. Näihin tietoihin voivat lukeutua arkaluonteiset yritystiedot, käyttäjäluettelot tai asiakastiedot. SQL tarkoittaa koostettua kyselykieltä, ja SQL-injektiosta käytetään välillä lyhennettä SQLi.

Mitä SQL-injektio tekee?

SQL-injektiohyökkäyksissä hakkerit voivat huijata identiteettinsä suhteen, muuntaa olemassa olevia tietoja, luovuttaa järjestelmän tietoja, tuhota dataa tai tehdä siitä muutoin saavuttamatonta ja ryhtyä tietokantapalvelimen järjestelmänvalvojiksi. SQL-injektiohyökkäykset voivat aiheuttaa huomattavaa haittaa yrityksille ja myös asiakkaiden luottamuksen menettämisen, mikäli luottamuksellisiin käyttäjätietoihin päästään käsiksi.

Miten yleisiä SQL-injektiohyökkäykset ovat?

SQL-injektiohyökkäykset on suhteellisen helppo toteuttaa, ja niiden potentiaalinen tuotto on suuri, joten ne eivät ole harvinaisia. Tilastotiedot vaihtelevat, mutta arvion mukaan SQL-injektiohyökkäykset ovat enemmistönä ohjelmistosovelluksiin kohdistuvissa hyökkäyksissä. Open Web Application Security Project -projektin mukaan injektiohyökkäykset, joihin SQL-injektiot sisältyvät, muodostivat kolmanneksi vakavimman verkkosivustojen turvallisuusriskin vuonna 2021.

Miten SQL-injektiohyökkäykset voidaan torjua?

Seuraavassa on pääperiaatteet verkkosivustojen ja verkkosovellusten puolustamiseksi yrityksille, jotka haluavat ennaltaehkäistä SQL-injektion:

Henkilökunnan koulutus:lisää tietoisuutta SQLi-riskeistä verkkosovelluksestasi vastuussa olevan tiimin keskuudessa ja anna tarvittavaa tehtäväkohtaista koulutusta kaikille käyttäjille.

Pidä käyttäjien syötteitä silmällä:Kaikenlaiset SQL-kyselyssä käytetyt käyttäjän syötteet aiheuttavat riskin. Kohtele varmennetuilta ja/tai sisäisiltä käyttäjiltä tulevaa syötettä samoin kuin julkista syötettä, kunnes se varmennetaan. Anna SQL-tietokantaan liittyville tileille vain tarvittavat vähimmäiskäyttöoikeudet. Käytä valkoisia listoja vakiokäytäntöinä mustien listojen sijaan käyttäjän syötteen varmennuksessa ja suodattamisessa.

Käytä viimeisimpiä versioita:On tärkeää käyttää viimeisintä kehitysympäristön versiota suojan maksimoimiseen, sillä vanhemmissa versioissa ei välttämättä ole ajantasaisia turvallisuusominaisuuksia. Muista asentaa viimeisin ohjelmisto ja tietoturvapäivitykset, kun saatavilla.

Skannaa verkkosovelluksia jatkuvasti:

Käytä kattavia sovelluksen suorituskyvyn hallinnointityökaluja. Verkkosovellusten säännöllinen skannaus tuo esiin mahdollisia haavoittuvuuksia ja puuttuu niihin ennen kuin niistä syntyy vakavia vahinkoja.

Käytä palomuuria:Verkkosovelluksen palomuuria (WAF) käyetään usein SQLi:n sekä muiden verkkouhkien pois suodattamiseksi. WAF tukeutuu laajaan ja usein päivitettyyn allekirjoitusten luetteloon, mikä mahdollistaa haitallisten SQL-kyselyjen pois suodattamisen. Yleensä luettelossa on allekirjoitukset tiettyihin hyökkäysvektoreihin keskittymiseen, ja se päivitetään usein juuri havaittujen haavoittuvuuksien osalta.

Aiheeseen liittyvät tuotteet:

Lue lisää:

Mikä on SQL-injektio? Määritelmä ja selitys

SQL-injektion avulla hakkeroijat pääsevät luvatta tietokantoihin aiheuttaen näin vahinkoa yrityksille. Lue lisää, siitä, miten SQL-injektio toimii.
Kaspersky Logo