Содержание статьи
- Пятничный вечер, который пошел не по плану
- Паника, гипотезы, тупики
- Копаем в сторону провайдера
- Проверяем, насколько все плохо
- Что с этим может сделать злоумышленник
- Сценарий 1. ARP spoofing — перехват трафика соседей
- Сценарий 2. Брутфорс роутеров через MAC Telnet и не только
- Сценарий 3. Инъекция маршрутов через OSPF
- Сценарий 4. Пассивная разведка через OSPF — без единого скана
- Сценарий 5. Ботнет, который не выходит в интернет
- Сценарий 6. Утечка информации об инфраструктуре провайдера
- Пишем провайдеру
- Делаем сами, раз так
- Защита 1. Firewall на WAN-интерфейсе — отсекаем все лишнее
- Защита 2. Отключаем Neighbor Discovery на WAN
- Защита 3. Отключаем MAC Telnet и MAC Winbox на WAN
- Защита 4. Убираем management-сервисы с WAN
- Защита 5. Фильтрация ARP
- Что я из этого вынес
Пятничный вечер, который пошел не по плану
Все началось довольно буднично: в пятницу, в шесть вечера, я решил поправить на нашем офисном MikroTik правило NAT, потому что бухгалтерия не могла зайти на очередной госпортал. Открыл Winbox, по случайности ткнул в Neighbors и немного залип.
Для тех, кто не работал с MikroTik, поясню: на вкладке Neighbors видны устройства, обнаруженные через протоколы L2 discovery, — MNDP (проприетарный микротиковский), CDP (Cisco) и LLDP (стандартный IEEE 802.1AB). Все три работают на канальном уровне и распространяются в пределах broadcast-домена, то есть показывают только то, что находится с вами в одном L2-сегменте. В нормальной ситуации там виден максимум ваш коммутатор или вышестоящий маршрутизатор провайдера.
У меня там висело штук двадцать пять чужих девайсов. С чужими именами, чужими MAC-адресами и вполне рабочими IP. Какие‑то ООО «Ромашка», чей‑то NAS и пара точек доступа непонятного происхождения. Полный зоопарк. Если они видны в Neighbors, значит, все эти устройства физически находятся со мной в одном broadcast-домене. А этого вроде как быть не должно.

Паника, гипотезы, тупики
Первая мысль была панической и связанной с текущими реалиями: нас ломают. Кто‑то пробрался в сеть, расставил свои устройства и вот‑вот утащит разработки компании, а заодно персональные данные. А может, уже не один день использует нашу инфраструктуру как часть ботнета. Я полез проверять: сменил пароль на роутере, прошерстил логи авторизации, однако все оказалось чисто. Правила firewall на месте, нет никаких левых подключений изнутри. Я проанализировал внутренний трафик через вендорский NTA (Network Traffic Analysis) и уже вручную через Wireshark. Пошел в серверную, проверил патч‑панель: вроде все кабели наши, ничего лишнего не воткнуто. Тупик.
Вторая мысль: может, это соседи по зданию. Мы работаем в бизнес‑центре, мало ли, кто в какой порт что воткнул. Но наша организация сидит на выделенке, офисов несколько, и у каждого — свой кабель до провайдера, своя розетка, и объединены они маршрутизацией через виртуальную сеть, левых адресов быть не должно. Тем более два подразделения периодически следят за составом сети — админы и безопасники.
Я даже спустился к монтажному шкафу на первом этаже, посмотрел: наш кабель идет в отдельный порт провайдерского коммутатора. Физически мы ни с кем не соединены. А устройства в Neighbors все равно висят. Тупик номер два.
Тогда я подумал: ладно, может, это какой‑то глюк Winbox? Показывает кешированное, или discovery ловит широковещательный мусор из космоса. Перезагрузил роутер, подождал пять минут, открыл Neighbors. Двадцать пять девайсов на месте, некоторые даже обновили uptime. Нет, не глюк.
Осталась одна версия: дело не в нашей сети, а в том, что приходит к нам по кабелю от провайдера. То есть провайдер где‑то не изолировал клиентов друг от друга и мы все сидим в общем L2-сегменте. Звучало дико, но проверить эту гипотезу, в принципе, несложно.
Копаем в сторону провайдера
Я включил Torch на WAN-интерфейсе (это встроенный монитор трафика в MikroTik — показывает потоки в реальном времени: адреса источников и назначений, протоколы, скорости) и начал смотреть, что приходит с аплинка.
Первые секунды — ничего особенного, обычный поток. Но потом в этом потоке замелькал трафик на характерные мультикаст‑адреса CDP и LLDP — протоколы обнаружения соседей, работающие на канальном уровне. Сетевое оборудование через них рассказывает о себе: hostname, порт, версия прошивки. В норме ты видишь их только от своего коммутатора или вышестоящего маршрутизатора. А тут десятки чужих устройств представлялись друг другу, как на конференции.
Я еще пытался себя убедить, что это просто какой‑то сетевой мусор, но дальше в потоке пошли пакеты OSPF Hello, и вот тут стало совсем не смешно. Для тех, кто не работал с динамической маршрутизацией, поясню: OSPF (Open Shortest Path First) — это протокол, с помощью которого маршрутизаторы автоматически обмениваются информацией о сетевой топологии. Работает он так: маршрутизаторы в одной area (логической зоне) рассылают друг другу Hello-пакеты для установления соседства, а затем обмениваются LSA (Link-State Advertisements) — сообщениями, описывающими все известные им сети и связи. Из этих LSA каждый маршрутизатор строит LSDB (Link-State Database), полную карту топологии всей area. Полную. Каждый маршрутизатор знает про каждую подсеть и каждый линк.
Теперь понятно, почему OSPF Hello на моем WAN — это катастрофа? OSPF Hello рассылаются мультикастом на 224., и, если я их вижу, значит, я в одном L2-сегменте с теми, кто их отправляет. В самом Hello-пакете указан Area ID: из него видно, в какой зоне работают соседи. А значит, я могу настроить свой OSPF-процесс в ту же area, установить adjacency и получить полную LSDB-карту всей сети. Тут сомневаться стало бессмысленно: провайдер свалил всех в общий котел.

Проверяем, насколько все плохо
Окей, чужие протоколы в эфире — это уже нехорошо. Но одно дело — видеть широковещательные пакеты, другое — реально достучаться до чужих устройств. Я взял MAC-адрес одного из соседей из Neighbors и сделал MAC Ping, пинг на канальном уровне, который работает без IP, чисто по MAC-адресу. Отвечает? Отвечает.

Тогда я попробовал MAC Telnet — проприетарный протокол MikroTik, придуманный для удобства юзеров: он позволяет подключиться к консоли управления любого RouterOS-устройства в том же L2-сегменте, используя только MAC-адрес. IP не нужен, маршрутизация не нужна — достаточно находиться в одном broadcast-домене. Задумывалось это для случаев, когда роутер свежий из коробки и IP еще не настроен. А в нашей ситуации это означало: я могу подключиться к консоли управления любого из двадцати пяти соседских MikroTik.
Подключился. Увидел приглашение логина чужого роутера. Вводить чужие пароли я, разумеется, не стал, мне хватило самого факта.

Но и это еще не всё. Я пропинговал несколько IP-адресов из списка соседей обычным ICMP ping, по третьему уровню. Устройства ответили. То есть между нами не просто общий L2-сегмент, а есть полноценная IP-связность.

А вот тут мне стало по‑настоящему страшно. До этого момента можно было утешать себя: ну видят устройства друг друга, ну пингуются, неприятно, но не смертельно. Но я решил посмотреть, что еще летает в OSPF-пакетах и какие маршруты анонсируются.
Среди чужих префиксов обнаружились адреса, которые явно принадлежали не клиентам, а самому провайдеру. Loopback-интерфейсы, линковые /30-подсети между их маршрутизаторами. Я пропинговал несколько из них, они ответили.
Сижу смотрю на это и понимаю масштаб трагедии: провайдер раздал корпоративным клиентам подключения в один общий VLAN. Без сегментации, без изоляции портов, и при этом все клиенты видят друг друга на канальном уровне, могут обмениваться трафиком, им доступны служебные протоколы провайдерской сети, поэтому они могут достучаться до самой инфраструктуры оператора. Двадцать с лишним организаций в одном сегменте, как в общаге, где стены нарисовали маркером на полу и договорились их не пересекать.

Что с этим может сделать злоумышленник
Когда первый шок прошел, я сел, налил кофе и начал думать: а что бы с этим мог сделать кто‑то менее добросовестный?
Сценарий 1. ARP spoofing — перехват трафика соседей
Это самый очевидный сценарий. В общем L2-сегменте любой пользователь может разослать поддельные ARP-ответы (gratuitous ARP) и объявить себя шлюзом. Все устройства в сегменте обновят свою ARP-таблицу, и трафик, предназначенный шлюзу, потечет через атакующего. Дальше — классический man-in-the-middle: пароли, которые передаются без TLS, содержимое HTTP-запросов, DNS-запросы, токены аутентификации. Если у кого‑то из соседей почтовый клиент ходит на POP3 без шифрования (а в мелких конторах такое встречается сплошь и рядом) — это просто подарок для хакера.
Инструментарий тривиальный:
- ettercap умеет и ARP poisoning, и перехват трафика, и парсинг паролей на лету;
- bettercap — более современная альтернатива с веб‑интерфейсом и модулями для HTTPS-даунгрейда;
- arpspoof из пакета dsniff — если хочется совсем по‑простому.
Все это есть в Kali из коробки.
ARP spoofing хотя бы можно заметить: на управляемых коммутаторах имеется Dynamic ARP Inspection, да и аномалии в ARP-таблице бросаются в глаза. Но это если кто‑то смотрит. А вот дальше начинается кое‑что похуже.
Сценарий 2. Брутфорс роутеров через MAC Telnet и не только
MAC Telnet до чужих роутеров работает, мы это уже выяснили. А раз так, работает и перебор паролей. Сколько из этих двадцати пяти MikroTik’ов стоят с паролем admin/ или admin без пароля вообще? По моему опыту — процентов сорок, не меньше. Мелкие компании покупают роутер, втыкают кабель, настраивают NAT — и всё, дальше им неинтересно.
Перебирать можно разными способами. В Metasploit есть модуль auxiliary/ для перебора по SSH. Hydra работает с SSH, Telnet и HTTP-формами (WebFig на 80/443-м порте). RouterOS API (порт 8728) использует собственный бинарный протокол — для него готовых модулей в Metasploit нет, но на GitHub есть специализированные скрипты на Python (например, RouterOS-API-bruteforce), а также соответствующий скрипт в NSE Nmap. Для Winbox-протокола (порт 8291) — отдельные инструменты вроде winbox-brute.
Подобрал пароль, и ты в management-консоли чужого роутера. Оттуда видна вся внутренняя сеть организации: можно добавить себя в маршрут, настроить проброс, подключиться к SMB-шарам, камерам наблюдения, принтерам. Если в сети есть Active Directory, до контроллера домена обычно один‑два хопа.
Сценарий 3. Инъекция маршрутов через OSPF
Вот тут начинается по‑настоящему интересное. OSPF в этом сегменте работает без аутентификации. Как я это определил? В заголовке каждого OSPF-пакета есть поле Auth : 0 — без аутентификации, 1 — plaintext-пароль, 2 — MD5. В перехваченных Hello стоял ноль. OSPF поддерживает аутентификацию, но по умолчанию она выключена, и в данном случае ее никто не включил. А значит, ничто не мешает поднять свой OSPF-процесс и влиться в area как полноправный участник.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
