26Aug

Ako Hackeri preberajú webové stránky pomocou SQL Injection a DDoS

Dokonca aj keď ste len voľne sledovali udalosti hackerových skupín Anonymous a LulzSec, pravdepodobne ste počuli o webových stránkach a službách, ktoré sú napadnuté, ako o neslávnom Sony hacks. Premýšľali ste niekedy, ako to robia?

Existuje niekoľko nástrojov a techník, ktoré tieto skupiny používajú, a kým sa nepokúšame vám dať manuál, aby ste to urobili sami, je užitočné pochopiť, čo sa deje. Dva z útokov, ktoré ste neustále počuli o nich, sú "Distribuované odmietnutie služby"( DDoS) a "SQL Injections"( SQLI).Tu je návod, ako fungujú.

Obrázok podľa xkcd

Denial of Service Attack

Čo to je?

"Zamietnutie služby"( niekedy nazývané "distribuované odmietnutie služby" alebo DDoS) sa vyskytuje, keď systém, v tomto prípade webový server, prijíma toľko požiadaviek naraz, že zdroje servera sú preťažené systémom jednoducho zamkneup a vypne sa. Cieľ a výsledok úspešného útoku DDoS je, že webové stránky na cieľovom serveri nie sú k dispozícii na legitímne žiadosti o návštevnosť.

Ako to funguje?

Logistika útoku DDoS možno najlepšie vysvetliť príkladom.

Predstavte si, že sa milión ľudí( útočníci) stretne s cieľom obmedziť podnikanie spoločnosti X tým, že zoberie call centrum.Útočníci sa koordinujú, aby v utorok o 9:00 všetci zavolali telefónne číslo spoločnosti X.S najväčšou pravdepodobnosťou telefónny systém spoločnosti X nebude schopný zvládnuť milión hovorov naraz, takže všetky prichádzajúce linky budú zviazané útočníkmi. Výsledkom je, že legitímne zákaznícke hovory( t. J. Tie, ktoré nie sú útočníkmi) sa nedostanú, pretože telefónny systém je viazaný manipuláciou s hovormi od útočníkov. Takže v podstate spoločnosť X potenciálne stráca svoju činnosť v dôsledku legitímnych požiadaviek, ktoré nie sú schopné prekonať.

Útok DDoS na webový server funguje presne rovnakým spôsobom. Pretože prakticky neexistuje žiadny spôsob, ako zistiť, čo sa získava z legitímnych žiadostí a útočníkov, kým webový server spracováva žiadosť, tento typ útoku je zvyčajne veľmi účinný.

Vykonanie útoku

Vzhľadom na povahu útoku DDoS "brutálnej sily" musíte mať k dispozícii množstvo počítačov, ktoré sú všetky koordinované, aby mohli naraziť naraz. Pri opätovnom prečítaní nášho príkladu telefónneho centra by to vyžadovalo, aby všetci útočníci obaja poznali, že majú zavolať o 9:00 hod. A skutočne volajú v tom čase. Zatiaľ čo tento princíp určite bude fungovať, pokiaľ ide o napadnutie webového servera, stáva sa podstatne ľahšie, keď sa zombie počítače, namiesto skutočných posádky počítačov, využívajú.

Ako pravdepodobne viete, existuje veľa variantov malwaru a trójskych koní, ktoré kedysi v systéme ležia spiace a príležitostne "telefón domov" pre inštrukcie. Jedným z týchto pokynov by mohlo byť napríklad odoslanie opakovaných žiadostí na webový server spoločnosti X v 9:00.Takže s jednou aktualizáciou na domáce umiestnenie príslušného malware môže jeden útočník okamžite koordinovať stovky tisíc kompromitovaných počítačov, aby mohol vykonať masívny útok DDoS.

Krása využitia počítača zombie nie je len v jeho účinnosti, ale aj v jeho anonymite, pretože útočník v skutočnosti nemusí používať svoj počítač na vykonanie útoku.

SQL Injection Attack

Čo to je?

Útok "SQL injection"( SQLI) je zneužitie, ktoré využíva slabé techniky vývoja webu a typicky v kombinácii s chybnou databázovou bezpečnosťou. Výsledok úspešného útoku môže byť od zosobnenia používateľského konta až po úplný kompromis príslušnej databázy alebo servera. Na rozdiel od útoku DDoS je útok SQLI úplne a ľahko zabrániteľný, ak je webová aplikácia správne naprogramovaná.

Vykonanie útoku

Kedykoľvek sa prihlásite na webovú lokalitu a zadáte svoje používateľské meno a heslo, aby ste mohli otestovať svoje poverenia, webová aplikácia môže spustiť dotaz, napríklad nasledujúci:

SELECT UserID FROM Users WHERE UserName = 'myuser' A heslo= 'mypass';

Poznámka: Hodnoty reťazcov v dotaze SQL musia byť uzavreté v samostatných úvodzovkách, čo je dôvod, prečo sa objavujú okolo zadaných hodnôt používateľa.

Takže kombinácia zadaného užívateľského mena( myuser) a hesla( mypass) sa musí zhodovať s položkou v tabuľke Users, aby sa vrátila užívateľská identifikácia. Ak neexistuje žiadna zhoda, nebudú vrátené žiadne ID používateľa, takže prihlasovacie údaje nie sú platné.Kým konkrétna implementácia sa môže líšiť, mechanika je dosť štandardná.

Takže teraz sa pozrime na dotaz na autentifikáciu šablóny, ktorý môžeme nahradiť hodnotami, ktoré používateľ zadá do webového formulára:

SELECT UserID FROM Používatelia WHERE UserName = '[user]' A heslo = '[pass]'

Na prvý pohľadsa môže javiť ako jednoduchý a logický krok pre jednoduché overenie používateľov, avšak ak sa na túto šablónu vykoná jednoduchá náhrada užívateľom zadaných hodnôt, je náchylná na útok SQLI.

Predpokladajme napríklad, že do poľa užívateľského mena je zadané "myuser" - a heslo "wrongpass" je zadané.Použitím jednoduchej náhrady v našom dotaze šablóny by sme získali toto:

SELECT UserID FROM používateľov WHERE UserName = 'myuser' - 'AND Password =' ​​wrongpass '

Kľúčom k tomuto vyhláseniu je zaradenie dvoch pomlčiek( -),Toto je začiatočný komentár pre príkazy SQL, takže niečo, čo sa objaví po dvoch pomlčkách( vrátane), bude ignorované.V podstate je vyššie uvedený dopyt vykonaný databázou ako:

SELECT UserID z používateľov WHERE UserName = 'myuser'

Výrazné vynechanie tu je nedostatok kontroly hesla. Zahrnutím dvoch pomlčiek ako súčasť užívateľského poľa sme úplne vynechali podmienku kontroly hesla a dokázali sa prihlásiť ako "myuser" bez toho, aby sme vedeli príslušné heslo. Tento akt manipulácie s dotazom na dosiahnutie neúmyselných výsledkov je útokom SQL injection.

Aké škody možno urobiť?

Injekčný útok SQL je spôsobený nedbanlivým a nezodpovedným kódovaním aplikácie a je úplne zabránené( čo budeme pokrývať v okamihu), rozsah škôd, ktoré je možné urobiť, závisí od nastavenia databázy. Aby mohla webová aplikácia komunikovať s databázou backend, aplikácia musí poskytnúť prihlásenie do databázy( poznamenajte si, že je to iné ako prihlásenie používateľa na samotnú webovú stránku).V závislosti od toho, ktoré povolenia webová aplikácia vyžaduje, môže príslušný databázový účet vyžadovať čokoľvek od oprávnenia na čítanie / zápis v existujúcich tabuľkách až po úplný prístup k databáze. Ak to teraz nie je jasné, niekoľko príkladov by malo pomôcť poskytnúť určitú jasnosť.

Na základe vyššie uvedeného príkladu môžete vidieť, že zadaním napríklad "youruser" - "," admin "- alebo akéhokoľvek iného používateľského mena sa môžeme okamžite prihlásiť na stránku ako tento používateľ bez toho, aby ste vedeli heslo, Akonáhle sme v systéme, nevie, že vlastne nie sme ten používateľ, takže máme plný prístup k príslušnému účtu. Databázové povolenia neposkytujú záchrannú sieť, pretože webová stránka musí mať aspoň prístup k čítaniu alebo zápisu do svojej databázy.

Predpokladajme, že webová stránka má plnú kontrolu nad príslušnou databázou, ktorá dáva možnosť vymazať záznamy, pridať alebo odstrániť tabuľky, pridať nové bezpečnostné účty atď. Je dôležité poznamenať, že niektoré webové aplikácie by mohli potrebovať tento typ povolenia, takžeto nie je automaticky zlá vec, že ​​plná kontrola je udelená.

Pre ilustráciu poškodenia, ktoré je možné v tejto situácii urobiť, použijeme príklad uvedenú v komiksu uvedenom vyššie, zadaním nasledujúceho poľa do poľa užívateľského mena: "Robert", "DROP TABLE Users" - ".Po jednoduchom nahradení sa autentifikačný dotaz stáva:

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

Poznámka: bodkočiarka v dotaze SQL sa používa na označenie konca konkrétneho výpisu a začiatku nového výpisu.

Ktorý sa spúšťa databázou ako:

SELECT UserID z používateľov WHERE UserName = 'Robert'

DROP TABLE Používatelia

Takže sme použili SQLI útok na vymazanie celej tabuľky Users.

Samozrejme, je možné urobiť oveľa horšie, pretože v závislosti od povolených oprávnení SQL môže útočník meniť hodnoty, tabuľku výpisov( alebo celú databázu) do textového súboru, vytvoriť nové prihlasovacie účty alebo dokonca uniesť celú inštaláciu databázy.

Prevencia útoku SQL

Ako sme už niekoľkokrát spomenuli, útok SQL injection je ľahko zabrániteľný.Jednou z hlavných pravidiel vývoja webu nie je nikdy slepá dôvera užívateľa ako sme urobili, keď sme vykonali jednoduchú náhradu v našom dotaze šablóny vyššie.

SQLI útok je ľahko prekonaný tým, čo sa nazýva dezinfekcia( alebo unikanie) vašich vstupov. Proces dezinfekcie je v skutočnosti dosť triviálny, pretože všetko, čo v podstate robí, je spracovávať akékoľvek inline jednoduché citácie( ') znakov vhodne tak, že nemôžu byť použité na predčasné ukončenie reťazca vnútri príkazu SQL.

Napríklad, ak ste chceli v databázu vyhľadávať "O'neil", nemohli ste použiť jednoduchú náhradu, pretože jednoduchá citácia po O by spôsobila, že reťazec predčasne skončí.Namiesto toho sa dezinfikujete pomocou príslušného únikového znaku databázy. Predpokladajme, že znak úniku pre inline jednoduchú citáciu predbežne robí každý citát so symbolom \.Takže "O'neal" by sa dezinfikoval ako "O" neil ".

Tento jednoduchý sanitárny úkon skoro zabráni útoku SQLI.Ak chcete ilustrovať, vráťme sa k našim predchádzajúcim príkladom a výsledné dopyty sa zobrazia, keď sa dezinfikuje užívateľský vstup.

myuser '- / nesprávna cesta :

SELECT užívateľské ID FROM užívateľov WHERE UserName =' myuser '-' AND Password = 'wrongpass'

Pretože unikátny citát po myuser je uniknutýhodnota) databáza doslova vyhľadá užívateľské meno "myuser" - ".Navyše, pretože pomlčky sú zahrnuté do hodnoty reťazca a nie do samotného príkazu SQL, považujú sa za súčasť cieľovej hodnoty namiesto toho, aby sa interpretovali ako komentár SQL.

Robert ';DROP TABLE Users - / wrongpass :

SELECT užívateľské ID FROM používateľov WHERE UserName = 'Robert \';DROP TABLE užívateľov - 'AND Password =' ​​wrongpass '

Jednoduchým unikaním jednej cenovej ponuky za Robertom sa nachádza bodkočiarkou a pomlčkami vo vyhľadávacom reťazci UserName, takže databáza doslova vyhľadá používateľov "Robert", DROP TABLE;- "namiesto vykonania vymazania tabuľky.

V súhrne

Zatiaľ čo útoky na web sa vyvíjajú a stávajú sa sofistikovanejšími alebo sa zameriavajú na iný vstupný bod, je dôležité mať na pamäti ochranu pred pokusnými a pravdivými útokmi, ktoré boli inšpiráciou niekoľkých voľne dostupných "hackerových nástrojov" určených na ich využitie,

Niektoré typy útokov, ako napríklad DDoS, sa nedajú ľahko vyhnúť, zatiaľ čo iné, napríklad SQLI, môžu.Škody, ktoré môžu byť spôsobené týmito druhmi útokov, sa však môžu pohybovať od nepríjemnosti až po katastrofálne v závislosti od prijatých bezpečnostných opatrení.