ARP oraz RARP UMK WMiI Inf5 WSS labE Jarosław Piersa – 10 – 10
ARP – Address Resolution Protocol ARP jest protokołem sieciowym służącym do poszukiwania adresu sprzętowego pewnego urządzenia w sieci przy znajomości jego adresu internetowego RFC Ethernet Address Resolution Protocol
ARP w modelu OSI
Scenariusz komunikacji ● Komputer A chce wysłać wiadomość do komputera B. A zna adres IP B nie zna natomiast jego adresu sprzętowego (np. MAC). ● A broadcastuje po sieci zapytanie ARP o adres MAC komputera o zadanym adresie IP, podaje przy tym swój adres MAC i IP (żeby móc otrzymać odpowiedź). ● B odbiera zapytanie A, stwierdza, że to on jest adresatem, po czym przesyła do A komunikat ARP z załączonym adresem sprzętowym B (czyli swoim). ● Ponadto B w swojej tablisy ARP zapisuje adres IP A i odpowiadający mu adres MAC ● A otrzymuje wiadomość od B, zapisuje w swojej tablicy ARP adres IP B i jego adres MAC i może wysłać planowaną wiadomość.
Scenariusz komunikacji
Pakiet ARP
Wyświetlanie tablicy ARP (Windows) %>arp -a [adresIP] wyświetlanie wpisów w tablicy %>arp -d adresIP usuwanie wpisów z tablicy %>arp -s adresIP adresFiz statyczne dodawanie wpisów do tablicy %>arp (...) -N adresInterfejsu wybór interfejsu sieciowego
Wyświetlanie tablicy ARP (Unix) %>arp adresIP %>arp -a wyświetlanie wpisów w tablicy %>arp -d adresIP usuwanie wpisów z tablicy %>arp -f nazwaPliku dodawanie wpisów z pliku
Wyświetlanie tablicy ARP (Unix) %>arp -a Flagi m – wpis multicastowy p – wpis publiczny s – wpis statyczny u – wpis niekompletny
Wyświetlanie tablicy ARP (Unix) %>arp -s adresIP adresFiz [pub] [trail] [temp] statyczne dodawanie wpisów do tablicy pub – wpis publiczny temp – wpis tymczasowy trail – do tego hosta można wysyłać “trailer encapsulations” (RFC 893)
Inne narzędzia %>arping ręczne pytanie hostów protokołem ARP %>ndd /dev/ip ip_ire_arp_interval czas przetrzymywania wpisów w tablicy
Co można popsuć?
Ataki z wykorzystaniem ARP ● ARP Spoofing / ARP Poisoning ● DoS ● Man in the Middle ● MAC flooding
ARP Spoofing / Poisoning ARP Spoofing polega na błędnym odpowiadaniu na zapytania ARP. Podawany jest inny lub nie istniejący adres sprzętowy. %>arpspoof [ -i interface] [ -t target] host interface – interfejs sieciowy target – adres ofiar, którym zostaną podane błędne adresy sprzętowe host – adres ofiary, do którego komunikacja zostanie przechwycona
Denial of Service Za pomocą ARP Spoofingu można w całym segmencie sieci lokalnej przekierować komunikację do routera / bramy / serwera na nieistniejący adres.
Man in the Middle
MAC Flooding Zalewanie niektórych switchy zapytaniami ARP może spowodować, że nie będąc w stanie wszystkich obsłużyć, zaczną broacastować całą komunikację jak huby.
Jak się bronić? ● Tworzyć wpisy statyczne. ● Tworzyć małe segmenty sieci. ● Monitorowanie sieci (zwielokrotnione adresy MAC). ● DHCP Snooping
Monitorowanie ARP %>arpwatch ● sprawdza zgodność par adresów sprzętowego i internetowego ● powiadamia roota o podejrzanych sytuacjach ● loguje stan sieci
Monitorowanie ARP Etherealhttp://ethereal.com/ Wiresharkhttp:// Narzędzia służące do przechwytywania i analizowania pakietów w sieci. ether proto \arp filtr przechwytujący tylko pakiety arp
Monitorowanie ARP
Proxy ARP Proxy ARP służy do obsługi zapytań ARP o urządzenia znajdujące się w innej sieci. Router odpowiada w imieniu urządzenia podając swój adres sprzętowy. Powoduje to połączenie dwóch rozdzielonych routerem sieci w jedną.
Proxy ARP
Reverse ARP RARP jest protokołem sieciowym służącym do poszukiwania adresu internetowego (np. IP) mając dany tylko adres sprzętowy (np. MAC) RFC
Reverse ARP ● stał się zbędny wraz z pojawieniem się BOOTP i DHCP ● wymaga działania serwera z poprawną konfiguracją par MAC – IP ● korzysta z identycznego formatu pakietu jak ARP (rarp req = 3; rarp rep = 4) ● nie należy mylić z Inverse ARP
RARP Scenariusz Komunikacji
libpcap Biblioteka pcap pozwala na przechwytywanie i odczytywanie pakietów. #include %>gcc -l pcap program.c
libpcap Lista funkcji do wykorzystania: ● pcap_lookupdev() ● pcap_lookupnet() ● pcap_open_live() ● pcap_compile() ● pcap_setfilter() ● pcap_next() ● pcap_close()
libpcap int pcap_loop( pcap_t *p, int cnt, pcap_handlercallback, u_char *user) void got_packet( u_char *args, const structpcap_pkthdr *header, const u_char *packet)
Ramka ethernetowa + pakiet ARP
Źródła ● ● manual arp, arping, arpwatch, arpspoof ● Wykłady z WSS oraz PSI ● RFC 826 (ARP) RFC 903 (RARP) ● ● ● ● ● ● ● ● ● 7b77bb1b-5c57-408f-907f-8b474203a533.mspx?mfr=true 7b77bb1b-5c57-408f-907f-8b474203a533.mspx?mfr=true ● ● ssR.htm ssR.htm