Уязвимости И Вредоносный Код В Системах Промышленной Автоматизации

Средства промышленной автоматизации, разработанные 15-20 лет назад, практически не содержали функций безопасности.

За последние десятилетия на предприятиях накопился целый парк оборудования с фатальными архитектурными недостатками, которыми могут воспользоваться киберпреступники.

В этом посте мы рассказываем об уязвимостях систем промышленной автоматизации и даем рекомендации по улучшению ситуации.



Уязвимости и вредоносный код в системах промышленной автоматизации

В 2019 году мы обнаружили интернет-магазин, распространяющий программное обеспечение для тяжелой промышленной техники.

Мы скачали некоторые из этих приложений и провели их реверс-инжиниринг, чтобы понять, как они работают. Их код был написан на одном из проприетарных языков программирования, используемых для автоматизации промышленных роботов, собирающих автомобили и упаковывающих продукты питания на сборочных линиях.

В одном из таких приложений была обнаружена уязвимость, которая запустила нашу изучать Мошенническая автоматизация: уязвимый и вредоносный код в промышленном программировании .

Изучив технические детали и слабые стороны восьми наиболее популярных сред промышленного программирования (ABB, Comau, Denso, Fanuc, Kawasaki, Kuka, Mitsubishi и Universal Robots), мы обнаружили, что эти языки можно использовать для создания вредоносных червей, которые будет перемещаться от одного уязвимого робота к другому, подчиняясь дистанционным командам своих операторов.

Обнаруженные недостатки являются результатом конструктивных решений, принятых десятилетия назад. Эти решения определили технологию, методы и инструменты, которые до сих пор используются для программирования промышленного оборудования.

Давайте рассмотрим последствия этого выбора в контексте современных киберугроз.



Кража данных у робота

Мы обнаружили реальный случай уязвимого веб-сервера, реализованного в виде приложения для запуска на промышленном роботе.

Веб-сервер, написанный на ABB Rapid, содержал уязвимость обхода пути, которая позволяла злоумышленнику подключиться к роботу по сети и скопировать любые файлы с контроллера робота, включая журналы операций.

Такие файлы, скорее всего, содержат различные конфиденциальные данные и ноу-хау, поэтому их можно выгодно продать на подпольных рынках.

Если злоумышленнику удастся взломать компьютер в той же сети, что и робот, он сможет под видом агента подключиться к веб-серверу контроллера, запросить интересующий его файл и получить его без авторизации, поскольку программа выполняет любые запросы агента.



Уязвимости и вредоносный код в системах промышленной автоматизации

Фрагмент кода уязвимого приложения.

Источник (далее, если не указано иное): Trend Micro. Строка 493 вызывает функцию sendFile для отправки запрошенного файла клиенту.

Параметр pageString никак не фильтруется, поэтому может содержать ".

/" или другой путь.

Это позволяет обойти файловую систему и загрузить практически любой файл.



Уязвимости и вредоносный код в системах промышленной автоматизации

Схема эксплуатации уязвимости Примечательным в данном случае стал комментарий, оставленный в коде разработчиком уязвимого веб-сервера.

Он знал, что написанный им код уязвим, но ничего не сделал для устранения проблемы, поскольку предполагал, что все запросы будут поступать от «правильного» браузера, который проверит входные данные и не допустит строку типа «.

».

для передачи обработчику.

.

\\.

\\":

Уязвимости и вредоносный код в системах промышленной автоматизации

Фрагмент кода с комментарием разработчика о том, что браузер должен дезинфицировать данные


Замена команд роботу по сети

«Эксплуатация некоторых уязвимостей может привести к последствиям в физическом мире, например, к нанесению вреда готовой продукции или даже окружающим людям.

В опенсорсном проекте промышленных роботов Kuka мы обнаружили уязвимость, позволяющую изменять траекторию движущейся части.

Программа получает по сети поток координат и передает их исполнительному механизму, который выполняет заданные движения.

Для этого используется специальный класс процедур — серверы автоматизации движения.

Это стандартный интерфейс, который позволяет производителям промышленных роботов обеспечить единый способ управления движением своих продуктов.



Уязвимости и вредоносный код в системах промышленной автоматизации

Уязвимый код сервера автоматизации дорожного движения не содержит никаких проверок легитимности передаваемых на него данных.

Серверный код никак не проверяет, откуда взялась следующая порция координат для перемещения робота; он не обеспечивает внутреннюю аутентификацию.

Единственная защита — проверка MAC-адреса и IP-адреса отправителя, любой из которых может быть легко подделан злоумышленником, проникшим в сеть.

На нашем лабораторном стенде мы проверили, что с помощью спуфинга можно фальсифицировать трафик между роботом и инженерной рабочей станцией.

Злоумышленник мог отправить произвольные координаты, а робот просто выполнил бы их, что привело бы к аварии в реальной производственной среде.

Внедряя в трафик сетевые пакеты с неверными координатами, мы смогли несколько раз вытолкнуть манипулятор за пределы зоны безопасности и ударить «рукой» робота по физическому объекту.

В результате отвалилась «рука», которой робот подбирает предметы:

Уязвимости и вредоносный код в системах промышленной автоматизации

Отвалившаяся рука робота — результат внесения в дорожное движение небезопасных координат


Динамическое вредоносное ПО

Этот тип атаки предполагает, что робот запускает программу, написанную системным интегратором, которая считается доверенной.

В действительности любая программа, созданная интегратором, считается доверенной и развертывается без проверок безопасности кода.

Компрометировав интегратор или заменив программу в уязвимом сетевом хранилище, можно незаметно внедрить вредоносный код в сеть предприятия: добавить загрузчик, который скачивает нужный злоумышленнику модуль и запускает его на исполнение в рамках стандартного производственного цикла.



Уязвимости и вредоносный код в системах промышленной автоматизации

Загрузчик вредоносного ПО, написанный на языке программирования для промышленных роботов Чтобы протестировать эту концепцию, мы написали дроппер на языке программирования промышленных роботов и проверили, что внешняя программа может использоваться для загрузки кода в контроллер робота и его выполнения.

Получив контроль, такая программа может выполнять дальнейшие вредоносные действия, собирая информацию о сетевой инфраструктуре, похищая файлы и учетные данные.



Необычная уязвимость RCE

Одним из наших открытий стала вполне приличная программа, выполняющая функции, имена которых она получает по сети.

Для их выполнения она использует динамическую загрузку кода, но не интересуется, что именно она запускает: в программе не предусмотрена проверка целостности загружаемых библиотек.



Уязвимости и вредоносный код в системах промышленной автоматизации

Уязвимая логика «порядочного» приложения

Уязвимости и вредоносный код в системах промышленной автоматизации

Фрагмент кода, реализующий уязвимую логику.

Хотя сама программа не содержит вредоносных функций, злоумышленник может использовать ее для подачи команд роботу в нужный момент, влияя на физический мир.



Венец творения – зловредный червь

Чтобы продемонстрировать серьезность обнаруженных проблем, мы разработали программу с функцией самовоспроизведения и автоматического обновления, динамической загрузкой кода с сервера управления и возможностью удаленного управления.

Сканер также может выполнять сканирование сети, передавать произвольные файлы на управляющий сервер, вести список зараженных устройств и выступать в роли бота.



Уязвимости и вредоносный код в системах промышленной автоматизации

Логика PoC-программы, имитирующей работу реального вредоносного ПО

Уязвимости и вредоносный код в системах промышленной автоматизации

Формирование списка найденных файлов и отправка его на управляющий сервер


Источник проблем

Проанализировав восемь популярных языков программирования промышленной автоматизации, разработанных за последние десятилетия, мы пришли к выводу, что основная причина выявленных и потенциальных уязвимостей заключается в том, что эти языки содержат низкоуровневые средства доступа к системным ресурсам.

И хотя эти инструменты сами по себе не опасны, злоумышленники могут использовать их не по прямому назначению, критически влияя на безопасность робота, его оператора и подключенных систем.

Например, с их помощью можно переместить манипулятор вверх, поднять заготовку, опустить манипулятор вниз и освободить заготовку.

Этот богатый набор сложных функций дает инженерам-технологам свободу разрабатывать приложения, в которых они могут получать данные из сети, читать и записывать файлы.

Однако, поскольку платформы не обеспечивают безопасный доступ к этим расширенным возможностям, злоумышленники могут использовать их для написания вредоносных модулей.

Другая проблема устаревших языков промышленной автоматизации (Industrial Robots Programming Language, IRPL), унаследованных вместе с оборудованием, заключается в том, что они не имеют инструментов проверки кода на наличие небезопасных шаблонов, аналогичных инструментам для C, C++, C#, Java, PHP и Питон.

Каждый OEM создает свои собственные языки и среду, в которой будут работать целевые программы.

Некоторые из них основаны на операционных системах реального времени (RTOS), но в целом стандартизации нет. Семантика каждого IRPL также уникальна и может существенно отличаться от семантики языков программирования общего назначения.

Некоторые функции, такие как манипулирование строками или криптографические операции, либо отсутствуют в IRPL, либо не так развиты, как в традиционных языках.

Основными источниками уязвимостей в программах, написанных на IRPL, являются три основные функции: работа с файлами и каталогами, динамическая загрузка модулей и вызов функций по имени, сетевые функции – прием и передача данных во внешние системы.



Уязвимости и вредоносный код в системах промышленной автоматизации

«Опасные» функции доступны в IRPL


Как защитить себя

Как и любое программное приложение, работающее с ненадежными данными, системы промышленной автоматизации должны быть спроектированы, внедрены, настроены и развернуты с использованием соответствующих механизмов безопасности.



Уязвимости и вредоносный код в системах промышленной автоматизации

Сводные рекомендации по обеспечению безопасности программ промышленной автоматизации Поэтому при написании таких программ необходимо руководствоваться следующими принципами:
думайте о промышленных роботах как о компьютерах, а их прикладных программах как о чрезвычайно важном коде; аутентифицировать все сообщения; внедрять политики контроля доступа; внедрить проверку ввода, где это применимо; обеспечить постоянную очистку выходных данных; При обработке ошибок не раскрывайте ненужные технические подробности; создавать правильные конфигурации и процедуры развертывания; Внедрить процессы управления изменениями для кода промышленной автоматизации.



Старый или умный?

В то время как традиционные разработчики программного обеспечения потратили десятилетия на борьбу с последствиями небезопасного программирования и разработку различных методов, обеспечивающих победу, мир промышленной автоматизации оказался не готов к обнаружению и предотвращению использования уязвимостей.

Учитывая темпы конвергенции ИТ/ОТ, практика разработки безопасного кода должна стать приоритетом в отрасли промышленной автоматизации.

В противном случае ближайшие несколько лет могут принести нам множество сообщений об инцидентах в производственной сфере, причем последствия этих инцидентов проявятся не только в киберпространстве, но и в физическом мире.

Теги: #информационная безопасность #Исследования и прогнозы в ИТ #уязвимости #Промышленное программирование #автоматизация #trend micro

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.