Знаете, с чего начинается любой крупный завод? Нет, не с закладки фундамента и не с закупки реакторов. Всё начинается с бумаги. Тысячи страниц регламентов, стандартов, сертификатов. Безопасность труда, пожарная безопасность, промышленная безопасность. Всё это висит на стендах в рамках, пылится в отделах охраны труда и создаёт иллюзию тотального контроля.
А потом приходит монтёр с клеммником и говорит: «Здесь провод не протянуть, труба горячая, гофра плавится. Давай поставим беспроводной датчик? У него батарейка на 10 лет, и по радио всё передаёт, сертифицировано по стандарту IEC 62591 (WirelessHART)». И начальник цеха, который слышал звон про кибербезопасность, но никогда не видел живого хакера, машет рукой: «Ставь. Завод за колючей проволокой, свои люди, никто не залезет».
В этот момент, где-то в эфире, рождается новая точка входа. Беспроводная, невидимая, но такая же реальная, как дверь в серверную без замка.
О чём на самом деле эта статья
Я не буду тут читать лекции про OSI (Open Systems Interconnection) и расписывать красоту стека протоколов так, как это делают в учебниках для студентов-заочников. Моя задача - снять розовые очки с тех, кто до сих пор считает, что промышленные протоколы - это что-то сакральное, висящее в недосягаемом для обычных хакеров слое реальности.
WirelessHART и ISA100.11a - это два кита, на которых сегодня держится беспроводная автоматизация в химической, нефтегазовой, энергетической отраслях. И если вы думаете, что они защищены лучше, чем ваш домашний WiFi, потому что там написано «Industrial» - вы ошибаетесь ровно настолько, насколько ошибаются те, кто верит, что бронированная дверь в подъезде защищает от квартирной кражи.
Эти сети спроектированы инженерами, которые думали о помехоустойчивости, о времени жизни батарейки, о том, чтобы датчик работал в -40 и +80. Они молодцы, они сделали работающую вещь. Но безопасность в них зачастую прикручена сбоку, как велосипедный звонок к танку. Формально есть. А по факту - либо не настроено, либо ключи по дефолту, либо адреса видны всем.
Почему нам, хакерам, это интересно?
Потому что это настоящий, живой, физический мир. Когда вы ломаете сайт, вы меняете циферки в базе данных. Когда вы взламываете беспроводную сенсорную сеть на заводе - вы можете заставить датчик давления показывать 2 атмосферы вместо 10. Или, наоборот, 10 вместо 2. Последствия - от бракованной партии колы до разрушения колонны синтеза аммиака. И это не шутки. Это уровень, где биты превращаются в молекулы.
Стандарты WirelessHART и ISA100.11a выбраны не случайно. Это две доминирующие технологии, которые делят рынок промышленной беспроводной сенсорики. Обе работают поверх IEEE 802.15.4 - того же самого физического уровня, на котором работает ZigBee, Thread и куча умных лампочек у вас дома. Разница - в софте, в логике, в том, как устройства договариваются друг с другом и как защищают (или не защищают) свои секреты.
Коротко о зверинце: WirelessHART и ISA100.11a
Если вы никогда не сталкивались с этими протоколами, представьте себе два завода-гиганта, которые строят рядом, но архитекторы из разных бюро и друг с другом не разговаривают.
- WirelessHART - это консерватор в костюме с галстуком. Он пришёл из мира проводных 4-20 мА петель и HART-протокола, который там сверху сидел. Его главная задача - сделать беспроводной мост для старых добрых HART-команд. Всё просто, минималистично, предсказуемо. Сеть жёстко управляется менеджером, который раздаёт расписание. Своя воля не приветствуется. Хочешь передать данные - получи слот времени и частоту, молчи в тряпочку до своего слота.
- ISA100.11a - это выскочка с претензией на универсальность. Они посмотрели на WirelessHART и сказали: «А почему бы не дать каждому датчику IP-адрес? Ну мало ли, вдруг пригодится». Так родился гибрид, который несёт в себе IPv6 поверх 6LoWPAN в каждый сенсор. Теоретически это круто - можно достучаться до датчика напрямую, как до сервера в интернете. Практически - это открывает такие дыры, что мама не горюй.
Кому это вообще нужно читать?
Я обращаюсь к трём категориям людей, и каждой из них у меня есть что сказать.
- Промышленные безопасники и инженеры АСУ ТП. Ребята, перестаньте надеяться на физический периметр. Забор и охрана с собакой не ловят пакеты. То, что ваш шлюз стоит в бетонном бункере, не мешает сигналу от датчика на трубе улететь за территорию. Ваш эфир открыт. И если вы до сих пор не знаете, что такое RTL-SDR, и не слушали свою сеть - вы в опасности. Я дам вам инструменты и методы, чтобы вы могли проверить себя сами, до того как это сделают другие.
- Пентестеры и этичные хакеры. Если вам надоело долбить веб-приложения и писать эксплойты для WordPress, добро пожаловать в реальный сектор. Здесь пока тихо, малолюдно и очень много денег. Но сложность входа выше. Нужно понимать не только HTTP и SQL, но и то, как работает O-QPSK модуляция, что такое TDMA и зачем нужны частотные скачки. Я покажу вам, с какой стороны подходить к этой кухне и какое железо брать с собой на объект.
- Просто любопытные. Тем, кто хочет понять, как устроен мир за пределами офисного планктона. Мир, где ошибка в байте может остановить конвейер, а правильная радиопомеха - сорвать план выпуска продукции. Здесь нет абстракций. Здесь всё по-настоящему.
Что нас ждёт дальше
Мы пройдём путь от разведки до активного вмешательства. Сначала разберём матчасть так, как её не объясняют вендоры. Потом соберём инструментарий - от дешёвых RTL-SDR до серьёзных HackRF и USRP. Научимся слушать эфир, вылавливать пакеты 802.15.4 из белого шума, анализировать их в Wireshark. А потом перейдём к активным действиям: попробуем вклиниться в сеть, подменить датчик, перехватить управление, глушить каналы и смотреть, как поведёт себя mesh-сеть под нагрузкой.
Всё это будет настолько подробно, насколько это вообще возможно в текстовом формате. Никаких отписок «используйте инструмент Х - он всё сделает сам». Мы будем разбираться, почему инструмент делает то или иное, и как написать свой, если готовый не справляется.
Приготовьтесь. Вы поймёте, как дышит промышленный эфир.
Часть 1. Матчасть на пальцах: Что мы вообще ломаем?
Прежде чем мы полезем в дебри с атаками, давайте пробежимся по архитектуре. Без этого вы не поймёте, почему одна атака сработает, а вторая - нет.
Представьте себе завод. Или нефтяную вышку. Или просто склад с кучей труб. Тянуть провода к каждому датчику давления или температуры - это геморрой и деньги. Поэтому вешаем коробочку с батарейкой (датчик), которая раз в несколько секунд или минут (чтобы батарейка жила годами) пикает в эфир: «Я датчик №42, у меня всё пучком, давление 3.2 Атм».
Этот сигнал летит не напрямую к диспетчеру, а по цепочке. Потому что датчики слабые, и если цех размером с футбольное поле, то до шлюза они просто не докричатся. Тут в игру вступает mesh-сеть. Каждый датчик может быть не только отправителем, но и ретранслятором. Получил пакет от соседа - перешли дальше, если надо.
И вот тут начинается магия, которую нам предстоит обнулить.
1.1. WirelessHART: Дедовский HART, но по воздуху
WirelessHART - это стандарт от HART Communication Foundation. Его фишка в том, что он очень простой. Он работает на 2.4 ГГц (как и вайфай, как и микроволновка, как и блютуз - свалка та еще). Использует 15 каналов (с 11 по 25 в диапазоне 2.4 ГГц).
Главные элементы:
- Полевые устройства (Field Devices): Те самые датчики. Батарейка, сенсор, радио.
- Маршрутизаторы (Routers): Часто те же датчики, но могут быть и специальные коробки. Просто ретранслируют трафик.
- Шлюз (Gateway): Мост между эфиром и проводной сетью завода (Ethernet, Modbus, etc.).
- Диспетчер сети (Network Manager): Мозг. Обычно живет внутри шлюза или рядом с ним. Именно он решает, кто по какому каналу и в какое время будет говорить.
Безопасность WirelessHART:
Тут они постарались на бумаге. Есть AES-128 шифрование. Есть проверка целостности (MIC - Message Integrity Code). Ключи управления. Всё как у больших.
Но ключевая фраза здесь -«на бумаге». Архитектура безопасности строится на том, что при присоединении к сети устройство должно пройти процедуру джойна (join). Оно шлёт запрос, ему отвечают, если у него есть правильный «симметричный ключ джойна» (Join Key), то ему дают временный слот и отправляют сетевые ключи.
И вот тут первый нюанс, который делает нам челлендж интереснее: Join Key часто один на всю сеть. Или, что ещё веселее, записан в документации к шлюзу, или (самое сладкое) выставлен по умолчанию типа "public". Вендоры любят говорить: «Ну мы же на заводе, у нас физическая безопасность, никто не подойдет к шлюзу». Ага. А дрон с SDR-приёмником? А сотрудник с телефоном в курилке? Физическая безопасность умирает ровно в тот момент, когда сигнал выходит за периметр цеха через стекло или бетонные стены с арматурой (для 2.4 ГГц стены не такая уж и преграда, если знать места).
1.2. ISA100.11a: Выскочка с претензией на интеллект
ISA100.11a пришли от International Society of Automation (ISA). Они посмотрели на HART и сказали: «А давайте сделаем IPv6 поверх 802.15.4?». И сделали.
В итоге каждый датчик в ISA100.11a потенциально может иметь свой IP-адрес. Теоретически это круто - можно достучаться до датчика напрямую по протоколам поверх UDP (например, через 6LoWPAN). На практике это открывает ящик Пандоры.
Архитектурно всё похоже:
- Полевые устройства.
- Маршрутизаторы/Бэкбоны (Backbone routers).
- Шлюз/Система управления (System Manager).
- Диспетчер безопасности (Security Manager).
Безопасность ISA100.11a:
Здесь подход чуть сложнее, чем в HART. Они разделяют трафик на разные уровни, поддерживают разные типы ключей. Но суть для нас не меняется - это симметричная криптография. А симметричная криптография в полевых условиях имеет одну ахиллесову пяту - ключи надо где-то хранить и вводить в устройство.
И вот тут мы подходим к самому интересному. Как вы введёте ключ в датчик? На заводе-изготовителе? Ок, цепочка поставок - отличный вектор. Через NFC или по проводам уже на месте монтажа? Отлично, кто контролировал процесс? Не вы ли случайно курили в сторонке, пока пусконаладчик тыкал кнопки на ноутбуке, а ключик к сети лежал в текстовом файле на рабочем столе?
Часть 2. Инструментарий джентльмена: Что брать с собой на промзону
Ладно, хватит теории, от которой клонит в сон. Поговорим о железе. Если вы собрались охотиться за промышленными датчиками, вам понадобится не только мозг, но и руки.
Забудьте про дешманские WiFi-адаптеры с Алиэкспресса.
Здесь нужен контроль над битами на уровне физики. Нам нужны SDR (Software Defined Radio).
2.1. Железо: От HackRF до USRP
- HackRF One: Золотой стандарт пентестера-любителя с бюджетом. Частоты от 1 МГц до 6 ГГц. Полоса пропускания 20 МГц. Этого хватит, чтобы смотреть на весь 2.4 ГГц диапазон сразу (почти). Цена/качество - огонь. Минус - он полудуплексный (не может одновременно передавать и принимать на одной частоте), но для разведки сойдёт. Глушить им можно, эмулировать датчик - можно, но аккуратно.
- USRP B210 (и старше): Тяжелая артиллерия. Полноценный дуплекс, бешеная полоса пропускания. Если у вас есть такой девайс, вы либо сорвали джекпот, либо хакспейс с богатыми спонсорами. С ним можно эмулировать полноценную сеть.
- RTL-SDR: Да, та самая «флешка» за 10 баксов. Не спишите её сбрасывать со счетов. Для пассивного анализа и поиска сигналов в эфире - самое оно. Увидеть, есть ли активность на 2.4 ГГц, он вполне способен. Но передавать им вы ничего не сможете, да и чувствительность... ну, вы поняли. Для разведки боем - ок. Для активных действий - нет.
- GNU Radio: Святой Грааль. Блочная система, где вы из кубиков собираете себе приёмник или передатчик. Позволяет влезть в самые глубины обработки сигнала. Понадобится, если вы захотите написать свой декодер для неизвестного проприетарного протокола поверх 802.15.4.
- GR-IEEE802-15-4: Готовые блоки для GNU Radio, реализующие физический уровень 802.15.4 (O-QPSK с полусинусоидальным формированием импульсов). С ними можно принимать и передавать сырые пакеты стандарта. Это база.
- Wireshark: Лучший друг. Но чтобы он понимал трафик из эфира, нужен адаптер. Для SDR есть мосты (например, gr-ieee802-15-4 может экспортировать пакеты в Wireshark через виртуальный интерфейс).
- KillerBee: Фреймворк для атак на ZigBee (тоже 802.15.4). Напрямую с HART/ISA не работает, но многие техники и сам подход к анализу трафика 802.15.4 можно и нужно подсматривать там. Там есть готовые скрипты для сканирования, сниффинга и инъекций.
- Scapy-Radio: Если вы любитель Python, то можно использовать Scapy с расширениями для 802.15.4. Позволяет конструировать пакеты любой степени извращенности и пихать их в эфир через SDR или специальные трансиверы (вроде тех, что в KillerBee).
Прежде чем мы двинемся дальше, запомните: эфир - это общая среда. Глуша сигнал датчика, вы можете вызвать реальную аварию на производстве. Посылая ложные пакеты с командой "открыть клапан", вы можете устроить техногенную катастрофу.
Я тут не для того, чтобы учить вас валить заводы. Я тут для того, чтобы показать, как это делается, чтобы вы понимали риски и могли защититься.
Включаем голову. Используем эти знания в лабораториях, на своих тестовых стендах или на пентестах с подписанными бумажками, где чётко написано: "Разрешаем ломать, но аккуратно". Солидарность - это не только "помогу настроить софт", но и "предупрежу о последствиях".
Часть 3. Пассивная разведка: Слушаем, нюхаем, анализируем
Итак, вы пришли на объект. У вас в рюкзаке HackRF, ноут с Ubuntu и чашка кофе (без сахара, мы же хакеры). С чего начинаем? С разведки.
3.1. Frequency Scanning: Ищем иголку в стоге сена
Диапазон 2.4 ГГц засран под завязку. WiFi точки доступа режут эфир широкими каналами в 20-40 МГц. Bluetooth скачет как блоха. Микроволновка на обеденном перерыве создаёт белый шум. Нам нужно найти узкополосные сигналы 802.15.4 (каналы по 2-5 МГц шириной).
Берём RTL-SDR или HackRF, софтину типа GQRX или SDR#. Ставим шаг 1 МГц и полосу обзора 80 МГц (от 2.4 до 2.48). Ищем всплески активности.
Стандартные каналы 802.15.4 (включая WirelessHART и ISA100.11a) в США/Европе:
- Канал 11: 2405 МГц
- Канал 12: 2410 МГц
- ...
- Канал 25: 2475 МГц
- Канал 26: 2480 МГц (используется реже, т.к. граничит с WiFi)
3.2. Сниффинг: Включаем запись всего подряд
Обнаружили активный канал? Отлично. Теперь задача - записать сырой трафик (IQ-сэмплы). GNU Radio Companion вам в помощь.
Собираем простейший граф:
- UHD: USRP Source или HackRF Source (в зависимости от железа). Ставим частоту на нужный канал (например, 2405 МГц). Частота дискретизации 4 МГц (для 802.15.4 хватит за глаза).
- File Sink. Сохраняем всё в файл.
3.3. Офлайн-анализ: Превращаем шум в пакеты
Записали сырой сигнал. Теперь его надо демодулировать и декодировать.
Тут нам пригодится gr-ieee802-15-4. Запускаем приёмник не в реальном времени, а из файла. Пропускаем наш файл с IQ через блоки демодуляции O-QPSK, синхронизации по преамбуле (она у 802.15.4 стандартная - 32 бита нулей), и на выходе получаем сырые байты.
Эти байты - ещё не пакеты WirelessHART. Это PDU (Protocol Data Unit) уровня MAC (Media Access Control) 802.15.4.
Структура MAC-кадра 802.15.4:
- Заголовок MAC: Управление кадром (тип кадра: маяк, данные, команда, подтверждение), номера последовательностей, адреса (PAN ID - Personal Area Network ID - идентификатор сети, адреса устройств).
- Полезная нагрузка: Вот тут и спрятаны наши HART или ISA100.11a команды.
- Концевик (FCS - Frame Check Sequence): Контрольная сумма (CRC).
3.4. Что мы ищем в трафике?
- PAN ID: Идентификатор сети. Зная его, мы сможем позже маскироваться под "своего".
- Адреса устройств: Короткие (16 бит) и длинные (64 бит - EUI-64). Список целей.
- Процедура Join'а: Это самое лакомое. Когда новое устройство просится в сеть, происходит обмен командами. Если нам удастся записать полный процесс джойна, мы можем попытаться атаковать его, или, если повезёт, и ключ джойна известен, расшифровать его и получить сетевой ключ.
- Периодичность: Когда и как часто шлют данные? Знание таймингов позволит нам позже провести атаку с точным таймингом (TDMA не дремлет).
Если вы хотите глубже понять, какие архитектурные недостатки присущи традиционным промышленным протоколам, обратите внимание на подробный анализ уязвимостей таких стандартов, как Modbus TCP и BACnet/IP — это поможет расширить взгляд на проблему безопасности OT‑сетей.
Часть 4. Активные действия: Врываемся в чат
Пассивка - это скучно. Мы пришли за адреналином. Переходим к активным действиям. Помните про таймслоты? Это наша главная головная боль. Просто взять и заорать в эфир со своей тачки не получится - диспетчер сети просто проигнорирует нас, как назойливую муху, потому что мы говорим не в своё время.
4.1. Атака на Join-процесс: Перехват управления
Join - самое уязвимое место. Представьте, что новый датчик вешают на трубу. Он включается, слушает эфир, ищет маяки (beacons) от шлюза или маршрутизаторов. Найдя маяк, он шлёт запрос на присоединение.
Сценарий 1: Кража ключа джойна.
Если ключ джойна стандартный (а такое сплошь и рядом - "hartkey", "isa100key" или вообще пустой), мы можем сами сыграть роль шлюза. Мы включаем свой HackRF, вещаем маяки с мощным сигналом (перебивая легитимный шлюз), даём наш PAN ID. Новый датчик, увидев более сильный сигнал, кинется к нам. Мы успешно проводим с ним процедуру джойна, получаем от него его айди, а он от нас - "сетевой ключ", который мы ему подсовываем.
Итог: Датчик думает, что он в легитимной сети, и начинает слать нам свои данные. Мы сидим, читаем давление в реакторе, и хихикаем. Легитимный шлюз при этом может бить тревогу "устройство не отвечает", но пока админ разберется, мы уже всё соберём.
Сценарий 2: Атака "Злая двойня" (Evil Twin) на шлюз.
Сложнее, но интереснее. Мы эмулируем не просто шлюз, а пытаемся вклиниться между датчиком и реальным шлюзом. Это требует точного тайминга и знания расписания. Мы должны принимать пакет от датчика, а потом мгновенно пересылать его шлюзу, подменяя себя. И наоборот. Это требует мощного SDR с дуплексом и быстрой логики. Но если получится - мы ставим MITM (Man-In-The-Middle, атака «человек посередине») в эфире. Все данные проходят через нас.
4.2. Атака на ретранслятор: Глушение и подмена
Датчики общаются через ретрансляторы. А что, если мы забьём ретранслятор шумом? Заглушим его на физическом уровне (просто передаём мощный шум на его частоте приёма в его слоты).
Умная mesh-сеть перенаправит маршруты. Но если мы заглушим ключевой ретранслятор, часть сети отвалится. Диспетчер начнёт искать новые пути. В этот момент в сети - хаос. Расписание перестраивается. Новые слоты выделяются. Это идеальное время для нас, чтобы попытаться проскочить со своим пакетом, пока контроллер занят "думанием".
Инструмент: Простой генератор шума на GNU Radio.
Собираем граф: Signal Source (шум) -> Multiply (для усиления) -> Sink (в эфир). Направленная антенна - и глушим конкретное устройство.
4.3. Атака воспроизведения (Replay attack): "Я у мамы датчик давления"
Самый простой вид активной атаки, если нет шифрования или оно сломано. Записали пакет с данными от датчика. Подождали. Через 10 секунд прокрутили его заново.
Если в протоколе нет защиты от повторов (sequence counters, nonce), шлюз примет этот пакет за новые данные. Второй раз. И третий.
В WirelessHART и ISA100.11a есть счётчики кадров, они должны предотвращать повторы. Но! Счётчики хранятся в энергонезависимой памяти, чтобы после перезагрузки устройства не сбиваться. Перезагрузка устройства - отличный способ обнулить счётчик. Если мы сможем заставить устройство перезагрузиться (например, наведённым импульсом по питанию или длительным глушением), и быстро отправить старый пакет, есть шанс, что шлюз примет его, так как у него счётчик для этого устройства теперь "старый", но после перезагрузки датчика он должен был сброситься. Сложно, но реализуемо. Защита от повторов строится на доверии к тому, что устройство не перезагружалось без ведома сети. А мы это доверие ломаем.
Часть 5. Атаки на уровне приложений: HART и ISA команды
Самое мясо начинается, когда мы уже как-то получили сетевой ключ (угадали, украли, социальная инженерия помогла) и успешно присоединились к сети как легитимный узел (или взломали существующий). Теперь мы "свои". Мы можем слать команды.
5.1. WirelessHART: Командная строка для технолога
WirelessHART использует те же команды, что и проводной HART. Это огромная база знаний. Команды делятся на универсальные (все устройства их понимают) и специфичные для конкретного датчика.
Представьте себе мануал на 500 страниц с описанием команд. Вот несколько, которые заставят технолога поседеть:
- Команда 0: Read Unique Identifier. Разведка. Кто ты?
- Команда 1: Read Primary Variable. Считать основное значение (давление, температуру). Подменив ответ на эту команду, мы можем показывать диспетчеру +20 градусов вместо -5.
- Команда 3: Read Dynamic Variables and Loop Current. Считать все переменные.
- Команда 35: Write Primary Variable Range Values. А вот это уже интересно. Мы можем перенастроить диапазон датчика. Если датчик настроен на измерение от 0 до 10 Атм, мы можем сказать ему, что он теперь от 0 до 100 Атм. Тогда при реальных 5 Атм он пошлёт значение 0.5 Атм. Аварийная сигнализация, которая ждет 8 Атм, так и не сработает.
- Команда 38: Reset Configuration Changed Flag. Сбросить флаг изменения конфигурации. Сделали гадость (командой 35) и сказали "ничего не менялось". Админ не увидит, что конфиг датчика изменён, если не полезет проверять вручную.
- Команда 48: Read Additional Device Status. Проверить статус. Можем отвечать "Status OK" даже на дохлом датчике.
- Команда 59: Write Number of Response Preambles. Мелочь, а неприятно. Меняем количество преамбул, устройство перестает нормально общаться.
Здесь атаки выходят на новый уровень, потому что мы можем использовать стандартные IP-инструменты.
Получив доступ к сети и имея IP-адрес датчика, мы можем попробовать:
- ICMP Flood: Заддосить датчик пингами. Батарейка сядет за час вместо года.
- UDP Fuzzing: Слать на открытый UDP-порт случайные данные в надежде, что стек 6LoWPAN или приложение грохнется.
- CoAP атаки: Если поверх используется CoAP (аналог HTTP для IoT), то тут целый зоопарк уязвимостей: переполнение буфера в парсерах URI, атаки на кэш, подписка на ресурсы без авторизации.
Давайте сразу договоримся: AES-128 - это гениальный алгоритм. Серьёзно, без иронии. Если он реализован правильно, если ключи хранятся в недоступном месте, если протокол обмена защищён от повторов и ораклов - вскрыть его прямым перебором (brute force) невозможно при текущем уровне развития цивилизации. На это уйдут тысячи лет даже с самыми мощными квантовыми компьютерами (которые пока что ещё и два сосчитать не могут без ошибок).
Но есть одна проблема. Промышленные датчики - это не серверы в ЦОДах. Это маленькие коробочки с батарейкой, слабым процессором и одной-единственной задачей: жрать как можно меньше энергии и работать годами. Поэтому разработчики идут на компромиссы. И вот эти компромиссы мы сейчас будем препарировать с хирургической точностью.
Потому что, как говорил один старый хакер: "Нет смысла взламывать RSA, если можно просто попросить ключ, а тебе его дадут".
7.1. Куда прячут ключи? Да никуда не прячут
Самая смешная и одновременно грустная часть. В WirelessHART и ISA100.11a ключи делятся на две основные категории:
- Join Key (или Master Key): Симметричный ключ, который заранее известен устройству и сети. Служит для того, чтобы устройство могло легитимно присоединиться к сети и получить от неё временный сетевой ключ (Session Key).
- Network Key (Session Key): Ключ, который используется для шифрования всего последующего трафика. Выдаётся устройству во время процедуры джойна.
Ситуация 1: Join Key по умолчанию
Производитель говорит: "Для удобства развертывания мы установили универсальный мастер-ключ". Инженер на объекте говорит: "Супер, не надо ничего настраивать, работает из коробки". Итог: вся сеть завода использует ключ 1111111111111111 или, что ещё веселее, HARTKEY01. Я лично видел документацию к одному известному бренду, где Join Key был расписан в открытом виде в руководстве пользователя, которое лежит в свободном доступе на сайте. Скачал мануал, набрал ключ - и ты админ чужой сети.
Ситуация 2: Хранение в EEPROM без защиты
Датчик - устройство простое. У него есть flash-память, в которой лежит прошивка и калибровочные константы. Там же лежит и ключ. Вы когда-нибудь пробовали подключить программатор (например, JTAG или SPI) к контактам памяти на плате датчика? Часто производители оставляют эти контакты незакрытыми (или закрытыми, но с перемычками, которые легко обойти). Подключаемся, читаем дамп памяти, ищем 16 байт (для AES-128) - они обычно выглядят как случайный набор байт, но если знать, где искать, и понимать структуру прошивки, находятся на раз-два. А если дамп зашифрован? А кто сказал, что ключ для расшифровки дампа не лежит там же, в открытом виде? Такое тоже бывает. Защита "матрёшка", где все ключи в одной коробке.
Ситуация 3: Отсутствие защиты от чтения микроконтроллера
Современные микроконтроллеры имеют fuse-биты - аппаратные предохранители, которые блокируют чтение прошивки через JTAG/SWD. Так вот, на многих промышленных устройствах эти биты либо не установлены (чтобы упростить отладку на производстве), либо установлены, но есть известные бэкдоры или уязвимости в самом механизме защиты конкретного чипа. Скажем, для некоторых популярных ARM-контроллеров давно есть эксплойты, сбрасывающие защиту через glitch-атаку на питание. Если у вас есть физический доступ к датчику на пару минут - вы сможете вытащить из него ключ.
7.2. Криптографическая каша в протоколах
Даже если ключи хранятся безопасно, протоколы, в которых они используются, могут быть кривыми.
Вектор атаки 1: Join-процесс без взаимной аутентификации
В некоторых реализациях (особенно старых) устройство, которое хочет присоединиться к сети, шлёт запрос, а шлюз ему отвечает, шифруя сетевой ключ мастер-ключом. Казалось бы, всё ок. Но что, если мы поднимем свой ложный шлюз с более мощным сигналом? Устройство придет к нам. Мы скажем: "Привет, я шлюз, вот тебе сетевой ключ, зашифрованный твоим мастер-ключом". Но мы не знаем мастер-ключа устройства. Как же мы зашифруем?
А вот тут хитрость. В некоторых протоколах (не будем показывать пальцем, но было дело) устройство при джойне сначала шлёт свой идентификатор в открытом виде. А шлюз в ответ шлёт сгенерированный сетевой ключ, зашифрованный именно этим самым идентификатором, используемым как ключ! То есть если мы знаем ID устройства (а он передаётся открыто), мы можем сами сгенерировать такой же "ключ" и расшифровать ответ от легитимного шлюза. Или, если мы эмулируем шлюз, мы просто отдадим устройству тот ключ, который сами захотим, зашифровав его ID-шником.
Это уже не просто дыра, это проспект для парада.
Вектор атаки 2: Отсутствие защиты целостности в некоторых кадрах
MAC-уровень 802.15.4 поддерживает шифрование и аутентификацию (MIC - Message Integrity Code). Но иногда, ради экономии байтов (каждый переданный байт жрет батарейку), разработчики отключают MIC для некоторых типов служебных кадров. Например, для маяков (beacons) или для подтверждений (ACK). Это позволяет нам проводить атаки типа "подмена маяка" (spoofed beacon) без необходимости ломать криптографию. Мы просто шлём свой маяк с более высокой мощностью, устройство переключается на нас, и мы можем, например, заставить его сменить канал или начать процедуру джойна с нами.
Вектор атаки 3: Слабые генераторы случайных чисел (RNG)
Криптография любит случайность. Ключи должны быть случайными. Nonce (числа, используемые только один раз) должны быть случайными. Но в маленьких датчиках с батарейкой нет аппаратного генератора случайных чисел. А часто нет и хорошего энтропийного источника. Поэтому разработчики используют псевдослучайные генераторы (PRNG), инициализируемые каким-нибудь предсказуемым значением - например, временем старта устройства или его MAC-адресом.
Если мы знаем приблизительное время включения устройства и его адрес, мы можем воспроизвести всю последовательность "случайных" чисел, которые оно генерирует, и предсказать будущие ключи или nonce. Это позволяет проводить атаки, даже не извлекая ключи из железа - мы их просто вычисляем сами.
7.3. Side-channel атаки: Слушаем сердцебиение чипа
Это уже высший пилотаж, но в последние пять лет он стал доступен не только спецслужбам, но и продвинутым энтузиастам. Идея проста: даже когда алгоритм математически идеален, его аппаратная реализация "фонят" в физический мир.
- Атака по времени (Timing Attack): Разные операции AES (например, подстановка байтов через S-Box) могут выполняться за разное время в зависимости от значения ключа или данных. Замеряя время ответа устройства на разные запросы, можно по кусочкам восстановить ключ.
- Анализ потребляемой мощности (Power Analysis):Самый мощный метод. Когда микроконтроллер выполняет криптографические операции, потребление тока чуть-чуть колеблется. Эти колебания зависят от обрабатываемых данных. Если наложить на шину питания датчика высокоточный шунт или просто измерить электромагнитное излучение катушек индуктивности рядом с чипом, можно получить осциллограмму. А обработав её статистически (Correlation Power Analysis - CPA), можно вытащить ключ за несколько сотен или тысяч замеров.
- Оборудование: Осциллограф с высоким разрешением, токоизмерительный пробник или EM-зонд.
- Софт: ChipWhisperer (открытый проект, который позволяет автоматизировать такие атаки). Да, теперь это делает не только АНБ, но и студент с бюджетом в $500.
7.4. Отсутствие Perfect Forward Secrecy (PFS)
Термин, который редко вспоминают, но он критически важен для долгоживущих промышленных систем.
PFS означает, что даже если злоумышленник завладел долговременным ключом (например, мастер-ключом), он не сможет расшифровать ранее перехваченный трафик, защищённый сессионными ключами.
В WirelessHART и ISA100.11a PFS нет. Вообще. Сессионный ключ (Network Key) выводится из мастер-ключа. Если злоумышленник узнал мастер-ключ, и у него есть запись всего трафика сети за последние 5 лет, он может (зная детали протокола) вычислить все сессионные ключи задним числом и расшифровать каждый пакет.
Сценарий: Вы пришли на завод в 2026 году. Вы не знаете ключей. Но вы записываете весь трафик, который идёт в эфире, на жёсткий диск терабайт за терабайтом. Это просто. В 2027 году завод модернизирует систему, старый шлюз меняют и выбрасывают на свалку. Вы ночью (с фонариком и в перчатках, если надо) находите этот шлюз на свалке, подключаетесь к его EEPROM, считываете мастер-ключ. И теперь у вас есть расшифровка всего, что вы насобирали за 2026 год. Гениально в своей простоте.
7.5. Практические инструменты для криптоанализа своими руками
Если вы хотите не просто читать, а пробовать, вот минимальный набор, с чего начать.
- Для чтения дампов памяти:
- Программаторы: Bus Pirate, FT2232H, J-Link (для ARM), ST-Link (для STM32).
- Софт: OpenOCD, flashrom, фирменные утилиты производителя (часто дают триал).
- Метод: гугл по запросу "unlocking [название микроконтроллера] read protection". Для многих чипов уже есть готовые скрипты, сбрасывающие защиту через подачу напряжения на тактовый вход в нужный момент (voltage glitching).
- Для side-channel атак:
- Железо: ChipWhisperer Lite (открытая платформа, около $250). Осциллограф Picoscope 5000 series (если бюджет позволяет).
- Софт: Jupyter Notebook + библиотеки для обработки сигналов (numpy, scipy). В ChipWhisperer уже всё встроено.
- Для анализа протоколов на предмет криптографических косяков:
- Wireshark + Lua-скрипты для разбора специфичных полей.
- Scapy для конструирования пакетов и проверки реакции сети.
- Анализ прошивки: Ghidra (бесплатно, от NSA) или IDA Pro. Дизассемблируйте прошивку, найдите функции, отвечающие за шифрование, и посмотрите, откуда они берут ключи и как они их используют. Иногда ключ оказывается просто константой в коде.
Ладно, наломали мы тут дров в теории, показали уязвимости. Давайте теперь честно скажем, что делать тем, кто эти сети защищает. Потому что просто констатировать факт, что всё плохо, - это слив. А предложить решение - это солидарность.
- Аппаратное усложнение:
- Используйте датчики со встроенными аппаратными крипто-модулями (Secure Elements), такими как ATECC508A или аналоги. Они хранят ключ внутри своей защищённой памяти и никогда не отдают его наружу. Даже если вы читаете всю остальную память микроконтроллера, ключ вы не достанете. Все крипто-операции выполняются внутри Secure Element.
- Требуйте от производителей установки fuse-битов защиты чтения на микроконтроллерах. И проверяйте это выборочно на закупаемых партиях.
- Организационные меры:
- Смена ключей по умолчанию. Это первое, что вы должны сделать. Не доверяйте заводским настройкам. Заведите процедуру, при которой ключи генерируются случайно и индивидуально для каждой сети, а лучше для каждого устройства (если позволяет менеджер сети).
- Физическая защита устройств. Если злоумышленник может спокойно подойти к датчику и подключить программатор на 10 минут - вы проиграли. Датчики должны быть в труднодоступных местах, опечатаны, под видеонаблюдением. Это не паранойя, это необходимость.
- Регулярная ротация ключей (re-keying). Заставьте сеть периодически обновлять сессионные ключи. Хотя бы раз в месяц. Тогда даже если злоумышленник получит один сессионный ключ, он сможет расшифровать только небольшой отрезок трафика.
- Мониторинг аномалий:
- Слушайте не только сетевой трафик, но и физические процессы. Внезапное изменение энергопотребления датчика (которое можно телеметрически получать от самого датчика, если он поддерживает мониторинг батареи) может сигнализировать о том, что кто-то пытается провести power analysis атаку рядом с ним. Да, это звучит как научная фантастика, но в мире АПК (атак на критическую инфраструктуру) это уже реальность.
Резюме для тех, кто пролистал вниз (но вы же не такой)
1. Беспроводная промышленная сеть - это не «священная корова».Слишком долго инженеры КИПиА (контрольно-измерительные приборы и автоматика) и АСУ ТП (автоматизированные системы управления технологическим процессом) относились к радиоэфиру как к черной магии. Если оно работает - не трогай. Эта мантра безопасности работала 20 лет назад, когда единственной угрозой был местный пьяный электрик с лопатой. Сегодня угроза - это студент с RTL-SDR за 10 баксов, который хочет проверить, а что тут летает. И выясняется, что летают незашифрованные команды управления клапанами. Священных коров больше нет. Эфир - это среда передачи данных. Он уязвим ровно настолько, насколько уязвим витой провод, просто атаковать его сложнее технически (надо уметь работать с SDR), но проще физически (не надо подключаться к проводу).
2. Ключи решают всё, а с ними - бардак.
Самый страшный сон криптографа - это идеально стойкий алгоритм и ключ «1234» в довесок. Индустрия обожает повторять мантру про AES-128, но забывает сказать, что ключи к этому AES-128 часто:
- Хранятся в текстовом файле на ноутбуке пусконаладчика.
- Передаются по незащищенным каналам в Excel-табличках.
- Являются стандартными для всей линейки оборудования.
- Никогда не меняются за весь жизненный цикл завода (20+ лет).
3. Mesh-сеть - это не панацея, это поверхность атаки.
Да, ячеистая топология повышает отказоустойчивость. Если один датчик сдох, пакет пойдет через другой. Но с точки зрения безопасности это означает, что у вас появляется множество точек ретрансляции. Каждый маршрутизатор (который часто является точно таким же датчиком) может быть скомпрометирован и использован для прослушки или модификации трафика. Или для атаки типа "черная дыра" (blackhole), когда он просто "съедает" все пакеты, не передавая их дальше. Высокая связность = высокая уязвимость.
4. Уровень приложений забыт, как старый хлам.
Нас так завораживает "физика" (шифрование, скачки частот), что мы напрочь забываем про прикладной уровень. А там, в командах HART и объектах ISA100, живут старые добрые уязвимости, доставшиеся в наследство из 80-х и 90-х. Переполнения буфера при разборе команды, логические ошибки авторизации (кто сказал, что команду "записать новую уставку" можно слать только с диспетчерской?), отсутствие валидации диапазонов значений. Это золотая жила для тех, кто готов копать не вширь, а вглубь.
Чек-лист для тех, кто пойдет чинить (а не только ломать)
Если вы, прочитав эту статью, решили провести аудит своей промышленной беспроводной сети, вот вам краткий план действий. Не откладывайте в долгий ящик.- Инвентаризация ключей. Соберите всю документацию. Где хранятся Join Keys? Кто имеет к ним доступ? Смените все ключи по умолчанию. Это больно, это потребует перепрошивки каждого датчика, но это база. Если у вас сеть на 1000 устройств - начинайте с критически важных узлов.
- RF-сканирование периметра. Выйдите с анализатором спектра за забор завода. Послушайте, что слышно. Если вы слышите свой шлюз на парковке для посетителей - вы в опасности.
- Анализ трафика. Захватите трафик своей сети (пассивно) на пару часов. Есть ли устройства, которые шлют данные чаще других? Нет ли подозрительной активности в нерабочее время? Есть ли нешифрованные управляющие команды (найдите и убейте)?
- Обновление прошивок. Зайдите на сайты производителей шлюзов и датчиков. Посмотрите список уязвимостей (CVE) за последние 3 года. Если ваш шлюз имеет известную уязвимость с 2022 года, а патч так и не поставлен - вы в зоне риска.
- Обучение персонала. Расскажите технологам и наладчикам, что USB-флешка с документацией, на которой написан ключ сети, не должна лежать на столе. Что ноутбук, подключенный к шлюзу для диагностики, не должен одновременно выходить в интернет через 4G-модем. Люди - самое слабое звено.
Последнее слово
Мы с вами живем в интересное время. Время, когда физический и цифровой миры сращиваются намертво. То, что раньше было просто "железкой", становится узлом сети. И каждый такой узел может стать точкой входа для тех, кто знает, как подойти.Моя цель была не напугать вас. И не научить вас валить заводы. Моя цель была - заставить вас думать критически. Не верить на слово вендору, который говорит "все защищено". Не надеяться на "физическую недоступность" сигнала. Смотреть в суть. Читать спецификации. Брать в руки анализаторы спектра. Ковыряться в дампах трафика.
Потому что только так - через понимание, через погружение, через подход - можно построить что-то действительно надежное. Надежность не продается в коробке. Она выращивается годами опыта и ошибок.
Последнее редактирование модератором: