Pin control attack
Pin control attack (атака управления выводами) — это класс атак на систему на кристалле (SoC) в встраиваемой системе, при которых злоумышленник нацелен на конфигурацию портов ввода-вывода таких систем, отключая функции ввода-вывода на уровне программного обеспечения или операционной системы без возможности обнаружения. Способствует осуществлению атаки отсутствие аппаратной защиты настроек выводов и схем мультиплексирования выводов.
Главной целью атаки управления выводами является программируемый логический контроллер (ПЛК). Атака управления выводами особо актуальна для ПЛК, поскольку именно порты ввода-вывода служат основным механизмом взаимодействия и управления внешним миром. В ПЛК, как и в других встраиваемых устройствах, управление портами осуществляется с помощью схем управления выводами. Атака управления выводами позволяет злоумышленнику нарушить целостность и доступность портов ввода-вывода ПЛК через эксплуатацию специфических операций управления выводами и отсутствие связанных с ними аппаратных прерываний.
Впервые данное семейство атак было представлено на конференции Black Hat Europe 2016[1]. Атака управления выводами использует параметры настройки периферийных портов ввода-вывода SoC внутри ПЛК для физического отключения интерфейса связи модулей ввода-вывода от ПЛК. Благодаря воздействию именно на конфигурацию портов, а не на программную логику или работу системы во время выполнения, злоумышленник может обходить классические механизмы обнаружения встраиваемых систем[2].
История
Классические атаки на ПЛК основаны на модификации прошивки устройства, его конфигурационных параметров или нарушении порядка выполнения процессов. Подобные атаки, как правило, приводят к нарушениям нормальной работы ПЛК, и такие изменения могут быть обнаружены системами безопасности, например, IDS, после чего оператор уведомляется о случившемся. В отличие от них, атака управления выводами направлена на динамическую память ПЛК, в которой хранится конфигурация портов ввода-вывода[3][4].
Векторы атаки
Исследователями были описаны как минимум два варианта: атака конфигурации выводов и атака мультиплексирования выводов[5]. Несмотря на различие в реализации, оба вида атак приводят к физическому отключению доступа к портам ввода-вывода без обнаружения программным обеспечением, благодаря отсутствию аппаратных прерываний для мультиплексирования и конфигурирования портов[6].
Атака мультиплексирования выводов
Современные SoC имеют сотни выводов, подключённых к электронным цепям. Часть из них имеет строго определённые назначения: питание, тактирование и т. д. Поскольку разные производители оборудования предъявляют различные требования к портам ввода-вывода, производители SoC проектируют свои изделия так, чтобы отдельный физический вывод поддерживал несколько взаимоисключающих функций в зависимости от сценария использования[7]. Такой механизм переназначения функций выводов называют мультиплексированием, и он является важной характеристикой SoC[8]. Со стороны операционной системы рекомендуется выполнять такие переназначения только при запуске устройства, поскольку аппаратные прерывания для изменений мультиплексирования отсутствуют. Тем не менее, пользователь или программа могут менять настройки мультиплексирования в время выполнения без каких-либо ограничений.
Существующая архитектура мультиплексирования выводов несёт риски безопасности. Например, если одна программа использует периферийный контроллер, подключённый к конкретному выводу с определённой настройкой, другая программа, изменившая параметр мультиплексирования, физически разрывает связь между контроллером и выводом. Поскольку аппаратные прерывания для этой операции не предусмотрены, операционная система продолжает считать, что первый контроллер всё ещё доступен, и продолжает выполнять запрошенные операции чтения и записи, не сигнализируя об ошибках.
Изменение назначения вывода, связанного с портами ввода-вывода в процессе работы, называется атакой мультиплексирования выводов[9].
Атака конфигурации выводов
ПЛК способен принимать и передавать различные электрические сигналы. Такой ввод обычно поступает от датчиков, а вывод — используется для управления двигателями, клапанами, реле и пр. Все эти сигналы связаны с конкретными контактами на интегральной схеме, выполняющей роль системы на кристалле (SoC). Контроллер выводов SoC задаёт режимы работы выводов: вход, выход и другие параметры. Современные исследования показали, что злоумышленник, скомпрометировавший ПЛК, способен незаметно манипулировать портами ввода и вывода, не вызывая тревоги у операторов и не отображая изменения в человеко-машинном интерфейсе (HMI)[10].
Незаметность
Как изменение конфигурации выводов, так и мультиплексирование не порождают аппаратных тревог и прерываний. Поэтому в ходе активной атаки программное обеспечение ПЛК работает с виртуальной картиной портов ввода-вывода, в то время как злоумышленник физически разрывает соединение с реальными устройствами посредством виртуальной памяти. Состояние, при котором значения портов ввода-вывода в памяти ПО не соответствуют физическому состоянию оборудования, называется иллюзией памяти портов ввода-вывода[11].