Хакеры размораживают супермаркет: уроки безопасности OT
Хакеры разморозили холодильники супермаркетов в Европе. Разбираем, почему системы OT так часто подводят и как защитить промышленные системы управления.

Представьте, что вы ночной менеджер супермаркета в Лионе. В 3 часа ночи ночная смена замечает, что иней на витринах с замороженными продуктами тает. Затем начинают срабатывать сигналы компрессоров — не на одном ряду, а по всему магазину. Пока кто-то поймёт, что происходит, холодильные камеры уже удалённо переведены в режим оттайки, и тысячи евро замороженного товара тихо нагреваются к порогу, после которого его придётся списать. Примерно так и было, когда в этом году атакующие добрались до контроллеров холодильного оборудования в сетях французских супермаркетов. Это хороший повод задуматься всем, кто считает, что безопасность операционных технологий — не их забота.
Атака не была каким-то голливудским сложным эксплойтом. По сообщениям, злоумышленники запустили автоматические циклы оттайки на контроллерах холодильного оборудования, доступных из интернета, — коммерческих установках одного крупного промышленного вендора, — и ущерб распространился на магазины в нескольких странах. Примерно в то же время другой инцидент вынудил бельгийско-голландскую торговую группу отключить часть ИТ-систем, что нарушило работу дистрибуции и доставки. Совпадение это или координация, результат один: физический мир взломали через цифровой.
Зачем морозильник вообще в интернете?
Самая частая реакция на эту историю — и она заполнила все комментарии — звучала примерно так: «какого черта подключать холодильник к интернету?» Вопрос звучит риторически, но у него есть реальный ответ, и делать вид, будто его нет, — значит каждые несколько лет возвращаться к одному и тому же разговору.
Коммерческое холодильное оборудование — это не просто холодильник. Средний супермаркет управляет распределённой тепловой системой: десятками витрин, холодильными и морозильными камерами, компрессорными стойками, конденсаторами, которыми управляют контроллеры, балансирующие температуру и стоимость энергии. Деловое обоснование удалённого подключения вполне реальное:
- Удалённая диагностика. Подрядчик по холоду, обслуживающий сотни магазинов, может увидеть признаки неисправного компрессора за несколько дней до поломки. Отправлять техника, чтобы нажать физическую кнопку для плановой оттайки, стоит реальных денег; удалённая команда не стоит ничего.
- Оптимизация энергопотребления. Супермаркеты относятся к самым энергоёмким зданиям в пересчёте на квадратный метр. Сети настраивают температуру витрин и графики оттайки по всей своей сети, а некоторые участвуют в программах управления спросом, где энергокомпания платит им за снижение нагрузки во время перегрузки сети.
- Журналирование для соответствия требованиям. Нормы пищевой безопасности требуют непрерывных записей температуры. Сетевые контроллеры формируют автоматический журнал аудита — без планшетов с бумажками и без подделанных вручную записей.
- Сравнение парка. Когда вы управляете 2000 магазинами, заметить, что компрессоры одного магазина потребляют на 15% больше энергии, чем у соседей, — это способ найти утечку хладагента до того, как ремонт станет счётом на пять цифр.
Так что подключение не глупое. Глупой оказывается реализация. Ранние сообщения говорят, что многие из этих контроллеров были доступны напрямую из интернета — некоторые со своими сотовыми модемами и SIM-картами, на публичных IP-адресах без VPN, без шлюза и без белого списка. А по одной широко разошедшейся истории, аутентификация выглядела так: логин admin и пароль, сгенерированный из текущей даты. Это не поверхность атаки, это открытая дверь с приветственным ковриком.
Как выглядит реальная атака на OT
Разработчики обычно представляют кибератаки как кражу данных: утёкшие базы, скомпрометированные учётки, записки с требованием выкупа. Атаки на OT отличаются по сути, а не только по масштабу. Цель — не информация, а физический процесс. Полезной нагрузкой является не шифрование, а легитимно выглядящая команда, отправленная устройству, которое доверяет любому, кто до него достучался.
Обратите внимание, насколько изящна атака с оттайкой. Злоумышленникам не нужно было писать вредоносное ПО, повышать привилегии или даже полностью понимать протокол. Цикл оттайки — это штатная, санкционированная функция контроллера: она нужна потому, что иней нарастает на испарителях и его нужно периодически растапливать. Атакующие просто вызвали её вне расписания и в масштабе. Ни одна защитная блокировка не сработала, поскольку с точки зрения контроллера ничего необычного не запрашивалось. Это аналог проблемы «confused deputy» в мире OT: устройство честно выполняет команды, которые ему вообще не следовало получать.
Этот паттерн удручающе универсален. Станции водоподготовки «атаковали», просто передвинув ползунок дозирования химикатов. Системы управления зданием захватывали через удалённый доступ сервисного подрядчика по вентиляции. Почти во всех случаях опасная возможность — не баг, а функция, доступная тем, кто никогда не должен был до неё добираться. Поэтому решение — не лучшее код-ревью, а архитектура.
Самые опасные уязвимости OT — не повреждения памяти. Это легитимные функции, открытые нелегитимным вызывающим.
Патч, который никто не установил
Деталь, от которой должен поморщиться каждый специалист по безопасности: уязвимость в этих контроллерах была публично раскрыта за несколько месяцев до атаки, в рамках скоординированного процесса с вендором. Исследователи опубликовали подробный разбор. Патчи существовали хотя бы для некоторых моделей. И атака всё равно произошла.
Это грязный секрет промышленного патчинга. В корпоративной ИТ нас балуют: выходит критическая CVE, и через несколько дней инструменты управления парком уже напомнили, подготовили и развернули исправление. С OT так не работает. Контроллер в морозильной витрине супермаркета может проработать пятнадцать лет. Им владеет магазин, его обслуживает сторонний подрядчик по холоду, его произвёл вендор, а настраивал установщик, который ушёл из компании шесть лет назад. Кто именно отвечает за установку обновления прошивки на 2400 площадках в девяти странах? На практике — никто.
Хуже того, вендор, судя по всему, выпустил исправление, не пометив его явно как критичное для безопасности. Для сервисного подрядчика с горой реально сломанного оборудования «доступно обновление прошивки» звучит как необязательная рутина. Это проблема коммуникации не меньше, чем техническая. Если вы выпускаете патч для уязвимости, которая позволяет посторонним разморозить продукты целой страны, в примечаниях к релизу это должно быть написано так, чтобы руководитель хозяйственной службы не смог пропустить. Разрыв между спецификацией и реализацией порождает не только баги — он порождает целые парки непропатченных устройств, а их владельцы даже не знают, что они уязвимы.

Безопасные значения по умолчанию: проектирование на худший день
Давайте поговорим о том, как выглядит хорошо, потому что принципы здесь не экзотические. Это те же оборонительные подходы к проектированию, которые мы применяем в критически важном ПО, просто в мире OT их редко соблюдают. Я уже писал о защитном инжиниринге, устойчивом к катастрофам, и холодильные контроллеры — классический пример.
Ограничивайте частоту опасных изменений состояния
Цикл оттайки физически безопасно запускать время от времени и разрушительно — постоянно. Поэтому физику нужно закладывать в прошивку: после завершения оттайки отказывать в следующей в течение минимального интервала, что бы ни говорила удалённая команда. Злоумышленник, который может отправить один запрос на оттайку, может отправить и тысячу; устройство не должно исполнять больше, чем позволяет физика. Это несколько строк кода и один таймер, и он ограничивает радиус поражения любой компрометации плоскости управления.
Локальные блокировки важнее удалённых полномочий
Если температура в камере уже выше порога или датчики продукта показывают тепло, удалённую команду оттайки нужно отклонить и громко записать в журнал. У контроллера есть данные датчиков, чтобы понять: команда абсурдна. Заставьте его использовать эти данные. Команда, которая толкает систему к заведомо плохому состоянию, — это не команда, а ошибка.
Подписанные команды вместо паролей
Пароли во встраиваемых устройствах — безнадёжное дело: они остаются по умолчанию, используются общими, записываются на стикер или выводятся из даты. Более сильная модель асимметричная: контроллеры проверяют подпись каждой удалённой команды по открытому ключу вендора или оператора, зашитому при provisioning. Теперь кража пароля не помогает: нужен приватный ключ, который хранится в HSM в операционном центре, а не на 2400 морозильных витринах. Да, это означает инфраструктуру управления ключами, ротации и отзыва. Да, оно того стоит. Мы решили эту задачу для обновлений ПО десятилетие назад; командным каналам нужно то же отношение.
Считайте сеть враждебной
Если устройство поставляется с сотовым модемом и учётными данными по умолчанию, оно окажется в поисковике открытых устройств через несколько недель после развёртывания. Единственное надёжное решение — проектировать, исходя из того, что это гарантировано: входящие соединения по умолчанию запрещены, телеметрия только исходящая в брокер, плоскость управления доступна только через туннель с взаимной аутентификацией. «Не выставляйте это в интернет» — совет; «сделайте так, чтобы экспозиция была переживаемой» — инженерия.
Изоляция обязательна: правильная сегментация
Все фреймворки по безопасности OT — IEC 62443, рекомендации NIST, классическая модель Перье (Purdue) — говорят одно: держите системы управления подальше от плоских сетей. И всё же сотовый модем в морозильной витрине — воплощение антипаттерна. Он полностью обходит корпоративный файрвол и создаёт тысячи неконтролируемых, индивидуально адресуемых точек входа, о которых команда безопасности может даже не знать.
Архитектура, которая реально работает, выглядит так:
- Контроллеры живут в выделенном OT VLAN без маршрута в интернет и без маршрута в корпоративную ИТ. Общаться с ними может только один шлюз.
- Шлюз применяет белые списки протоколов — контроллер общается со шлюзом только по Modbus или протоколу вендора и ни по какому другому. Аномалии здесь — сигналы с высокой ценностью, потому что легитимный трафик скучен и предсказуем.
- Удалённый доступ идёт через jump host с MFA, записью сессий и учётными данными с ограниченным сроком действия. Подрядчик по холоду получает четырёхчасовое окно к конкретному магазину, а не постоянный VPN ко всему парку.
- Только исходящая телеметрия. Если облаку вендора нужны данные о температуре, шлюз их отправляет. Ничто не забирает данные изнутри.
- Инвентаризируйте всё. Нельзя сегментировать то, о чём не знаешь. Тот самый сотовый модем в морозильной витрине — именно та теневая связность, которую пропускают инвентаризации, пока Shodan не найдёт её за вас.
Ничто из этого не является гипотетическим или дорогим по сравнению с альтернативой. Трудность организационная, а не техническая: нужно, чтобы служба эксплуатации, команда ИТ-безопасности и вендоры договорились, кто за что отвечает. В большинстве розничных компаний OT проваливается в щель между командами — слишком физический для ИТ и слишком сетевой для эксплуатации. Эта неопределённость и есть настоящая уязвимость, та же самая, что превращает пробелы в аутентификации облаков в невидимые взломы, как мы видели в слепых зонах журналирования облачной аутентификации: если телеметрией никто не владеет, атаку никто не увидит.

Что стоит вынести разработчикам ПО
Возможно, вы никогда не будете трогать холодильный контроллер, но режимы отказа здесь — это режимы отказа любой подключённой системы, и всё чаще это ваша проблема. Граница между ИТ и OT постоянно размывается: складские роботы, офисный HVAC, лабораторные приборы и умное здание работают на встраиваемом Linux и общаются с облаками. Некоторые лабораторные аппараты в больницах теперь отказываются запускать тесты, пока на их подписочный аккаунт не внесены деньги, — то есть сбой биллинга или взлом подключённого сервиса могут остановить медицинскую диагностику. Мы построили этот мир по одной удобной фиче за раз.
Поэтому уроки переносятся напрямую. Инвентаризируйте свою поверхность атаки: если вы не знаете, что слушает порты, это найдёт кто-то другой. Относитесь к опасным операциям как к привилегированным, даже если они считаются «обычными функциями», потому что атакующий, который доберётся до вашей плоскости управления, использует ваши функции против вас. Подписывайте то, что важно, и задавайте срок действия всему остальному. Проектируйте отказоустойчивое состояние как безопасное: контроллер, потерявший связь, должен продолжать охлаждать, а не считать каждую команду из очереди доверенной. И когда выпускаете исправление безопасности, говорите об этом громко: патч, который никто не установил, неотличим от отсутствия патча.
Атака на морозилки супермаркета запомнится прежде всего своей абсурдностью — хакеры против замороженного горошка. Но следующая будет нацелена не на мороженое. Она ударит по тому же классу открытых, непропатченных и слабо аутентифицированных контроллеров на складе фармпрепаратов с холодом, в системе охлаждения дата-центра или в городской системе водоснабжения. Железо то же самое. Учётные данные так же плохи. Единственная переменная — что нагреется, затопится или выключится, когда кто-то введёт пароль дня.


