На аудите нефтехимического предприятия в прошлом году я наблюдал, как пентестер из параллельной команды запустил
nmap -sV на подсеть с контроллерами Siemens S7-300. Три ПЛК перешли в режим STOP за 40 секунд. Оператор на щите увидел красные индикаторы, технологический процесс встал. Простой - четыре часа и нервный разговор на уровне директора по производству. С тех пор каждый аудит OT-сети я начинаю с объяснения команде: разведка и инвентаризация OT-сетей - это не тот же recon, что в корпоративном IT. Ошибка в одном флаге сканера здесь может остановить конвейер или устроить аварию на опасном производстве.Зачем атакующему карта OT-сети и чем разведка отличается от IT-среды
Бизнес-логика атаки на OT выглядит так: злоумышленник получает initial access через IT-сегмент (фишинг, VPN-уязвимость, подрядчик с удалённым доступом), продвигается lateral movement до инженерной рабочей станции или jump-host в DMZ между IT и OT, и оттуда выходит в промышленную сеть. Дальше - три сценария монетизации: шифрование HMI/SCADA-серверов и вымогательство (ransomware, Colonial Pipeline), саботаж технологического процесса через изменение уставок ПЛК (TRITON, Industroyer - целенаправленное физическое воздействие), или тихая кража технологических параметров и рецептур (промышленный шпионаж). Во всех трёх случаях первый шаг внутри OT-сегмента - разведка: что за устройства в сети, какие протоколы, какие версии прошивок, какая топология взаимодействия. Подробнее - в нашем руководстве по кибербезопасность критической инфраструктуры.Разница между IT и OT на уровне сетевого стека - фундаментальная, и она определяет весь подход к инвентаризации промышленных сетей.
Стек протоколов. Modbus/TCP (порт 502) не предусматривает аутентификации - любой пакет с валидным function code исполняется контроллером. FC 5 (Write Single Coil) или FC 6 (Write Single Register) в случайном пакете сканера может изменить состояние выхода ПЛК. DNP3 (порт 20000) работает на объектной модели с unsolicited responses - агрессивный скан может переполнить буфер RTU. S7comm (порт 102) на старых Siemens S7-300/400 не выдерживает множественных одновременных TCP-соединений и уходит в аварийный STOP. Profinet (на базе Ethernet, без фиксированного TCP-порта) использует жёсткие циклы обновления с гарантированным временем доставки - посторонний трафик в сегменте Profinet IRT приводит к потере синхронизации.
Реальное время - не абстракция. ПЛК выполняет цикл опроса датчиков и управления актуаторами за 10–50 мс. Если сканер нагружает процессор контроллера или создаёт задержку на сетевом стеке более 100 мс, watchdog timer срабатывает и переводит контроллер в безопасное состояние. Для конвейера это остановка. Для химического реактора - потенциально аварийная ситуация.
И вот что многие забывают: значительная часть OT-инфраструктуры работает на оборудовании 15–20 летней давности. Windows XP Embedded на HMI, ПЛК с прошивкой, не обновлявшейся с момента ввода в эксплуатацию. Эти устройства проектировались для изолированных сетей без враждебного трафика - никто не закладывал устойчивость к сетевым сканерам.
Вывод простой: стандартные инструменты IT-пентеста - Nessus, OpenVAS, агрессивный Nmap - в OT-сегменте работают как деструктивное оружие, а не как диагностика. Безопасное сканирование производственных сетей требует отдельной методологии.
Shodan для промышленных систем: внешняя разведка
[Применимо: внешний пентест, black box, этап recon - до получения доступа к внутренней сети]Место в kill chain: самый первый шаг. Цель - определить, какие промышленные сервисы заказчика видны из интернета, собрать fingerprint для планирования вектора initial access.
Требования к окружению:
- Shodan CLI (
pip install shodan) или веб-интерфейс shodan.io - API-ключ (бесплатный - 100 запросов/месяц, membership - без ограничений по поиску)
- Censys CLI (
pip install censys) + API credentials (censys.io) - Список IP-диапазонов и AS-номеров заказчика для привязки результатов
port:502- Modbus/TCP. Shodan парсит Device Identification (FC 43/14) и показывает vendor, product code, firmware versionport:102 product:"Siemens"- S7comm. Возвращает модель ПЛК, версию прошивки, Module Name (часто содержит название технологического узла), серийный номерport:47808- BACnet (автоматизация зданий). Shodan извлекает Object Name, Vendor, Model, Application Software Versionport:44818- EtherNet/IP (Rockwell Automation / Allen-Bradley). Показывает Product Name, Serial Number, Device Typeport:20000- DNP3. Менее распространён в индексе, но встречается на объектах электроэнергетикиport:4840- OPC UA. Censys покрывает этот протокол лучше Shodan
port:502 org:"Company Name" или port:102 net:x.x.x.0/24. Обязательная верификация: результаты сверять с выделенными IP-диапазонами в scope пентеста. Без письменного разрешения сканирование чужих ресурсов недопустимо даже через Shodan - это пассивное получение уже проиндексированных данных, но scope есть scope.Что ищем в результатах:
- Модель и версия прошивки - для поиска CVE в NVD по конкретной модели и firmware version
- Module Name / System Name в S7comm - часто раскрывает технологический процесс (PUMP_STATION_3, BOILER_CTRL) и даёт понимание, какой узел мы видим
- Открытые веб-интерфейсы HMI (порты 80/443) в том же диапазоне - потенциальный вектор initial access через веб-уязвимости или дефолтные пароли
- VPN-шлюзы - признак IT/OT-моста, возможная точка lateral movement
- Показывает только устройства, доступные из интернета. Правильно сегментированная OT-сеть не видна извне - и это нормально
- Не заменяет внутреннюю инвентаризацию - большинство ПЛК сидят за NAT или в изолированном VLAN
- Исторические данные Shodan могут устареть (индексация происходит не в реальном времени)
- Устройства на serial-интерфейсах (RS-485, RS-232) невидимы - они не подключены к IP-сети напрямую
- Censys часто находит то, что пропустил Shodan, и наоборот - используйте оба
Пассивное сканирование ICS SCADA без остановки производства
[Применимо: внутренний пентест/аудит, grey/white box, этап asset discovery после получения доступа в OT-сегмент]Место в kill chain: выявление активов в OT-инфраструктуре после получения доступа к промышленному сегменту. Пассивный захват трафика - единственный гарантированно безопасный метод разведки, не генерирующий ни одного пакета в сети. По сути, это первый шаг к построению защищённой OT-архитектуры - и тут с этим сложно спорить.
Требования к окружению:
- Физический доступ к SPAN-порту промышленного коммутатора или сетевому TAP-устройству
- Ноутбук с Linux (Kali/Ubuntu), минимум 8 ГБ RAM для длительного захвата
- Wireshark 4.x+ (поддержка промышленных диссекторов: Modbus, S7comm, DNP3, Profinet, EtherNet/IP)
- GRASSMARLIN - инструмент пассивного маппинга OT-сетей от NSA/CISA (ранее распространялся через GitHub, текущий статус доступности стоит проверять)
- Дисковое пространство: 1 час захвата на 100 Мбит порту ≈ 30–40 ГБ pcap без фильтрации
SPAN и TAP: мониторинг трафика промышленных сетей
SPAN-порт (зеркалирование на управляемом коммутаторе). Не требует дополнительного оборудования, но коммутатор может терять пакеты под нагрузкой, SPAN нагружает CPU коммутатора, а на некоторых промышленных коммутаторах (Hirschmann, Moxa) настройка SPAN требует перезагрузки - а это остановка сети.Сетевой TAP (пассивное устройство, врезаемое в линк). Гарантированно не влияет на трафик, не теряет пакеты, не нагружает сетевое оборудование - это физика, а не программа. Минус - требует физического доступа и кратковременного разрыва линка при установке. Разрыв согласовывается на плановое окно обслуживания (techstop). Copper TAP стоит от $300, fiber TAP - от $500.
Для аудита сети АСУ ТП я рекомендую TAP - он надёжнее и не вносит переменных. Для быстрой разведки, когда TAP нет под рукой, SPAN на уровне доступа подойдёт - но не на core-коммутаторе OT-сети, где потеря пакетов между ПЛК и HMI критична.
Подключив захват к SPAN/TAP, за 4–8 часов наблюдения собираем без единого отправленного пакета:
- IP и MAC-адреса всех активных устройств - основа инвентаризации промышленных сетей
- OUI (Organizationally Unique Identifier) по первым трём октетам MAC - определяет производителя:
00:0E:8C= Siemens,00:00:BC= Rockwell Automation,00:80:F4= Schneider Electric - Используемые протоколы - Modbus/TCP, S7comm, Profinet, EtherNet/IP, OPC UA, DNP3, BACnet
- Function codes Modbus - FC 3 (Read Holding Registers) и FC 4 (Read Input Registers) = штатный опрос; FC 5, 6, 15, 16 = запись. Если видите запись с неожиданного IP - это аномалия
- Топологию взаимодействия - какие HMI опрашивают какие ПЛК, частота опроса, объём данных
- Аномалии - нетипичный трафик (HTTP/SSH к ПЛК, ARP-штормы, broadcast из IT-сегмента)
Разведка промышленных протоколов в Wireshark и GRASSMARLIN
Основные display-фильтры Wireshark для анализа промышленного трафика:modbus- весь Modbus/TCP. Для выделения операций записи:modbus.func_code == 5 || modbus.func_code == 6 || modbus.func_code == 15 || modbus.func_code == 16s7comm- Siemens S7. Фильтрs7comm.param.func == 0x04выделяет Read Var запросы,s7comm.param.func == 0x05- Write Vardnp3- DNP3 (энергетика, водоснабжение)enip- EtherNet/IP (Rockwell/Allen-Bradley). CIP-сервисы внутри:cippn_io- Profinet IO. Фильтрpn_dcpвыделяет Profinet DCP (Discovery and Configuration Protocol) - содержит имя устройства и IP
GRASSMARLIN принимает на вход pcap-файлы и автоматически строит карту OT-сети: выделяет устройства по MAC/IP, идентифицирует промышленные протоколы, рисует граф связей (logical network map). На выходе - визуальная топология OT-сегмента, которую можно показать заказчику и сверить с проектной документацией. На практике расхождения между «как нарисовано» и «как реально работает» находятся почти всегда.
Ограничения пассивного подхода (и почему одного пассива недостаточно):
- Видит только устройства, генерирующие трафик в период наблюдения. Standby-контроллер, резервный сервер SCADA, устройство, включаемое раз в месяц - не попадут в инвентаризацию
- Не извлекает детальную информацию: версию прошивки, серийный номер, конфигурацию аппаратных модулей. Для этого нужен активный запрос к устройству
- Устройства на serial-интерфейсах (RS-485 Modbus RTU) за serial-to-Ethernet конвертером видны как IP конвертера, а не конечного устройства
- Зашифрованный трафик (OPC UA с TLS, Profinet Security class 3) не поддаётся анализу содержимого
Безопасное сканирование OT-сети Nmap: флаги и NSE-скрипты
📚 Часть контента скрыта. Этот материал доступен участникам сообщества с рангом One Level или выше
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
Получить доступ просто — достаточно зарегистрироваться и проявить активность на форуме
Из этого вывода пентестер извлекает: точную модель (CPU 1214C), каталожный номер (6ES7 214-1AG40-0XB0), версию прошивки (4.4.0), назначение в процессе (PUMP_STATION_3, WaterTreatment). Версия прошивки - ключ к поиску CVE в NVD: запрос
cpe:2.3:h:siemens:simatic_s7-1200 с фильтром по version.PLCScan как альтернатива. Когда даже Nmap с безопасными флагами вызывает опасения, есть PLCScan - утилита, заточенная именно под идентификацию S7 и Modbus-устройств. Отправляет минимальное количество пакетов, строго по спецификации протокола. Пример:
python plcscan.py 10.10.1.10 для S7 идентификации (синтаксис может отличаться в зависимости от версии/форка).Что нельзя делать при сканировании производственных сетей
Категорически запрещено в OT-сегменте:| Команда/флаг | Почему опасно | Что происходит |
|---|---|---|
nmap -sV на порту 102 (S7) | Отправляет серию нестандартных probe-пакетов | Siemens S7-300/400 - зависание или STOP |
nmap -O | TCP-пробы с нестандартными флагами | VxWorks, Windows CE - непредсказуемое поведение |
nmap -A | Комбинация -sV + -O + scripts + traceroute | Максимальный риск для любого ПЛК |
-T4 / -T5 | Параллельный flood трафика | Потеря realtime-пакетов между ПЛК и HMI |
| Любые NSE с write-операциями | Могут изменить состояние контроллера | FC 5/6/15/16 в Modbus = изменение выходов |
Перед использованием любого нового NSE-скрипта для промышленных протоколов - читайте исходный код. Не все скрипты из категории
industrial являются read-only. Если в коде видите отправку function code 5, 6, 15, 16 (Modbus) или S7comm Write Var - это write-операция, недопустимая без полного понимания последствий.Вендорная специфика - и тут без неё никуда:
- Siemens S7-300/400 - наиболее чувствительны к нестандартному трафику. На S7-300/400 даже
nmap -sTна порт 102 может вызвать проблемы - используйте PLCScan вместо Nmap для этих моделей. S7-1200/1500 значительно устойчивее - Allen-Bradley MicroLogix 1100 - зависает при агрессивном сканировании EtherNet/IP (порт 44818). CompactLogix/ControlLogix устойчивее, но тестировать на проде без согласования - плохая идея
- Schneider Electric Modicon M340 - Modbus-стек в ранних прошивках не выдерживает >5 одновременных TCP-соединений на порт 502
Чек-лист: пошаговая инвентаризация промышленных сетей при аудите
Decision tree для выбора метода:| Ситуация | Метод | Инструменты |
|---|---|---|
| Внешний пентест, black box | Пассивная OSINT-разведка | Shodan, Censys |
| Внутренний аудит, процесс нельзя трогать | Пассивный захват трафика | TAP/SPAN + Wireshark + GRASSMARLIN |
| Внутренний аудит, есть окно обслуживания | Пассив + ограниченный актив | TAP + Nmap safe-флаги на согласованных IP |
| Grey box, инженеры АСУ ТП в команде | Пассив + актив + конфигурация | TAP + Nmap + backup-файлы проектов TIA Portal/RSLogix |
Последовательность действий:
- Получить письменное согласование с владельцем технологического процесса - конкретные IP, порты, временное окно, ответственный оператор на щите, процедура отката при инциденте
- Внешняя разведка - проверить IP-диапазоны заказчика через Shodan и Censys. Задокументировать все промышленные сервисы, доступные из интернета
- Определить точку IT/OT-перехода - найти инженерные рабочие станции, jump-host'ы, dual-homed машины с интерфейсами в обоих сегментах. Это основной вектор lateral movement в OT
- Установить TAP/SPAN - согласовать точку подключения. TAP - в плановое окно обслуживания. SPAN - если коммутатор поддерживает горячую настройку без перезагрузки
- Пассивный захват: минимум 4 часа (покрывает типовой цикл). Непрерывное производство - 24 часа для полной картины. Запустить
tshark -i eth0 -w capture.pcapи не трогать - Анализ пассивных данных - построить карту активов в GRASSMARLIN или вручную из pcap. Передать инженерам для верификации: «Это ваш ПЛК на 10.10.1.15? А это что за устройство на .42?»
- Активный recon при согласовании - только read-only NSE-скрипты (
s7-info,modbus-discover,bacnet-info),-T2,--scan-delay 500ms,-sT,-Pn. По одному IP за раз. Оператор мониторит состояние ПЛК - Поиск уязвимостей - версии прошивок из s7-info и modbus-discover проверить в NVD по модели и firmware version
- Финальный реестр - IP, MAC, vendor, model, firmware, протокол, роль в процессе, известные CVE. Формат - таблица, пригодная для передачи заказчику
За последние два года я провёл больше десятка аудитов OT-сегментов, и основная проблема - не инструменты. Shodan работает, Nmap с правильными флагами работает, GRASSMARLIN строит карту. Проблема в том, что многие пентестеры приходят в промышленную сеть с IT-мышлением: «просканирую /24, соберу версии, пойдём дальше». Результат - остановленный процесс и заказчик, который после этого никогда больше не пустит безопасников в OT.
Я убеждён, что аудит OT должен начинаться с двух-трёх дней чистого пассива - без единого отправленного пакета. За это время вы узнаете о сети больше, чем за час агрессивного сканирования. Увидите все ПЛК, все HMI, все связи и аномалии. И только после верификации карты с инженерами, с оператором на щите и с чётким пониманием, что FC 3 - это чтение, а FC 5 - это запись, можно переходить к активному recon.
Вторая проблема - отсутствие базовых знаний о промышленных протоколах. Wireshark с фильтром
modbus покажет function codes, но если пентестер не понимает разницу между holding register и coil, данные остаются мёртвым грузом. У каждого вендора свой management-протокол: S7comm у Siemens, EtherNet/IP CIP у Rockwell, UMAS у Schneider. И для fingerprinting конкретного контроллера нужно знать, какой именно протокол использовать и какие read-запросы безопасны.Вендоры OT-безопасности (Claroty, Nozomi, Dragos, TXOne) уже поддерживают сотни промышленных протоколов в режиме пассивного discovery - по их заявлениям, покрытие широкое и активное сканирование не требуется. На крупных объектах ручной захват уходит в прошлое. Но на средних предприятиях, где бюджет на OT-security близок к нулю, ноутбук с Wireshark и TAP за $300 останется единственным инструментом инвентаризации. Пентестер, который умеет работать с промышленными протоколами на уровне function codes и знает, какой Nmap-флаг положит S7-300, а какой безопасен для S7-1500, стоит на рынке значительно дороже коллеги, который владеет только Nessus и Burp.