NFsec Logo

(D)DoS-Deflate – obrona przed floodem połączeń

23/08/2010 w Bezpieczeństwo, Hacks & Scripts 2 komentarze.  (artykuł nr 274, ilość słów: 428)

S

krypt (D)DoS-Deflate jest skryptem powłoki stworzonym przez użytkownika forum Defender Hosting o nicku Zaf na potrzeby firmy hostingowej MediaLayer. W historii firmy (w 2005 roku) zapisała się karta, w której firmowe serwery stały się celem ataku bazującego na nawiązaniu bardzo dużej ilości połączeń z wielu adresów IP (Distributed Denial of Service – DDoS). Chociaż dla MediaLayer blokowanie adresów było już powszechną praktyką – to tym razem postawiono na zautomatyzowanie tego procesu.

Od 2005 roku skala ataków typu DoS i DDoS jest na tyle poważna, że prezentowany skrypt można jedynie traktować jako prostą ochronę przed floodowaniem strony (hosta), która najczęściej ma miejsce poprzez odwiedzające ją spamboty lub inne szkodliwe oprogramowanie próbujące np. złamać hasło metodą brute force. Skrypt bazuje na poleceniu:

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -nr

Zlicza ono liczbę wszystkich połączeń TCP/IP oraz UDP serwera z pojedynczymi hostami i przedstawia je w formie adresów IP. Dlatego nie ma mowy o możliwości zatrzymania prezentowanym skryptem ataku DDoS, którego fala uderzeniowa składała by się np. z 2.000 hostów o różnych adresach IP, a każdy z tych hostów wykonywał by po 10 połączeń. Liczba przypadająca na pojedynczy host jest bardzo mała, ale po zsumowaniu wszystkich hostów osiąga 20.000 połączeń. Instalację skryptu przeprowadzamy następująco:

wget http://www.inetbase.com/scripts/ddos/install.sh
chmod 0700 install.sh
./install.sh

Skrypt instalacyjny ściągnie wszystkie, pozostałe skrypty oraz pliki konfiguracyjne umieszczając je w katalogu /usr/local/ddos. Plik konfiguracyjny odpowiadający za (D)DoS-Deflate to ddos.conf. Jego konfiguracja może przedstawiać się następująco:

PROGDIR="/usr/local/ddos"
PROG="/usr/local/ddos/ddos.sh"
IGNORE_IP_LIST="/usr/local/ddos/ignore.ip.list"
CRON="/etc/cron.d/ddos.cron"
APF="/etc/apf/apf"
IPT="/sbin/iptables"
FREQ=1
NO_OF_CONNECTIONS=200
APF_BAN=0
KILL=1
EMAIL_TO="administrator@dot.com"
BAN_PERIOD=7200

Zmienna CRON definiuje położenie pliku wywołującego, co minutę (FREQ) za pomocą programu cron – skrypt (PROG) ddos.sh, który wychwytuje hosty, których liczba połączeń jest większa niż 200 (NO_OF_CONNECTIONS) oraz za pomocą programu sterującego filtrem pakietów – iptables (APF_BAN) blokuje (KILL) danemu hostowi dostęp do naszego serwera na dwie godziny (BAN_PERIOD wyrażony w sec.) powiadamiając o tym fakcie administratora systemu (EMAIL_TO). Oprócz czystego filtra iptables istnieje również możliwość wykorzystania nakładki APF (ang. Advanced Policy Firewall) – wówczas zmienna APF_BAN przyjmuje wartość równą 1. Za wykluczenia odpowiada plik ignore.ip.list, w którym należy umieścić wszystkie adresy IP nie mające podlegać filtrowaniu przez skrypt.

Zdefiniowanie liczby dopuszczalnych połączeń hostów z naszym serwerem (w tym przykładzie 200) zależy od naszych preferencji hostingowych (sprzęt, łącze, konfiguracja serwera etc.). Jeśli, zależy nam na częstszym sprawdzaniu ilości połączeń niż raz na minutę możemy zmienić to poprzez edycję pliku ddos.cron. Na przykład dopisanie wartości:

SHELL=/bin/sh
0-59/1 * * * * root /usr/local/ddos/ddos.sh >/dev/null 2>&1
0-59/1 * * * * root sleep 30; /usr/local/ddos/ddos.sh >/dev/null 2>&1

Spowoduje uruchamianie skryptu, co 30 sekund.

Więcej informacji: (D)DoS Deflate

Kategorie K a t e g o r i e : Bezpieczeństwo, Hacks & Scripts

Tagi T a g i : , , , , , , ,

2 komentarze.

  1. Patryk Krawaczyński napisał(a):

    Jeśli chcemy policzyć ilość gniazd w różnych stanach wystarczy wydać komendę:

    netstat -an | awk '/^tcp/ {A[$(NF)]++} END {for (I in A) {printf "%5d %s\n", A[I], I}}'
    

    Jej wynikiem będzie np.:

       12 LISTEN
        3 CLOSE_WAIT
       45 ESTABLISHED
    
  2. Patryk Krawaczyński napisał(a):

    Prezentowany powyżej skrypt nie radzi sobie z połączeniami IPv6, które dla niego posiadają puste źródło i powodują fałszywe alarmy.

Zostaw odpowiedź.

Musisz być zalogowany by móc komentować.