26Aug

Kako hekerji prevzemajo spletne strani z injekcijo SQL in DDoS

Tudi če ste le ohlapno spremljali dogodke hackerjev skupine Anonymous in LulzSec, ste verjetno slišali za vdor v spletnih mestih in storitvah, kot so zloglasni Sonyovi hackovi. Ste se kdaj spraševali, kako to počnejo?

Obstajajo številna orodja in tehnike, ki jih te skupine uporabljajo, in medtem ko vam ne poskušamo dati priročnika, da to storite sami, je dobro razumeti, kaj se dogaja. Dva napaka, ki jih dosledno slišiš o njih, sta "(Distributed) Denial of Service"( DDoS) in "SQL Injections"( SQLI).Evo kako delujejo.

Slika xkcd

Denial of Service Attack

Kaj je to?

"zavrnitev storitve"( včasih se imenuje "distribuirani denial of service" ali DDoS) se zgodi, če sistem, v tem primeru spletni strežnik, prejme toliko zahtevkov, da so strežniški viri preobremenjeni, sistem preprosto zaklenenavzgor in se izklopi. Cilj in rezultat uspešnega DDoS napada je, da spletne strani ciljnega strežnika niso na voljo za legitimne zahteve prometa.

Kako deluje?

Logika napada DDoS je najbolje razložiti z zgledom.

Predstavljajte si, da se milijon ljudi( napadalcev) združita z namenom ovirati poslovanja podjetja X, tako da vzamejo svoj klicni center. Napadalci se usklajujejo tako, da bodo v torek ob 9. uri vse poklicali telefonsko številko podjetja X.Najverjetneje telefonski sistem podjetja X ne bo mogel obvladati milijonov klicev hkrati, tako da bodo vse dohodne linije zvezale napadalci. Rezultat je, da legitimni klici strank( t.j. tistih, ki niso napadalci) ne prehajajo, ker je telefonski sistem vezan na ravnanje s klici od napadalcev. Torej podjetje X v resnici izgublja poslovanje zaradi legitimnih zahtev, ki jih ne morejo priti.

Napad DDoS na spletni strežnik deluje popolnoma enak. Ker praktično ni nobenega načina, da bi vedeli, kateri promet izvirajo iz legitimnih zahtev proti napadalcem, dokler spletni strežnik ne obdeluje zahteve, je ta tip napada običajno zelo učinkovit.

Izvajanje napada

Zaradi narave DDoS napada z "grobo silo" morate imeti veliko računalnikov, ki so usklajeni za napad ob istem času.Če ponovimo primer našega klicnega centra, bi to zahtevalo, da vsi napadalci vedo, da pokličejo ob 9h in dejansko pokličejo takrat.Čeprav bo to načelo zagotovo delovalo, ko gre za napad na spletni strežnik, postane bistveno lažje, če se uporabljajo zombi računalniki, namesto dejanskih računalnikov s posadko.

Kot verjetno veste, obstaja veliko različic zlonamerne programske opreme in trojancev, ki so, ko je v vašem sistemu, mirujoče in občasno "telefon dom" za navodila. Eno od teh navodil bi lahko bilo na primer pošiljanje ponavljajočih se zahtev za spletnega strežnika podjetja X ob 9. uri. Torej z eno posodobitvijo na domačo lokacijo zadevne zlonamerne programske opreme lahko en napadalec takoj usklajuje na stotine tisočih ogroženih računalnikov za ogromen napad DDoS.

Lepota uporabe zombijevih računalnikov ni le v njegovi učinkovitosti, temveč tudi v svoji anonimnosti, saj napadalec sploh ne potrebuje računalnika za izvedbo napada.

SQL Injection Attack

Kaj je to?

Napad »SQL injection«( SQLI) je izkoriščanje, ki izkorišča slabe tehnike razvijanja spletnih strani in običajno v kombinaciji z napačno varnostjo baz podatkov. Rezultat uspešnega napada je lahko od predstavitve uporabniškega računa do popolnega kompromisa zadevne baze podatkov ali strežnika. Za razliko od napada DDoS, je napad SQLI popolnoma in enostavno preprečljiv, če je spletna aplikacija ustrezno programirana.

Izvajanje napada

Kadarkoli se prijavite na spletno mesto in vnesete svoje uporabniško ime in geslo, da bi lahko testirali vaše poverilnice, lahko spletna aplikacija zažene poizvedbo, kot je naslednja:

SELECT UserID FROM Users WHERE UserName = 'myuser' in geslo= 'mypass';

Opomba: vrednosti nizov v poizvedbi SQL morajo biti zaprta v enojnih narekovnicah, zato se pojavijo okrog uporabljenih vnesenih vrednosti.

Tako se mora kombinacija vnesenega uporabniškega imena( myuser) in gesla( mypass) ujemati z vnosom v tabeli Uporabniki, da se vrne UserID.Če ni zadetka, se ne vrne UserID, zato so neveljavne poverilnice za prijavo. Medtem ko se lahko določena izvedba razlikuje, so mehaniki precej standardni.

Zdaj si oglejmo predlogo za preverjanje pristnosti predloge, ki jo lahko nadomestimo z vrednostmi, ki jih uporabnik vnese na spletni obrazec:

SELECT UserID FROM Users WHERE UserName = '[user]' in Geslo = '[pass]'

Na prvi pogledse lahko zdi preprost in logičen korak za preprosto preverjanje uporabnikov, vendar, če se na tej predlogi opravi preprosta zamenjava uporabljenih vnesenih vrednosti, je dovzeten za napad SQLI.

Na primer, predpostavimo, da je v polje za uporabniško ime vneseno ime »myuser« in da se v geslo vnese »wrongpass«.Z enostavno substitucijo v naši predlogi predloge bomo dobili naslednje:

SELECT UserID FROM Users WHERE UserName = 'myuser' - 'IN Geslo =' wrongpass '

Ključ za to izjavo je vključitev obeh črtic( -).To je začetni komentarski žeton za stavke SQL, tako da se bo karkoli, ki se pojavi po dveh črtah( vključujoče), prezrta. V bistvu zgornja poizvedba izvede baza podatkov kot:

SELECT UserID FROM Users WHERE UserName = 'myuser'

Očitna opustitev tukaj je pomanjkanje preverjanja gesla. Z vključitvijo dveh pomišljajev kot dela uporabniškega polja smo popolnoma zaobšli pogoj za preverjanje gesla in se lahko prijavili kot »mizo«, ne da bi vedeli za ustrezno geslo. To dejanje manipuliranja poizvedbe za nenamerne rezultate je napad SQL injection.

Kakšna škoda je mogoče storiti?

SQL injection napad je posledica malomarnega in neodgovornega kodiranja aplikacij in je popolnoma preprečljiv( ki ga bomo pokrivali v trenutku), vendar je obseg škode, ki se lahko izvede, odvisna od nastavitve baze podatkov. Da bi spletna aplikacija komunicirala z bazi podatkov baze podatkov, mora aplikacija priskrbeti prijavo v bazo podatkov( upoštevajte, da se to razlikuje od prijave uporabnika na spletno mesto samega).Odvisno od dovoljenj, ki jih zahteva spletna aplikacija, lahko ta ustrezen račun baze podatkov zahteva, da dovoljuje bralno / pisno dovoljenje v obstoječih tabelah le do celotnega dostopa do baze podatkov.Če to zdaj ni jasno, bi nekaj primerov pomagalo zagotoviti nekaj jasnosti.

Na podlagi zgornjega primera lahko vidite, da z vnosom, na primer, »youruser« - »,« admin «- ali katero koli drugo uporabniško ime, se lahko takoj prijavimo na spletno stran kot ta uporabnik, ne da bi vedeli geslo. Ko smo v sistemu, ne vemo, da nismo pravzaprav tega uporabnika, zato imamo popoln dostop do ustreznega računa. Dovoljenja za baze podatkov ne zagotavljajo varnostne mreže za to, ker mora imeti spletna stran vsaj dostop do branja / pisanja v svoji bazi podatkov.

Predvidevamo, da spletna stran ima popoln nadzor nad svojo bazo podatkov, ki omogoča brisanje zapisov, dodajanje / odstranjevanje tabel, dodajanje novih varnostnih računov itd. Pomembno je omeniti, da bi nekatere spletne aplikacije lahko potrebovale takšno dovoljenje,ni avtomatično slaba stvar, ki je dodeljena celotnemu nadzoru.

Za ponazoritev škode, ki jo je mogoče storiti v tej situaciji, bomo uporabili primer, ki je naveden v zgornjem stripu, tako da v polje uporabniškega imena vnesete naslednje: "Robert"; DROP TABLE Uporabniki; - ".Po preprosti zamenjavi postane avtentikacijska poizvedba:

SELECT UserID FROM Users WHERE UserName = 'Robert';DROP TABLE Uporabniki - 'AND Password =' ​​wrongpass '

Opomba: podpičje je v poizvedbi SQL, ki se uporablja za označevanje konca določenega stavka in začetka novega stavka.

Kateri izvede baza podatkov kot:

SELECT UserID FROM Users WHERE UserName = 'Robert'

DROP TABLE Uporabniki

Tako kot to smo uporabili napad SQLI, da izbrišemo celotno tabelo uporabnikov.

Seveda je veliko slabše, saj lahko, odvisno od dovoljenih SQL dovoljenj, napadalec spremeni vrednosti, dump tabele( ali celotno bazo podatkov sam) v besedilno datoteko, ustvari nove račune za prijavo ali celo ugneži celotno namestitev baze podatkov.

Preprečevanje napada SQL-injekcijo

Kot smo že večkrat omenili, lahko napad na napad SQL enostavno preprečimo. Eden od glavnih pravil spletnega razvoja je, da nikoli ne slepo zaupate uporabniškim vnosom, kot smo naredili, ko smo izvedli preprosto zamenjavo v naši predlogi za zgoraj opisane predloge.

Napadi SQLI zlahka ovirajo tisto, kar se imenuje sanitiziranje( ali uhajanje) vaših vložkov. Postopek sanacije je pravzaprav precej nepomemben, saj vse, kar v bistvu naredi, ročno upravlja vse poljubne enojne kvote( ') znake, tako da jih ni mogoče uporabiti za prezgodnjo prekinitev niza znotraj stavka SQL.

Če na primer želite iskati "O'neil" v zbirki podatkov, preproste nadomestitve ni bilo mogoče uporabiti, ker bi enojni citat po O povzročil, da se niz prezgodaj konča. Namesto tega ga razkužite z uporabo ustreznega podatkovnega baze. Predpostavimo, da je znak za uhajanje za vhodni enojni citat predhodno postavil vsak citat s simbolom \.Torej bi "O'neal" razkužil kot "O \" neil ".

To preprosto dejanje sanitarij precej preprečuje napad SQLI.Za ponazoritev ponovimo prejšnje primere in prikažemo posledične poizvedbe, ko je uporabnik vnesel sanifikacijo.

myuser '- / wrongpass :

SELECT Uporabniško ime iz uporabnikov WHERE UserName =' Mysuser '-' IN Geslo = 'wrongpass'

Ker je enojni citat po majusu ušel( kar pomeni, da se šteje za del ciljnegavrednost), baza podatkov dobesedno išče uporabniško ime za »mizo» - «.Poleg tega, ker so pomišljaji vključeni v vrednost niza in ne iz samega stavka SQL, se bodo šteli kot del ciljne vrednosti, namesto da bi jih razlagali kot komentar SQL.

Robert ";DROP TABLE Uporabniki; - / wrongpass :

SELECT uporabniško ime iz uporabnikov WHERE UserName = 'Robert \';DROP TABLE Uporabniki; - "IN Password =" wrongpass "

Z enostavnim izborom enojnega citata za Robertom sta v iskalni niz v uporabniškem nizu vsebovana tako podpičja kot pomišljaji, tako da bo baza podatkov dobesedno iskala za" Robert ";- "namesto izvršitve tabele izbrišite.

Povzetek

Medtem ko se spletni napadi razvijajo in postanejo bolj izpopolnjeni ali se osredotočajo na drugačen vstopni točki, je pomembno, da se zavedate zaščite pred preizkušenimi in resničnimi napadi, ki so bile navdih za več prosto dostopnih "hekerskih orodij", katerih namen je njihovo izkoriščanje.

Nekatere vrste napadov, kot je DDoS, ni mogoče enostavno izogniti, medtem ko lahko drugi, kot je SQLI,Vendar pa lahko škodo, ki jo lahko storijo te vrste napadov, lahko odstopa od nevšečnosti do katastrofalnih glede na previdnostne ukrepe.