Šta su napadi umetanjem SQL koda?

16.07.2020. / 12:13
Share
SQL Inject
SQL Injection
SQL Inject

Prethodne sedmice smo vas detaljnije upoznali o tome šta predstavljaju digitalni napadi umetanjem koda, a kao jedan od najčešćih napada umetanjem koda jesu SQL injection napadi.  
SQL injection je napad u kojem se zlonamjerni kod ubacuje u SQL server kako bi izvršio određenu naredbu. Najčešći rezultat ovakvih napada jesu neautorizovani pristupi poverljivim podacima ili uništenje važnih podataka. SQL Injection je jedna od najčešćih metoda napada na webu.
U pitanju je skraćenica od Structured Query Language i koristi se kao jezik za baze podataka, osiguravajući sredstva za manipulaciju podacima i kreiranje baze podataka. Skoro svi moderni sistemi za upravljanje relacionim bazama podataka poput MS SQL Server-a, Microsoft Access, MSDE, Oracle, DB2, Sybase, MySQL, Postgres i Informix koriste SQL kao standardni jezik baze podataka.

Kako to izgleda u praksi?

Napadač ubrizgava SQL izraze koji mogu čitati ili mijenjati podatke baze podataka. U slučaju naprednih napada SQL ubrizgavanja, napadač može koristiti SQL naredbe za pisanje proizvoljnih datoteka na server i čak izvršavanje naredbi operativnog sistema. SQL Injection napad se uglavnom vrši na skripte za provjeru autentifikacije korisnika/ca, tj. prilikom provjere korisničkog imena i šifre. Kako bi se SQL upit izmijenio i uvijek izvršio on dohvata podatke o nekom korisniku/ci i preuzima kontrolu nad njima.
Rezultat SQL napada dovodi do potpunog kompromitovanja sistema, zaobilaska provjere idetiteta, otkrivanja podataka korisnika/ce, gubljenja podataka, krađe povjerljivih podataka, gubljenja integriteta podataka i odbijanja različitih usluga na internetu.

SQL Injection graph

Kategorije SQL napada i zaštita

Posljedice SQL injection napada mogu varirati od prikupljanja osjetljivih podataka do manipulisanja informacijama baze podataka, i od izvršenja komandi na sistemskom nivou do uskraćivanja usluga web aplikacije. Posljedice zavise i od baze podataka, cilja i od uloga i privilegija koje SQL naredbe imaju.
Stephen Kost u svojoj knjizi “An Introduction to SQL Injection Attacks for Oracle Developers” navodi 4 glavne kategorije SQL injection napada:

  1. SQL manipulacija,
  2. Ubrizgavanje koda,
  3. Funkcija ubrizgavanja koda u pozive
  4. Prelivanje bafera

Prve dvije kategorije su najvažnije jer se najčešće upotrebljavaju u napadima na sve vrste baze podataka (uključujući SQL Server, MySQL, ProgressSQL i Oracle).
Kada govorimo o zaštiti od SQL injection napada postoje reaktivne i preventivne mjere. Reaktivne se odnose na otrkivanje i blokiranje napada u realnom vremenu. Dok su preventivne one koje možete da uradite unaprijed, poput odbrambenih kodiranja i testiranja na SQL injection ranjivost i otklanjanje potencijalne ranjivosti.
Glavni razlog SQL injection ranjivosti je nedovoljna validacija ulaznih podataka, a način sprječavanja ove ranjivosti jeste otklanjanje ovih propusta na način da se primijene odgovarajuće tehnike odbrambenog kodiranja. Tehnike odbramnenog kodiraranja su provjera tipa ulaznih podataka, kodiranje ulaznih parametara, upoređivanje paterna i identifikacija svih ulaznih izvora. Sve ove mjere sam programer/ka može da uradi unaprijed postavljanjem određenih parametara, kao što je blokiranje svih ulaznih parametara koji nisu npr. numeričkog tipa.
Preporučuje se da programeri/ke uspostavite rutinu validacije ulaznih parametara da bi se mogli razlikovati dobri i loši ulazni parametri.

Testiranje na SQL napade

Da bi se različiti propusti u ranjivosti stranica i aplikacija ispravili, potrebno je da se izvrši testiranje na SQL injection ranjivost.
Testiranje se može vrštiti preko testiranja aplikacije, odnosno skerniranje koda različitim alatima, poput ovog, koji u kodu traži moguće greške koje upozoravaju na mane i ranjivsot. Ovi alati obično nemaju mogućnost da prate stanje u aplikaciji, što predstavlja poteškoće da procijeni da li promjenljiva koja se nalazi u komandi baze podataka može biti zloupotrebljena od strane napadača. Najbolji alati posjeduju mogućnost za otkrivanje grešaka u validaciji ulaza, koji često ranjivo predstavljaju mjesto za ubacivanje komandi u bazu podataka. Postoje besplatni alati za statičku analizu koji mogu biti korisni za pronalaženje ranjivosti koda. Jedan od takvih alata jeste FindBugs, open source alat za otkrivanje ranjivosti u Java aplikacijama.  Za skeniranje web aplikacija postoji isto tako mnogo alata, jedan od njih jeste SQLiX, koji se pokreće iz komandne linije i može otkriti razne SQL injection greške.

Važno je naglasiti da ovakve vrste napada znaju zaista biti mnogo sofisticirane i mudro osmišljene, te su sve moguće preventivne radnje i više nego dobro došle. Na zaštiti od ovih napada prije svega treba uključiti programere/ke, te sve ostale koji učestvuju u samom kreiranju web stranica i aplikacija.  

Za medije je važno da barem povremeno reaktivno provjeravaju svoje sisteme protiv ovakvih napada kako bi mogli obezbijediti pouzdan prenos informacija, a za one sa pretplatničkim podacima da mogu zaštiti i lične podatke.

 

Ocijenite kvalitet članka