Kas ir SQL injekcijas?

Iepriekšējos rakstos ("Tīmekļa vietnes drošība un trīs izplatītākie tās drošības apdraudējumi" un "Kas ir XSS uzbrukumi?") mēs aizsākām runāt par biežāk izplatītajiem uzbrukumiem interneta vietnēm. (Informācijas noplūde, nekorekta sesiju pārvaldība un XSS uzbrukumi) Šajā rakstā sīkāk aplūkoti tā sauktās "injekcijas". SQL injekcijas ir vēl viena plaši izplatīta ievainojamība, kas rodas, ja netiek veikta ievadīto datu validācija. Atšķirībā no XSS injekcijām, kuru mērķis ir tīmekļa vietnes apmeklētāji, SQL injekcijas veido, lai uzbruktu pašai tīmekļa vietnei – precīzāk tā datubāzei. Lielākā daļa SQL injekcijas uzbrukumu parasti norit caur vietnes datu ievades formu, kuras ievadītie dati vēlāk tiek apstrādāti, izmantojot datubāzi (piemēram, reģistrēšanās vai pieteikšanās forma). Taču tā nav vienīgā vieta, caur kuru urķis var uzdarboties. Ļoti plaši izplatīta ir arī uzbrukumi caur URL jeb lapas adresi. Veiksmīgas injekcijas rezultātā urķis var iegūt arī jutīgo informāciju no datubāzes, to izmainīt (ievadīt, atjaunot, izdzēst), izpildīt administratora darbības (piemēram, noslēgt datu bāzes pārvaldības sistēmu), vai pat izpildīt komandas ar servera OS. Zagti, zaudēti vai bojāti dati, kas ir vērtīgi, var bojāt uzņēmuma reputāciju vai nest lielus zaudējumus Šogad SQL injekciju kampaņas ietvaros "The Tech Herald" tika ziņots, ka ir uzlauztas 50,000 mājas lapu. Pāris dienu laikā šis skaits jau bija palielinājies līdz 638,000 (plašāka informācija pieejama te). Kas var būt uzbrucējs: Jebkurš, kas var nosūtīt neuzticamus, nedrošus datus sistēmai:
  • parasti lietotāji;
  • reģistrēti lietotāji.
Kāpēc? Visbiežāk šādas problēmas rodas, ja tīmekļa vietnē ir atrodama ievades forma, kuras dati tiek apstrādāti datubāzē (piemēram, pieteikšanās forma), taču ievadītie dati netiek validēti, pārbaudīti vai filtrēti. Zemāk tiek piedāvāti vairāki uzbrukuma scenāriji. Tie var kalpot kā piemēri, kā Jūs paši varat pārbaudīt savas vietnes drošību. Uzbrukuma scenāriji: Scenārijs nr.1: Ja uzņēmuma mājas lapa ir veidota, izmantojot PHP (populāra tīmekļa vietņu programmēšanas valoda), un iebrucējs vēlas piekļūt svešiem lietotāju datiem, pārlūkprogrammā jāieraksta: __________________________________________________________________ http://www.esidross.lv/index.php?user_id='OR'1'='1 __________________________________________________________________ Sliktākajā gadījumā uzbrucējs, izmantojot šo ievainojamību, varētu izsaukt īpašas glabātās datubāzu procedūras, kas sniegtu pilnīgu kontroli pār datubāzi. Līdzīgi iespējams arī izdzēst kādu no datubāzes tabulām, piemēram, to, kurā tiek glabāti dati par lietotājiem. Šāda veida darbība var pilnībā paralizēt tīmekļa vietnes darbību. __________________________________________________________________ http://esidross.lv/login.php?id=2'; DROP TABLE login; # __________________________________________________________________ Scenārijs nr.2: Ja tīmekļa vietne piedāvā iespēju lietotājiem pieslēgties sistēmai un uzbrucējs vēlas apiet šo formu, to var veikt, lietotājvārda vietā ievadot: __________________________________________________________________ Variable' or 1=1-- __________________________________________________________________   Kā nodrošināties? Drošība ir viens no būtiskākajiem aspektiem, izstrādājot kādu lietotni, it īpaši, ja tā ir pieejama tādā publiskā vidē kā vispasaules tīmeklis. Viena kļūme drošības ziņā, un visa klientu informācija vai citi svarīgi dati var kļūt pieejami nepiederošām personām, modificēti vai pat pazaudēti pavisam. Tīmeklī ir pieejama ļoti plaša informācija par dažādām ievainojamībām un ir pieejami dažādi rīki, kurus uzbrucējs var izmantot uzbrukumos jūsu vietnei pat tad, ja viņam nav īpašu zināšanu tīmekļa vietņu izstrādē. Vislabāk izvairīties no drošības ievainojamībām mājas lapas izstrādes posmā, kad tiek izlemts, kāda sistēmas arhitektūra tiks lietota, kā tiks organizēta saziņa ar datubāzi, kā tiks pārvaldītas administrācijas funkcijas un autorizācijas mehānismi utt. Daudz vieglāk ir novērst kļūdu, pirms tā ir radījusi nepatīkamas sekas. Tādēļ no mājas lapas izstrādātājiem noteikti būtu nepieciešams pieprasīt lai Jūsu uzņēmuma vietne būtu nodrošināta pret iepriekš minētajiem trīs visbiežāk sastopamiem draudiem. Taču ja Jūsu uzņēmuma tīmekļa vietne ir jau izstrādāta, un jūs šaubāties par tās drošību, varat izmantot rakstā izklāstītos scenārijus vai arī zemāk minētos automatizētos Web aplikāciju drošības izpētes rīkus, kas jums palīdzēs pārbaudīt tās ievainojamību: Bezmaksas. atvērtā koda rīki: Google skipfish: http://code.google.com/p/skipfish/ Nikto: http://cirt.net/nikto2 Websecurity: http://www.websecurify.com/ Netsparker: http://www.mavitunasecurity.com/ w3af: http://w3af.sourceforge.net/ Arachni: https://github.com/Zapotek/arachni Maksas rīks (10% no jūsu lapas pārbaudīs bez maksas): Golem Technologies: https://www.golemtechnologies.com/   ______________ * Iepriekšējos rakstus var atrast te: "Tīmekļa vietnes drošība un trīs izplatītākie tās drošības apdraudējumi" un "Kas ir XSS uzbrukumi?" ** Rakstā izmantoti materiāli no M.Brieža bakalaura darba "Tīmekļa vietnes drošības novērtēšana un uzlabošana".