Ochrona przed atakiem slowloris (DoS nagłówków w Apache)

Z Podręcznik Administratora by OPZ SGU
Przejdź do nawigacji Przejdź do wyszukiwania
Slow Loris

Atak pieszczotliwie nazywany slowloris należy do typów z grupy DoS.

Jego kluczowym celem jest zmuszenie serwera www do otwarcia jak największej liczby jednoczesnych połączeń z fikcyjnymi klientami które są generowane poprzez skrypt. Serwer otwiera gniazdo nasłuchujące ale nie otrzymuje od klienta pełnego zapytania, przez co połączenie nie może być zrealizowane. Serwer zakłada automatycznie że w najbliższym czasie klient dostarczy brakujące części więc gniazdo jest cały czas otwarte i zabiera zasoby serwera.

Całkowita blokada serwera następuje w momencie wykorzystania ustalonego odgórnie przez administratora limitu jednoczesnych połączeń.

Skrypt co chwilę prosi o kolejną porcję informacji, co powoduje ponowne otwarcie gniazd usuniętych jako nieużywane z powodu przekroczenia limitu czasu.

Atak ten pozwala na stosunkowo szybkie zablokowanie nawet bardzo potężnego serwera przy wykorzystaniu łącza o bardzo małej przepustowości.


Następującym skryptem wykonamy atak na swój serwer, oraz sprawdzimy skuteczność mechanizmów obronnych. Źródło skryptu oraz przykład użycia


Ochrona przed atakiem tego typu jest prawie niemożliwa przy zastosowaniu domyślnych funkcji wbudowanych w Apache.

Naszą linię obrony można rozgraniczyć na trzy grupy.

  • 1) Drastyczne zwiększenie liczby otwartych połączeń
  • 2) Twarde ograniczenie liczby jednoczesnych połączeń z jednego adresu IP.
  • 3) Zmniejszenie czasu żywotności otwartego połączenia

Co niosą za sobą powyższe metody?.

  • 1) Nic nie trwa wiecznie, ta metoda spowoduje tylko oddalenie punktu przepełnienia.
  • 2) Uderzy w rozległe sieci korporacyjne korzystające z technologii NAT (ucierpieć mogą niewinne osoby).
  • 3) Uderzy w osoby dysponujące słabym łączem, lub chwilowo przeciążonymi sieciami.
Atak slowloris na zabezpieczony serwer


Najrozsądniejszym rozwiązaniem jest instalacja modułu mod-qos który pozwala na ścisłe kontrolowanie przepływam zapytań kierowanych na nasz serwer.

Dawniej był on instalowany w celu ograniczenia transferu, dzisiaj zyskał nowe kluczowe znaczenie.



Test wpływu ataku slowloris na serwer Apache bez zabezpieczeń.

Serwer nie podlegający atakowi bez zabezpieczeń 300 jednoczesnych użytkowników.

Lifting the server siege...      done.
Transactions:                   5756 hits
Availability:                  99.71 %
Elapsed time:                  59.69 secs
Data transferred:              45.79 MB
Response time:                  1.46 secs
Transaction rate:              96.43 trans/sec
Throughput:                     0.77 MB/sec
Concurrency:                  141.06
Successful transactions:        5755
Failed transactions:              17
Longest transaction:           29.90
Shortest transaction:           0.00


Ten sam serwer, po kilkunastu minutach pracy skryptu slowloris.

      done.
Transactions:                      0 hits
Availability:                   0.00 %
Elapsed time:                  60.22 secs
Data transferred:               0.00 MB
Response time:                  0.00 secs
Transaction rate:               0.00 trans/sec
Throughput:                     0.00 MB/sec
Concurrency:                    0.00
Successful transactions:           0
Failed transactions:             304
Longest transaction:            0.00
Shortest transaction:           0.00

Wniosek: Całkowita odmowa świadczenia usług.



Instalacja modułu wraz z konfiguracją zaprezentowana na howtoforge (tłumaczenie)

Pobranie, oraz wypakowanie

cd /tmp/
wget http://sourceforge.net/projects/mod-qos/files/9.17/mod_qos-9.17.tar.gz/download
tar xvfz mod_qos-*

Instalacja źródeł apache potrzebnych do kompilacji

apt-get install apache2-threaded-dev gcc

Kompilacja oraz instalacja

cd mod_qos-9.17/apache2/
apxs2 -i -c mod_qos.c

Konfiguracja

cd /etc/apache2/mods-available/
nano qos.load


Jako treść

LoadModule qos_module /usr/lib/apache2/modules/mod_qos.so
nano qos.conf

Jako treść

## QoS Settings
<IfModule mod_qos.c>
    # handles connections from up to 100000 different IPs
    QS_ClientEntries 100000
    # will allow only 50 connections per IP
    QS_SrvMaxConnPerIP 50
    # maximum number of active TCP connections is limited to 256
    MaxClients              256 
    # disables keep-alive when 70% of the TCP connections are occupied:
    QS_SrvMaxConnClose      180
    # minimum request/response speed (deny slow clients blocking the server, ie. slowloris keeping connections open without requesting anything):
    QS_SrvMinDataRate       150 1200
    # and limit request header and body (carefull, that limits uploads and post requests too):
    # LimitRequestFields      30
    # QS_LimitRequestBody     102400
</IfModule>

Uruchomienie

a2enmod qos
/etc/init.d/apache2 restart


Podgląd pracy można obserwować pod adresem

http://ip_serwera/server-status


Test wpływu ataku slowloris na serwer Apache z zabezpieczeniami (limity w qos).

Serwer podlegający atakowi z zabezpieczeniami 300 jednoczesnych użytkowników.

Lifting the server siege...      done.
Transactions:                   9902 hits
Availability:                 100.00 %
Elapsed time:                  60.11 secs
Data transferred:              47.94 MB
Response time:                  0.29 secs
Transaction rate:             164.73 trans/sec
Throughput:                     0.80 MB/sec
Concurrency:                   47.74
Successful transactions:        5063
Failed transactions:               0
Longest transaction:           12.77
Shortest transaction:           0.00

Wniosek: Jeden użytkownik (w powyższej konfiguracji) może za alokować maksymalnie 50 połączeń z jednego adresu IP, lub sieci NAT dysponującej wspólnym IP.