Kotisivu » miten » Miten hakkerit siirtävät Web-sivustoja SQL-injektion ja DDoS n avulla

    Miten hakkerit siirtävät Web-sivustoja SQL-injektion ja DDoS n avulla

    Vaikka olisit vain löyhästi seurannut hakkereiden ryhmien Anonymous ja LulzSec tapahtumia, olet luultavasti kuullut web-sivustoista ja palveluista, jotka ovat hakkeroituja, kuten surullisen Sony-häkin. Oletko koskaan miettinyt, miten he tekevät sen?

    Nämä ryhmät käyttävät useita työkaluja ja tekniikoita, ja vaikka emme yritä antaa sinulle käsikirjaa tämän tekemiseen, on hyödyllistä ymmärtää, mitä tapahtuu. Kaksi niistä hyökkäyksistä, joita kuulet niistä jatkuvasti, ovat "(Distributed) Denial of Service" (DDoS) ja "SQL Injections" (SQLI). Näin he toimivat.

    Kuva käyttäjältä xkcd

    Palvelunestohyökkäys

    Mikä se on?

    Palvelun epääminen (jota kutsutaan joskus "hajautetuksi palvelunestohyökkäykseksi" tai DDoS-hyökkäykseksi) tapahtuu, kun järjestelmä, tässä tapauksessa web-palvelin, vastaanottaa niin monta pyyntöä kerralla, että palvelimen resurssit ovat ylikuormitettuja, järjestelmä yksinkertaisesti lukittuu ja sammuu. Onnistuneen DDoS-hyökkäyksen tavoite ja tulos on, että kohdepalvelimen sivustot eivät ole oikeutettujen liikennepyyntöjen käytettävissä.

    Kuinka se toimii?

    DDoS-hyökkäyksen logistiikka voidaan parhaiten selittää esimerkillä.

    Kuvittele miljoona ihmistä (hyökkääjät) yhdessä tavoitteenaan estää X: n liiketoimintaa ottamalla heidän puhelinkeskuksensa. Hyökkääjät koordinoivat niin, että tiistaina klo 9 hän kutsuu sinut X: n puhelinnumeroon. Todennäköisesti yhtiön X puhelinjärjestelmä ei pysty käsittelemään miljoona puhelua kerralla, joten kaikki saapuvat linjat hyökkäävät. Tämän seurauksena lailliset puhelut (eli ne, jotka eivät ole hyökkääjiä) eivät pääse läpi, koska puhelinjärjestelmä on sidottu käsittelemään hyökkääjien puhelut. Niinpä yritys X voi menettää liiketoimintaansa, koska lailliset pyynnöt eivät pysty pääsemään läpi.

    DDoS-hyökkäys web-palvelimelle toimii samalla tavalla. Koska käytännössä 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 "raakavoiman" luonteen vuoksi sinun täytyy olla paljon tietokoneita, jotka on koordinoitu hyökkäykseen samanaikaisesti. Tämä edellyttää, että kaikki hyökkääjät tietävät, että he voivat soittaa klo 9 ja puhua tuolloin. Vaikka tämä periaate varmasti toimii verkkopalvelimen hyökkäämisen kannalta, se tulee huomattavasti helpommaksi, kun zombie-tietokoneita käytetään todellisten miehitettyjen tietokoneiden sijaan..

    Kuten luultavasti tiedätte, haittaohjelmia ja troijalaisia ​​on paljon vaihtoehtoja, jotka kerran järjestelmässäsi ovat lepotilassa ja joskus "puhelimen kotona" ohjeita varten. Yksi näistä ohjeista voisi olla esimerkiksi lähettää toistuvia pyyntöjä yrityksen X-palvelimelle klo 9.00. Joten yksittäisen hyökkääjän avulla voit päivittää satojatuhansia vaarantuneita tietokoneita, jotta he voivat suorittaa suuren DDoS-hyökkäyksen, kun päivität vastaavan haittaohjelman kodin sijainnin..

    Zombie-tietokoneiden hyödyntämisen kauneus ei ole ainoastaan ​​sen tehokkuus, vaan myös sen nimettömyys, koska hyökkääjän ei tarvitse itse käyttää tietokonettaan hyökkäyksen suorittamiseen..

    SQL-ruiskutuskohta

    Mikä se on?

    "SQL-injektion" (SQLI) hyökkäys on hyödyntäminen, joka hyödyntää huonoja web-kehitystekniikoita ja tyypillisesti yhdistettynä virheelliseen tietoturvaan. Onnistuneen hyökkäyksen tulos voi vaihdella käyttäjätunnuksen muokkaamisesta 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 web-sovellus on ohjelmoitu asianmukaisesti.

    Hyökkäyksen suorittaminen

    Kun kirjaudut Web-sivustoon ja kirjoitat käyttäjätunnuksesi ja salasanasi, verkkosivustosovellus voi suorittaa kyselyn, kuten seuraavat:

    VALITSE käyttäjätunnus käyttäjiltä WHERE UserName = "myuser" JA salasana = "mypass";

    Huomautus: SQL-kyselyn merkkijonon arvot on liitettävä yksittäisiin lainausmerkkeihin, minkä vuoksi ne näkyvät käyttäjän syöttämien arvojen ympärillä.

    Siten syötetyn käyttäjänimen (myuser) ja salasanan (mypass) yhdistelmän on vastattava Käyttäjät-taulukon merkintää, jotta käyttäjätunnus voidaan palauttaa. Jos vastausta ei ole, käyttäjätunnusta ei palauteta, joten kirjautumistiedot ovat virheellisiä. Vaikka tietty toteutus voi vaihdella, mekaniikka on melko vakio.

    Joten katsotaanpa nyt mallin laillisuustarkistuskyselyä, jonka avulla voimme korvata käyttäjän web-lomakkeeseen syöttämät arvot:

    Valitse käyttäjätunnus käyttäjiltä WHERE UserName = "[user]" ja salasana = "[pass]"

    Ensi silmäyksellä tämä saattaa tuntua suoraviivaiselta ja loogiselta vaiheelta, jotta käyttäjät voidaan helposti vahvistaa, mutta jos käyttäjälle syötettyjen arvojen yksinkertainen korvaaminen suoritetaan tällä mallilla, se on altis SQLI-hyökkäykselle.

    Oletetaan esimerkiksi, että ”myuser'-” syötetään käyttäjänimen kenttään ja salasanaan syötetään ”väärän ohituksen”. Käytämme yksinkertaista korvaamista mallikyselyssä.

    VALITSE käyttäjätunnus käyttäjiltä WHERE UserName = "myuser" - 'JA salasana = "väärä ohitus"

    Avain tähän lausuntoon on kahden viivan sisällyttäminen (-). Tämä on SQL-lausekkeiden aloitusvalintamerkki, joten kaikki kaksi viivaa (mukaan lukien) jälkeen näkyvä merkki jätetään huomiotta. Pääsääntöisesti yllä oleva kysely suoritetaan tietokannassa seuraavasti:

    VALITSE käyttäjätunnus käyttäjiltä WHERE UserName = "myuser"

    Silmän laiminlyönti tässä on salasanan tarkistuksen puute. Kytkemällä kaksi viivaa osaksi käyttäjäkenttää, ohitimme täysin salasanan tarkistustilan ja pystyimme kirjautumaan ”myuseriksi” tuntematta vastaavaa salasanaa. Tämä toimenpide manipuloimalla kyselyä tahattomien tulosten tuottamiseksi on SQL-injektiohyökkäys.

    Mitä vaurioita voi tehdä?

    SQL-ruiskutushyökkäys johtuu huolimattomasta ja vastuuttomasta sovelluskoodauksesta, ja se on täysin estettävissä (joka kattaa hetken), mutta mahdollisen vahingon laajuus riippuu tietokannan asetuksista. Jotta web-sovellus kommunikoi taustan tietokannan kanssa, sovelluksen on annettava sisäänkirjautuminen tietokantaan (huomaa, tämä on erilainen kuin käyttäjän sisäänkirjautuminen itse sivustoon). Riippuen siitä, mitä käyttöoikeuksia web-sovellus vaatii, tämä tietokantatili voi vaatia mitään olemassa olevissa taulukoissa olevista luku- / kirjoitusoikeuksista vain täydelliseen tietokantaan. Jos tämä ei ole nyt selvää, muutaman esimerkin pitäisi auttaa tarjoamaan selkeyttä.

    Edellä olevan esimerkin perusteella voit nähdä sen esimerkiksi syöttämällä, "käyttäjänne" - "," admin "-" tai mikä tahansa muu käyttäjätunnus, voimme heti kirjautua sivustoon käyttäjänä tietämättä salasanaa. Kun olemme järjestelmässä, emme tiedä, ettemme ole oikeastaan ​​kyseinen käyttäjä, joten meillä on täysi pääsy vastaavaan tiliin. Tietokannan oikeudet eivät tarjoa turvaverkkoa tähän, koska verkkosivustolla on tyypillisesti oltava ainakin luku- / kirjoitusoikeus vastaavaan tietokantaan.

    Oletetaan nyt, että sivustolla on täysi määräysvalta sen tietokannasta, joka antaa mahdollisuuden poistaa tietueita, lisätä / poistaa taulukoita, lisätä uusia tietoturvatilejä jne. On tärkeää huomata, että jotkin web-sovellukset saattavat tarvita tämäntyyppisen luvan ei ole automaattisesti huono asia, että täysi määräysvalta on myönnetty.

    Niinpä tässä tilanteessa tapahtuvan vahingon havainnollistamiseksi käytämme edellä olevassa sarjassa esitettyä esimerkkiä kirjoittamalla seuraavan käyttäjänimen kenttään: "Robert", DROP TABLE Käyttäjät; - ". Yksinkertaisen korvaamisen jälkeen todennus kyselystä tulee:

    VALITSE käyttäjätunnus käyttäjiltä WHERE UserName = "Robert"; DROP TABLE Käyttäjät; - 'JA salasana = "väärä ohitus"

    Huomautus: puolipiste on SQL-kyselyssä, jolla ilmoitetaan tietyn lausunnon loppu ja uuden lauseen alku.

    Joka saa tietokannan toteutuksen seuraavasti:

    VALITSE käyttäjätunnus käyttäjiltä WHERE UserName = "Robert"

    DROP TABLE Käyttäjät

    Niinpä olemme käyttäneet SQLI-hyökkäystä poistaaksemme koko Käyttäjät-taulukon.

    Tietenkin paljon pahempaa voidaan tehdä, koska sallitut SQL-käyttöoikeudet riippuen hyökkääjä voi muuttaa arvoja, tyhjentää taulukoita (tai koko tietokannan) tekstitiedostoon, luoda uusia kirjautumistilejä tai jopa kaapata koko tietokannan asennuksen.

    SQL-injektion hyökkäyksen estäminen

    Kuten mainitsimme useita kertoja aiemmin, SQL-ruiskutushyökkäys on helposti estettävissä. Yksi web-kehitystyön keskeisistä säännöistä on, ettet koskaan sokeasti luota käyttäjän syöttöön, kuten teimme, kun suoritimme yksinkertaisen korvaamisen yllä olevassa mallikyselyssä.

    SQLI-hyökkäys estyy helposti syötteistä sanotulla sanitaatiolla (tai poistumisella). Puhdistusprosessi on oikeastaan ​​melko vähäistä, koska kaikki se olennaisesti käsittelee minkä tahansa inline-yksittäisen lainausmerkin (') merkit asianmukaisesti siten, että niitä ei voida käyttää ennenaikaisesti lopettamaan merkkijonon SQL-käskyn sisällä.

    Esimerkiksi, jos halusit etsiä tietokannassa “O'neil”, et voisi käyttää yksinkertaista korvaamista, koska yksittäinen lainaus O: n jälkeen aiheuttaisi merkkijonon ennenaikaisesti. Sen sijaan voit desinfioida sen käyttämällä tietokannan pakolomaketta. Oletetaan, että sisäisen yksittäisen lainauksen pako-merkki on etukäteen jokaisella symbolilla. Niinpä "O'neal" olisi desinfioitu nimellä "O"..

    Tämä yksinkertainen sanitaatio-ohjelma estää paljon SQLI-hyökkäystä. Havainnollistaaksesi, tutustu aiempiin esimerkkeihimme ja näe tuloksena olevat kyselyt, kun käyttäjän syöttö on desinfioitu.

    myuser'-- / wrongpass:

    VALITSE käyttäjätunnus käyttäjiltä WHERE UserName = "myuser" - 'JA salasana = "väärinkäytös"

    Koska yksittäinen lainaus, kun myuser on poistettu (eli sitä pidetään osana tavoitearvoa), tietokanta etsii kirjaimellisesti käyttäjätunnusta "Myuser '-". Lisäksi, koska viivat sisältyvät merkkijonon arvoon eivätkä itse SQL-lausekkeeseen, ne katsotaan osaksi kohdearvoa sen sijaan, että niitä tulkitaan SQL-kommentiksi.

    Robert '; DROP TABLE Käyttäjät;-- / wrongpass:

    VALITSE käyttäjätunnus käyttäjiltä WHERE UserName = "Robert"; DROP TABLE Käyttäjät; - 'JA salasana = "väärä ohitus"

    Pelkästään poistumalla yhdestä lainauksesta Robertin jälkeen sekä puolipiste että viivat sisältyvät UserName-hakusarjaan, joten tietokanta etsii kirjaimellisesti "Robert", DROP TABLE Käyttäjät; - " taulukon poistamisen sijaan.

    Yhteenvetona

    Vaikka web-hyökkäykset kehittyvät ja kehittyvät entistä kehittyneemmiksi tai keskittyvät toiseen sisäänkäyntipisteeseen, on tärkeää muistaa suojella kokeellisia ja todellisia hyökkäyksiä vastaan, jotka ovat olleet inspiraationa useista vapaasti käytettävissä olevista "hakkereiden työkaluista", jotka on suunniteltu hyödyntämään niitä.

    Tietyntyyppisiä hyökkäyksiä, kuten DDoS, ei voida helposti välttää, kun taas toiset, kuten SQLI, voivat. Tämäntyyppisten hyökkäysten aiheuttamat vahingot voivat kuitenkin vaihdella kaikkialta haittaa aiheuttavasta katastrofista riippuen toteutetuista varotoimista.