26Aug
Vaikka olet vain löyhästi seurannut hakkeriryhmien Anonymous ja LulzSec tapahtumia, olet luultavasti kuullut verkkosivustojen ja palveluiden hakkeroinnin, kuten pahamaineiset Sony-hakkerit. Oletko koskaan miettinyt, miten he tekevät sen?
Näillä ryhmillä on useita työkaluja ja tekniikoita, ja vaikka emme yritä antaa sinulle käsikirjaa, sinun on hyvä ymmärtää, mitä tapahtuu. Kaksi hyökkäystä, joita olet johdonmukaisesti kuullut käytöstä, ovat "(Distributed) Denial of Service"( DDoS) ja "SQL Injections"( SQLI).Näin he työskentelevät.
Kuva: xkcd
Denial of Service Attack
Mikä se on?
Palvelun epääminen( joskus kutsutaan "hajautetun palvelunestohyökkäyksen" tai DDoS-hyökkäyksen aikana, kun järjestelmä, tässä tapauksessa verkkopalvelin, vastaanottaa niin monta pyyntöä kerrallaan, että palvelinresurssit ovat ylikuormittuneita, järjestelmä yksinkertaisesti lukitseeylös ja sammuu. Menestyksekkään DDoS-hyökkäyksen tavoite ja tulos ovat kohdepalvelimessa olevat sivut eivät ole oikeutettuja liikennepyyntöjä varten.
Miten se toimii?
DDoS-hyökkäyksen logistiikka voidaan parhaiten selittää esimerkin avulla.
Kuvittele miljoona ihmistä( hyökkääjät) yhteen päämäärän kanssa, joka vaikeuttaa yrityksen X liiketoimintaa ottamalla puhelukeskuksensa alas. Hyökkääjät koordinoivat siten, että tiistaina kello 9.00 he kaikki soittavat X: n puhelinnumeroon. Todennäköisesti Company X: n puhelinjärjestelmä ei pysty käsittelemään miljoonia puheluita kerralla, jotta hyökkääjät sitoisivat kaikki tulevat rivit. Tuloksena on, että lailliset asiakaspuhelut( eli ne, jotka eivät ole hyökkääjiä) eivät pääse läpi, koska puhelinjärjestelmä on sidottu käsittelemään puhelut hyökkääjiltä.Joten yhtiö X voi mahdollisesti menettää liiketoimintaansa, koska oikeutetut pyynnöt eivät pääse läpi.
DDoS-hyökkäys web-palvelimelle toimii täsmälleen samalla tavalla. Koska käytännöllisesti katsoen ei ole mitään keinoa tietää, mikä liikenne on peräisin oikeutetuista pyynnöistä ja hyökkääjistä, kunnes verkkopalvelin käsittelee pyyntöä, tällainen hyökkäys on tyypillisesti erittäin tehokas.
Hyökkäyksen suorittaminen
DDoS-hyökkäyksen "brute force" -luonteen vuoksi sinulla on oltava paljon tietokoneita, jotka kaikki koordinoivat hyökätäkseen samanaikaisesti. Esimerkiksi puhelinkeskuksen esimerkin tarkistaminen vaatii, että kaikki hyökkääjät tietävät, että he soittavat klo 9.00 ja soittavat sinä aikana. Vaikka tämä periaate varmasti toimii WWW-palvelimen hyökkäämisen suhteen, siitä tulee huomattavasti helpompaa, kun zombietokoneita käytetään varsinaisten miehitettyjen tietokoneiden sijasta.
Kuten luultavasti tiedät, haittaohjelmien ja troijalaisten versioita on paljon, jotka kerran järjestelmässäsi ovat lepotilassa ja joskus "puhelimessa" ohjeita varten. Yksi näistä ohjeista voisi esimerkiksi olla lähettää toistuvia pyyntöjä yrityksen X verkkopalvelimelle kello 9.00.Joten yhdellä päivityksellä kyseisen haittaohjelmiston kotisivulle yksittäinen hyökkääjä voi välittömästi koordinoida satoja tuhansia vaarantuneita tietokoneita massiivisen DDoS-hyökkäyksen suorittamiseen.
Zombie-tietokoneiden hyödyntämisen kauneus ei ole pelkästään sen tehokkuus vaan myös sen nimettömyys, sillä hyökkääjä ei todellakaan tarvitse käyttää tietokonettaan suorittamaan hyökkäystä.
SQL Injection Attack
Mikä se on?
SQLin injektio( SQLI) -hyökkäys on hyödyntävä, joka hyödyntää huonoja web-kehitystekniikoita ja tyypillisesti yhdistettynä virheelliseen tietokantaturvaan. Menestyksekkään hyökkäyksen tulos voi vaihdella käyttäjän käyttäjätilien esittämisestä vastaavan tietokannan tai palvelimen täydelliseen kompromissiin. Toisin kuin DDoS-hyökkäys, SQLI-hyökkäys on täysin ja helposti estettävissä, jos verkkosovellus on ohjelmoitu asianmukaisesti.
Hyökkäyksen suorittaminen
Aina kun kirjaudut Web-sivustoon ja kirjoitat käyttäjätunnuksesi ja salasanasi, jotta voit testata salasanasi, web-sovellus voi suorittaa seuraavanlaisen kyselyn:
VALITSE Käyttäjätunnus käyttäjiltä WHERE UserName = 'myuser' ja salasana= 'mypass';
Huomaa: SQL-kyselyn merkkijonoarvot on sisällytettävä yksittäisiin lainausmerkkeihin, minkä vuoksi ne näkyvät käyttäjän antamien arvojen ympärillä.
Joten syötetyn käyttäjänimen( myuser) ja salasanan( mypass) yhdistelmän on vastattava merkintää Käyttäjät-taulukossa, jotta UserID palautetaan. Jos vastausta ei ole, käyttäjätunnusta ei palauteta, joten kirjautumistunnukset eivät ole kelvollisia. Vaikka tietty toteutus voi poiketa, mekaniikka on melko vakio.
Katsotaan siis mallin todennustekyselyä, jonka voimme korvata arvot, jotka käyttäjä kirjoittaa verkkolomakkeeseen:
VALITSE Käyttäjätunnus käyttäjiltä WHERE UserName = '[käyttäjä]' ja salasana = '[pass]'
Ensi silmäyksellä tämäsaattaa vaikuttaa yksinkertaiselta ja loogiselta askeleelta käyttäjien validoimiseksi helposti, mutta jos tällä mallilla tehdään käyttäjän syöttämäsi arvot yksinkertaisella korvauksella, se on altis SQLI-hyökkäykselle.
Oletetaan esimerkiksi, että käyttäjätunnus -kenttään kirjoitetaan "myuser'-" ja salasanaan syötetään "wrongpass".Käyttämällä mallin kyselyssä yksinkertaista korvausta, saisimme tämän:
VALITSE Käyttäjätunnus käyttäjiltä WHERE UserName = 'myuser' - 'AND Password =' wrongpass '
Tämän lauseen avain on kaksi viivaa( -),.Tämä on SQL-lausekkeiden aloituskomentosymboli, joten kaikki kaksi viivaa( sisältävä) jälkeen näkyvä sisältö jätetään huomiotta. Pohjimmiltaan yllä oleva kysely suoritetaan tietokannalla seuraavasti:
VALITSE Käyttäjätunnus käyttäjiltä WHERE UserName = 'myuser'
Selkeä laiminlyönti tässä on salasanan tarkistuksen puuttuminen. Sisällyttämällä kaksi viivaa osana käyttäjän kenttää ohitimme täydellisesti salasanan tarkistusolosuhteet ja pääsimme kirjautumaan "myuseriksi" tietämättä salasanaa. Tämä kyselyn manipulointi tahattomien tulosten tuottamiseksi on SQL-injektio-hyökkäys.
Mitä vaurioita voidaan tehdä?
SQL-injektio-hyökkäys johtuu huolimattomasta ja vastuuttomasta sovelluksen koodauksesta ja on täysin estettävissä( joka kattaa hetken), mutta vahingon laajuus, joka voidaan tehdä, riippuu tietokannan asentamisesta. Jotta web-sovellus voi kommunikoida backend-tietokannan kanssa, sovelluksen on toimitettava kirjautumistiedot tietokantaan( huomaa, tämä eroaa käyttäjän sisäänkirjautumisesta itse verkkosivustolle).Riippuen siitä, mitä käyttöoikeuksia web-sovellus vaatii, kyseinen tietokantatili voi vaatia olemassaolevissa taulukoissa vain lukea / kirjata lupaa täydelliseen tietokantaan. Jos tämä ei ole nyt selvää, muutamia esimerkkejä pitäisi auttaa selkeyttämään.
Edellä olevan esimerkin perusteella voit nähdä, että kirjoittamalla esimerkiksi "youruser" - "," admin "-" tai mikä tahansa muu käyttäjätunnus, voimme kirjautua sivustolle heti, koska käyttäjä ei tunne salasanaa. Kun olemme järjestelmässä, emme tiedä, emme ole tosiasiallisesti kyseistä käyttäjää, joten meillä on täysi pääsy kyseiseen tiliin. Tietokannan käyttöoikeudet eivät tarjoa turvaverkkoa, koska yleensä verkkosivustolla on oltava ainakin luku- / kirjoitusoikeus tietokantaansa.
Oletetaan nyt, että Web-sivustolla on täysi hallinta sen tietokannasta, joka antaa mahdollisuuden poistaa tietueita, lisätä / poistaa taulukoita, lisätä uusia tietoturvatilejä jne. On tärkeää huomata, että jotkin verkkosovellukset tarvitsevat tällaisen luvanse ei ole automaattisesti huono asia, että täysi valvonta myönnetään.
Jotta havainnollistettaisiin tässä tilanteessa mahdollisesti esiintyviä vahinkoja, käytämme yllä olevaa sarjakuva-esimerkkiä kirjoittamalla seuraavan käyttäjänimi -kenttään: "Robert"; DROP TABLE Users; - ".Yksinkertaisen korvaamisen jälkeen todennuspyyntö muuttuu:
VALITSE Käyttäjätunnus käyttäjiltä WHERE UserName = 'Robert';DROP TABLE Käyttäjät - 'AND Password =' wrongpass '
Huomautus: SQL-kyselyssä oleva puolipiste määritetään tietyn lausunnon loppuun ja uuden lauseen alkuun.
Joka saa tietokannan suorittamalla:
VALITSE Käyttäjätunnus käyttäjiltä WHERE UserName = 'Robert'
DROP TABLE Käyttäjät
Joten näin olemme käyttäneet SQLI-hyökkäys poistaa koko Käyttäjät-taulukon.
Tietenkin paljon huonompi voidaan tehdä, sillä sallitut SQL-oikeudet riippuvat hyökkäyksestä, joka voi muuttaa arvot, tyhjät taulut( tai koko tietokannan itse) tekstitiedostoon, luoda uusia kirjautumistilejä tai jopa kaapata koko tietokantaasennuksen.
SQL-injektoinnin estäminen
: lläKuten mainitsimme useita kertoja aikaisemmin, SQL-injektio-hyökkäys on helposti estettävissä.Yksi web-kehityksen tärkeimmistä säännöistä ei ole, että et koskaan sokeasti luota käyttäjän sisääntuloon, kuten teimme, kun teimme yksinkertaisen korvauksen yllä olevassa mallikyselyssä.
SQLI-hyökkäys on helposti estyneenä sen avulla, mitä kutsutaan panoksesi puhdistamiseen( tai pakenemiseen).Sanitisointiprosessi on itse asiassa melko vähäpätöinen, koska kaikki olennaisesti se hoitaa minkä tahansa inline-yhden lainauksen( ') merkit sopivasti siten, että niitä ei voida käyttää ennenaikaisesti lopettamaan SQL-käskyn sisällä oleva merkkijono.
Esimerkiksi jos haluat etsiä tietokannan "O'neil" tietokannasta, et voi käyttää yksinkertaista korvausta, koska yksittäinen lainaus O: n jälkeen aiheuttaa merkkijonoa ennenaikaisesti loppuun. Sen sijaan puhdistat sen käyttämällä vastaavaa tietokantaa. Oletetaan, että inline-kertaushakemuksen poistolohko edustaa jokaista lainausta \ symbolilla. Joten "O'neal" saniteettiin "O \ n neil".
Tämä yksinkertainen puhdistustoimenpide melkein estää SQLI-hyökkäyksen. Jotta havainnollistettaisiin, tarkastelemme edellisiä esimerkkejä ja näemme tuloksena olevat kyselyt, kun käyttäjän syöttö on puhdistettu.
myuser '- / vääriä :
VALITSE Käyttäjätunnus käyttäjiltä WHERE UserName =' myuser \ '-' JA salasana = 'wrongpass'
Koska yksittäinen lainaus jälkeen myuser poistuu( eli sitä pidetään osana tavoitearvo), tietokanta etsii kirjaimellisesti "myuser" - "Käyttäjänimi".Lisäksi, koska viivat sisältyvät merkkijonon arvoon eikä itse SQL-käskyyn, niitä pidetään osana tavoitearvoa sen sijaan, että niitä tulkittaisiin SQL-kommenteiksi.
Robert ';DROP TABLE Käyttäjät - / vääriä :
VALITSE Käyttäjätunnus käyttäjiltä WHERE UserName = 'Robert \';DROP TABLE Käyttäjät; - 'AND Password =' wrongpass '
Yksinkertaisesti jättäen yhden tarjouksen Robertin jälkeen sekä puolipiste ja viivat sisältyvät UserName-haun merkkijonoon, joten tietokanta etsii kirjaimellisesti "Robert"; DROP TABLE Users;- "taulukon poistamisen sijasta.
Yhteenveto
Vaikka verkkohyökkäykset kehittyvät ja kehittyvät entistä kehittyneemmiksi tai keskittyvät eri tulopaikalle, on tärkeää muistaa suojata kokeiltuja ja todellisia hyökkäyksiä, jotka ovat innoittaneet useita vapaasti käytettävissä olevia "hakkereittyökaluja", jotka on suunniteltu hyödyntämään niitä.
Tiettyjä hyökkäystyyppejä, kuten DDoS, ei voida helposti välttää, kun taas muut, kuten SQLI, voivat. Kuitenkin vahinko, jota tällaiset hyökkäykset voivat tehdä, voivat ulottua missä tahansa haitasta katastrofaaliseen riippuen toteutetuista varotoimista.