Одним из самых зрелищных элементов соревновательной программы форума PHDays V, прошедшего в конце мая в Москве, стал конкурс, представленный компанией Advantech. Участники должны были захватить контроль над промышленной системой управления, связанной с ракетной установкой, и произвести выстрел по «секретному объекту».
Что нужно было сделать
Стенд представлял собой ракетную установку, размещенную на турели, вращающейся по двум осям, и мишень. Конкурсанты должны были получить доступ к системе управления, развернуть установку в сторону мишени и поразить ее (при этом вывод оборудования из строя не привел бы к выполнению задачи).
В ходе конкурса имитировалась ситуация, при которой взломщик уже проник за внешний периметр организации и имеет полный доступ к офисному сегменту сети. Подключившимся выдавался логин и пароль операторского уровня, чтобы они могли наблюдать за функционированием системы. Также на стенде имелась табличка со всеми IP-адресами установленных устройств.
В этом году отдельные конкурсы были составной частью CTF (подробнее в нашей статье на Хабрахабре). Свои силы в этом конкурсе попробовали более 40 посетителей PHDays и несколько CTF-команд.
Технические детали
Станция SCADA была аппаратно выполнена на промышленном панельном компьютере Advantech TPC-1840WP и работала под управлением операционной системы Windows 7 Ultimate без дополнительных средств защиты.
Операционная система имела все штатные обновления, доступные к началу конкурса; брандмауэр Windows был включен. SCADA была реализована на программном обеспечении Advantech WebAccess 8.0.
Поскольку данное ПО могло содержать незакрытые уязвимости, для которых существуют эксплойты, оператору предоставлялся только доступ к визуализации процессов в контроллере. Теги контроллера имели статус read-only, поэтому их перезапись не влияла на работоспособность оборудования. Получение привилегий администратора открывало взломщику страницу с описанием структуры и внутренней адресации системы.
Связь между SCADA-системой и PLC осуществлялась при помощи протокола Modbus TCP c использованием псевдорегистров (считывание производилось не из модулей входов-выходов, а из ячеек памяти программы контроллера).
Штатно и клиентский, и администраторский доступ к SCADA-системе WebAccess осуществляется через браузер Internet Explorer по протоколу HTML4 при помощи IIS, являющегося частью стандартного дистрибутива Windows. По умолчанию аутентификация пользователя выполняется самой SCADA-системой.
Физически связь между станцией SCADA и PLC осуществлялась через управляемый L2-коммутатор Advantech EKI-7659C при помощи обычного Fast Ethernet. Через этот же коммутатор осуществлялось подключение конкурсантов — по проводам через EKI-4654R либо по Wi-Fi через EKI-6351. Коммутатор не использовался для реализации VLAN или в качестве фильтра MAC-адресов, хотя имел такую возможность. Кроме того, в подсеть был подключен ноутбук для администрирования стенда.
Функции PLC были реализованы на PAC-контроллере Advantech APAX-5620KW, который представляет собой устройство на базе ARM-процессора под управлением операционной системы WinCE5. Контроллер реализовывал рабочий цикл поворота ракетницы по таймеру (условно — технологическую программу управляемого технологического процесса). Для этого использовалось softlogic-ядро ProConOs, написанное компанией KW Software и исполняемое как задача уровня ядра. Программа собственно перемещения была реализована автором стенда на языке ladder logic при помощи пакета KW Multiprog. Цикл программы — 50 мс.
Данный контроллер имеет три штатных метода подключения. Один — через местные разъемы VGA и USB — был недоступен конкурсантам. Второй — через удаленный рабочий стол — был закрыт паролем. Третий — из системы разработки на языках IEC 61131 — позволяет управлять softlogic-подсистемой и отлаживать ее.
Физически контроллер имел два LAN-порта, один из которых был подключен к SCADA-системе (офисная подсеть), а второй к модулям ввода-вывода (полевая подсеть). Сетевые порты имели адресацию из разных подсетей. Таким образом решались задачи балансировки нагрузки и разделения доступа.
Для ввода-вывода использовались модули ADAM-6050 (для дискретного ввода c датчиков конечного положения по осям) и ADAM-6260 (для управления реле). Эти модули имеют возможность распределенного программирования на языке GCL, и она была использована для реализации функций аварийной защиты. В частности, при наезде на концевик модуль DI сообщает об этом факте модулю DO, и модуль DO выполняет реверсирование соответствующего мотора на 3 сек. На случай прерывания связи был установлен watchdog, отключавший все выходы. В блоке управления приводом запуска ракет специально была оставлена возможность обхода блокировки путем записи логической «1» в выделенную внутреннюю переменную (для этого необходимо было в рамках внутренней подсети выполнить функцию записи в регистр Modbus).
Физически связь между модулями выполнялась без использования внешнего коммутатора, с использованием возможностей технологии daisy chain в ADAM-6260.
Сама турель ракетницы питалась от отдельного блока на 5 VDC и была оснащена тремя моторами (повороты вокруг вертикальной и горизонтальной осей, а также запуск ракет). Для выполнения реверсирования поворотных моторов, а также в качестве нулевого уровня защиты от короткого замыкания блока питания использовалась релейная схема. Кроме того, ракетница была оснащена пятью нажимными датчиками конечного положения (влево, вправо, вверх, вниз, залп произведен).
На всех компонентах системы, где это было возможно, были установлены несловарные (генерированные) пароли длиной 8—10 символов, включавшие латинские заглавные и строчные буквы, цифры, знаки пунктуации.
Ход сражения
Соревнование проходило в течение двух дней форума Positive Hack Days.
День первый
В течение первого дня конкурсанты в основном разбирались в структуре внешней подсети и пытались воздействовать на систему через SCADA. Хакеры отключали службы операционной системы, в том числе брандмауэр, смогли «подселить» нового пользователя (правда, не администраторского уровня), два раза перезагружали компьютер.
Несколько человек, используя эксплойты Windows и SCADA-системы, смогли получить администраторский доступ к WebAccess, ознакомились с описанием тегов и имели возможность остановить ядро системы. Однако, система не отзывалась на попытку переписывания тегов, ядро перезапускалось в автоматическом режиме при помощи Windows Scheduler. Вечером обессиленные хакеры оставили автограф на одной из страниц системы — и отложили свои попытки до утра.
День второй
Половина второго дня прошла в поисках источника управляющих сигналов. Один из конкурсантов обнаружил незакрытый эксплойт в WinCE5, но использовать его не смог.
В 14 часов конкурсантам была выдана подсказка о том, что внешний сегмент контроллера имеет статус только для чтения и необходимо постараться «пройти» контроллер.
В этот момент к работе над стендом подключилась CTF-команда RDot. В течение полутора часов члены команды смогли получить доступ к удаленному рабочему столу APAX-5620, получили возможность «убивать» и запускать задачу softlogic и манипулировать параметрами сетевых адаптеров.
Также один из конкурсантов утверждал, что получил возможность однонаправленной пересылки пакетов с LAN1 в LAN2 без получения обратных пакетов. Однако идеология Modbus не позволила использовать эту возможность для деструктивных действий.
В 15 часов на стенде проявились проблемы механического характера. Конкурсанты получили возможность прослушивания пакетов работы KW Multiprog с контроллером — остановка, перезапуск контроллера, включение режима отладки, использование функций force по отношению к ячейкам памяти контроллера. Однако использования полученной информации конкурсанты не продемонстрировали.
В 16 часов участникам были выданы исходники программ модулей APAX и ADAM для поиска возможностей эксплуатации штатных программ. Команда RDot отметилась успешной попыткой обратного чтения программы из контроллера (эту функцию в KW Software непредусмотрительно не защитили паролями), включением режима отладки и наблюдением за работой регистров контроллера.
В 17 часов пользователи были допущены во внутреннюю подсеть. Фактически началась DDoS-атака на систему противоаварийной защиты с попытками ее отключить.
К моменту завершения конкурса в 18 часов никто не смог остановить работу GCL-программы или управлять выходами в заданных целях, хотя имелись следы воздействия на прошивку модулей. Восстановление функционирования модулей выполнялось уже вне стенда, хотя и не в условиях ремонтного центра.
Призовые места были распределены «по очкам»:
- I место — Артуру Г. из команды Rdot за вскрытие удаленного рабочего стола контроллера APAX, успешную работу с исходником на языке IEC61131,;
- II место — Павлу И. за то, что он первым получил администраторский доступ к интерфейсу SCADA-системы и элегантно с ним обошелся;
- III место — Александру Я. за пересылку пакетов между портами контроллера APAX и общий объем затраченных усилий.
Утешительный приз — Алексею П. за использование методов социальной инженерии (за обнаружение бекапа проекта SCADA на ноутбуке администратора и получение администраторского пароля оттуда).
Заключение
По итогам соревнования организаторы сделали следующие важные выводы:
- Системы промышленного управления в общем плохо знакомы большинству нарушителей. Методы применялись в основном силовые (атаки портов) либо не учитывающие специфики системы (мониторинг Modbus-трафика при помощи Wireshark). Впрочем, при достаточной мотивации можно разобраться в структуре системы и методах ее штатного использования.
- Наиболее уязвимыми являются элементы, приближенные к операторскому интерфейсу — вход клиентов SCADA, удаленные рабочие столы. Для систем, основанных на Windows, обязательна дополнительная программная защита как самих компьютеров (фаерволы), так и каналов связи (шифрование).
- Шина предприятия и полевая шина должны быть физически изолированы друг от друга, как минимум устройством с двумя сетевыми картами. Использование VLAN далеко не всегда эффективно из-за наличия уязвимостей в веб-интерфейсах коммутаторов.