Ochrona przed atakiem slowloris (DoS nagłówków w Apache): Różnice pomiędzy wersjami

Z Podręcznik Administratora by OPZ SGU
Przejdź do nawigacji Przejdź do wyszukiwania
m
 
(Nie pokazano 7 wersji utworzonych przez 2 użytkowników)
Linia 8: Linia 8:


Skrypt co chwilę prosi o kolejną porcję informacji, co powoduje ponowne otwarcie gniazd usuniętych jako nieużywane z powodu przekroczenia limitu czasu.
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.
Atak ten pozwala na stosunkowo szybkie zablokowanie nawet bardzo potężnego serwera przy wykorzystaniu łącza o bardzo małej przepustowości.
Linia 30: Linia 29:
*2) Uderzy w rozległe sieci korporacyjne korzystające z technologii NAT (ucierpieć mogą niewinne osoby).
*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.
*3) Uderzy w osoby dysponujące słabym łączem, lub chwilowo przeciążonymi sieciami.
[[Plik:Server-status(apache).png|200px|thumb|right| Atak slowloris na zabezpieczony serwer]]




Linia 36: Linia 36:


Dawniej był on instalowany w celu ograniczenia transferu, dzisiaj zyskał nowe kluczowe znaczenie.
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.
<pre>
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
</pre>
Ten sam serwer, po kilkunastu minutach pracy skryptu slowloris.
<pre>
      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
</pre>
Wniosek: Całkowita odmowa świadczenia usług.
== Instalacja modułu wraz z konfiguracją zaprezentowana na [http://howtoforge.com/how-to-defend-slowloris-ddos-with-mod_qos-apache2-on-debian-lenny  howtoforge]  (tłumaczenie) ==
Pobranie, oraz wypakowanie
<pre>
cd /tmp/
wget http://sourceforge.net/projects/mod-qos/files/9.17/mod_qos-9.17.tar.gz/download
tar xvfz mod_qos-*
</pre>
Instalacja źródeł apache potrzebnych do kompilacji
<pre>
apt-get install apache2-threaded-dev gcc
</pre>
Kompilacja oraz instalacja
<pre>
cd mod_qos-9.17/apache2/
apxs2 -i -c mod_qos.c
</pre>
Konfiguracja
<pre>
cd /etc/apache2/mods-available/
nano qos.load
</pre>
Jako treść
<pre>
LoadModule qos_module /usr/lib/apache2/modules/mod_qos.so
</pre>
<pre>
nano qos.conf
</pre>
Jako treść
<pre>
## 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>
</pre>
Uruchomienie
<pre>
a2enmod qos
/etc/init.d/apache2 restart
</pre>
Podgląd pracy można obserwować pod adresem
<pre>
http://ip_serwera/server-status
</pre>
== Test wpływu ataku slowloris na serwer Apache z zabezpieczeniami (limity w qos). ==
Serwer podlegający atakowi z zabezpieczeniami 300 jednoczesnych użytkowników.
<pre>
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
</pre>
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.
[[Category:Ubuntu]]

Aktualna wersja na dzień 01:21, 13 paź 2010

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.