Протоколы без защиты: АСУ ТП и IoT
Промышленные сети создавались для управления, а не для безопасности. Modbus появился в 1979 году как способ связать контроллер и панель оператора по последовательной линии; когда его перенесли на TCP, добавился заголовок, но не аутентификация. MQTT создавался для телеметрии через узкие каналы и тоже не предполагал враждебной среды.
Результат — сети, где команда «записать регистр» не требует пароля, где брокер принимает сообщения от любого клиента, а датчик нельзя отличить от поддельного. Воздушный зазор, которым такие сети часто оправдывают, ломается об инженерный ноутбук, USB-накопитель и подрядчика с удалённым доступом.
Тема 03 основной программы разбирала физический уровень, тема 04 — Ethernet, тема 20 — беспроводные технологии для IoT. Здесь эти сети рассматриваются как протоколы без защиты. Границы: криптография — тема 17 основной программы, веб-интерфейсы SCADA — только упоминанием.
Тень базового курса: функциональность как единственное требование
В основной программе протоколы разбирались по назначению: Modbus передаёт регистры, DNP3 — телеметрию, MQTT — сообщения. Ни один из них не предусматривает проверки того, кто отправил команду.
Это не ошибка проектирования, а контекст: сети были физически изолированы, оборудование — от проверенных поставщиков, а доступ — у инженеров в цеху. Когда тот же протокол оказался в общей сети предприятия, контекст исчез, а протокол остался.
Modbus TCP
Формат и функции
Modbus TCP состоит из заголовка MBAP (идентификатор транзакции, протокол, длина, адрес устройства) и PDU с кодом функции и данными 1. Основные функции: чтение регистров (0x03, 0x04), запись одного регистра (0x06), запись нескольких (0x10), чтение дискретных входов (0x02).
from pymodbus.client import ModbusTcpClient
c = ModbusTcpClient("192.0.2.50", port=502)
c.connect()
print(c.read_holding_registers(0, count=4, slave=1))
c.write_register(10, 1234, slave=1)
print(c.read_holding_registers(10, count=1, slave=1))
c.close()
Ни в одном запросе нет учётных данных. Сервер не проверяет, имеет ли клиент право писать; он проверяет только, что функция известна и адрес существует.
Запись и остановка
Запись в регистр управления может изменить уставку, включить насос или остановить линию. В учебной среде это безопасно, потому что ПЛК эмулирован; в реальной — это физическое действие.
# остановка: запись в регистр управления
c.write_register(0, 0, slave=1)
Именно поэтому в АСУ ТП защита строится не на протоколе, а на периметре: межсетевой экран, однонаправленный шлюз, зоны и кондуиты.
Другие промышленные протоколы
S7comm, DNP3, BACnet
S7comm — проприетарный протокол Siemens для S7-контроллеров; позволяет читать и писать память, а в некоторых конфигурациях — загружать блоки программы. DNP3 используется в энергетике: телеметрия, команды управления, события. BACnet — в автоматизации зданий: отопление, вентиляция, доступ.
nmap -p 102,502,20000,47808 --script modbus-discover 192.0.2.50
Порт 102 — S7comm, 502 — Modbus, 20000 — DNP3, 47808 — BACnet. Обнаружение этих портов в сети предприятия — признак того, что сегментация не работает.
MQTT и IoT
Брокер, топики, подписка
MQTT — публикация/подписка через брокер 4; для ограниченных устройств существует CoAP 5. Клиент публикует сообщение в топик, подписчики получают его. Аутентификация опциональна: брокер может разрешить анонимных клиентов, и тогда любой, кто знает адрес, читает и пишет.
mosquitto_sub -h 192.0.2.60 -t '#' -v
mosquitto_pub -h 192.0.2.60 -t 'plant/line1/setpoint' -m '0'
Первый подписывается на всё дерево топиков и видит телеметрию; второй публикует команду. Если брокер не требует пароля и не ограничивает ACL, это работает без всякой уязвимости.
Отсутствие шифрования по умолчанию
MQTT поверх TCP без TLS передаёт всё открытым текстом, включая учётные данные, если они есть. TLS добавляется конфигурацией, но по умолчанию его нет. То же с WebSocket-транспортом.
Радио IoT
Zigbee и LoRaWAN
Zigbee использует сетевой ключ 6, который при подключении нового устройства передаётся в открытом виде (в режиме стандартного сопряжения). Перехватив обмен, ключ можно восстановить. LoRaWAN использует AES-ключи, но присоединение устройства (join) и роуминг создают окна.
# перехват Zigbee требует SDR или специализированного сниффера
Джамминг и спуфинг датчиков — атаки на физическом уровне, которые не лечатся протоколом: если датчик не аутентифицирован, поддельные показания неотличимы от настоящих.
BACnet и умный дом
BACnet/IP работает поверх UDP 47808 и не аутентифицирует команды. В умном здании это означает, что климат, освещение и доступ можно переключать из сети. IoT-устройства вроде лампочек и камер часто имеют слабые пароли и открытые порты, и именно они становятся точкой входа в сегмент.
Air gap как миф
Инженерный ноутбук и USB
Физическая изоляция работает, пока никто не подключает к ней носитель. Инженерный ноутбук, который ходит между цехом и офисом, — мост; USB-накопитель — второй; обновление прошивки — третий.
# проверка, какие устройства видны из сегмента АСУ
nmap -sn 192.0.2.0/24
Подрядчик и удалённый доступ
Подрядчик часто получает удалённый доступ «на время работ» и оставляет его навсегда. Точка доступа в АСУ через VPN — типичная конфигурация, которая обходит все зоны и кондуиты.
Сегментация и обнаружение
Зоны и кондуиты
Практические рекомендации по защите АСУ собраны в NIST SP 800-82 3. IEC 62443 предлагает делить сеть на зоны по критичности и соединять их кондуитами с контролем трафика 2. Практически это означает: АСУ не видит офис, офис не видит АСУ, а между ними — шлюз с правилами по протоколам и адресам.
nft add table inet ics
nft add chain inet ics forward '{ type filter hook forward priority 0; policy drop; }'
nft add rule inet ics forward ip saddr 192.0.2.0/24 ip daddr 192.0.2.50 tcp dport 502 accept
Пассивный мониторинг
В АСУ опасно сканировать: лишний пакет может остановить старое оборудование. Поэтому мониторинг пассивный: зеркало порта, разбор Modbus-функций, базовые линии «кто с кем говорит».
tshark -i eth1 -f "tcp port 502" -T fields -e ip.src -e ip.dst -e modbus.func_code
Обнаружение
| Приём | Признак | Контрмера |
|---|---|---|
| Запись в ПЛК | функция 0x06/0x10 из неожиданного адреса | ACL, зоны, мониторинг |
| Сканирование АСУ | обращения к 102/502/20000/47808 | скрытие, фильтр, IDS |
| Анонимный MQTT | подписка на # | аутентификация, ACL |
| Поддельный датчик | аномальные значения | сверка, подпись |
| Zigbee-перехват | сопряжение в открытом виде | install code, Zigbee 3.0 |
| Мост через ноутбук | новые MAC в сегменте | 802.1X, контроль носителей |
Числа: цикл управления и цена ошибки
Modbus-запрос на запись одного регистра занимает 12 байт полезной нагрузки; при RTT 10 мс и скорости 10 Мбит/с цикл «команда — подтверждение» укладывается в десятки миллисекунд. Для ПЛК, который опрашивает датчики каждые 100 мс, это незаметно; для контура безопасности, где решение принимается за миллисекунды, — нет.
запрос: MBAP 7 + PDU 5 = 12 байт
ответ: MBAP 7 + PDU 5 = 12 байт
RTT 10 мс + передача < 1 мс
Именно поэтому команды записи в АСУ проверяются не только по адресу, но и по функции, времени и последовательности: одиночная запись в регистр уставки в 3 часа ночи — аномалия, даже если адрес разрешён.
Второе число — стоимость простоя. Остановка линии на час может стоить больше, чем весь ИТ-бюджет сегмента; поэтому в АСУ предпочитают пассивный мониторинг и ручное реагирование, а активные сканы и автоматическую блокировку применяют осторожно.
Итоги темы
Промышленные протоколы не защищают команды, потому что создавались для изолированной среды. Modbus и MQTT дают читать и писать без пароля; Zigbee и LoRaWAN защищают канал, но не отменяют физических атак.
Воздушный зазор — не свойство сети, а организационная мера, которая ломается о носитель и подрядчика. Защита строится на зонах и кондуитах, пассивном мониторинге и контроле доступа к сегменту.
На этом апокрифы заканчиваются. Следующий шаг — собрать приёмы в одну операцию и посмотреть, как она выглядит для защитника.
Литература
- Modbus Organization. Modbus Application Protocol Specification V1.1b3. — 2012. https://modbus.org/specs.php
- ISA/IEC 62443. Security for Industrial Automation and Control Systems. — ISA/IEC 62443 series.
- Stouffer K., Pease M., Tang C., et al. Guide to Operational Technology (OT) Security. — NIST Special Publication 800-82 Rev. 3, 2023. https://doi.org/10.6028/NIST.SP.800-82r3
- Banks A., Briggs E., Borgendale K., Gupta R. MQTT Version 3.1.1. — OASIS Standard, 2014. https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/
- Shelby Z., Hartke K., Bormann C. The Constrained Application Protocol (CoAP). — RFC 7252, IETF, 2014. https://www.rfc-editor.org/rfc/rfc7252
- Zigbee Alliance. Zigbee Specification. — 2015.