Categories: Hacking

Как организовать MITM, используя ICMP redirect.

Итак, напомню. MITM (man-in-the-middle) — общее название для типа атак, когда хакер получает возможность манипулировать трафиком, передаваемым между двумя хостами. Самая классика — это ARP poisoning и DNS spoofing. Хотя ясное дело: и разных протоколов много, и технологий, а потому методов есть еще целый пучок. С парочкой из них мы сейчас и познакомимся.
Первый метод — ICMP redirect. Эта техника основана не на какой-то баге, а на вполне  декларированной фиче протокола. Но давай обо всем по порядку — сначала общая теория.
Давай представим ситуацию. У нас есть хост А и B, а также роутеры R1 и R2 (см. рис. 1).

Зачем нужен ICMP redirect

С хоста A данные надо послать на хост B, а на хосте А в таблице маршрутизации прописан дефолтный путь — через R1. Таким образом, когда хост А пошлет пакет данных хосту B, он пошлет их через R1. R1, в свою очередь, получив этот пакет данных, посмотрит таблицу маршрутизации и увидит, что для того, чтобы переслать данные на хост B, он должен отправить их на роутер R2. И перешлет их на R2.
Но если на R1 включена нотификация ICMP redirect, то R1 заметит, что R2 и хост A находятся в одном сегменте. А из этого, в свою очередь, следует, что путь напрямую от A к R2 и далее,
то есть без участия R1, будет рациональнее. Если все «сходится», то R1 посылает на хост А сообщение ICMP redirect. Если ОС хоста А поддерживает такого вида сообщения, то она сама добавит новый маршрут в свою таблицу. Вообще, по стандарту только сетевые девайсы имеют право отправлять такие сообщения, но, как ты понимаешь, для нас это прямой путь для наших манипуляций :).
Теперь давай ближе к практике. Все, что нам требуется в качестве инструмента, — это отправлять ICMP redirect запросы. Формат пакета — на рис. 2.

Формат пакета ICMP redirect

Поясню, так как это важно. Код — 1, тип — 5, которые указывают, что это именно redirect для хоста, потом стандартная чек-сумма. Далее должен быть IP-адрес более «правильного» роутера. И самый «скользкий кусок» для нас — заголовок IP пакета и первые 8 байт тела пакета, который был  получен роутером, но для которого есть более короткий путь. Что с этим делать, я объясню
чуть позже.
Дальше. Необходимо знать остальные правила, по которым действуют ОС, получающие ICMP redirect пакеты. В смысле, для того, чтобы ОС обработала пакет и добавила новый роут по нему, должны соблюдаться следующие условия:

1. IP-адрес нового роутера должен быть в той же подсети, что и сам хост.
2. Сам ICMP redirect должен прийти от роутера, который используется хостом.
3. В качестве нового роутера не может быть указан сам хост.
4. Новый роут не может быть добавлен для IP-адреса, который находится в той же подсети, что и сам хост.
5. И самое тривиальное — ОС должна поддерживать и обрабатывать ICMP redirect пакеты.

Начнем с конца. На самом деле ICMP redirect кажется вполне юзабельной фичей — динамически находятся более правильные маршруты. Но фактически он будет использоваться в сети лишь в том случае, если сама архитектура сети некорректна. При правильной таких проблем просто не возникает. Наверное, это и стало причиной, по которой от этой технологии постепенно все отказываются: вроде как большинство современных *nix-систем по умолчанию не обрабатывает их, а сетевые девайсы их не генерят. Но приятное исключение составляют ОС до Windows XP/2003 включительно — в них ICMP redirect поддерживается и включен по умолчанию (в Vista/2008 — отключен).
Если обобщить описанные выше правила, то для проведения успешной атаки мы должны соблюсти следующие моменты:

1. Мы должны находиться в той же подсети, что и хост нашей жертвы (хост А).
2. Хост, роут до которого мы хотим изменить (хост B), должен находиться в другой подсети.

Достаточно просто, но куда же делся тот «скользкий кусок»? По теории, для того, чтобы добавить новый роут на хост, мы должны в тело ICMP redirect’а добавить IP-заголовок и часть тела пакета от хоста (рис. 3). Но откуда нам его взять для атаки, если мы не видим данных между роутером и хостом? В теории это стало бы для нас нерешабельной проблемой, но на практике все гораздо проще, так как винда не смотрит, «а посылала ли она этот пакет». Главное, чтобы было некое «тело». Кроме того, отсутствие этой проверки позволяет добавить нам в таблицу маршрутизации роуты даже до хостов, к которым наша жертва никогда и не подключалась.

рис 3. Пакет ICMP redirect «вживую»

Теперь практический пример. Общее описание ситуации:
• 192.168.79.130 — жертва на Win XP;
• 192.168.79.137 — хост атакующих, то есть нас;
• 192.168.79.2 — основной роутер жертвы, он же «gateway»;
• 8.8.8.8 — DNS-сервер жертвы (от Гугла).

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

Провести атаку можно различными тулзами — это и классический Ettercap, и виндовый Intercepter-NG. Но мне приглянулся Responder от SpiderLabs. Это набор тулзенок на Python’е, специально сделанный для различных атак в Windows-сетях. Атака проводится всего
одной командой:

python Icmp-Redirect.py -I eth0 -i 192.168.79.137 -g 192.168.79.2 -t 192.168.79.130 -r 8.8.8.8

 Расписывать, что есть что, не буду. Если соотнести с общей схемой сети, то все должно быть понятно. Можно разве что отметить несколько моментов. Во-первых, новый роут добавляется временно — на десять минут.
Но мы можем повторять атаку сколько угодно раз. Во-вторых, мы можем добавить любое количество роутов до хостов (даже к тем, к которым жертва еще не подключалась). В-третьих, сама эта атака будет полудуплексная (half-duplex), то есть подключения из «внешних» сетей мы перехватить не сможем, поскольку обмануть таким образом сам роутер не получится.
Кроме того, при проведении MITM-атаки нам надо будет учитывать, что подключение к удаленному хосту надо делать со своего IP-адреса, а не от имени жертвы, по этой же причине. Итог атаки можно увидеть на рис. 4.

рис 4. ICMP redirect
Click to rate this post!
[Total: 0 Average: 0]
cryptoworld

Специалист в области кибер-безопасности. Работал в ведущих компаниях занимающихся защитой и аналитикой компьютерных угроз. Цель данного блога - простым языком рассказать о сложных моментах защиты IT инфраструктур и сетей.

Recent Posts

Лучший адаптер беспроводной сети для взлома Wi-Fi

Чтобы взломать сеть Wi-Fi с помощью Kali Linux, вам нужна беспроводная карта, поддерживающая режим мониторинга…

11 месяцев ago

Как пользоваться инструментом FFmpeg

Работа с консолью считается более эффективной, чем работа с графическим интерфейсом по нескольким причинам.Во-первых, ввод…

11 месяцев ago

Как создать собственный VPN-сервис

Конечно, вы также можете приобрести подписку на соответствующую услугу, но наличие SSH-доступа к компьютеру с…

12 месяцев ago

ChatGPT против HIX Chat: какой чат-бот с искусственным интеллектом лучше?

С тех пор как ChatGPT вышел на арену, возросла потребность в поддержке чата на базе…

12 месяцев ago

Разведка по Wi-Fi и GPS с помощью Sparrow-wifi

Если вы когда-нибудь окажетесь в ситуации, когда вам нужно взглянуть на спектр беспроводной связи, будь…

12 месяцев ago

Как обнаружить угрозы в памяти

Elastic Security стремится превзойти противников в инновациях и обеспечить защиту от новейших технологий злоумышленников. В…

12 месяцев ago