Определить другой хост с тем же MAC-адресом - PullRequest
12 голосов
/ 10 ноября 2008

Как я могу определить, использует ли другой хост тот же MAC-адрес, что и текущий хост, например, потому что другой хост подделывает?

Я работаю во встроенной среде, поэтому ищу ответы на уровне протокола, а не «использую такой-то инструмент».

Редактировать : RARP не решает эту проблему. Чтобы RARP вообще мог получить любой ответ, в сегменте должен быть хотя бы один хост, поддерживающий RARP. Поскольку RARP устарел, современные операционные системы его не поддерживают. Кроме того, все, что может сделать RARP, это сообщить вам свой собственный IP-адрес - ответ не будет отличаться, если в сегменте есть другой хост с тем же MAC, если только сам хост не использовал другой IP-адрес.

Ответы [ 4 ]

17 голосов
/ 10 ноября 2008

Этот вопрос слишком интересен, чтобы его задавать! После нескольких неудачных попыток я начал думать о существенных компонентах проблемы и начал искать RFC для консультаций. Я не нашел окончательного ответа, , но вот мой мыслительный процесс, в надежде, что он поможет:

  • Оригинальный вопрос спрашивает, как обнаружить другое устройство с вашим MAC-адресом. Если вы работаете в IP-сети, что для этого требуется?

  • пассивный метод будет просто прослушивать трафик и искать любые пакеты, которые вы не передали, но у которых есть ваш MAC-адрес. Это может произойти или не произойти, поэтому, хотя может однозначно сказать вам, если дубликат существует, он не может окончательно сказать вам, что его нет.

  • Любой активный метод требует, чтобы вы передали пакет, который заставляет самозванца ответить. Это немедленно устраняет любые методы, которые зависят от необязательных протоколов.

  • Если другое устройство подделывает вас, оно должно (по определению) отвечать на пакеты с вашим MAC-адресом в качестве пункта назначения. В противном случае это отслеживание , но не подмена .

  • Решение должно быть независимым от IP-адреса и включать только MAC-адрес.

  • Таким образом, ответ, по-видимому, будет состоять в передаче либо широковещательного (ethernet) пакета, либо пакета с вашим MAC-адресом в качестве пункта назначения, который требует ответа. Обезьяна в том, что обычно используется IP-адрес, а вы его не знаете.

Какой протокол подходит этому описанию?

Простой ответ:

  • Если ваша сеть поддерживает BOOTP или DHCP, все готово, потому что это автоматически связывает MAC-адрес с IP-адресом. Отправьте запрос BOOTP, получите IP-адрес и попытайтесь поговорить с ним. Возможно, вам нужно проявить изобретательность, чтобы заставить пакет подключиться к сети и не дать себе ответить (я думаю, разумно использовать iptables и NAT).

Непростые ответы:

  • Протокол, который не зависит от IP: либо тот, который не использует уровень IP, либо тот, который разрешает широковещательную рассылку. Ни один не приходит на ум.

  • Отправьте любой пакет, который обычно генерирует ответ от вас, предотвращает ответ и ищет ответ от другого устройства. Было бы разумно использовать ваш IP-адрес в качестве пункта назначения, но я не уверен в этом. К сожалению, детали (и, следовательно, ответ) оставлены в качестве упражнения для ФП ... но я надеюсь, что обсуждение было полезным.

Я подозреваю, что окончательное решение будет включать комбинацию методов, поскольку ни один из подходов не гарантирует надежное определение.

Некоторая информация доступна на http://en.wikipedia.org/wiki/ARP_spoofing#Defenses

Если ничего не помогает, вам может понравиться это: http://www.rfc -editor.org / rfc / rfc2321.txt

Пожалуйста, опубликуйте продолжение вашего решения, так как я уверен, что оно будет полезно для других. Удачи!

3 голосов
/ 16 января 2009

Вы можете отправить ARP-запрос для каждого возможного IP-адреса в подсети . Конечно, адрес источника запроса ARP должен быть ff: ff: ff: ff: ff: ff , в противном случае вы можете не увидеть ответ.

Я подделал такой пакет с помощью bittwiste и воспроизвел его с помощью PReplay, и все хосты в сети получили ответ. (Я не знаю, являются ли эти поддельные пакеты ARP законными или нет ... некоторые ОС могут их игнорировать)

Вот как выглядел поддельный пакет: alt text

Вот как выглядел ответ: alt text

Если вы смотрите ответы и видите свой MAC-адрес в одном из пакетов (в красном прямоугольнике), то у кого-то такой же MAC-адрес, как и у вас ...

К сожалению, я не смог полностью проверить теорию, потому что ни одна из моих (Windows) машин не заботилась о том, чтобы я пытался установить MAC-адрес ник ...

1 голос
/ 04 августа 2010

Это очень поздно и без ответа, но я хотел бы точно узнать, что я сделал в случае, если кому-то еще это интересно.

Я работал с очень странным встроенным оборудованием, которому не назначен MAC-адрес при изготовлении. Это означает, что нам нужно было назначить один в программном обеспечении.

Очевидное решение состоит в том, чтобы пользователь выбрал MAC-адрес, который, как он знает, доступен в его сети, предпочтительно из локально администрируемого диапазона, и это то, что я и сделал. Однако я хотел выбрать достаточно безопасное значение по умолчанию, а также попытаться предупредить пользователя в случае возникновения конфликта.

В конце концов, я прибег к выбору значения по умолчанию для произвольной выборки в локально управляемом диапазоне, выбранном путем выполнения некоторых аппаратных измерений с умеренной энтропией. Я намеренно исключил начало и конец диапазона, исходя из предположения, что они, скорее всего, будут выбраны вручную. Скорее всего, в любой данной сети будет только одно из этих устройств, и, конечно, меньше 20, поэтому вероятность конфликта очень мала, хотя и не так низка, как могла бы быть из-за несколько предсказуемых случайных чисел.

Учитывая низкие шансы возникновения проблемы, и, несмотря на превосходные ответы выше, я решил обойтись без обнаружения конфликта и обойтись предупреждением для пользователя, чтобы следить за проблемами конфликта MAC.

Если бы я решил реализовать обнаружение конфликтов, то, учитывая, что я контролирую весь сетевой стек, я, вероятно, буду следить за чрезмерными неизвестными или отсутствующими пакетами, а затем инициирую изменение MAC-адреса или предупреждаю пользователя, когда это происходит.

Надеюсь, это поможет кому-то еще где-то, но, вероятно, нет!

1 голос
/ 10 ноября 2008

Два хоста, использующие один и тот же MAC-адрес в одном сегменте сети, вероятно, могли бы свести с ума коммутаторы, и вы, вероятно, могли бы обнаружить это, имея крайне ненадежное сетевое соединение (так как коммутаторы отправляли бы некоторую часть пакетов, принадлежащих вашему хосту, второй, в зависимости от того, кто из вас отправил последний пакет в их направлении).

...