Kaip įsilaužėliai perima svetaines su „SQL“ įpurškimu ir „DDoS“
Net jei jūs tik laisvai sekėte „Anonymous“ ir „LulzSec“ įsilaužėlių grupių įvykius, jūs tikriausiai girdėjote apie interneto svetaines ir paslaugas, kurios buvo nulaužtos, pavyzdžiui, liūdnai pagarsėję „Sony“. Ar kada nors susimąstėte, kaip jie tai daro?
Yra nemažai įrankių ir metodų, kuriuos šios grupės naudoja, o nors nesistengiame jums pateikti vadovo, kad tai padarytumėte, naudinga suprasti, kas vyksta. Du išpuolių, kuriuos nuolatos girdite apie juos, yra „(Distributed) Denial of Service“ („DDoS“) ir „SQL injekcijos“ (SQLI). Štai kaip jie veikia.
Vaizdas pagal xkcd
Paslaugų atakos neigimas
Kas tai?
„Paslaugų atsisakymas“ (kartais vadinamas „paskirstyto atsisakymo naudotis paslauga“ arba „DDoS“) ataka įvyksta tada, kai sistema, šiuo atveju žiniatinklio serveris, gauna tiek daug užklausų vienu metu, kai serverio ištekliai yra perkrauti, sistema tiesiog užrakina ir išsijungia. Sėkmingo „DDoS“ atakos tikslas ir rezultatas yra tikslinės serverio svetainės, kurių negalima gauti teisėtiems eismo prašymams.
Kaip tai veikia?
DDoS atakos logistiką geriausiai galima paaiškinti pavyzdžiu.
Įsivaizduokite, kad milijonas žmonių (užpuolikai) susitiks su tikslu užkirsti kelią bendrovės X verslui, nustumdami jų skambučių centrą. Užpuolikai koordinuoja, kad antradienį 9 val. Visi paskambins bendrovės X telefono numeriu. Labiausiai tikėtina, kad „X“ kompanijos telefono sistema negalės vienu metu valdyti milijono skambučių, todėl visos įeinančios linijos bus susietos su užpuolikais. Rezultatas yra tas, kad teisėti klientų skambučiai (t. Y. Tie, kurie nėra užpuolikai) nepasiekia, nes telefono sistema yra susieta su užpuolikų skambučiais. Taigi, iš esmės bendrovė X gali prarasti verslą dėl to, kad teisėti prašymai nepavyksta pasiekti.
„DDoS“ atakos interneto serveryje veikia lygiai taip pat. Kadangi iš tikrųjų nėra jokio būdo sužinoti, koks srautas gaunamas iš teisėtų užklausų, o ne užpuolikai, kol žiniatinklio serveris apdoroja užklausą, šis atakos tipas paprastai yra labai veiksmingas.
Užpuolimo vykdymas
Dėl „brutalios jėgos“ DDoS atakos, jums reikia turėti daug kompiuterių, kurie visi būtų suderinti, kad būtų galima atakuoti vienu metu. Jei peržiūrėsite mūsų skambučių centro pavyzdį, tai reikštų, kad visi užpuolikai žinotų, kad paskambins į 9 val. Ir iš tikrųjų skambins tuo metu. Nors šis principas, be abejo, bus naudojamas atakuojant interneto serverį, jis tampa žymiai lengviau, kai naudojami zombių kompiuteriai vietoj faktinių kompiuterių, kuriuose dirba žmogus..
Kaip tikriausiai žinote, yra daug kenkėjiškų programų ir Trojos arklių variantų, kurie vieną kartą jūsų sistemoje lieka ramūs ir kartais „telefonu namuose“. Vienas iš šių nurodymų, pavyzdžiui, galėtų būti pakartotinių užklausų siuntimas bendrovės X žiniatinklio serveryje 9 val. Taigi su vienu kenkėjiškų programų namų vietos atnaujinimu vienas užpuolikas gali iškart koordinuoti šimtus tūkstančių kompromisų turinčių kompiuterių, kad galėtų atlikti didžiulį DDoS ataką.
Zombių kompiuterių naudojimo grožis yra ne tik jo veiksmingumas, bet ir jo anonimiškumas, nes užpuolikas iš tikrųjų neturi išnaudoti savo kompiuterio, kad įvykdytų ataką.
SQL įpurškimo ataka
Kas tai?
„SQL injekcijos“ (SQLI) ataka yra išnaudojimas, kuris naudoja prastas žiniatinklio kūrimo technologijas ir, paprastai, kartu su klaidingu duomenų bazės saugumu. Sėkmingo atakos rezultatas gali būti nuo vartotojo abonemento įvedimo iki atitinkamos duomenų bazės ar serverio kompromiso. Skirtingai nuo DDoS atakos, SQLI ataka yra visiškai ir lengvai išvengiama, jei interneto programa yra tinkamai užprogramuota.
Užpuolimo vykdymas
Kai prisijungiate prie interneto svetainės ir įvedate savo naudotojo vardą ir slaptažodį, norėdami išbandyti savo kredencialus, žiniatinklio programa gali paleisti užklausą, pavyzdžiui:
SELECT UserID FROM Users WHERE UserName = "Myuser" IR Slaptažodis = "mypass";
Pastaba: SQL užklausos eilutės reikšmės turi būti įtrauktos į atskiras kabutes, todėl jos rodomos aplink naudotojo įvestas reikšmes.
Taigi įvestos vartotojo vardo (Myuser) ir slaptažodžio (mypass) derinys turi atitikti įrašą naudotojų lentelėje, kad naudotojo ID būtų grąžintas. Jei nėra atitikimo, vartotojo ID nepateikiamas, todėl prisijungimo duomenys yra neteisingi. Nors konkretus įgyvendinimas gali skirtis, mechanika yra gana standartinė.
Taigi pažiūrėkime į šablono autentifikavimo užklausą, kurią galime pakeisti vertėmis, kurias vartotojas įveda žiniatinklio formoje:
SELECT UserID FROM Users WHERE UserName = "[user]" ir Password = "[pass]"
Iš pirmo žvilgsnio tai gali atrodyti kaip paprastas ir logiškas žingsnis lengvai patvirtinant vartotojus, tačiau, jei šiame šablone atliekamas paprastas vartotojo įvestų reikšmių pakeitimas, jis yra jautrus SQLI atakai.
Pavyzdžiui, tarkime, kad „Myuser“ - „įvedamas“ vartotojo vardo lauke, o „passwordpass“ įvedamas į slaptažodį. Naudodami paprastą pakeitimą mūsų šablono užklausoje, mes galėtume tai gauti:
SELECT UserID From Users WHERE UserName = "Myuser" - 'IR Password = "Klaidingas"
Šio teiginio raktas yra dviejų brūkšnių įtraukimas (-)
. Tai yra SQL komentarų pradžios komentaras, todėl nieko, kas atsiranda po dviejų brūkšnių (imtinai), bus ignoruojama. Iš esmės pirmiau minėta užklausa yra vykdoma duomenų bazėje kaip:
SELECT UserID FROM Users WHERE UserName = "myuser"
Ryškus praleidimas čia yra slaptažodžio patikros trūkumas. Įtraukdami abu brūkšnelius į naudotojo lauką, mes visiškai apeiname slaptažodžio tikrinimo sąlygą ir galėjome prisijungti kaip „naudotojas“, nežinodami atitinkamo slaptažodžio. Šis manipuliavimo užklausos veiksmas, skirtas nenumatytiems rezultatams gauti, yra SQL injekcijos ataka.
Kokią žalą galima padaryti?
SQL injekcijos ataką sukelia aplaidus ir neatsakingas programų kodavimas ir yra visiškai užkirstas kelias (kurį mes padengsime vienu metu), tačiau žalos, kurią galima padaryti, mastas priklauso nuo duomenų bazės nustatymo. Kad žiniatinklio programa galėtų bendrauti su „backend“ duomenų baze, programa turi pateikti prisijungimo prie duomenų bazės duomenis (atkreipkite dėmesį, kad tai skiriasi nuo vartotojo prisijungimo prie pačios svetainės). Priklausomai nuo to, kokių leidimų reikalauja internetinė taikomoji programa, ši atitinkama duomenų bazės paskyra gali pareikalauti nieko iš esamų lentelių skaitymo / rašymo leidimo tik prie pilnos prieigos prie duomenų bazės. Jei tai nėra aišku, keletas pavyzdžių turėtų padėti užtikrinti tam tikrą aiškumą.
Remiantis aukščiau pateiktu pavyzdžiu, galite pamatyti, pavyzdžiui, įvesdami, "naudotojas" - "," admin "-"
arba bet kurį kitą vartotojo vardą, mes galime iškart prisijungti prie svetainės kaip to vartotojo, nežinodami slaptažodžio. Kai mes esame sistemoje, nežinome, kad mes iš tikrųjų nesame tokie vartotojai, todėl mes turime visišką prieigą prie atitinkamos paskyros. Duomenų bazės leidimai nesuteiks saugos tinklo, nes paprastai interneto svetainėje turi būti bent jau skaitymo / rašymo prieiga prie atitinkamos duomenų bazės.
Dabar darysime prielaidą, kad svetainė turi visišką savo duomenų bazės valdymą, leidžiančią ištrinti įrašus, pridėti / pašalinti lenteles, pridėti naujų saugumo sąskaitų ir tt Svarbu pažymėti, kad kai kurioms žiniatinklio programoms gali prireikti tokio tipo leidimo automatiškai nėra blogas dalykas, kad visiškai kontroliuojama.
Taigi, norėdami iliustruoti žalą, kuri gali būti padaryta šioje situacijoje, naudosime pirmiau pateiktame pavyzdyje pateiktą pavyzdį įvedę toliau pateiktą informaciją į naudotojo vardo lauką: „Robertas“, „DROP TABLE“ naudotojai; - „.
Po paprasto pakeitimo autentifikavimo užklausa tampa:
SELECT UserID From Users WHERE UserName = "Robert"; DROP TABLE Vartotojai; - „IR Slaptažodis =„ neteisingas perdavimas “
Pastaba: kabliataškis yra SQL užklausoje, nurodant konkretaus pareiškimo pabaigą ir naujo pareiškimo pradžią.
Kuris duomenų bazėje įvykdomas kaip:
SELECT UserID FROM Users WHERE UserName = "Robert"
DROP TABLE Vartotojai
Taigi, taip, mes naudojome SQLI ataką, kad ištrintume visą naudotojų lentelę.
Žinoma, daug blogiau galima padaryti, nes, atsižvelgiant į leistinus SQL leidimus, užpuolikas gali pakeisti vertes, iškarpyti lenteles (arba visą duomenų bazę) į tekstinį failą, kurti naujas prisijungimo paskyras arba netgi užgrobti visą duomenų bazės diegimą.
SQL injekcijos atakos prevencija
Kaip minėjome kelis kartus anksčiau, SQL injekcijos ataka yra lengvai išvengiama. Viena iš pagrindinių interneto kūrimo taisyklių yra tai, kad niekada aklai nepasitikite vartotojo įvesties, kaip mes atlikome atlikdami paprastą pakeitimą mūsų šablono užklausoje.
SQLI ataką lengvai stabdo tai, kas vadinama jūsų įvesties dezinfekavimu (arba pabėgimu). Dezinfekavimo procesas iš tikrųjų yra gana trivialus, nes visa tai iš esmės yra tvarkyti bet kokias inline vieną citatos (') simbolius, kad jie negalėtų būti naudojami per anksti nutraukti eilutę SQL ataskaitos viduje.
Pvz., Jei norite, kad duomenų bazėje būtų ieškoma „O'neil“, negalite naudoti paprasto pakeitimo, nes vienintelė citata po O sukeltų eilutę anksčiau. Vietoj to ją dezinfekuokite naudodami atitinkamos duomenų bazės pabėgimo charakterį. Tarkime, kad vienos eilutės pasiūlymo pabėgimo simbolis yra kiekvienos citatos su simboliu. Taigi „O'neal“ būtų sanitarizuota kaip „O“.
Šis paprastas sanitarijos aktas beveik neleidžia SQLI atakai. Jei norite iliustruoti, peržiūrėkime ankstesnius pavyzdžius ir peržiūrėkite gautas užklausas, kai vartotojo įvestis yra dezinfekuota.
myuser '--
/ nepažeistas:
SELECT UserID from Users WHERE UserName = "Myuser" - "IR Password =" klaidingas "
Kadangi vienintelė citata po to, kai išnaudojama Myuser (tai yra laikoma tikslo vertės dalimi), duomenų bazė tiesiog ieškos „UserName“ "Myuser" - ".
Be to, kadangi brūkšneliai yra įtraukti į eilutės reikšmę, o ne pačią SQL, jie bus laikomi tikslo vertės dalimi, o ne interpretuojami kaip SQL komentarai.
Robertas “; DROP LENTELĖ Naudotojai;--
/ nepažeistas:
SELECT UserID From Users WHERE UserName = "Robert"; DROP TABLE Vartotojai; - „IR Slaptažodis =„ neteisingas perdavimas “
Paprasčiausiai pasitraukus iš vienos citatos po Roberto, abu kabliataškiai ir brūkšneliai yra naudotojo vardo paieškos eilutėje, todėl duomenų bazė tiesiog ieškos „Robertas“, „DROP TABLE“ naudotojai; - „
vietoj to, kad būtų ištrinta lentelė.
Apibendrinant
Nors interneto atakos vystosi ir tampa sudėtingesnės arba sutelkiamos į kitą įvažiavimo vietą, svarbu nepamiršti apsaugoti nuo išbandytų ir teisingų atakų, kurios įkvėpė keletą laisvai prieinamų „įsilaužėlių įrankių“, skirtų juos išnaudoti.
Tam tikrų rūšių atakų, pvz., „DDoS“, negalima lengvai išvengti, o kiti, pavyzdžiui, „SQLI“, gali. Tačiau žala, kuri gali būti padaryta dėl šių atakų tipų, gali svyruoti nuo nepatogumų iki katastrofiškų, priklausomai nuo atsargumo priemonių, kurių imtasi.