Laborator 2
Tematica laboratorului
- 1. Rutarea pachetelor in Internet
- 2. Address Resolution Protocol (ARP) - generalitati
- 3. Captura (sniffing) si insertia (spoofing) de pachete in traficul de retea
- 4. Exemple de atacuri simple la nivel legatura de date si internet
- 5. Tema 1
1. Rutarea pachetelor in Internet
Fiecare statie utilizeaza in scopul rutarii pachetelor in Internet o tabela de rutare (pot exista mai multe astfel de tabele - una fiind considerata insa tabela principala de rutare). Un exemplu de tabela de rutare tipica, ce se poate obtine prin intermediul comenzii route, arata in felul urmator:
Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.10.0 * 255.255.255.0 U 1 0 0 eth0 default 192.168.10.1 0.0.0.0 UG 0 0 0 eth0
Prima coloana din tabela include adrese de retea/subretea (avand masca specificata in coloana a treia). Ruta pentru un pachet la transmiterea in retea este aleasa prin "maparea" pachetului la una din intrarile (rutele) din tabela. Aceasta mapare se face pe baza potrivirii adresei IP destinatie, cu o adresa de retea din prima coloana. Aceasta potrivire se determina printr-o operatie de "si logic" (and) pe biti intre adresa destinatie si masca de retea, care in caz pozitiv rezulta in adresa de retea din prima coloana. Daca exista o astfel de potrivire pachetul va fi trimis fie catre statia asociata ca gateway respectivei retele (in coloana a doua), fie in cazul in care aceasta nu exista direct catre IP-ul destinatie (caz ce semnifica de fapt ca sursa se afla in aceeasi retea cu destinatia).
Spre exemplu, sa presupunem ca o statie cu adresa IP 192.168.10.3 ce are tabela de rutare de mai sus, doreste trimiterea unui pachet catre o statie cu adresa IP 192.168.10.5. Se alege prima ruta (linie) din tabela de rutare si se determina potrivirea adresei destinatie:
192.168. 10.5 & (adresa destinatie) 255.255.255.0 (masca din prima ruta) ------------- 192.168. 10.0 (potrivire cu adresa de retea destinatie din prima ruta) Nu exista gateway in prima ruta deci pachetul se trimite direct spre destinatia 192.168.10.5.
In situatia in care adresa IP a destinatiei nu se potriveste nici unei adrese de retea din prima coloana, se va alege ultima ruta - default.
Spre exemplu, sa presupunem ca aceeasi statie cu adresa IP 192.168.10.3 si tabela de rutare de mai sus doreste trimiterea unui pachet catre o statie cu adresa IP 82.77.229.13. Se incearca potrivirea cu rutele din tabela ca in cazul anterior:
82. 77.229.13 & (adresa destinatie) 255.255.255. 0 (masca din prima ruta) -------------- 82. 77.229. 0 (nepotrivire cu adresa de retea destinatie din prima ruta) Nu mai exista alta ruta in tabela decat cea default. Se va trimite pachetul catre adresa gateway din ruta default - 192.168.10.1.
Acest mecanism asigura practic determinarea urmatorului hop la nivel de adresa IP, ulterior datagrama IP (ce va contine in continuare adresa IP a destinatiei finale originala) fiind incapsulata in cadrul unui frame ce va include adresa MAC asociata adresei IP a urmatorului hop. Adresa MAC a urmatorului hop este determinata dupa cum se explica mai jos pe baza tabelei ARP.
2. Address Resolution Protocol (ARP) - generalitati
ARP (Address Resolution Protocol - RFC 826) este un protocol ce functioneaza la nivel de Link layer, ce are rolul de a determina o adresa fizica asociata unei adrese IP. Aceasta mapare este mentinuta sub forma unei tabele ce poate fi vizualizata prin intermediul comenzii arp sau ip neighbour. Respectiva mapare e utilizata in rutarea traficulul hop-by-hop (in determinarea urmatorului hop pentru un frame catre destinatia data de adresa IP finala la nivel retea). Modul de functionare al protocolului ar putea fi descris pe scurt ca unul de tip request-response, pe baza a doua tipuri de frameuri de cerere, respectiv raspuns, cererile fiind trimise in mod obisnuit in mod broadcast continand IP-ul pentru care se doreste aflarea adresei MAC asociate, iar raspunsul fiind primit doar de la statia corespunzatoare. Un exemplu de tabela ARP tipica rezultata in urma executiei comenzii arp arata in felul urmator:
Address HWtype HWaddress Flags Mask Iface 192.168.10.1 ether 00:50:56:f3:39:54 C eth0 192.168.10.2 ether 00:50:56:f0:50:a8 C eth0 192.168.10.5 ether 00:50:56:f1:5e:a1 C eth0
Aceasta tabela este utilizata in transmiterea traficului, la nivel de informatii pentru nivelul Link, prin completarea adresei MAC a urmatorului hop ce corespunde IP-ului hopului urmator determinat pe baza tabelei de rutare.
Spre exemplu, in situatiile de mai sus presupunand ca tabela ARP de pe statia 192.168.10.3 este cea din exemplu, avem urmatoarele alegeri pentru adresa MAC:
La trimiterea pachetului spre statia 192.168.10.5 se va alege adresa MAC ce corespunde in tabela: 00:50:56:f1:5e:a1.
La trimiterea pachetului spre statia 82.77.229.13, in urma determinarii urmatorului hop ca fiind 192.168.10.1, se va alege din tabela adresa MAC corespunzatoare: 00:50:56:f3:39:54.
3. Captura (sniffing) si insertia (spoofing) de pachete in traficul de retea
Majoritatea atacurilor asupra comunicarii in retea are la baza monitorizarea traficului si eventuala insertie de pachete avand diverse campuri modificate in functie de protocolul sau aplicatia tinta a atacului. In aceasta sectiune vom enumera pe scurt cateva aspecte generale care tin de aceste operatiuni, cunoasterea acestora fiind utila pentru simulari si implicit in intelegerea modalitatilor de preventie.
In urma rutarii la nivel IP, pachetele vor fi primite de interfetele de retea prezente in reteaua/subreteaua din care face parte hopul urmator sau destinatia finala. O interfata de retea din segmentele respective va filtra in mod obisnuit pachetele ce nu ii sunt adresate pe baza adresei MAC. Daca interfata este setata la nivelul sistemului de operare pentru a opera in mod "promiscuous", aceasta filtrare nu se mai realizeaza toate pachetele fiind pasate pentru a fi procesata la nivelul kernelului. Comenzile ce pot fi utilizate (alternativ) pentru a asigura aceasta setare in Linux sunt urmatoarele:
ifconfig [nume interfata] promisc ip link set [nume interfata] promisc on
Pentru a primi pachetele in mod obisnuit o aplicatie se inregistreaza la nivelul kernelului. Programatic, de regula API-urile existente permit aplicatiilor sa obtina direct partea de payload de interes din pachete, fara headerele complete, folosind socket-uri specializate pentru un anume protocol de transport.
Pentru capturarea pachetelor integrale se utilizeaza socket-urile raw. Tipic, in acest scop sunt disponibile tool-uri ce utilizeaza intern anumite biblioteci pentru captura, una dintre cele mai cunoscute fiind libpcap.
Trei exemple de tool-uri ce permit captura de trafic sunt: Whireshark, Scapy si Netwag (Netwox). Toate aceste tool-uri ofera utilizatorului posibilitatea de a defini filtre specifice pentru a selecta doar anumite pachete de interes din traficul capturat. Specificarea filtrelor se face de regula conform unei tehnologii de interpretare a pachetelor integrata in majoritatea sistemelor de operare majore numita Berkeley Packet Filter (BPF). Sintaxa BPF pentru specificarea filtrelor e disponibila online in mai multe surse, de exemplu: Capstats BPF Syntax sau FortiNDR Cloud BPF Reference Guide.
Pe langa captura unele tool-uri ofera si posibilitatea automatizarii a diverse operatii mai complexe precum analiza extinsa, injectarea de pachete in urma capturii, modificarile diverselor campuri, etc.
Un exemplu programatic pentru diverse operatii folosind Python in Scapy este disponibil in urmatoarele surse:
- captura (sniffing) pachete ICMP
- trimitere (spoofing) pachete ICMP
- trimitere de pachete ICMP in urma capturii
4. Exemple de atacuri simple la nivel legatura de date si internet
ARP Spoofing
Un atac de genul ARP spoofing are rolul de a modifica tabela ARP prin asocierea catre un IP a unei alte adrese MAC decat cea reala. In mod uzual atacatorul (care trebuie sa fie membru al subretelei respective) va asocia propria adresa MAC IP-ului de gateway pentru a intercepta traficul destinat unei adrese externe, trafic ce poate fi filtrat, modificat si trimis mai departe sau chiar oprit de atacator. O alta varianta a atacului este de a asocia IP-ului de gateway cu o adresa MAC inexistenta, atacul fiind unul de Denial of Service ce nu mai permite victimei trimiterea traficului in exteriorul subretelei, efectul fiind similar cu situatia anterioara cand traficul e interceptat si oprit de atacator. Atacul are loc prin transmiterea celor doua adrese asociate (IP-MAC), drept corespunzatoare senderului, in cadrul de cereri sau/si raspunsuri ARP (destinatia isi va actualiza tabela si la primirea unei cereri pe baza adreselor incluse in frame, nu doar a unui raspuns, rationamentul exprimat de standard fiind ca daca expeditorul cererii doreste sa comunice cu destinatarul, comunicarea respectiva va fi in principiu bidirectionala, deci si destinatarul va avea nevoie de o mapare IP-MAC a expeditorului cererii).
Datorita nivelului la care opereaza atacul - Link, nu exista un mod prevenire bazat pe una din solutiile existente pentru securizarea si criptarea traficului cum ar fi IPSec spre exemplu, care sunt de nivel superior.
Cea mai simplista masura de contraatac consta in maparea statica a adreselor IP cu cele MAC, aceasta solutie nefiind insa viabila pentru retele de dimensiuni mari.
O alta metoda se bazeaza pe monitorizarea si notificarea schimbarilor aparute in cacheul (tabela) ARP. Exista o varietate de utilitare (ex: arpwatch) ce permit acest lucru, facand uz in unele cazuri si de filtre aditionale ce pot fi setate pentru limitarea notificarilor. Nu toate insa protejeaza efectiv impotriva unui atac pe baza schimbarilor survenite ci unele se rezuma doar la monitorizarea acestora.
Un exemplu de implementare in ceea ce priveste cele de mai sus se regaseste in utilitarul ARPON si consta in utilizarea unei tabele de backup pentru intrarile ARP, ce este utilizata (in mod diferit) atat pentru protectie in cazul alocarii statice - SARPI, cat si dinamice - DARPI.
ICMP Redirect
ICMP (Internet Control Message Protocol - RFC 792) reprezinta un protocol ce functioneaza la nivel Internet, avand rol principal de diagnosticare a problemelor aparute in functionarea IP. Un pachet ICMP este transmis prin intermediul unei datagrame IP, fiind incapsulat in portiunea de date a acesteia. Protocolul ICMP are definite mai multe tipuri de pachete pentru diverse functionalitati, in cadrul fiecaruia dintre acestea primii patru octeti avand o structura standard: un octet care identifica tipul pachetului, un octet ce identifica un cod ce diferentiaza pachetele din aceeasi categorie si doi octeti ce contin o suma de control. In continuare pot fi prezente diferite campuri ce contin parametri aditionali specifici tipului de pachet. Doua exemple de pachete ICMP ce sunt transmise pentru verificarea conectivitatii sunt Echo Request (tip 8) si Echo Reply (tip 0), acestea fiind utilizate de comanda "ping".
Unul din atacurile ce sunt bazate pe utilizarea ICMP implica transmiterea nemotivata a pachetelor de tip ICMP Redirect (type 5). Un pachet de tip ICMP Redirect este utilizat in mod obisnuit de un gateway pentru modificarea (scurtarea) rutei alese de un expeditor. Aceasta situatie apare in mod obisnuit cand conform tabelei de rutare, expeditorul determina ca urmator hop catre destinatie o adresa de gateway (G1), iar respectivul gateway (ce va aplica in continuare mecanismul de rutare catre destinatie), va constata ca urmatorul hop, de regula alt gateway (G2), e direct accesibil - in aceeasi retea, cu expeditorul. In acest caz, modul de operare implicit al primei statii gateway (G1) (conform standardului ICMP) consta in trimiterea pachetului catre urmatorul hop (G2) si transmiterea unui pachet ICMP Redirect catre expeditor, pentru directionarea traficului ulterior fara a avea statia gateway (G1) ca intermediar. Un pachet ICMP redirect utilizat in acest scop are urmatorul header, unde adresa de gateway, reprezinta noua adresa pentru redirectarea pe o ruta mai scurta catre destinatie, in loc de vechiul gateway:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Gateway Internet Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
O descriere sumara a atacului ar fi urmatoarea. Un potential atacator se bazeaza pe mecanismul descris pentru a redirecta traficul catre adresa proprie. In acest scop, atacatorul va trimite expeditorului pachete ICMP redirect avand adresa IP sursa falsificata - atacatorul impersonifica adresa de gateway. In cadrul acestor pachete, atacatorul va specifica ca noua adresa de redirectare (noul gateway) adresa IP proprie, astfel traficul ulterior al victimei fiind redirectat catre atacator.
Modificarea rezultata in urma atacului nu afecteaza de obicei in mod direct tabela de rutare a statiei victima. Ceea ce se modifica poate fi doar un cache temporar al acestei tabele, ce are in mod normal prioritate mai mare in decizia luata in privinta rutarii pachetelor la nivelul sistemului de operare, dar si un timp de expirare. Pentru a observa starea acestui cache, si respectiv curata modificarile sunt disponibile urmatoarele comenzi:
ip route show cache
sudo ip route flush cache
Posibilitatea de succes a acestui atac depinde in general de implementare/setari la nivelul sistemului de operare. Majoritatea implementarilor contracareaza acest atac prin diverse conditii/mecanisme aditionale. O prima conditie luata in calcul este apartenenta noii adrese de redirectare retelei curente (deci in cazul in care atacatorul ar apartine de o alta retea, respectivele mesaje nu au efect). De asemeni este in mod obisnuit ignorata primirea in mod "gratuit" de pachete ICMP Redirect - fara a trimite trafic catre statia din partea careia vin pachetele. Aceasta ar presupune ca atacatorul sa intercepteze in prealabil traficul si sa trimita respectivele mesaje doar la momentul in care detecteaza o trimitere catre statia gateway curenta.
O solutie simpla ce practic previne din start acest atac este ignorarea pachetelor ICMP redirect in orice conditii, actiune in mod obisnuit posibila la nivel de sistem de operare (dezavantajul ar fi lipsa scurtarii rutei in cazurile reale de redirectare). In majoritatea distributiilor de Linux existente aceasta se face prin setarea variabilei corespunzatoare din fisierul de configurare /etc/sysctl.conf pe 0. Ca exemplu, pentru o distributie Ubuntu, in timp real (temporar pentru sesiunea curenta) aceasta se poate face prin intermediul comenzilor:
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.[identificator_interfata_retea].accept_redirects=0
5. Tema 1
1. Folosind utilitarul Scapy sau netwag (mai exact tool-ul 72) demonstrati impersonificarea adresei MAC - una din cele 3 masini va juca rol de atacator si va corupe fiecare dintre tabelele ARP a celorlalte doua masini oneste astfel incat pentru fiecare dintre ele atacatorul sa apara ca fiind cealalta masina onesta (10pt).
2. Sniffing - Obtineti parola unui utilizator care incearca sa acceseze un serviciu nesecurizat (ex. FTP). Pentru aceasta puteti folosi fie Scapy sau netwag, fie instala utilitarul Ettercap si lansa un atac ca mai sus. Aditional trebuie instalat/pornit un server ftp pe una din masinile oneste. Captura (observarea) parolei se poate face si utilizand Wireshark (10pt).
Termen prezentare: 11 martie
Tema poate fi prezentata in echipa de 2 studenti. Daca la punctul 2 se prezinta cel putin doua variante de captura dintre Scapy, netwag si Ettercap, echipa poate fi extinsa la 3 studenti.
Hint: Pentru punctul 2 porniti serviciul nesecurizat pe statia 3 (ex. sudo apt-get install vsftpd ; sudo service vsftpd start). Incercati sa-l accesati de pe statia 1. Folositi wireshark pentru a captura traficul pe statia 2, si gasiti/izolati pachetul in care se afla parola.