2008-11-10 14 views
12

Jak wykryć, czy inny host używa tego samego adresu MAC, co bieżący host, np. ponieważ drugi host podszywa się pod niego?Wykrywanie innego hosta o tym samym adresie MAC

pracuję w osadzonym środowiska, więc szuka odpowiedzi na poziomie protokołu, a nie „używać takie i takie narzędzie”.

Edit: RARP robi nie rozwiązać ten problem. Aby RARP mógł uzyskać dowolną odpowiedź, musi być co najmniej jeden host w segmencie obsługującym RARP. Ponieważ RARP jest przestarzały, nowoczesne systemy operacyjne go nie obsługują. Co więcej, wszystkie RARP może zrobić, to powiedzieć swój własny adres IP - odpowiedź nie będzie inna, jeśli jest inny host w segmencie z tym samym MAC, chyba że host sam użył innego adresu IP.

Odpowiedz

17

To pytanie jest zbyt interesujące, aby je odłożyć! Po kilku fałszywych początkach zacząłem myśleć o istotnych elementach problemu i przetrząsałem RFC dla porady. nie znalazłem ostatecznej odpowiedzi, ale tutaj jest mój proces myślowy, w nadziei, że to pomaga:

  • Oryginalny pytanie dotyczy sposobu wykrywania innego urządzenia za pomocą adresu MAC. Zakładając, że jesteś w sieci IP, co jest wymagane, aby to osiągnąć?

  • pasywny metodą byłoby po prostu słuchać do ruchu i szukać jakichkolwiek pakietów, które nie transmitują, ale mają swój adres MAC. To może być lub może nie wystąpić, więc chociaż może powiedzieć ostatecznie, czy duplikat istnieje, to nie może powiedzieć ostatecznie, że nie.

  • Wszelkie aktywny metoda wymaga, aby przesłać pakiet, który siły oszustem reagowania. To natychmiast eliminuje wszelkie metody, które zależą od protokołów.

  • Jeśli inne urządzenie jest fałszowanie ci, to koniecznością (z definicji) odpowiedzi na pakietach z adresu MAC jako miejsca docelowego. W przeciwnym razie jest to snooping, ale nie jest to spoofing.

  • Roztwór powinien być niezależny od adresu IP i obejmować tylko adres MAC.

  • Wygląda więc na to, że odpowiedzią byłoby przesłanie pakietu rozgłoszeniowego (ethernetowego) lub pakietu z adresem MAC jako docelowym, który wymaga odpowiedzi. Monkeywrench jest to, że zwykle adres IP jest zaangażowany, a ty tego nie wiesz.

Jaki rodzaj protokołu pasuje do tego opisu?

Łatwy Odpowiedź:

  • Jeśli sieć obsługuje BOOTP lub DHCP, skończysz, bo to wiąże się autorytatywnie adres MAC do adresu IP. Wyślij żądanie BOOTP, uzyskaj adres IP i spróbuj z nim porozmawiać. Być może trzeba być kreatywnym, aby wymusić pakiet na drucie i uniemożliwić sobie reagowanie (myślę, że rozsądnie używam iptables i NAT).

nie tak łatwo Odpowiedzi:

  • Protokół, który jest niezależny od IP: albo taki, który nie korzysta z warstwy IP, lub taki, który umożliwia transmisje. Nikt nie przychodzi mi do głowy.

  • Wyślij dowolny pakiet, który normalnie wygeneruje odpowiedź od Ciebie, uniemożliwi Ci odpowiedź i będzie szukał odpowiedzi z innego urządzenia. Rozsądnie byłoby użyć twojego adresu IP jako miejsca docelowego, ale nie jestem o tym przekonany. Niestety, szczegóły (i dlatego odpowiedź) są pozostawione jako ćwiczenie dla PO ... ale mam nadzieję, że dyskusja była pomocna.

Podejrzewam, że ostateczne rozwiązanie będzie wiązało się z połączeniem technik, ponieważ żadne pojedyncze podejście nie wydaje się gwarantować niezawodnego określenia.

Niektóre informacje są dostępne na http://en.wikipedia.org/wiki/ARP_spoofing#Defenses

Jeśli wszystko inne zawiedzie, można cieszyć się tym: http://www.rfc-editor.org/rfc/rfc2321.txt

Proszę umieścić follow-up z rozwiązania, ponieważ jestem pewien, że będzie to pomocne do innych. Powodzenia!

+0

Dzięki za tę doskonałą odpowiedź. Dla moich celów może zależeć od IP - nie mam nadziei na obsługę sieci innych niż IP :). Na pewno będę śledzić. –

0

Dwa hosty używające tego samego adresu MAC na pojedynczym segmencie sieci prawdopodobnie spowodowałyby, że przełączniki staną się zbędne i prawdopodobnie będziesz mógł je wykryć przez bardzo niewiarygodne połączenie sieciowe (ponieważ przełączniki wysyłają część pakietów należących do twojego hosta, aby drugi, w zależności od tego, który z was wysłał ostatni pakiet w ich kierunku).

3

Możesz wysłać żądanie ARP o wartości dla każdego możliwego adresu IP w podsieci. Oczywiście adres źródłowy żądania ARP musi być . Ff: ff: ff: ff: ff: ff, w przeciwnym razie odpowiedź może nie być widoczna.

Zrobiłem pakiet z bittwiste i odtworzono go z PReplay, a wszystkie hosty w sieci otrzymały odpowiedź. (Nie wiem, czy te kute pakiety ARP są legalne czy nie ... niektórych systemów operacyjnych może je zignorować)

Oto co sfałszowany pakiet wyglądało: alt text

Oto co wyglądało odpowiedź : alt text

Jeśli oglądasz odpowiedzi i zobaczyć swój adres MAC w jednym z pakietów (w czerwonym prostokącie), niż ktoś ma ten sam adres MAC, jak to zrobić ...

Unfortuantely nie mogłem t przetestuj całą teorię, ponieważ żadna z m Maszyny y (Windows) dbają o mnie, próbując ustawić adres MAC nic ...

1

Jest to bardzo późno i brak odpowiedzi, ale chciałem śledzić dokładnie to, co zrobiłem na wypadek, gdyby ktoś był zainteresowany.

Pracowałem z bardzo dziwnym sprzętem osadzonym, który nie ma przypisanego adresu MAC podczas produkcji. Oznacza to, że musimy przypisać jeden w oprogramowaniu.

Oczywistym rozwiązaniem jest umożliwienie użytkownikowi wybrania adresu MAC, o którym wiedzą, że jest dostępny w ich sieci, najlepiej z zakresu administrowanego lokalnie, i to właśnie zrobiłem. Jednak chciałem wybrać rozsądnie bezpieczną wartość domyślną, a także próbować ostrzec użytkownika, jeśli wystąpił konflikt.

W końcu uciekłem się do wybrania losowej wartości domyślnej w lokalnym zakresie, wybranym przez dokonanie pewnych odczytów sprzętowych, które mają umiarkowaną entropię. Celowo wykluczyłem początek i koniec zakresu przy założeniu, że umiarkowanie częściej wybiera się je ręcznie. Istnieje szansa, że ​​w danej sieci będzie tylko jedno z tych urządzeń, a z pewnością mniej niż 20, więc szanse na konflikt są bardzo niskie, choć nie tak niskie, jak mogłyby być ze względu na dość przewidywalne liczby losowe.

Biorąc pod uwagę niskie szanse na wystąpienie problemu i pomimo doskonałych odpowiedzi powyżej, zdecydowałem się zrezygnować z wykrywania konfliktu i zrobić z ostrzeżeniem dla użytkownika, aby zwrócić uwagę na problemy z konfliktem MAC.

Jeśli zdecydowałem się zaimplementować wykrywanie konfliktów, to biorąc pod uwagę, że kontroluję cały stos sieci, prawdopodobnie wypatrzyłbym zbyt wielu nieznanych lub brakujących pakietów, a następnie wywołałbym zmianę adresu MAC lub ostrzegłam użytkownika, gdy to się stanie .

Mam nadzieję, że pomoże to komuś innemu - ale prawdopodobnie nie!

Powiązane problemy