Što je to SQL injection

Objavljeno od u Blog na tra. 18, 2015

Što je to SQL injection

Možda ste se već negdje susreli s pojmom “SQL injction” i znate da je to jedan od čestih propusta u sigurnosti informacijskih sustava. Možda znate i to da  na taj način popularno zvani „hakeri“ danas obavljaju svoje softverske napade. I ne, ne ubacuju vam viruse, trojance, worm-ove i slično (bar ne najčešće) već vam kroz tzv. SQL injection mijenjaju, dodaju ili brišu podatke zapisani u vašim bazama podataka. Zadiranje u baze podataka jedan je od gorih oblika hakerskog napada stoga je vrijeme da se pobliže informirate i saznate što je to SQL injection.

Onako usput, riječ hack nastala je na M.I.T-u 60-ih godina i označavala je bezopasne tehničke eksperimente i aktivnosti. Danas, samim spomenom riječi haker odmah pomislimo na kompjuterskog kriminalca ( tzv. Black hat haker ). No nije sve tako crno jer postoje i „dobri“ White hat hakeri koji svoja znanja i vještine usredotočuju na poboljšanje sigurnosti softvera. Vratimo se mi ipak na SQL injection.

SQL injection  spada u najkritičnijie sigurnosne rizike Web aplikacija sudeći prema listi koju je napravila međunarodna neprofitna organizacija pokrenuta sa ciljem poboljšanja softverske sigurnosti i svijesti ljudi, zvana OWASP. U prijevodu to znači da je to jedan od najopasniji načini da vam netko hakira web stranicu ili bilo koju web aplikaciju koja se koristi SQL-om.

Bolje je spriječiti nego liječiti! Izrađujte sigurnosne kopije.

Sve ovo ne bi vas trebalo zanimati ako niste Web dizajner ili programer, no dobro je znati, jer nikad se ne zna. A ako već radite u svijetu ICT-a, bilo kao menadžer, projektant, developer ili ako želite jednog dana voditi svoju softversku tvrtku, sigurno vam nije u interesu prolaziti kroz probleme i muke kao što je to nedavno Twitter ili WordPress kojeg hakeri neprestano napadaju i neumorno traže propuste na Web stranicama koje su izrađene tim CMS-om.

 

Što je SQL injection i kako se vrši postati će vam puno jasnije kad se upoznate sa kraticom SQL, a za to će nam najbolje pomoći Wikipedija.

SQL je akronim za Structured Query Language. SQL je najpopularniji računalni jezik za izradu, traženje, ažuriranje i brisanje podataka iz relacijskih baza podataka. Da pojednostavim, kao što imamo računalne jezike za izradu Web stranica ( HTML, CSS, Java i slično ), tako imamo i SQL čiji je fokus usmjeren na baze podataka i provođenje aktivnosti u njima. Relacijske baze podataka danas dominiraju, jer se temelje na relacijama, vezama među tablicama u čijim su poljima pohranjeni svi podaci neke web aplikacije.

Na donjoj slici možete vidjeti grafički prikaz kako danas pretežito izgleda arhitektura Web aplikacija kojima svakodnevno pristupamo. SQL, kao i svaki računalni jezik ima definirana pravila i naredbe.

 

moderna_arhitektura_web_aplikacijal

 

Valjak s imenom “Database” je server baze podataka na kojem se spremaju i obrađuju podaci kao što su korisnička imena i lozinke. Tim podacima upravlja SQL. Web aplikacije tj. serveri mogu imati veliki broj baza podataka, a svaka baza može imati pregršt tablica tj. relacija.

Sad da biste lakše pojmili što je SQL injection pokušati ću vam to objasniti kroz jedan primjer. Pretpostavimo da imamo web stranicu na koju se mogu registrirati i/ili ulogirati korisnici tako da upišu svoje korisničko ime i lozinku.

Gotovo svaka druga web stranica danas ima tu mogućnost. Dakle, imamo registriranog korisnika sa svojim korisničkim imenom Darko i njegovom lozinkom 123456789 ( apeliram – nemojte koristiti ovakve lozinke ). Što se događa kad korisnik upiše svoje korisničko ime i lozinku te pritisne tipku enter ?

Web aplikacija pita server baze podataka: imamo li korisnika sa imenom ‘Darko’ i lozinkom ’123456789′ registriranog u sistemu?

 

U SQL jeziku to izgleda ovako :

SELECT id FROM users WHERE username = ‘Darko’ AND password = ’123456789′

Ovi jednostruki navodnici ( quote-ovi ) oko imena i lozinke su dio SQL jezika i ključni su za obavljanje napada. A evo i kako. Ako bi napadač odlučio upisati umjesto korisničkog imena sljedeće : Darko’ OR 1=1– , kao na slici:

 

SQL_napad

 

SQL naredba se pretvara u sljedeće :

SELECT id FROM users WHERE username = ‘Darko’ OR 1=1– AND password = ’123456789′

Ova izjava u SQL jeziku je uvijek istinita (’1=1′), a umetanjem znakova ‘- -’ u SQL jeziku se ignorira sve što slijedi nakon njih, u ovom slučaju lozinka. Na ovaj način smo zapravo zavarali sam jezik da obavlja aktivnosti koje smo mu mi definirali i uspješno se ulogirali kao korisnik Darko, bez poznavanja lozinke. Sve je to omogućeno „ubrizgavanjem“ SQL naredbi.

Ovo je školski primjer i poprilično je banalan i uvjeren sam da neće uspjeti na niti jednoj poznatoj Web stranici, ali se ovakvi SQL propusti i dalje događaju. Također naredbe koje će se ubrizgavati mogu biti raznolike, a hoće li raditi ovisi o svakoj stranici pojedinačno.

Treba biti svjestan da svaka Web stranica ima propuste i ranjive točke u SQL-u ili nekom drugom kodu, te ih napadač samo treba pronaći i iskoristiti.

 

Hack attack

 

Kad je riječ o iskusnim hakerima, dakle onima koji zavrjeđuju da ih se zove Black Hat, cijela ova priča sa SQL injekcijama odvedena je na potpuno novu razinu gdje postoje specijalizirani softveri za obavljanje napada umjesto direktnog ubrizgavanja ( kao u primjeru gore ). Postoji veliki broj programa koji to mogu obaviti kao što su Pangolin, Havij i slični, dok poznati operacijski sustav dizajniran i opremljen za takve napade je Backtrack a temeljen je na Linux arhitekturi.

Nabrojenim alatima u ovome članku moguće je izvoditi složene SQL napade kojima vrlo lako dođete do izvoda osjetljivih podataka iz bazi što može imati katastrofalne posljedice za poslovni sustav, povjerenje i sigurnost informacija korisnika tog sustava. Uz SQL injekcije postoje tu još i drugi načini napad koje također treba shvatiti ozbiljno i stoga preadti veliku pažnju sigurnosti sustava.

Imati kvalitetan hosting tj. povjeriti svoje web stranice i aplikacije tvrtki koja zna što radi na svim područjima svojeg poslovanja, pa tako i na području sigurnosti, preduvjet je mirnog sna svakog vlasnika web stranice ili aplikacija. Nedavno je WordPress zajednicu prodrmao sigurnosni propust u Yoast WordPress SEO dodatku koji je dopuštao slijepu SQL injekciju ( Blind SQL Injection ). Više o propustu u članku: Sigurnosni propust u Yoast WordPress SEO dodatku.

Premda je WordPress.org tim promptno izbacio automatiziranu nadogradnju plugina sa zakrpom propusta ona se nije mogla desiti na sustavima koji su imali isključenu automatiziranu nadogradnju. Iako su moje web stranice imale uključenu automatiziranu nadogradnju i bile zakrpane čim je propust bio zamječen, da kojim slučajem nisam imao uključenu automatizaciju leđa bi mi bila čuvana od strane moje hosting kompanije.

Naime, SiteGround je reagirao odmah nakon prijave o ranjivosti Yoast-ova WordPress SEO dodatka, te je izradio i nadogradio sigurnosnu zakrpu na svojem WAF-u ( web application firewall-u ) i na taj je način aktivno filtrirao svaki pokušaj hakiranja.

 

Zatražite besplatnu web stranicu

 

Darko Novak

Marketing Manager & Web Developer at Međimurka BS d.o.o.
Darko živi u Mačkovcu, selo kraj Čakovca, u Hrvatskoj, s ženom Dunjom i sinom Noelom. Ako nije za kompjuterom vrijeme provodi s obitelji ili pripremajući se za polumaratone. Zaljubljenik u WordPress, bloger, SEO i online marketing fanatik.

Odgovori

Podijeli:

Što je to SQL injection

od Darko Novak vrijeme potrebno za čitanje: 5 min
0

Postanite član!

Neprocijenjive informacije nadohvat ruke

Pretplatite se na naš "Newslewtter" i primajte kvalitetne i neprocjenjivo vrijedne informacije vezane uz izradu web stranica direktno u vaš sandučić.

Uspješno ste se upisali na listu!

Follows