Pomalý útok Loris pomocou JavaScriptu na serveri PHP [a jeho prevencia!]

Zabudnite na príspevok na minútu, začnime tým, o čom je tento titul! Toto je článok založený na webovom zabezpečení, ktorý sa zameriava na základné informácie o fungovaní protokolu HTTP. Pozrime sa tiež na jednoduchý útok, ktorý zneužíva spôsob fungovania protokolu HTTP.

Čo je to HTTP?

HTTP, HyperText Transfer Protocol, je protokol používaný webom na komunikáciu. Vaše zariadenie, keď používate prehľadávač, používa tento konkrétny protokol na odosielanie požiadaviek na vzdialené servery, aby od nich vyžadovali údaje.

Je to v podstate ako keby ste povedali svojej mame: „Hej mami, potrebujem zjesť predmet v chladničke prítomný na polici 2, mohol by si mi ho dať?“

A tvoja mama povie: „Jasné, tu máš“ a pošle ti túto položku. Teraz je HTTP spôsob, akým ste mohli tieto informácie oznámiť svojej matke, podobne ako jazyk, ktorý ste použili na komunikáciu.

Ako funguje HTTP

Toto je video TL; DR, ak ste videohovor. V opačnom prípade pokračujte článkom:

HTTP (vrstva 7) je postavená na vrchole protokolu TCP (vrstva 4). Pomocou ncnástroja (netcat) môžeme otvoriť surový soket TCP na ľubovoľnej webovej stránke bežiacej na protokole HTTP (zvyčajne port 80). Nasledujúci príklad ukazuje, ako sa pripájame k portu HTTP 80 pre google.com pomocou netcat:

Zobraziť údaje, ktoré sme odoslali:

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

Ignorujte ďalšie X-header-*hlavičky, sú to iba náhodné hlavičky, ktoré môžete poslať so svojou požiadavkou. Dôležitou hlavičkou, ktorá sa má zahrnúť do špecifikácie HTTP / 1.1, je Hosthlavička.

A odpoveď, ktorú sme dostali:

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.

HTTP je teda holý textový protokol pozostávajúci z informácií o požiadavke zaslaných klientom a z odpovede, ako je uvedené vyššie.

Pomalý útok Loris

Pomalý Lorisov útok využíva skutočnosť, že som mohol požiadavku HTTP vytvoriť veľmi pomaly. Inými slovami, môžem iniciovať požiadavku HTTP na server a pokračovať v odosielaní údajov na server veľmi pomaly, aby bolo toto spojenie živé. Zároveň to nikdy neukončí toto pripojenie a otvorí niekoľko takýchto pripojení, aby sa vyčerpal fond pripojení servera.

Zrieknutie sa zodpovednosti - Penetračné testovanie akejkoľvek online / offline služby, ktorú nevlastníte bez predchádzajúceho písomného súhlasu, je nezákonné a nie som zodpovedný za spôsobené škody. Tento obsah používajte iba na vzdelávacie účely.

Pomalá ukážka Loris:

To znamená, že by som mohol pokračovať v odosielaní ďalších údajov na server vo forme hlavičiek. Teraz na svojom počítači spustím jednoduchý vývojový server PHP:

A na vykonanie toho, o čom sme hovorili vyššie, na mojom lokálnom serveri používam jednoduchý skript uzla:

Použitý skript Node nájdete.

Po nejakom čase uvidíte, že náš server PHP skutočne zlyhá!

Je to preto, že existuje príliš veľa otvorených pripojení a PHP nedokáže spracovať žiadne ďalšie otvorené pripojenia (kvôli limitom pamäte / hardvéru).

Teraz to samozrejme funguje bezchybne na lokálnom vývojovom serveri. Ak však nájdete server, ktorý neimplementuje ochranu pred útokmi loris, je to pre nich veľký problém.

Ochrana pred útokom Slow Loris

  • Pred servermi používajte riešenia ako Cloudflare, aby ste zabránili DoS / DDoS

    Citácia zo stránky Cloudflare:

Cloudflare ukladá prichádzajúce požiadavky do vyrovnávacej pamäte predtým, ako začne niečo posielať na pôvodný server. Vo výsledku „nízky a pomalý“ útok ako útoky Slowloris nikdy nedosiahne zamýšľaný cieľ. Získajte viac informácií o tom, ako ochrana DDoS služby Cloudflare zastavuje útoky slowloris.
  • Rýchlosť obmedzuje počet súčasných pripojení otvorených konkrétnou adresou IP na malý počet. To by sa dalo dosiahnuť pomocou jednoduchých frontendových reverzných proxy serverov, ako je nginx, pomocou ich implementácie algoritmu deravého segmentu. Ako to funguje, je niečo na ďalší deň!
  • Zvýšenie kapacity servera - Teraz by to mohlo zmierniť malé útoky, ale úprimne povedané, útočník môže a mohol pôvodný útok škálovať / zosilniť pomerne ľahko kvôli menšej šírke pásma potrebnej na vykonanie takéhoto útoku.

Záver

Mnoho serverov (nové verzie nginx / apache2) má v predvolenom nastavení ochranu pred útokmi pomalým loris. Ale pre veľa interných služieb môžu byť servery náchylné na tento jednoduchý útok.

Možno budete chcieť skontrolovať svoje služby a implementovať opravy. Bezpečnosť webu je vzrušujúca oblasť a plánujem na nej vytvoriť sériu webových stránok na kódovanom kóde. Môžete sa so mnou spojiť na twitteri kvôli aktualizáciám. Dovtedy buďte v bezpečí!