Протокол ARP и «с чем его едят» (дополнено)
Спасибо хабраюзеру hardex за публикацию первоначальной статьи, а также всем, кто плюсанул в карму для возможности моей собственноручной публикации. Теперь дополненная версия с учетом пожеланий и дополнений. Добро пожаловать под кат.
Доброго времени суток, дорогие хабраюзеры. Этой статьей я хочу начать цикл повествования о протоколах, которые помогают нам прозрачно, быстро и надежно обмениваться информацией. И начать с протокола ARP.
Как известно, адресация в сети Internet представляет собой 32-битовую последовательность 0 и 1, называющихся IP-адресами. Но непосредственно связь между двумя устройствами в сети осуществляется по адресам канального уровня (MAC-адресам).
Так вот, для определения соответствия между логическим адресом сетевого уровня (IP) и физическим адресом устройства (MAC) используется описанный в RFC 826 протокол ARP (Address Resolution Protocol, протокол разрешения адресов).
ARP состоит из двух частей. Первая – определяет физический адрес при посылке пакета, вторая – отвечает на запросы других станций.
Протокол имеет буферную память (ARP-таблицу), в которой хранятся пары адресов (IP-адрес, MAC-адрес) с целью уменьшения количества посылаемых запросов, следовательно, экономии трафика и ресурсов.
Пример ARP-таблицы.
192.168.1.1 08:10:29:00:2F:C3
192.168.1.2 08:30:39:00:2F:C4
Слева – IP-адреса, справа – MAC-адреса.
Прежде, чем подключиться к одному из устройств, IP-протокол проверяет, есть ли в его ARP-таблице запись о соответствующем устройстве. Если такая запись имеется, то происходит непосредственно подключение и передача пакетов. Если же нет, то посылается широковещательный ARP-запрос, который выясняет, какому из устройств принадлежит IP-адрес. Идентифицировав себя, устройство посылает в ответ свой MAC-адрес, а в ARP-таблицу отправителя заносится соответствующая запись.
Записи ARP-таблицы бывают двух вид видов: статические и динамические. Статические добавляются самим пользователем, динамические же – создаются и удаляются автоматически. При этом в ARP-таблице всегда хранится широковещательный физический адрес FF:FF:FF:FF:FF:FF (в Linux и Windows).
Создать запись в ARP-таблице просто (через командную строку):
Вывести записи ARP-таблицы:
После добавления записи в таблицу ей присваивается таймер. При этом, если запись не используется первые 2 минуты, то удаляется, а если используется, то время ее жизни продлевается еще на 2 минуты, при этом максимально – 10 минут для Windows и Linux (FreeBSD – 20 минут, Cisco IOS – 4 часа), после чего производится новый широковещательный ARP-запрос.
Сообщения ARP не имеют фиксированного формата заголовка и при передаче по сети инкапсулируются в поле данных канального уровня
Формат сообщения ARP.
- тип сети (16 бит): для Ethernet – 1;
- тип протокола (16 бит): h0800 для IP;
- длина аппаратного адреса (8 бит);
- длина сетевого адреса (8 бит);
- тип операции (16 бит): 1 – запрос, 2 — ответ;
- аппаратный адрес отправителя (переменная длина);
- сетевой адрес отправителя (переменная длина);
- аппаратный адрес получателя (переменная длина);
- сетевой адрес получателя (переменная длина).
А вот как происходит определение маршрута с участием протокола ARP.
Пусть отправитель A и получатель B имеют свои адреса с указанием маски подсети.
- Если адреса находятся в одной подсети, то вызывается протокол ARP и определяется физический адрес получателя, после чего IP-пакет инкапсулируется в кадр канального уровня и отправляется по указанному физическому адресу, соответствующему IP-адресу назначения.
- Если нет – начинается просмотр таблицы в поисках прямого маршрута.
- Если маршрут найден, то вызывается протокол ARP и определяется физический адрес соответствующего маршрутизатора, после чего пакет инкапсулируется в кадр канального уровня и отправляется по указанному физическому адресу.
- В противном случае, вызывается протокол ARP и определяется физический адрес маршрутизатора по умолчанию, после чего пакет инкапсулируется в кадр канального уровня и отправляется по указанному физическому адресу.
Главным достоинством проткола ARP является его простота, что порождает в себе и главный его недостаток – абсолютную незащищенность, так как протокол не проверяет подлинность пакетов, и, в результате, можно осуществить подмену записей в ARP-таблице (материал для отдельной статьи), вклинившись между отправителем и получателем.
Бороться с этим недостатком можно, вручную вбивая записи в ARP-таблицу, что добавляет много рутинной работы как при формировании таблицы, так и последующем ее сопровождении в ходе модификации сети.
Существуют еще протоколы InARP (Inverse ARP), который выполняет обратную функцую: по заданному физическому адресу ищется логический получателя, и RARP (Reverse ARP), который схож с InARP, только он ищет логический адрес отправителя.
В целом, протокол ARP универсален для любых сетей, но используется только в IP и широковещательных (Ethernet, WiFi, WiMax и т.д.) сетях, как наиболее широко распространенных, что делает его незаменимым при поиске соответствий между логическими и физическими адресами.
P.S. Эту статью писал я сам, никуда не подглядывая, основываясь только на своих знаниях, полученных в ходе изучения сетей.
Изучаем инструменты для работы с ARP протоколом
Статья расскажет об очень простом протоколе, который может быть использован для атак на сети. Рассмотрим из чего состоит протокол и какие инструменты есть для работы с ним.
ARP основные данные
Address Resolution Protocol (ARP) — протокол, который позволяет определить MAC адрес устройства по известному IP адресу, хотя можно используя протокол просто собрать все данные о подсети.
Протокол уже известен почти 40 лет! (Рассматриваем IPv4 версию) Описание протокола находится в RFC 826. У RFC было несколько апдейтов, которые касались различных частей протокола, вот некоторые их них:
- RFC 5227 — рекомендации по устранению проблем с конфликтами адресов, если несколько устройств используют один и тот же IP адрес,
- RFC 5494 — описание расширений, которые можно использовать для работы с различными протоколами. Среди них: HYPERChannel, DHCP options, ATM ARP, HARP, Dual Mac FDDI, MAPOS, FC, DNS DHCID,
Всю работу протокола можно условно разделить на 3 шага, которые он должен обрабатывать всякий раз как операционные системы или устройства в сети стараются собрать информацию о подсети. Ниже приведем список шагов:
- Устройство, которое используется для сбора данных собирает специальный запрос, который будет рассылаться для всей подсети.
- Все хосты подсети получив запрос должны ответить, если запрашиваемые данные совпадают с их характеристиками (MAC или IP адрес).
- Если данные запроса совпали с данными того, кто принял запрос, то он должен ответить парой значений MAC адрес и IP адрес.
Полученные данные должны быть сохранены в структуре — ARP таблице . В зависимости от имплементации эта таблица может обновляться, а может быть заполнена один раз и использоваться постоянно, пока устройство подключено к сети. Кстати, таблицу ARP во всех популярных операционных системах можно вывести командами:
Структура пакета, который используется для работы с протоколом:
Инструменты для взаимодействия и проведения атак
Разобьём набор инструментов для работы с протоколом на несколько классов:
- Исследование данных
- Создание и манипуляция параметрами пакетов
- Инструменты для проведения атак
Исследование данных
Собрать данные с RFC и теоритически представлять из чего состоит пакет это только половина дела, теперь нужно посмотреть на имплементацию, так как она иногда отличается. Для этого можно использовать инструменты, которые называют снифферами. Самые популярные из них:
Инструменты представляют собой интерфейс, который позволяет посмотреть конкретные данные, которые заполняют участники сети. Ниже приведен вариант разобранного пакета ARP, открытого в WireShark:
Благодаря интерфейсу приложения можно проводить анализ того насколько корректно работает протокол с точки зрения RFC и можно попытаться найти данные, которые могли быть использованы для дестабилизации работы сети. Тестовые данные, которые были записаны для отображения можно найти тут.
Создание и манипуляция параметрами пакетов
Этот набор инструментов подразумевает низкоуровневую работу со структурой пакетов. Поэтому инструменты либо будут представлять собой библиотеки для работы с сетевыми интерфейсами и протоколом, либо это специализированный софт, который может позволять манипулировать отдельными полями пакета.
Самой популярной библиотекой-инструментом можно считать Scapy. Это и библиотека и интерактивный инструмент одновременно, с его, помощью зная только основные элементы языка программирования Python, можно заполнять все поля пакетов и отправлять их в сеть.
Пример созданного пакета в Scapy:
Попробуем сделать кастомный пакет и отправить в сеть, в качестве теста используется сеть 192.168.0.1/24, запрос будем отправлять для несуществующего устройства по адресу 192.168.0.111. Листинг мини приложения будет таким:
packet = ARP(pdst='192.168.0.111') send(packet)
Для примера именно готового инструмента приведем nping — инструмент, который позволяет работать с различными протоколами, среди них есть ARP. Чтобы повторить запрос, который делали из Scapy, можно использовать вот такую команду:
sudo nping --arp --arp-target-ip='192.168.0.111' 192.168.0.1
Инструменты для проведения атак
Как ни странно, хоть ARP один из самых простых протоколов, он является очень важным в проведении MiTM атак. Причем с помощью этого протокола происходит 90% задачи по перехвату трафика в сети, а уже оставшиеся 10% доделывают остальные инструменты и обработчики более высокоуровневых протоколов.
То есть для проведения ниже перечисленных атак, нужно, чтобы была произведена атака на протокол ARP, а уже далее отправлялись данные, которые приносят пользу от проведенной атаки. К атакам, которые используют ARP в качестве основы можно отнести:
Механизм атак достаточно прост, для успеха нужно чтобы трафик сети проходил через точку, которую контролирует злоумышленник. Для этого он может генерировать большое количество однотипных ARP пакетов, которые имеют определенные значения внутри.
В ARP протоколе существует всего 2 вида запросов, это запрос, который ищет соответствие MAC и IP адреса и ответ на этот запрос.
Если в неограниченном количестве продолжать генерировать ответы, которые содержат информацию о разных IP адресах и одном MAC адресе, то таким образом можно добиться обновления данных о маршруте у всех систем сети и заставить отправлять данные через тот MAC+IP, который постоянно мелькает в сети.
Практически атака может быть реализована с помощью следующих инструментов:
В списке представлены только те инструменты, которые имеют достаточно хорошую документацию и были протестированы на работоспособность. Ниже приведем способы проведения атак.
(ПЕРЕД ТЕМ КАК НАЧАТЬ ТЕСТИРОВАТЬ РЕАЛЬНЫЕ СЕТИ: сразу пытаться обрабатывать большие сети больше /24 маски может быть проблематично). Чтобы подготовить машину, рекомендуется сделать небольшую настройку:
sudo sysctl -w net.ipv4.ip_forward=1 sudo ip link set eth0 promisc on sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo modprobe nf_conntrack echo "1" > /proc/sys/net/netfilter/nf_conntrack_helper
Команды выше обычно используются для настройки NAT обработки, в таком виде можно будет обрабатывать трафик от большого количества хостов и не нарушать хотя бы первое время работу тестируемой сети. Все настройки выше нужно производить самостоятельно, ни один из перечисленных инструментов для проведения атак их не ставят.
Как запускать инструменты для тестирования:
Scapy — пример скрипта, который может проводить атаки на DNS и ARP можно найти тут
arpspoof -r ip ip.vi.c.tim ip.dest.i.na.tion
set arp.spoof.targets ip.of.subnet.ot.victim arp.spoof on
Механизмы защиты
Защита от перенаправления трафика может быть реализована за счет нескольких инструментов:
- Само оборудование, которое используется для построения сети. На сегодняшний день практически все устройства позволяют обнаруживать аномалии протокола ARP. Поэтому может быть проблематично редиректить трафик так как устройство просто отключит порт.
- Использование стороннего софта, который мониторит трафик сети. Небольшой список таких инструментов можно найти в сети в огромном количестве. К примеру вот такой.
Иногда настройкой и установкой даже одного из перечисленных способов пренебрегают и у злоумышленников появляется шанс перехватывать и модифицировать трафик.
Статья подготовлена в рамках старта курса Network Security. Узнать о курсе подробнее и зарегистрироваться на бесплатный урок можно по ссылке ниже.