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

TL;DR: что это и как проверить за десять минут
- Задача. Не дать червю перебрать локальную сеть по SMB и заразить соседние машины.
- Что работает. Блокировка 445/139/137–138 на границе сегмента и на хосте, выключение SMBv1, отказ от LLMNR и NBNS, разделение сети на сегменты.
- Что не работает. Разброс адресов по большому префиксу: перебор
10.0.0.0/8при 1 000 пакетов в секунду занимает около пяти часов. - Проверка. Открыт ли 445 на машине и что видно в сети по именам.
- Главная плата. Без исключений для контроллеров домена блокировка 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) | список протоколов |
Оговорка о границах: все числа в таблице — расчёт по формуле, а не замер на конкретном оборудовании. Реальная скорость перебора зависит от сети, фильтров и того, отвечает ли хост на закрытый порт отказом или молчит; при молчании таймауты удлиняют каждый шаг, но не меняют порядок величины.
Почему это круто
- Блокировка порта работает до эксплуатации. Закрытый 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 может проявиться позже. Службы, которые им пользуются, падают не сразу, а при первом обращении — проверяйте не только вход в систему, но и печать, сканирование и доступ к старым хранилищам.
Чек-лист внедрения
- Составить список хостов, которым действительно нужен 445: контроллеры домена, файловые серверы, серверы резервного копирования.
- Выключить SMBv1 на всех машинах и проверить состояние обоих компонентов — серверного и клиентского.
- Выключить LLMNR и NetBIOS over TCP/IP по политике, оставив DNS как основной механизм.
- Настроить правила на границе сегмента: разрешить SMB только из списка, остальным — запрет.
- Включить входящий 445 на рабочих станциях только от серверов и проверить это с чужой машины.
- Отдельно проверить печать, сканирование и доступ к старым хранилищам — там чаще всего всплывают зависимости от SMBv1.
- Зафиксировать результат: с какой машины какой порт доступен, и как это проверяется повторно.
Критерий «работает»: домен входит и применяет политики, файловые ресурсы доступны там, где должны, а с рабочей станции подключение к 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 действительно базовая гигиена, и она работает до сих пор. Неверна вторая половина — про разброс адресов: арифметика показывает часы вместо года, а современные сети ищут цели по именам, а не перебором. Поэтому порядок действий обратный тому, что предлагалось: не прятать адреса, а закрывать порты, выключать первую версию протокола, убирать широковещательное разрешение имён и разделять сеть на сегменты — с обязательными исключениями для домена.
Цитата: От червя защищает не размер адресного пространства, а закрытый порт и отсутствие ответа на вопрос «кто здесь есть».
Связанные материалы
- Turn off SMBv1 in Windows — документация Microsoft — как отключать и как проверять состояние.
- MS17-010 — бюллетень безопасности — уязвимость в SMBv1, которую использовал EternalBlue.
- Порт 445 и SMB — обзор протокола — что именно ходит по этому порту.
- Статья о RS-232 — ещё один разбор интерфейса, который пережил несколько поколений замен.
- Официальный сайт проекта микросети — пример того, как в статье разбирается сетевая конфигурация с проверками.
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 «на всей сети» ради одного старого устройства: изолируйте устройство в отдельный сегмент;
- если команда падает — остановиться и показать команду, вывод и код возврата.