Обнаружить другой хост с таким же MAC-адресом

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

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

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


person Daniel Cassidy    schedule 10.11.2008    source источник


Ответы (4)


Этот вопрос слишком интересен, чтобы от него отказаться! После нескольких фальстартов я начал думать об основных компонентах проблемы и прошерстил 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

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

person Adam Liss    schedule 10.11.2008
comment
Спасибо за этот отличный ответ. Для моих целей нормально зависеть от IP - я не надеюсь поддерживать сети без IP :). Обязательно буду следить. - person Daniel Cassidy; 10.11.2008

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

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

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

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

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

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

person Tarnay Kálmán    schedule 16.01.2009

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

person che    schedule 10.11.2008

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

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

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

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

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

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

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

person Daniel Cassidy    schedule 04.08.2010