Što je SQL injection ?

images (1)Želim započeti članak s  top 10 listom. Zašto? Očigledno, svi vole top liste. Ideja je bila da vam razbijem iluziju o tome kako 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).

Inače, 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). S druge strane imamo i „dobre“ White hat hakere koji svoja znanja i vještine usredotočuju na poboljšanje sigurnosti softvera.Vratimo se mi na listu. Naša lista prikazuje deset najkritičnijih sigurnosnih rizika Web aplikacija. U prijevodu to znači: najopasniji načini da vam netko hakira u poduzeće. Listu nije napravio bilo tko, već međunarodna neprofitna organizacija pokrenuta sa ciljem poboljšanja softverske sigurnosti i svijesti ljudi, zvana OWASP.

Naravno, kao i svaki put kad otvorite neku top listu, zanima vas što je na vrhu. U ovom slučaju to je oblik napada kojeg zovemo Injection. Ova riječ se odnosi na više napada, ali najpoznatiji oblik je SQL injection kojim ćemo se mi danas pozabaviti.

Zašto bi vas ovo zanimalo ako niste Web dizajner ili programer? Ako planirate raditi ili ste već 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 muke kao što je nedavno Twitter, na kojem ugledni časopisi objavljuju neistinite priče o bombama u Bijeloj kući ili WordPress koji je pod napadima već tjednima, sve zahvaljujući hakerima koji neumorno traže propuste na Web stranicama.

Da bih razumjeli što je i kako se vrši SQL injection moramo se prvo upoznati sa kraticom SQL, a za to će nam najbolje pomoći Wikipedija.

SQL je skraćenica za Structured Query Language. To je najpopularniji računalni jezik za izradu, traženje, ažuriranje i brisanje podataka iz relacijskih baza podataka. Pojednostavljeno, kao što imamo računalne jezike za izradu Web stranica (HTML, CSS, Java i slično), tako imamo i SQL koji se fokusira na BAZE PODATAKA, tj. provođenje navedenih aktivnosti u njima. Relacijske baze podataka danas dominiraju, jer se temelje na relacijama tj. tablicama u čijim su poljima pohranjeni svi podaci.

SQL, kao i svaki računalni jezik ima definirana pravila i naredbe. Na slici možemo vidjeti kako danas pretežito izgleda arhitektura Web aplikacija kojima pristupamo svaki dan.

arhitektura web aplikacija

Zaokruženi server je server baze podataka na kojem se spremaju i obrađuju podaci kao što su korisnička imena i lozinke, te kojim upravlja SQL. Ti serveri mogu imati veliki broj baza podataka, a svaka baza može imati i veliki broj tablica tj. relacija.

SQL injection najbolje možemo objasniti kroz jedan primjer; recimo da imamo Web stranicu, u koju se registrirani korisnici mogu ulogirati upisom korisničkog imena i lozinke. Takvih stranica na internetu ima jako mnogo. Imamo registriranog korisnika sa korisničkim imenom  Ivan i lozinkom 12345 (molim vas nemojte koristiti ovakve lozinke 😉 )  Što se dogodi kad korisnik upiše svoje korisničko ime i lozinku te pritisne enter?

Web aplikacija doslovno pita server baze podataka: imamo li korisnika sa imenom ‘Ivan’ i lozinkom ‘12345’ registriranog u sistemu? U SQL jeziku to izgleda ovako :

SELECT id FROM users WHERE username  = ‘Ivan’ and password = ‘12345’

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

uname

SQL naredba se pretvara u sljedeće :

SELECT id FROM users WHERE username  = ‘Ivan’ or 1=1– and password = ‘12345’

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 Ivan, bez poznavanja lozinke. Sve je to omogućeno „ubrizgavanjem“ SQL naredbi.

Naravno ovaj primjer je prilično banalan, te 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.

Iskusni hakeri će koristiti specijalizirani softver za obavljanje SQL napada umjesto direktnog ubrizgavanja (kao u primjeru). 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, temeljen na Linux arhitekturi .

Korištenjem ovih alata, složenijim SQL napadima, moguće je izvesti cijele tablice sa velikim brojem osjetljivih podataka iz bazi. To može imati katastrofalne posljedice za poslovni sustav, povjerenje i sigurnost informacija korisnika tog sustava. SQL injection, ali i druge napade treba shvatiti ozbiljno, te predati pažnju sigurnosti sustava od samog početka, tj. implementacije rješenja.

You may also like

Leave a comment