Ochrona przed atakiem slowloris (DoS nagłówków w Apache): Różnice pomiędzy wersjami
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]] | |||
Wersja z 00:59, 2 paź 2009
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.
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/mod-qos/8.18/mod_qos-8.18-src.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-8.13/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.