Нестандартное использование ARP (продолжение)
Что необходимо для подмены MAC-адреса?
Обозначим для удобства:MACn/IPn - MAC/IP хоста с которым будет устанавливаться соединение
MACw - желаемый MAC
10.0.0.6 IPr 00 40 95 01 59 01 MACr 10.0.0.7 IPv 20 4c 4f 4f 50 20 MACv пакеты отправленные с интерфейса 3 будут иметь следующий вид
MAC-кадр Src MAC: MACr Dst MAC: MACv IP-датаграмма Src IP: IPr Dst IP: IPn Data Необходимо получив виртуальным интерфейсом пакет с таким кадром переложить IP-датаграму в MAC-кадр и отправить с интерфейса 3:
MAC-кадр Src MAC : MACw Dst MAC : MACn IP-датаграмма Src IP : IPr Dst IP : IPn Data а получив на интерфейс 3 такой MAC-кадр:
MAC-кадр Src MAC : MACw Dst MAC : MACn IP-датаграмма: Src IP : IPn Dst IP : IPr Data переложить в следующий MAC-кадр и отправить с виртуального интерфейса:
MAC-кадр Src MAC : MACv Dst MAC : MACr IP-датаграмма Src IP : IPn Dst IP : IPr Data Отправлять такие пакеты можно при условии что хост, от "имени" (MAC) которого будут отправляться пакеты должен быть неактивным. Для того, чтобы имитация другого хоста была полной, необходимо также сменить имя компьютера.
Все выглядит сложным, но, разобравшись написать такую программу, не составило труда.
Второй метод смены MAC-адреса намного проще. Первый способ требует написания программы работающей на низком уровне, в то время как сменить MAC-адрес можно используя лишь отладчик SoftIce. Дело в том, что драйвер сетевой карты считывает MAC-адрес через стандартные порты ввода-вывода только на этапе инициализации. Перехватив этот момент и подменив реальные данные на желаемые, можно добиться желаемого результата. Использовать данный метод, во-первых, удобнее, а во вторых это не требует затрат времени на подмену (драйвер будет просто работать как и обычно). В первом способе каждый принятый/отправленный пакет, должен обработаться еще программой, что не дает возможным использование его в 100 мега-битной сети (пакеты не будут успевать обрабатываваться).
Что нужно для этого метода? Как уже говорилось необходимо иметь отладчик SoftIce или любой другой, который будет загружаться до загрузки системы и позволяющий отлаживать драйвера устройств. В SoftIce это режим "Boot". Теперь необходимо определить диапазон ввода-вывода сетевой карты. К примеру, на Winbond W89C940 это E400-E41F. Чтение MAC-адреса происходит через порт E410h (начало диапазона плюс 10h). Именно этот порт и нужно контролировать. Запоминаем собственный MAC-адрес (так как через порт может считываться не только он - передается также и служебная информация, к примеру название чипсета).
Устанавливаем режим отладчика "Boot" и перезагружаемся. После загрузки SoftIce, входим в его консоль (по умолчанию комбинация ctrl-D) и устанавливаем точку останова при попытке чтения из порта E410h::bpio e410 r
затем выходим:
:x
и даем системе грузиться дальше. После того как происходит попытка чтения из указанного порта (при инициализации драйвера сетевой карты) попадаем в консоль SoftIce. Теперь необходимо определить что считывается - MAC-адрес или это другая информация. Сравниваем первый байт MAC-адреса с содержимым регистра AL и при совпадениии меняем его на нужное значение. Если это не он, то пропускаем и ждем следующего чтения (F5). 6 байт MAC-адреса будут считываться последовательно, но нужно учесть, что считывание происходит дважды. Т.е. заменив один раз все 6 байт, трассируем до тех пор, пока MAC-адрес не будет считываться повторно. Подменив его и во второй раз, можно очистить точку останова и дать системе загрузиться полностью. Для этого в консоли SoftIce пишем:
:bc *
:xи выходим с консоли. После загрузки системы драйвер сетевой карты будет работать с новым MAC-адресом. Убедиться в этом можно выполнив команду:
nbtstat -A
Данная операция занимает не более 5 минут. Сложно будет только в первый раз, когда неизвестно в какой именно момент считывается MAC-адрес.
Как обнаружить, что кто-то одним из указанных методов подменил MAC-адрес? Сложно сказать, потому как, анализируя сетевой трафик, никаких аномалий не наблюдается. Можно предложить следующие дополнительные проверки, которые можно сделать, к сожалению, только вручную (проверку MAC-адреса может контролировать программа) - проверка общих ресурсов (если у настоящего хоста их достаточно много, то имитировать их будет довольно сложно), а также определение удаленной ОС (хотя можно проводить атаку с хоста имеющего идентичную ОС). Из всего этого следует сделать вывод, что полагаться только на идентификацию истинности хоста только на основании соответствия MAC-адреса - нельзя.
Хочется отметить, что все вышеописанные атаки имеют воплощение в виде программ, так одну из таких реализаций вы сможете найти в разделе "Инструменты".