
Инструментированный фаззер для приложений управления промышленными системами (ICS) на базе ПЛК, нацеленный на среду выполнения Codesys на контроллерах Wago, для обнаружения повреждений памяти и входных данных, вызывающих сбои.
ICSFuzz: инструмент фаззинга для приложений управления ICS
ICSFuzz — это инструмент фаззинга на стороне ПЛК для выявления уязвимостей в приложениях управления ICS
автор: Димитрис Тихелас \@ditihala_
.. _\@ditihala: https://www.twitter.com/ditihala
Для работы инструмента на вашей машине уже должен быть установлен кросс-компилятор. Поскольку фаззер выполняется непосредственно на ПЛК, его необходимо скомпилировать с помощью кросс-тулчейна на базе ARM, например OSELAS. Чтобы установить такой тулчейн, следуйте инструкциям по приведённой ниже ссылке и укажите в Makefile путь к вашему кросс-компилятору.
тулчейн OSELAS <https://pengutronix.de/en/software/toolchain.html>__Инструмент ICSFuzz — это специализированный инструмент оценки безопасности для проверки приложений управления ICS. На данный момент он поддерживает только приложения на базе платформы Codesys, которая была модифицирована и адаптирована для ПЛК Wago. Этот инструмент — результат нашей продолжающейся работы, поэтому любые предложения по улучшению и расширению совместимости более чем приветствуются :) Просто напишите мне на [email protected]
Этот инструмент представляет собой простое приложение, которое запускается на вашем ПЛК Wago. Просто запустите Makefile, скопируйте полученный бинарный файл fuzzer на свой ПЛК и выполните его! Поскольку инструмент обращается к произвольной памяти процессов и изменяет её, требуются права администратора. Пожалуйста, запускайте его от пользователя sudo или root.
Инструмент в настоящее время совместим с Codesys 3.5, патч 02.06.20(08) и более старыми версиями; обновите или откатите прошивку ПЛК, чтобы он мог корректно разместить ICSFuzz. Для визуальной обратной связи о процессе фаззинга вы можете использовать платформу e!cockpit, которая предлагается в качестве инструмента разработки/HMI для ПЛК Wago. С её помощью вы можете отслеживать фаззинг-вход, подаваемый в приложение, а также узнавать о возможном сбое: приложение останавливает выполнение, а светодиод "run" загорается красным. Поскольку приложение останавливается, текущий (зависший) вход и является причиной сбоя. Вы можете перезапустить приложение через e!cockpit и снова запустить фаззер.
Фаззер имеет начальное жёстко заданное стартовое значение (обозначено как seed_input в исходном коде), которое вы можете изменять по своему усмотрению, экспериментируя с фаззером.
Если вы нашли нашу работу интересной и используете её в своих (академических или иных) исследованиях, пожалуйста, цитируйте нашу статью Usenix Security 2021, описывающую ICSFuzz:
Tychalas, Dimitrios, Hadjer Benkraouda, and Michail Maniatakos. "ICSFuzz: Manipulating I/Os and Repurposing Binary Code to Enable Instrumented Fuzzing in {ICS} Control Applications." 30th {USENIX} Security Symposium ({USENIX} Security 21). 2021.
ICSFuzz, как и всё хорошее в этой жизни, стоит на плечах гигантов. Фреймворк основан на мощном AFL Михала Залевски для генерации необходимых мутаций входных данных, которые подаются в приложение ICS.
AFL <https://lcamtuf.coredump.cx/afl/>__