Архивы: по дате | по разделам | по авторам

Нестандартное использование ARP. Окончание.

АрхивСетевое окружение (архив)
автор : Алексей Зейбов   15.08.2001

Окончание статьи описывающей для чего нужен и как можно использовать ARP протокол.

Кроме того, необходимо периодически посылать ложные ARP-ответы хостам хост1 и хост2 - для чтобы созданные записи в ARP-таблице не "устаревали".
При выполнении указанных действий через хост3 будут проходить все пакеты между хост1 и хост2. Достаточно будет запустить сниффер и поставить его в режим записи всего трафика, с целью последующего анализа соединений между хостами, для выявления нужной информации. Хочется добавить что каждый пакет проходящий через хост3 будет повторяться дважды - один раз когда он приходит от хоста-отправителя, и второй когда он будет отправлен по месту назначения.
Как защитить и обнаружить данную атаку? Необходимо статически прописать элементы ARP-таблицы к тем хостам, куда передаются важные данные (POP3-пароли, telnet сессия и т.д.), чаще всего в локальной сети это default gateway, а также хосты, куда вы заходите telnet'ом (опять же это не спасет положения на Windows-платформах). Обнаружить атаку можно просмотрев закешированные данные ARP-таблицы и сравнить их с реальными данными. При обнаружении несовпадения с реальными данными, к примеру, у вас в таблице хост имеет MACx, а на самом деле у него MACs. Это значит, что вас атакуют с хоста, имеющего MACx. Обнаружить атакующего не составляет труда.
Очень часто в локальных сетях при необходимости ограничить доступ к определенному хосту или для идентификации хоста администраторы использует именно MAC-адрес сетевого адаптера. IP-адрес изменить не составляет труда (при наличии прав администратора на Windows NT), а вот решение проблемы свободного изменения MAC адреса для Windows NT автор еще не встречал. Естественно, вы можете возразить, что поменять MAC-адрес можно непосредственно в настройках сетевой карты (или ключа в реестре). Да, действительно, существуют подобные сетевые карты, к которым прилагаются такие драйвера, но этот случай не рассматривается. В учет берется ситуация когда имеется самая обычная сетевая карта - как поменять MAC-адрес на ней? Оказывается и на ней подменить собственный MAC-адрес все же можно.
Автору известны два метода. Начнем с наиболее трудного.
Идея первого очень похожа на создание ложного ARP-сервера. Только на этот раз мы будет обманывать собственный интерфейс. Для реализации необходимо иметь два интерфейса. Пакеты, приходящие на первый интерфейс мы будем "укладывать" в желаемый MAC-адрес и отправлять его с другого интерфейса.
Дальше у нас есть выбор как это реализовать. Во-первых, мы можем установить дополнительный интерфейс, установить маршрутизацию пакетов и использовать этот интерфейс для подключения нескольких или одного хостов. Все пакеты, приходящие от них, будут "перекладываться" на уже имеющийся интерфейс и отправляться с него с желаемым MAC-адресом.
Во втором варианте мы можем создать виртуальный интерфейс или выделив реальный интерфейс в отдельную подсеть и установив маршрутизацию пакетов, либо оставить все как есть и настроить только роутинговую таблицу. Этот метод проще, поэтому на нем и остановимся. Поняв его, можно будет с легкостью подменить MAC-адрес и с помощью двух реальных интерфейсов.
Установить виртуальный интерфейс в Windows NT не составляет труда. Он называется Адаптер MS loopback и устанавливается как обычный адаптер.
При его конфигурации необходимо настроить его также как имеющийся интерфейс, только надо присвоить ему любой неиспользуемый IP-адрес.
Теперь необходимо настроить таблицу роутинга. Смотрим имеющуюся схему маршрутизации пакетов: >route print


Список интерфейсов
0x1 MS TCP Loopback interface
0x2 20 4c 4f 4f 50 20 MS LoopBack Driver
0x3 00 40 95 01 59 01 Winbond W89C940 PCI Network Adapter


Активные маршруты:
Сетевой адрес Маска Шлюз Интерфейс Метрика
0.0.0.0 0.0.0.0 10.0.0.7 10.0.0.6 1
0.0.0.0 0.0.0.0 10.0.0.250 10.0.0.7 1
10.0.0.0 255.255.255.0 10.0.0.6 10.0.0.6 1
10.0.0.0 255.255.255.0 10.0.0.7 10.0.0.7 1
10.0.0.6 255.255.255.0 127.0.0.1 127.0.0.1 1
10.0.0.7 255.255.255.0 127.0.0.1 127.0.0.1 1
10.255.255.255 255.255.255.255 10.0.0.7 10.0.0.7 1
127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
224.0.0.0 224.0.0.0 10.0.0.6 10.0.0.6 1
224.0.0.0 224.0.0.0 10.0.0.7 10.0.0.7 1

где:
0x1:MS TCP Loopback interface
0x2:20 4c 4f 4f 50 20 (10.0.0.7):MS LoopBack Driver
0x3:00 40 95 01 59 01 (10.0.0.6):Winbond W89C940 PCI Network Adapter
Что имеем? Расшифровка построчно
default gateway для интерфейса 3 - 10.0.0.7
default gateway для интерфейса 2 - 10.0.0.250 <-- это default gateway
пакеты к адресам 10.*.*.* отправляются с интерфейса 3
пакеты к адресам 10.*.*.* отправляются с интерфейса 2
пакеты отправляемые на самих себя отправляются на 127.0.0.1
пакеты отправляемые на самих себя отправляются на 127.0.0.1

все остальное не представляет интереса и не рассматривается. Для реализации нашей идеи необходимо удалить строку 3, таким образом, все пакеты с локальными адресами (10.0.0.*) будут отправляться с виртуального интерфейса. Удаляем маршрут:

>route delete 10.0.0.0 if 3

Что необходимо для подмены MAC-адреса? Обозначим для удобства:

10.0.0.6IPr
00 40 95 01 59 01MACr
10.0.0.7IPv
20 4c 4f 4f 50 20MACv
MACn/IPn - MAC/IP хоста с которым будет устанавливаться соединение
MACw - желаемый MAC

пакеты отправленные с интерфейса 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 <host_IP>

Данная операция занимает не более 5 минут. Сложно будет только в первый раз, когда неизвестно в какой именно момент считывается MAC-адрес.
Как обнаружить, что кто-то одним из указанных методов подменил MAC-адрес? Сложно сказать, потому как, анализируя сетевой траффик, никаких аномалий не наблюдается. Можно предложить следующие дополнительные проверки, которые можно сделать, к сожалению, только вручную (проверку MAC-адреса может контролировать программа) - проверка общих ресурсов (если у настоящего хоста их достаточно много, то имитировать их будет довольно сложно), а также определение удаленной ОС (хотя можно проводить атаку с хоста имеющего идентичную ОС). Из всего этого следует сделать вывод, что полагаться только на идентификацию истинности хоста только на основании соответствия MAC-адреса - нельзя.

Хочется отметить, что все вышеописанные атаки имеют воплощение в виде программ, которые по понятным причинам не выставляются для всеобщего тестирования. Большая просьба отнестись к этому с пониманием и не присылать письма с просьбой отправить эти программы. При большом желании вы можете написать их сами - пусть это будет еще один повод заняться написанием программ.
Для написания программ был использован драйвер Packet capture driver by Netgroup of Politecnico di Torino PCCap, доступный здесь:
http://netgroup-serv.polito.it/winpcap/

Литература:
TCP/IP "Architecture, protocols, and implementation with IPv6 and IPv4 security"
Dr. Sidnie Feit

© ООО "Компьютерра-Онлайн", 1997-2024
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.