Рабочий стол аналитика утром: на светлом столе ноутбук с картой сети промышленных контроллеров, сетевой TAP-разветвитель и бумажный чек-лист с рукописными пометками ручкой.


На аудите нефтехимического предприятия в прошлом году я наблюдал, как пентестер из параллельной команды запустил 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-номеров заказчика для привязки результатов
Shodan индексирует баннеры промышленных протоколов. Ключевые поисковые запросы для разведки промышленных протоколов:
  • port:502 - Modbus/TCP. Shodan парсит Device Identification (FC 43/14) и показывает vendor, product code, firmware version
  • port:102 product:"Siemens" - S7comm. Возвращает модель ПЛК, версию прошивки, Module Name (часто содержит название технологического узла), серийный номер
  • port:47808 - BACnet (автоматизация зданий). Shodan извлекает Object Name, Vendor, Model, Application Software Version
  • port:44818 - EtherNet/IP (Rockwell Automation / Allen-Bradley). Показывает Product Name, Serial Number, Device Type
  • port: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 == 16
  • s7comm - Siemens S7. Фильтр s7comm.param.func == 0x04 выделяет Read Var запросы, s7comm.param.func == 0x05 - Write Var
  • dnp3 - DNP3 (энергетика, водоснабжение)
  • enip - EtherNet/IP (Rockwell/Allen-Bradley). CIP-сервисы внутри: cip
  • pn_io - Profinet IO. Фильтр pn_dcp выделяет Profinet DCP (Discovery and Configuration Protocol) - содержит имя устройства и IP
Каждый из этих фильтров в применении к 4-часовому захвату даёт таблицу: source IP → destination IP → протокол → function code. Это и есть пассивная инвентаризация.

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 -OTCP-пробы с нестандартными флагами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

Последовательность действий:
  1. Получить письменное согласование с владельцем технологического процесса - конкретные IP, порты, временное окно, ответственный оператор на щите, процедура отката при инциденте
  2. Внешняя разведка - проверить IP-диапазоны заказчика через Shodan и Censys. Задокументировать все промышленные сервисы, доступные из интернета
  3. Определить точку IT/OT-перехода - найти инженерные рабочие станции, jump-host'ы, dual-homed машины с интерфейсами в обоих сегментах. Это основной вектор lateral movement в OT
  4. Установить TAP/SPAN - согласовать точку подключения. TAP - в плановое окно обслуживания. SPAN - если коммутатор поддерживает горячую настройку без перезагрузки
  5. Пассивный захват: минимум 4 часа (покрывает типовой цикл). Непрерывное производство - 24 часа для полной картины. Запустить tshark -i eth0 -w capture.pcap и не трогать
  6. Анализ пассивных данных - построить карту активов в GRASSMARLIN или вручную из pcap. Передать инженерам для верификации: «Это ваш ПЛК на 10.10.1.15? А это что за устройство на .42?»
  7. Активный recon при согласовании - только read-only NSE-скрипты (s7-info, modbus-discover, bacnet-info), -T2, --scan-delay 500ms, -sT, -Pn. По одному IP за раз. Оператор мониторит состояние ПЛК
  8. Поиск уязвимостей - версии прошивок из s7-info и modbus-discover проверить в NVD по модели и firmware version
  9. Финальный реестр - IP, MAC, vendor, model, firmware, протокол, роль в процессе, известные CVE. Формат - таблица, пригодная для передачи заказчику
Этот подход соответствует ID.AM-01 по NIST CSF v2.0 («Inventories of hardware managed by the organization are maintained - constantly monitor networks to detect new hardware and automatically update inventories»). Пассивный discovery с последующим ограниченным активным опросом - стандартная методология, которую рекомендуют и CISA, и вендоры OT-безопасности.

За последние два года я провёл больше десятка аудитов 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.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы

🚀 Первый раз на Codeby?
Гайд для новичков: что делать в первые 15 минут, ключевые разделы, правила
Начать здесь →
🧭 Навигатор · ИБ 2026
Не знаешь, какой трек твой?
5 направлений ИБ, реальные зарплаты и точка входа для каждого — в одном треде.
JuniorSenior+
100K → 600K+ ₽ /мес
Открыть навигатор →
🔴 Свежие CVE, 0-day и инциденты
То, о чём ChatGPT ещё не знает — обсуждаем в реальном времени
Threat Intel →
💼 Вакансии и заказы в ИБ
Pentest, SOC, DevSecOps, bug bounty — работа и проекты от проверенных компаний
Карьера в ИБ →

HackerLab