Unul din cele mai importante documente RFC (Request for Comments) din istoria retelelor de calculatoare incepe cu fraza “lumea este o jungla in general si retelistica contribuie si ea cu multe animale”. Este vorba de RFC826 ajuns Standard Internet (37). Acesta analizeaza protocolul ARP, folosit pentru “conversia” unei adrese Layer 3 (IP de exemplu) intr-o adresa Layer 2 (MAC de exemplu). In acest articol insa nu ma voi axa pe protocolul ARP, ci pe o facilitate mai putin cunoscuta a lui care poate ridica semne de intrebare in momentul in care este intalnita: ARP-ul gratuit.
V-ati intrebat cum de Windows va anunta de adrese IP duplicat in retea in cazul in care acestea sunt detectate ? Este simplu: foloseste un pachet ARP gratuit prin care face un request ARP (broadcast nivel 2) in tot domeniul de broadcast pentru propria adresa. In mod normal nimeni nu ar trebui sa raspunda la acest ARP, deoarece IP-ul respectiv ar trebui setat doar pe computerul de care vorbim. In cazul in care exista totusi un raspuns, inseamna ca IP-ul este setat in mod incorect si pe alt computer din retea, moment in care sistemul de operare anunta acest lucru (Duplicate IP Address) si nu permite folosirea interfetei respective de retea.
Metoda este pe cat de simpla pe atat de eficace. Practic la fiecare eveniment Link UP este trimis acest ARP gratuit pentru a fi sigur sistemul de operare ca nu apar probleme in retea datorita IP-urilor duplicat. ARP-ul gratuit are si alte scopuri, in special acela de a anunta “vecinii” de domeniu de broadcast eventuala schimbare a unui MAC. Astfel, este perfect posibil ca la un moment dat sa opriti calculatorul pentru a schimba placa de retea. Celelalte calculatoare din retea cu care ati facut trafic inainte de oprirea calculatorului vor pastra in cache-ul ARP (uneori pentru cateva ore chiar) vechea corespondenta IP-MAC, desi acum calculatorul vostru are alt MAC. Astfel, prin faptul ca la pornire sistemul de operare trimite acest ARP gratuit, se asigura ca toate cache-urile ARP din domeniul de broadcast sunt updatate (prin standard, este specificat faptul ca trebuie trimis in acest arp gratuit si noul MAC special pentru updatarea cache-urilor ARP a tuturor).
Alte cateva efecte colaterale a trimiterii acestui pachet:
- [+] switch-ul in care suntem conectati va afla cat se poate de repede noul nostru MAC in cazul in care acesta a fost schimbat si va putea face un forwarding corect
- [+] putem prin sniffing sa observam flapari de interfete pentru ca in momentul in care apare un fenomen link down/link up in retea, hostul respectiv va trimite un arp gratuit. Daca observam mai multe pachete la rand de acest gen de la acelasi host, putem concluzi0na ca exista o problema cu link-ul fizic.
- [-] arp-ul gratuit este obligatoriu sa fie un broadcast layer 2, deci consuma resurse (cu impact intre neglijabil si mare in functie de dimensiunea domeniului de broadcast)
Nu mai ramane de spus decat faptul ca standardul permite pachetului ARP gratuit sa fie request sau reply, desi in majoritatea cazurilor este un request. In ambele cazuri acest pachet trebuie sa fie trimis spre adresa de broadcast layer 2 FF:FF:FF:FF:FF:FF. Avem astfel unul din putinele cazuri cand un pachet ARP Reply este trimis catre o adresa de broadcast, el fiind practic un raspuns la o intrebare care nu s-a pus niciodata. Cazul e rar si folosit in putine locuri, un exemplu fiind solutiile de high availability/clustering.
ARP-ul gratuit este discutat in mai multe RFC-uri printre care RFC3344 – IP Mobility Support for IPv4.
Daca te referi strict la un comportament “legitim” atunci cu siguranta “ARP gratuit request” este de departe cu mult mai uzitat. Foarte multe atacuri de tip “man-in-the-middle” se folosesc insa de “ARP gratuit reply”. Practic, daca spoofezi IP sursa din “ARP message” si setezi MAC destinatie din frame ethernet FFFF.FFFF.FFFF, (in mod normal un ARP reply are specificat ca MAC destinatie in Ethernet frame MAC-ul de la care a venit ARP request) vei trimite un “ARP gratuit reply” care il va face pe cel care a solicitat MAC-ul pentru IP-ul spoofat de tine, sa foloseasca MAC-ul tau pentru a ajunge la acel IP. In cazul asta numai “Dynamic ARP Inspection” te mai ajuta dar iti poate crea alte neplaceri daca cineva chiar ti-a pus gand rau :).