Dlaczego Slowloris nie wpływa na NginX i Lighttpd?

Odpowiedzi:

25

Apache ma teorię „maksymalnej liczby klientów”

Jest to liczba jednoczesnych połączeń, które może obsłużyć. IE, jeśli serwer apache ma limit „maksymalnej liczby klientów” 100, a każde żądanie zajmuje 1 sekundę, może obsłużyć maksymalnie 100 żądań na sekundę.

Aplikacja taka jak SlowLoris zaleje serwer połączeniami, w naszym przykładzie, jeśli SlowLoris wysyła 200 połączeń na sekundę, a Apache może obsłużyć tylko 100 połączeń na sekundę, kolejka połączeń będzie się powiększać i zużyje całą pamięć na komputerze, doprowadzając ją do hault. Jest to podobne do sposobu działania Anonimowego LOIC.

NGINX i Lighttpd (między innymi) nie mają maksymalnych połączeń, zamiast tego używają wątków roboczych, więc teoretycznie nie ma ograniczeń co do liczby obsługiwanych połączeń.
Jeśli monitorujesz połączenia Apache, zobaczysz, że większość aktywnych połączeń to „Wysyłanie” lub „Odbieranie” danych od klienta. W NGINX / Lighttpd po prostu ignorują te żądania i pozwalają im działać w tle, nie zużywając zasobów systemowych, i musi jedynie przetwarzać połączenia z czymś, co się dzieje (analizowanie odpowiedzi, odczytywanie danych z serwerów zaplecza itp.)

Odpowiedziałem dzisiaj na podobne pytanie, więc informacje tam zawarte mogą być dla ciebie interesujące. Zmniejszanie kolejkowania żądań Apache

Plama
źródło
Dobra i bardzo szczegółowa odpowiedź. +1
Oldskool
6
Niewielka korekta: nginx nie używa wątków roboczych do osiągnięcia dużej liczby połączeń. Od nginx.org : „Nginx nie polega na wątków do wniosków uchwytem Zamiast tego wykorzystuje architekturę (asynchroniczny) znacznie bardziej skalowalne zdarzeniami”.
Dnia
2
Chociaż jest to możliwy efekt uboczny, celem Slowloris nie jest „zużywanie całej pamięci na komputerze”, ale raczej wyczerpanie maksymalnej pojemności połączenia, uniemożliwiając kolejne połączenia.
wulfgarpro
@Day Nginx używa wątków roboczych do obsługi działania asynchronicznego. Przydatny schemat architektury aplikacji znajduje się tutaj: aosabook.org/en/nginx.html#fig.nginx.arch
Terry Burton
13

Nginx jest w rzeczywistości podatny na atak slowlori. Niedobór zasobów to maksymalna liczba jednoczesnych połączeń roboczych. Liczba ta może być obliczona jako połączenia_procesowe * procesy_procesowe i wynosi 512 w domyślnej konfiguracji nginx. Tak więc dość łatwo jest usunąć niezabezpieczony nginx za pomocą narzędzi takich jak goloris .

Valyala
źródło
goloriswygląda na narzędzie, którego potrzebuję, aby upewnić się, że moja implementacja / konfiguracja działa zgodnie z oczekiwaniami!
Alexis Wilke,
8

komentarz Valyali powinien zostać zaakceptowany jako odpowiedź.

Większość serwerów nginx używa domyślnych konfiguracji i dlatego jest podatna na atak slowloris. Użyłem slowlori do usunięcia niektórych stron nginx mojego przyjaciela za pomocą mojego laptopa i zwykle trwało to mniej niż 5 minut (moi znajomi mnie o to poprosili).

Jak stwierdziła valyala, technicznie rzecz biorąc, nginx nie jest wrażliwy na slowlori, ale domyślne konfiguracje ograniczają maksymalną liczbę połączeń, więc gdy połączenia przekroczą tę liczbę, nginx odrzuca nowe żądanie, co powoduje odmowę usługi.

Znane sposoby ochrony nginx przed slowlori obejmują ograniczenie liczby połączeń z tego samego adresu IP i zwiększenie konfiguracji pracownik_połączeń. Atak może nadal działać, ale staje się trudniejszy (może zająć więcej niż 5 minut?: D)

Nguyen Phan Tan
źródło