Эта статья выросла из заметки 2008 года, где предлагалось бороться с сетевыми червями двумя приёмами: разбросать адреса пяти компьютеров по всему пространству 10.0.0.0/8 и запретить SMB-пакеты на портах 137–139 и 445. Блокировка SMB до сих пор остаётся базовой гигиеной, а вот разброс адресов — иллюзией: расчёт показывает, что перебор занимает часы, а не год, а IPv6 вообще меняет способ поиска цели. Ниже — разбор обоих приёмов с арифметикой, разбор портов и честный список того, чем платят за блокировку SMB: отказ от имён в сети, принтеры по IP и обязательные исключения для контроллеров домена.

Плоская сеть и блокировка SMB — обложка обзора
Порты 137–139 и 445: что закрывать и чем за это платить

TL;DR: что это и как проверить за десять минут

  1. Задача. Не дать червю перебрать локальную сеть по SMB и заразить соседние машины.
  2. Что работает. Блокировка 445/139/137–138 на границе сегмента и на хосте, выключение SMBv1, отказ от LLMNR и NBNS, разделение сети на сегменты.
  3. Что не работает. Разброс адресов по большому префиксу: перебор 10.0.0.0/8 при 1 000 пакетов в секунду занимает около пяти часов.
  4. Проверка. Открыт ли 445 на машине и что видно в сети по именам.
  5. Главная плата. Без исключений для контроллеров домена блокировка 445 отключает аутентификацию, политики и общие папки.
# 1. слушает ли машина SMB и в какой версии
Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol, EnableSMB2Protocol
# 2. что реально открыто снаружи
Test-NetConnection -ComputerName 192.168.1.10 -Port 445
# 3. видны ли машины по именам (LLMNR/NBNS)
Resolve-DnsName -Name pc-01 -LlmnrNetbiosOnly -ErrorAction SilentlyContinue

Проблема, которую это решает

Плоская сеть — это когда все машины находятся в одном широковещательном домене и видят друг друга без ограничений. Удобно: общие папки, принтеры и «Сетевое окружение» работают сами. Плохо то, что любой код, попавший на одну машину, получает готовый список целей и транспорт до них: в такой сети SMB служит и каналом распространения, и способом разведки.

Именно так работали эпидемии 2017 года: эксплойт EternalBlue использовал уязвимость MS17-010 в SMBv1, и заражение шло по 445-му порту без всякого участия пользователя. Машина, у которой 445 открыт и SMBv1 включён, становилась и жертвой, и разносчиком. Патч MS17-010 вышел за месяц до массовой волны, но на многих хостах его не поставили — и именно доступность порта определила масштаб.

Вторая половина проблемы — имена. Даже если порт закрыт, машины продолжают рассказывать о себе: LLMNR и NBNS отвечают на широковещательные запросы «кто такой pc-01», и поддельный ответ уводит аутентификацию на чужой хост. Это отдельный канал, который блокировка 445 не закрывает.

Третья часть — сама идея «спрятать адреса». Она опирается на предположение, что перебор адресного пространства невыполним. Проверим это арифметикой ниже: предположение было верным для червя 2003 года и неверным сегодня.

Что такое плоская сеть и при чём здесь SMB

Плоская сеть — отсутствие границ: один VLAN, один широковещательный домен, все порты доступны всем. SMB в ней — основной протокол доступа к файлам, принтерам и части системных служб Windows, и он же самый удобный транспорт для распространения.

flowchart LR
  PC["рабочая станция"] -->|"445/tcp SMB"| SRV["файловый сервер"]
  PC -->|"445/tcp"| DC["контроллер домена: SYSVOL, GPO, аутентификация"]
  PC -->|"137-139 UDP/TCP NetBIOS"| OLD["старое устройство или принтер"]
  PC -->|"широковещательные запросы"| LAN["вся локальная сеть"]
  MAL["заражённая машина"] -->|"перебор 445 в подсети"| PC
  MAL -->|"перебор 445"| SRV
  MAL -->|"перебор 445"| DC
Компонент Порт Что несёт
NetBIOS name service 137 UDP разрешение имён в пределах широковещательного домена
NetBIOS datagram 138 UDP широковещательные датаграммы, объявления
NetBIOS session 139 TCP сеансы SMB поверх NetBIOS
SMB over TCP 445 TCP современный SMB напрямую, без NetBIOS
LLMNR 5355 UDP локальное разрешение имён в современных Windows
mDNS 5353 UDP разрешение имён в смешанных сетях

Важно понимать, что 445 и 139 — это два пути к одному и тому же SMB: старый через NetBIOS-сеанс и новый напрямую. Закрыть только 139 и оставить 445 — значит не закрыть ничего.

Возможности: что даёт блокировка SMB и что даёт сегментация

Блокировка портов

Что делаем Что получаем Чем платим
Закрыть 445 и 139 на границе сегмента червь не переходит между сегментами файловый доступ только внутри сегмента
Закрыть 445 на хостах рабочих станций для входящих машина перестаёт быть целью перебора локальные общие папки недоступны коллегам
Оставить 445 только серверам и контроллерам домена домен работает, остальное изолировано нужна инвентаризация: кто на самом деле сервер
Закрыть 137–138 UDP нет широковещательной разведки по NetBIOS старые устройства и принтеры теряют видимость

Отказ от имён и широковещания

Что делаем Что получаем Чем платим
Выключить LLMNR подделка ответов перестаёт работать часть приложений не находит имена без DNS
Выключить NBNS нет NetBIOS-разведки старое ПО и принтеры ищут по IP
Локальный DNS с записями вручную предсказуемое разрешение имён администрирование записей
Раскладка вида «принтер по IP» зависимости от имён нет пользователю нужно помнить адрес или ярлык

Сегментация вместо маскировки

Что делаем Что получаем Чем платим
Разбить сеть на VLAN по ролям перебор ограничен своим сегментом маршрутизация и правила между сегментами
Правила «рабочие станции не говорят друг с другом по SMB» боковое перемещение резко ограничено нужен файловый сервер как посредник
Отдельный сегмент для устройств интернета вещей и принтеров чужая прошивка не достаёт до рабочих мест настройка исключений для печати

Отдельный случай: домен и его исключения

Главная ошибка при внедрении — закрыть 445 всем подряд, включая контроллеры домена. Домену SMB нужен не для «общих папок», а для распространения политик и части аутентификационных сценариев; без него вход в домен и применение GPO ломаются целиком.

Кому SMB нужен Что именно ломается без него
Контроллеры домена вход в домен, политики, SYSVOL и NETLOGON
Файловые серверы общие папки и профили
Серверы резервного копирования сетевые копии и тома
Сервер печати печать и очереди на нём
Остальные рабочие станции ничего, кроме доступа к чужим локальным папкам

Поэтому правило формулируется как белый список, а не как чёрный: разрешаем SMB адресам из таблицы, всем прочим — запрет. Если в сети есть устройство, требующее SMBv1 (старое хранилище или МФУ), его выносят в отдельный сегмент с доступом только от нужных машин: включать первую версию по всей сети ради одного устройства — плохой обмен.

Как это устроено внутри

Атака состоит из двух шагов: найти и заразить. Первый шаг — перебор адресов и портов, второй — эксплуатация уязвимости на найденном хосте. Блокировка SMB бьёт по обоим: закрытый порт не находится при переборе и не эксплуатируется.

flowchart TD
  START["код запустился на машине"] --> SCAN{"как искать цели?"}
  SCAN -- "перебор адресов" --> SWEEP["последовательный обход подсети по 445"]
  SCAN -- "имена в сети" --> NAMES["NetBIOS и LLMNR: кто здесь есть"]
  SWEEP --> HIT["открытый 445 и уязвимая версия SMB"]
  NAMES --> HIT
  HIT --> EXPLOIT["эксплуатация: MS17-010 в SMBv1"]
  EXPLOIT --> NEXT["новая заражённая машина"]
  NEXT --> START
  HIT -.->|"445 закрыт на границе и на хосте"| STOP1["тупик: порт не отвечает"]
  NAMES -.->|"LLMNR и NBNS выключены"| STOP2["тупик: имён не видно"]

Перебор адресов — это просто скорость отправки и размер пространства. Считать нужно не «сколько адресов», а «сколько времени при реальной скорости сканирования»:

время = число адресов / скорость перебора
/24:           254 / 1000 = 0,25 с
/16:        65 534 / 1000 = 65 с
/8:     16 777 214 / 1000 = 16 777 с ≈ 4,7 ч
/8 при 100 пакетах/с:      46,6 ч ≈ 2 суток

Именно поэтому утверждение «понадобится около года» из заметки 2008 года неверно: разница с расчётом — два порядка. Даже медленный перебор в сто пакетов в секунду проходит /8 за двое суток, а современные черви параллелят работу по всем заражённым машинам одновременно.

IPv6 ситуацию не улучшает. Число 281 474 976 710 656 — это 2^48, типичный размер площадки; но в IPv6 никто не перебирает адреса: цели находятся через широковещательные механизмы (mDNS, NDP) или через те же имена. Прятать адрес в огромном префиксе бессмысленно, если машина сама рассказывает о себе.

Второй шаг атаки — эксплуатация. Здесь важно, что SMBv1 — не просто «старый протокол»: именно в нём жила уязвимость MS17-010. Выключение SMBv1 закрывает этот класс атак целиком, даже если порт остаётся открытым для SMB2/SMB3.

Наконец, правило работает только когда оно есть на двух уровнях. Правило на границе сегмента не мешает перебору внутри самого сегмента: две машины в одном VLAN переговариваются напрямую, и пакет не доходит до маршрутизатора. Именно поэтому на рабочих станциях включают и локальный фаервол — входящий 445 только от серверов, — а сегментация добавляется сверху. Один уровень без другого оставляет щель: без правил на хосте перебор идёт внутри сегмента, без сегментации — переходит между ними.

Замеры и цифры

Величина Значение Откуда
Адресов в 10.0.0.0/8 16 777 214 расчёт по префиксу
Адресов в 192.168.1.0/24 254 расчёт по префиксу
Перебор /24 при 1 000 пакетов/с 0,25 с расчёт
Перебор /8 при 1 000 пакетов/с около 4,7 ч расчёт
Перебор /8 при 100 пакетах/с около 46,6 ч расчёт
Размер площадки IPv6 /48 2^48 = 281 474 976 710 656 расчёт
Портов, которые нужно закрыть 4 (137, 138, 139, 445) список протоколов
Плоская сеть и SMB: размеры адресных пространств, время перебора и число портов, которые закрывают

Оговорка о границах: все числа в таблице — расчёт по формуле, а не замер на конкретном оборудовании. Реальная скорость перебора зависит от сети, фильтров и того, отвечает ли хост на закрытый порт отказом или молчит; при молчании таймауты удлиняют каждый шаг, но не меняют порядок величины.

Почему это круто

  • Блокировка порта работает до эксплуатации. Закрытый 445 не отвечает на перебор, и уязвимость в SMB остаётся недостижимой — это защита, не зависящая от наличия патча.
  • Арифметика вместо страха. Вместо «вирусу понадобится год» появляется число: 4,7 часа на /8 при тысяче пакетов в секунду.
  • Отказ от SMBv1 закрывает класс атак. Именно в первой версии протокола жила MS17-010; её отключение обесценивает целое семейство эксплойтов.
  • Отказ от LLMNR и NBNS убирает второй канал. Даже при закрытом 445 машины перестают рассказывать о себе по именам.
  • Сегментация ограничивает ущерб. Даже если один сегмент заражён, остальные не видят его по SMB.
  • Цена известна заранее. Плата за блокировку — имена, принтеры и исключения для домена — перечислена, а не выясняется в день внедрения.
  • Проверяемость. Всё состояние проверяется тремя командами: конфигурация SMB, доступность порта, ответ на имя.
  • Работает без дополнительного ПО. Это настройки Windows и правил сети, а не покупка ещё одного агента.

Установка

Всё, что нужно, есть в Windows и в правилах сети; устанавливать нечего, поэтому «установка» здесь — это приведение хоста в состояние, в котором SMB используется только там, где нужен.

Требование Значение
ОС на хостах Windows 10/11, Windows Server 2016 и новее
Права локальный администратор, для правил на границе — доступ к коммутатору или шлюзу
Что закрываем 445, 139 TCP; 137, 138 UDP — на границе и на хостах
Что оставляем 445 для контроллеров домена и файловых серверов
Что выключаем SMBv1 на всех машинах, LLMNR и NBNS — по политике
# SMBv1 выключается на каждой машине и проверяется отдельно
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force
Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol

# Проверка, что клиентская часть тоже не пользуется первой версией
Get-SmbClientConfiguration | Select-Object EnableSMB1Protocol

На границе сегмента правило формулируется не «запретить SMB», а «разрешить SMB только тем, кому он нужен»: контроллерам домена, файловым серверам и серверам резервного копирования. Всё остальное — запрет.

разрешить tcp/445, tcp/139 к контроллерам домена и файловым серверам
разрешить tcp/445, tcp/139 между серверами одного сегмента
запретить tcp/445, tcp/139, udp/137, udp/138 всем остальным

Настройка

Настройка сводится к двум уровням: сеть (кто с кем говорит) и хост (что машина предлагает и о чём рассказывает).

flowchart TD
  FW["правило на границе сегмента"] --> D1{"кому нужен 445?"}
  D1 -- "файлы и домен" --> ALLOW["разрешить только серверам и контроллерам домена"]
  D1 -- "остальным" --> DENY["запретить 445, 139, 137-138"]
  HOST["на каждой машине"] --> SMB1["выключить SMBv1"]
  HOST --> LLMNR["выключить LLMNR и NBNS"]
  HOST --> FW2["локальный фаервол: входящий 445 только от серверов"]
  ALLOW --> COST["цена: без имён NetBIOS, принтеры по IP, AD требует исключений"]
  DENY --> COST
Что настраивается Где Значение по умолчанию К чему менять
SMBv1 Set-SmbServerConfiguration включён на старых сборках выключить
LLMNR групповая политика включён выключить
NBNS (NetBIOS over TCP/IP) свойства адаптера или DHCP-опция обычно включён выключить
Входящий 445 брандмауэр Windows открыт в частном профиле только от серверов
Имена машин DNS через широковещание локальный DNS с записями
Принтеры порт TCP/IP через имена NetBIOS по IP или через сервер печати

Отдельно стоит разобраться с порядком разрешения имён, потому что от него зависит, что вообще работает после отказа от NetBIOS. Файл C:\Windows\System32\drivers\etc\hosts проверяется раньше обращения к DNS-серверу, но это лишь один шаг общей цепочки: до него могут сработать кэш и локальное имя, а после — DNS, LLMNR и NBNS, если они включены. Точный порядок зависит от настроек узла, поэтому проверять нужно на конкретной машине, а не по памяти.

Внедрять это стоит по шагам и с проверкой после каждого, иначе причина сбоя теряется в общем списке изменений. Разумный порядок такой: сначала SMBv1 на одной тестовой машине и проверка печати, сканирования и доступа к старым хранилищам; затем порты на хостах внутри одного сегмента; и только потом правила на границе. После каждого шага — три команды проверки из начала статьи плюс одна попытка подключиться к 445 соседней машины. Откат тоже по шагам: правило возвращается, SMBv1 включается точечно, и причина разбирается на месте.

Подводные камни

  • Блокировка 445 ломает домен, если нет исключений. Аутентификация, политики и общие папки ходят по SMB к контроллерам домена: правило «запретить всем» отключает вход в домен и применение групповых политик.
  • Закрыть 139 и оставить 445 — не закрыть ничего. Это два пути к одному сервису; современный SMB работает через 445 напрямую.
  • Разброс адресов не защищает. Перебор /8 занимает часы, а не год; кроме того, машины сами сообщают о себе по именам.
  • Отказ от имён меняет привычки. После выключения NetBIOS пропадает «Сетевое окружение» и часть сетевых принтеров: печать настраивается по IP или через сервер печати, и это надо объяснить пользователям заранее.
  • SMBv1 иногда нужен старому оборудованию. Сетевые хранилища и МФУ десятилетней давности могут требовать первую версию; тогда его включают точечно и изолируют сегментом, а не на всей сети.
  • Отключение SMBv1 может проявиться позже. Службы, которые им пользуются, падают не сразу, а при первом обращении — проверяйте не только вход в систему, но и печать, сканирование и доступ к старым хранилищам.

Чек-лист внедрения

  1. Составить список хостов, которым действительно нужен 445: контроллеры домена, файловые серверы, серверы резервного копирования.
  2. Выключить SMBv1 на всех машинах и проверить состояние обоих компонентов — серверного и клиентского.
  3. Выключить LLMNR и NetBIOS over TCP/IP по политике, оставив DNS как основной механизм.
  4. Настроить правила на границе сегмента: разрешить SMB только из списка, остальным — запрет.
  5. Включить входящий 445 на рабочих станциях только от серверов и проверить это с чужой машины.
  6. Отдельно проверить печать, сканирование и доступ к старым хранилищам — там чаще всего всплывают зависимости от SMBv1.
  7. Зафиксировать результат: с какой машины какой порт доступен, и как это проверяется повторно.

Критерий «работает»: домен входит и применяет политики, файловые ресурсы доступны там, где должны, а с рабочей станции подключение к 445 соседней рабочей станции не устанавливается.

FAQ

Защищает ли разбрасывание адресов по /8 от червя?

Практически нет. При тысяче пакетов в секунду весь диапазон перебирается примерно за пять часов, а при ста пакетах — за двое суток; параллельно заражённые машины сокращают это время ещё сильнее.

Какие порты закрывать в первую очередь?

445 TCP и 139 TCP — это транспорт SMB. Дополнительно 137 и 138 UDP, если NetBIOS в сети не нужен: они обслуживают широковещательную разведку по именам.

Почему после блокировки 445 перестал работать вход в домен?

Потому что контроллеры домена используют SMB для распространения политик и части аутентификационных сценариев. Блокировка должна содержать исключения для контроллеров домена и файловых серверов — иначе домен ломается вместе с червём.

Достаточно ли выключить SMBv1?

Это закрывает класс атак на MS17-010, но не отменяет блокировку портов и сегментацию. SMBv2 и SMBv3 тоже имеют свои уязвимости, а перебор портов работает независимо от версии протокола.

Что делать со старым сетевым хранилищем, которому нужен SMBv1?

Изолировать: отдельный сегмент, доступ только нужным машинам, SMBv1 включён только на этом устройстве и только для этих адресов. Включать первую версию на всей сети ради одного устройства — плохой обмен.

IPv6 спасает от перебора?

Нет. Адресное пространство больше, но в IPv6 цели ищут не перебором адресов, а через широковещательные механизмы и имена. Если машина отвечает на запросы о себе, размер префикса ничего не меняет.

Чем ещё вреден разброс адресов, кроме бесполезности?

Он ломает эксплуатацию: по адресу нельзя понять, где машина и к какому сегменту она относится, подсети перестают что-либо значить, а правила и резервное копирование приходится писать поштучно. Порядок в адресации полезнее для защиты, чем её случайность.

Итог

Заметка 2008 года наполовину права: блокировка SMB действительно базовая гигиена, и она работает до сих пор. Неверна вторая половина — про разброс адресов: арифметика показывает часы вместо года, а современные сети ищут цели по именам, а не перебором. Поэтому порядок действий обратный тому, что предлагалось: не прятать адреса, а закрывать порты, выключать первую версию протокола, убирать широковещательное разрешение имён и разделять сеть на сегменты — с обязательными исключениями для домена.

Цитата: От червя защищает не размер адресного пространства, а закрытый порт и отсутствие ответа на вопрос «кто здесь есть».

Связанные материалы

LLM Summary

  • Тема: плоская локальная сеть и блокировка SMB как мера против сетевых червей; статья переписана из заметки 2008 года.
  • Что подтвердилось: блокировка 137–139 и 445 остаётся базовой мерой, а SMBv1 — источник класса атак (MS17-010, EternalBlue).
  • Что опровергнуто: разброс адресов по 10.0.0.0/8 не защищает: при 1 000 пакетов/с перебор занимает около 4,7 часа, при 100 пакетах/с — около 46,6 часа, а не год.
  • Порты: 445 TCP (SMB напрямую), 139 TCP (SMB через NetBIOS), 137 и 138 UDP (разрешение имён и датаграммы), плюс LLMNR 5355 и mDNS 5353 как отдельные каналы разведки.
  • Ключевые команды: Get-SmbServerConfiguration, Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force, Test-NetConnection -Port 445, Resolve-DnsName -LlmnrNetbiosOnly.
  • Цена: без исключений для контроллеров домена блокировка 445 отключает аутентификацию и политики; отказ от NetBIOS ломает «Сетевое окружение» и сетевые принтеры.
  • Замеры: таблица размеров префиксов и времени перебора — расчёт, а не измерение; реальная скорость зависит от фильтров и таймаутов.
  • Ограничения: в IPv6 цели ищутся не перебором адресов, поэтому размер префикса ничего не даёт; старые устройства иногда требуют SMBv1 и должны изолироваться.
  • Ссылки: https://learn.microsoft.com/en-us/security-updates/securitybulletins/2017/ms17-010, https://learn.microsoft.com/en-us/windows-server/storage/file-server/troubleshoot/detect-enable-and-disable-smbv1-smbv2-and-smbv3

Промт для агента (установка и настройка)

Готовый промт для AI-агента: скопируйте блок целиком кнопкой и отдайте своему ассистенту. Готового AGENTS.md у этой темы нет — источником шагов служат справочные страницы Microsoft из раздела «Связанные материалы», а числа взяты из расчётной таблицы статьи.

Задача: закрыть SMB в плоской сети так, чтобы перестал работать перебор по 445, но домен и файловые ресурсы остались рабочими.

Материалы:
- отключение SMBv1: https://learn.microsoft.com/en-us/windows-server/storage/file-server/troubleshoot/detect-enable-and-disable-smbv1-smbv2-and-smbv3
- описание протокола SMB: https://learn.microsoft.com/en-us/windows/win32/fileio/microsoft-smb-protocol-and-cifs-protocol-overview
- уязвимость MS17-010: https://learn.microsoft.com/en-us/security-updates/securitybulletins/2017/ms17-010

Шаг 1. Инвентаризация: составить список хостов, которым действительно нужен 445 — контроллеры домена, файловые серверы, серверы резервного копирования.

Шаг 2. Состояние на каждой машине:
Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol, EnableSMB2Protocol
Get-SmbClientConfiguration | Select-Object EnableSMB1Protocol
Test-NetConnection -ComputerName <адрес> -Port 445

Шаг 3. Выключить SMBv1 и проверить оба компонента:
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force
Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol

Шаг 4. Убрать широковещательную разведку: LLMNR — групповой политикой, NetBIOS over TCP/IP — в свойствах адаптера или DHCP-опцией. Оставить DNS с записями.

Шаг 5. Правила на границе сегмента: разрешить tcp/445 и tcp/139 только к контроллерам домена и файловым серверам, остальным — запрет; udp/137 и udp/138 запретить, если NetBIOS не используется.

Шаг 6. Проверить, что сломалось и не должно: вход в домен, применение групповых политик, доступ к общим папкам, печать по имени, сканирование на МФУ. Печать перевести на порт TCP/IP.

Что считать успехом: домен входит и применяет политики; файловые ресурсы доступны там, где должны; с рабочей станции подключение к 445 соседней рабочей станции не устанавливается; SMBv1 выключен и на серверной, и на клиентской стороне.

Ограничения:
- не блокировать 445 к контроллерам домена без отдельного исключения: это отключит аутентификацию и политики;
- не выключать SMBv1 одновременно с массовым изменением сети: причина сбоя должна быть одна;
- не включать SMBv1 «на всей сети» ради одного старого устройства: изолируйте устройство в отдельный сегмент;
- если команда падает — остановиться и показать команду, вывод и код возврата.