Hidas Loris-hyökkäys JavaScriptin avulla PHP-palvelimella [ja sen estäminen!]

Unohda viesti hetkeksi, aloitetaan siitä, mistä tässä otsikossa on kyse! Tämä on verkkoturvallisuuspohjainen artikkeli, joka tutustuu HTTP: n toiminnan perusteisiin. Tarkastelemme myös yksinkertaista hyökkäystä, joka hyödyntää HTTP-protokollan toimintaa.

Mikä on HTTP?

HTTP, HyperText Transfer Protocol, on protokolla, jota verkko käyttää viestintään. Kun käytät selainta, laite käyttää tätä protokollaa pyyntöjen lähettämiseen etäpalvelimille tietojen pyytämiseksi heiltä.

Se on pohjimmiltaan kuin sanot äidillesi: "Hei äiti, minun täytyy syödä esine jääkaapissa lattialla 2, voisitko antaa sen minulle?"

Ja äitisi sanoo: "Toki, tässä mennään" ja lähettää sinulle kyseisen tuotteen. Nyt HTTP on tapa, jolla pystyit välittämään nämä tiedot äidillesi, enemmän kuin kieli, jota käytit viestintään.

Kuinka HTTP toimii

Tässä on TL; DR-video, jos olet videohenkilö. Muussa tapauksessa jatka artikkelia:

HTTP (kerros 7) on rakennettu TCP-protokollan (kerros 4) päälle. Voimme käyttää nc(netcat) -apuohjelmaa avaamaan raakan TCP-liitännän mille tahansa HTTP-sivustolle (yleensä portti 80). Katso seuraava esimerkki siitä, miten muodostamme yhteyden google.com-sivuston HTTP-porttiin 80 netcatin avulla:

Katso lähettämämme tiedot:

GET / HTTP/1.1 Host: google.com X-header-1: somemoredata X-header-2: somemoredata 

Ohita X-header-*ylätunnisteet, ne ovat vain satunnaisia ​​otsikoita, jotka voit lähettää pyyntösi mukana. Tärkeä otsikko, joka sisällytetään HTTP / 1.1-määrityksiin, on Hostotsikko.

Ja saimme vastauksen:

HTTP/1.1 301 Moved Permanently Location: //www.google.com/ Content-Type: text/html; charset=UTF-8 Date: Tue, 01 Oct 2019 23:24:13 GMT Expires: Thu, 31 Oct 2019 23:24:13 GMT Cache-Control: public, max-age=2592000 Server: gws Content-Length: 219 X-XSS-Protection: 0 X-Frame-Options: SAMEORIGIN Accept-Ranges: none Via: HTTP/1.1 forward.http.proxy:3128 Connection: keep-alive  301 Moved 

301 Moved

The document has moved here.

Siten HTTP on selkokielinen protokolla, joka koostuu asiakkaan lähettämistä pyyntötiedoista ja yllä esitetystä vastauksesta.

Hidas Loris-hyökkäys

Hidas Lorisin hyökkäys hyödyntää sitä, että voisin tehdä HTTP-pyynnön hyvin hitaasti. Toisin sanoen, voin aloittaa HTTP-pyynnön palvelimelle ja lähettää tietoja palvelimelle hyvin hitaasti pitääkseen yhteyden hengissä. Ja samalla se ei koskaan lopeta yhteyttä ja avaa useita tällaisia ​​yhteyksiä palvelimen yhteysvaraston tyhjentämiseksi.

Vastuuvapauslauseke - Verkko- / offline-palvelujen tunkeutumistestaus, joka ei ole sinun omistuksesi, ilman etukäteen annettua kirjallista lupaa on laitonta, enkä ole vastuussa aiheutetuista vahingoista. Käytä tätä sisältöä vain koulutustarkoituksiin.

Hidas Lorisin esittely:

Tämä tarkoittaa, että voisin edelleen lähettää lisätietoja palvelimelle otsikkojen muodossa. Aloitan nyt yksinkertaisen PHP-kehityspalvelimen koneelleni:

Ja käytän yksinkertaista Node-komentosarjaa suorittamaan mitä keskustelimme yllä paikallisella palvelimellani:

Löydät täältä käytetyn Node-komentosarjan.

Jonkin ajan kuluttua huomaat, että PHP-palvelimemme kaatuu!

Tämä johtuu siitä, että avoimia yhteyksiä on aivan liian monta eikä PHP pysty käsittelemään enää avoimia yhteyksiä (muistin / laitteiston rajoitusten takia).

Nyt tämä toimii tietysti virheettömästi paikallisessa kehityspalvelimessa. Mutta jos pystyt löytämään palvelimen, joka ei toteuta suojaa hitaita loris-hyökkäyksiä vastaan, se on heille iso ongelma.

Suojaus hitaalta Lorisin hyökkäykseltä

  • Käytä palvelimiesi edessä Cloudflare-kaltaisia ​​ratkaisuja estämään DoS / DDoS

    Lainaus Cloudflaren sivustolta:

Cloudflare puskuroi saapuvat pyynnöt ennen kuin alkaa lähettää mitään lähtöpalvelimelle . Tämän seurauksena "matala ja hidas" hyökkäysliikenne, kuten Slowlorisin hyökkäykset, eivät koskaan saavuta aiottua kohdetta. Lue lisää siitä, kuinka Cloudflaren DDoS-suojaus pysäyttää slowloris-hyökkäykset.
  • Nopeusraja samanaikaisten yhteyksien lukumäärästä, jotka tietyllä IP-osoitteella avataan pienelle määrälle. Tämä voidaan saavuttaa käyttämällä yksinkertaisia ​​käyttöliittymän käänteisiä välityspalvelimia, kuten nginx, käyttäen niiden vuotavaa kauhan algoritmien toteutusta. Kuinka se toimii, on jotain toiselle päivälle!
  • Palvelimen kapasiteetin lisääminen - Nyt tämä saattaa lieventää pieniä hyökkäyksiä, mutta rehellisesti hyökkääjä voi ja voi skaalata / vahvistaa alkuperäisen hyökkäyksen melko helposti, koska tällaisen hyökkäyksen suorittamiseen tarvitaan vähemmän kaistanleveyttä.

Johtopäätös

Monissa palvelimissa (nginx / apache2 uudet versiot) on oletusarvoisesti hidas loris-hyökkäyssuojaus. Mutta monille sisäisille palveluille palvelimet saattavat olla alttiita tälle yksinkertaiselle hyökkäykselle.

Haluat ehkä tarkistaa palvelusi ja toteuttaa korjaukset. Verkkoturva on jännittävä alue, ja aion tehdä siitä verkkosarjan koodedamnilla. Voit myös ottaa minuun yhteyttä Twitterissä päivityksiä varten. Siihen asti, ole turvassa!