Ako postoji jedna stvar koju kibernetički kriminalci vole, onda su to podaci. Ukradeni podaci vrlo su vrijedni na nezakonitim tržištima, a pristup privatnim bazama podataka može biti izvrstan način da zlonamjerni akteri ostvare profit od svojih pothvata. Jedan od načina za pristup privatnim podacima je putem SQL injekcije. Ali što je zapravo SQL injekcija, kako funkcionira i može li se takav napad spriječiti?
Što je SQL injekcija?
Softverski programi oslanjaju se na kod da bi funkcionirali. Kod je također jezik koji strojevi koriste za izvođenje operacija, a može doći u mnogim oblicima (Python, JavaScript, C++, itd.). Kibernetički kriminalci često mogu napasti žrtve putem koda, a SQL injekcije (ili SQLis) nisu ništa drugačije. Oni zlonamjernim akterima omogućuju "ubacivanje" štetnog koda u SQL naredbu.
Prvo prođimo što SQL znači.
SQL je skraćenica za Structured Query Language.
Ovo je druga vrsta programskog jezika posebno se koristi kada se radi s bazama podataka. Razvijen 1970-ih od strane IBM-a, SQL može manipulirati, pohranjivati i dohvaćati informacije baze podataka. Mnogi sustavi za komunikaciju s bazama podataka diljem svijeta koriste SQL, pa ne čudi da su akteri prijetnji smislili načine kako ga zloupotrijebiti kako bi ciljali na baze podataka.SQL naredbe čine ključni dio komunikacije baze podataka. SQL izjava je naredba koji dolazi u mnogo različitih oblika. Neki mijenjaju podatke, neki ih dohvaćaju ili brišu, a neki mogu promijeniti strukturu same baze podataka. Kada se dogodi SQL ubacivanje, zlonamjerni kod se ubacuje u SQL naredbu.
Naravno, web stranica ili aplikacija mora koristiti SQL programski jezik da bi SQL ubacivanje bilo moguće. Ali kako radi ovaj vektor napada?
Recimo da imate običan redak koda koji koristi aplikacija. Kada kibernetički kriminalac umetne zlonamjernu SQL injekciju, dodaje se linija koda koja može ometati upite koje sama aplikacija šalje svojoj bazi podataka. Time se baza podataka može iskoristiti na način koji akteru prijetnje omogućuje pregled podataka kojima inače ne bi imao pristup.
Odavde kibernetički kriminalac može ukrasti podatke kako bi ih izravno iskoristio ili prodati na dark webu ili negdje drugdje. Također mogu mijenjati, dodavati ili brisati podatke iz ciljane baze podataka. Ovisno o stupnju napada SQL injekcijom, može se napraviti velika šteta. Ako se pristupi podacima o plaćanju, brojevima socijalnog osiguranja ili drugim vrstama privatnih podataka, mnogi bi ljudi mogli biti u opasnosti od iskorištavanja.
S druge strane, ako napadač uspije značajno promijeniti bazu podataka, veliki dijelovi podataka mogu biti trajno izgubljeni. Sve u svemu, SQL injekcije mogu uništiti cijele baze podataka samo jednim napadom. Iako postoje od 1998., još uvijek su relevantni i opasni u današnje vrijeme.
Kako je utvrdio Open Web Application Security Project (OWASP), identificirano je 274 000 instanci SQL injekcija tijekom testiranja aplikacija na prisutnost takvog napada u 2021.
Vrste SQL ubacivanja
Postoji nekoliko različitih vrsta SQL ubacivanja, a glavne tri su slijepe, unutarpojasne i izvanpojasne injekcije.
Slijepa (ili inferencijalna) SQL injekcija događa se kada je aplikacija ili web mjesto napadnuto od strane ubrizgavanje, ali navedeni HTTP (Hypertext Transfer Protocol) odgovori ne sadrže rezultat SQL upit. Drugim riječima, nikakvi podaci iz napadnute baze podataka ne daju se kibernetičkom kriminalcu. Dakle, koja je svrha ovoga?
Koristeći slijepu SQL injekciju, napadač šalje podatke ciljnom poslužitelju i zatim može razlučiti određene stvari o bazi podataka kroz prirodu samog HTTP odgovora. Povrh toga, čimbenici povezani s HTTP odgovorom mogu pomoći napadaču da stvori drugu, učinkovitiju SQL injekciju za pristup bazi podataka.
Postoje dvije ključne vrste slijepe SQL injekcije, poznate kao vremenska i Booleova. Ove su dvije varijante prilično slične po svojoj prirodi. I booleova i vremenska SQL injekcija šalju niz pitanja s odgovorima da ili ne, iako će potonje zahtijevati da baza podataka pričeka neko vrijeme prije nego što odgovori na upite.
Sljedeće, tu su unutarpojasne SQL injekcije. In-band SQL injekcije omogućuju operateru da izvede napad i dobije željeni rezultat koristeći isti kanal. In-band SQL injekcije se najčešće koriste, jednostavno zato što ih je najlakše izvesti zbog činjenice da zahtijevaju samo jedan kanal.
Na kraju, imate izvanpojasnu SQL injekciju. Ovo je u biti alternativna verzija in-band SQL injekcije, pri čemu napadač ne može izvršiti napad u cijelosti koristeći jedan jedini kanal. Alternativno, napad će možda morati pribjeći izvanpojasnoj SQL injekciji ako ciljni poslužitelj jednostavno nije dovoljno brz da pruži rezultate.
Ovi čimbenici čine proces malo težim, što znači da se mora oslanjati na određene značajke da bi bio aktivan u ciljanoj bazi podataka za uspjeh. Na primjer, platforma koja se napada mora imati nedostatak dezinfekcije ulaza. Zbog toga su in-band SQL injekcije daleko češće od izvanpojasnih SQL injekcija. Ali ipak se događaju.
Mogu li se izbjeći SQL injekcije?
SQL injekcije više zabrinjavaju tvrtke i organizacije nego obične pojedince. Ali postoje stvari koje te potencijalne mete mogu učiniti kako bi smanjile mogućnost da budu pogođene takvim napadom.
Čišćenje unosa ključna je uobičajena praksa za izbjegavanje SQL injekcija. Ovo je proces filtriranja koji skenira i čisti unos opasnih znakova. Ako se SQL kod obradi prije saniranja, vjerojatnost ubacivanja SQL-a prirodno će se povećati.
Osim toga, parametrizirani upiti mogu vam pomoći da se klonite SQL injekcija. To su upiti koji zahtijevaju barem jedan parametar za izvršenje. Primjena parametara kibernetičkim kriminalcima otežava uspješno izvođenje napada SQL injekcijom.
Ali ne postoji siguran način za sprječavanje SQL injekcije. Kao što je slučaj s mnogim kibernetičkim napadima, prilično je nemoguće držati svoje uređaje i sustave potpuno hermetički zatvorenima. Kada su u pitanju SQL injekcije, najbolje što možete učiniti je očistiti sve ulaze i uspostaviti parametrizirane upite.
SQL injekcije su zastarjele, ali još uvijek predstavljaju prijetnju
Iako su SQL injekcije prisutne već više od 20 godina, još uvijek predstavljaju rizik za mnoge web stranice i aplikacije. Stoga je dobra ideja imati na umu ovaj oblik napada i poduzeti potrebne korake da ga pokušate spriječiti jer bi mogao predstavljati prijetnju vašim bazama podataka u nekom trenutku u budućnosti.