Демонстрация атаки на цепочку поставок в АСУ ТП
Демонстрация атаки на цепочку поставок (supply chain attack) в симуляции автоматизированной системы управления технологическими процессами (АСУ ТП). Сравнивается поведение АСУ ТП на KasperskyOS и Linux при эксплуатации уязвимости.
Список программ
virtual_valve– программа, реализующая компонентVirtualValveв АСУ ТП. Представляет собой эмулятор вентиля с состояниямиоткрыто/закрыто. Принимает запросы по IPC от программыvalve_controlна переключение своего состояния.valve_control– программа, реализующая компонентValveControlв АСУ ТП. Представляет собой эмулятор контроллера вентиля. Циклически отправляет запросы по IPC к программеvirtual_valveдля управления состоянием вентиля.log_sender– программа, реализующая компонентLogSenderв АСУ ТП. Непрерывно журналирует диагностических данные АСУ ТП и отправляет их по сети на удалённый компьютер. Является индикатором нормальной работы АСУ ТП. Сетевой порт, используемый для отправки системных логов программойlog_sender, настраивается через параметр-DLOG_SENDER_PORTв файле./log_sender/CMakeLists.txt(значение по умолчанию —8123).network– программа для настройки сетевого интерфейса.dnet_hw– специализированный сетевой драйвер с преднамеренно внедренной уязвимостью, реализующий компонентDriverNetworkв АСУ ТП. Драйвер критически завершает работу при получении “магического” пакета (специально сформированного вредоносного сетевого пакета).
Сценарий демонстрации
В штатном режиме работы АСУ ТП компонент ValveControl циклически управляет вентилем VirtualValve, переключая его состояния. Компонент LogSender непрерывно собирает и отправляет диагностических данные АСУ ТП по сети.
При отправке специально сформированного вредоносного пакета через сетевой интерфейс Ethernet происходит эксплуатация уязвимости в драйвере NetworkDriver. Как результат:
- в Linux атака вызывает критическую ошибку ядра и полный отказ АСУ ТП c остановкой всех компонентов;
- в KasperskyOS атака приводит лишь к отказу компонента
NetworkDriverи прекращению сетевой передачи диагностических данных компонентомLogSender, при этом остальные компоненты АСУ ТП продолжают функционировать в штатном режиме.
Подготовка стенда
Демонстрация запускается на аппаратной платформе Radxa ROCK 3A.
Настройка UART
Для вывода диагностических данных с Radxa ROCK 3A на хостовый компьютер используется UART (Universal Asynchronous Receiver-Transmitter). Чтобы настроить UART, необходимо ознакомиться со следующими инструкциями:
Настройка сети
Настройка сети для Radxa ROCK 3A может быть выполнена любым доступным способом. Например, с подключением через USB-Ethernet адаптер:
- Подключите адаптер к хостовому компьютеру и соедините его с Radxa ROCK 3A.
-
На хостовом компьютере назначьте адаптеру статический IP-адрес, выполнив следующую команду:
sudo ip addr add 10.0.2.35/24 dev <имя_адаптера> -
Настройте Radxa ROCK 3A в зависимости от используемой ОС:
- Для KasperskyOS IP-адрес
10.0.2.15уже предустановлен. -
Для Linux необходимо подключиться к Radxa ROCK 3A через UART и назначить IP-адрес командой:
sudo ip addr add 10.0.2.15/24 dev eth0
- Для KasperskyOS IP-адрес
Подготовка загрузочной SD-карты
Для установки операционной системы на Radxa ROCK 3A необходимо записать загрузочный образ системы на SD-карту. Для этого на Linux следуйте следующим инструкциям:
-
Выполните команду для просмотра информации о всех блочных устройствах системы:
lsblk - В выводе команды найдите устройство, соответствующее вашей SD-карте, вида
/dev/sd[X]. -
Запишите загрузочный образ на устройство, выполнив команду:
# В следующей команде path_to_img – путь к файлу образа, # [X] – последний символ в имени блочного устройства для SD-карты. sudo dd bs=64k if=./path/to/image.img of=/dev/sd[X]
Для Windows используйте утилиты для записи образа на устройство, например, Rufus или Balena Etcher.
Установка KasperskyOS CE SDK
Установите версию 1.4.0 KasperskyOS CE SDK c поддержкой аппаратной платформы Radxa ROCK 3A и соберите необходимые драйвера для Radxa ROCK 3A, выполнив следующие команды:
# Замените <lang> на одно из двух значений: en или ru.
sudo dpkg -i KasperskyOS-Community-Edition-RadxaRock3a-1.4.0.102_<lang>.deb
sudo apt --fix-broken install
sudo /opt/KasperskyOS-Community-Edition-RadxaRock3a-1.4.0.102/drivers/cross-build.sh -s /opt/KasperskyOS-Community-Edition-RadxaRock3a-1.4.0.102/
sudo /opt/KasperskyOS-Community-Edition-RadxaRock3a-1.4.0.102/common/radxa_prepare_sdcard_image.sh
Сборка и запуск решения на KasperskyOS
-
Перейдите в директорию проекта и запустите команды конфигурации
CMake:export SDK_PREFIX=/opt/KasperskyOS-Community-Edition-RadxaRock3a-1.4.0.102/ export PATH="$SDK_PREFIX/toolchain/bin:$PATH" cmake -G "Unix Makefiles" -B./.build -DCMAKE_TOOLCHAIN_FILE=/opt/KasperskyOS-Community-Edition-RadxaRock3a-1.4.0.102/toolchain/share/toolchain-aarch64-kos.cmake -
Соберите загрузочный образ, выполнив команды:
# Сборка всех программ (предупреждения можно игнорировать) cmake --build ./.build --target all # Сборка загрузочного образа cmake --build ./.build --target sd-image -
Запишите собранный образ на SD-карту:
# Замените /dev/sd[X] на ваше устройство sudo dd bs=64k if=./.build/hdd.img of=/dev/sd[X] -
Подключите загрузочную SD-карту к Radxa ROCK 3A. Подайте питание на Radxa ROCK 3A и дождитесь, пока запустится решение KasperskyOS, в котором будут работать компоненты АСУ ТП.
Посмотреть диагностических данные, отправляемые программой
log_sender, можно выполнив команду:nc 10.0.2.15 8123 -
Инициируйте атаку, отправив “магический” пакет командой:
echo "~~MAGIC~~" | nc 10.0.2.15 8123 -
Ожидаемое поведение АСУ ТП:
- Драйвер
NetworkDriverобрабатывает “магический” пакет. - Уязвимость вызывает критическую ошибку в работе драйвера.
NetworkDriverаварийно завершает работу с сообщением в системный журнал.- Компоненты АСУ ТП
ValveControl,VirtualValveи ядро KasperskyOS продолжают штатную работу,LogSenderпрекращает отправку диагностических данных по сети.
Инцидент локализован на уровне драйвера и критические компоненты АСУ ТП не затронуты, работоспособность АСУ ТП сохраняется.
- Драйвер
Сборка и запуск решения на Linux
-
Подготовьте SD-карту для Radxa ROCK 3A, выполнив команду:
# Замените /dev/sd[X] на ваше устройство wget https://github.com/radxa-build/rock-3a/releases/download/b25/rock-3a_debian_bullseye_cli_b25.img.xz xz -dc rock-3a_debian_bullseye_cli_b25.img.xz | sudo dd of=/dev/sd[X] bs=1M status=progress conv=fsync -
Настройка сети между управляющим компьютером и Radxa ROCK 3A. Подключитесь к Radxa ROCK 3A со стандартными учетными данными:
Login: rock Password: rockНастройте сетевой интерфейс, выполнив команду:
sudo ip addr add 10.0.2.15/24 dev eth0 -
В соответствии с инструкцией соберите ядро Linux для Radxa ROCK 3A с применением патча с уязвимостью
./linux-network-driver-crash.patch:git clone --recurse-submodules https://github.com/radxa-repo/bsp.git cd bsp ./bsp linux rk356x --no-build cd .src/linux git apply <path_to_project>/linux-network-driver-crash.patch ./bsp --no-prepare-source linux rk356x -r 999 -
Установите собранное ядро по инструкции.
# На хостовой системе scp linux-image-5.10.160-999-rk356x_5.10.160-999_arm64.deb rock@10.0.2.15:~ Password: rock# На целевой системе sudo dpkg -i linux-image-5.10.160-999-rk356x_5.10.160-999_arm64.deb sudo reboot -
Соберите этот проект для Linux и скопируйте на Radxa ROCK 3A файлы для симуляции АСУ ТП:
export CC=aarch64-linux-gnu-gcc cmake -G "Unix Makefiles" -B./.build-linux cmake --build ./.build-linux --target all scp .build-linux/{log_sender/LogSender,valve_control/ValveControl,virtual_valve/VirtualValve} rock@10.0.2.15:~ -
Запустите симуляцию АСУ ТП на Radxa ROCK 3A:
./VirtualValve & ./ValveControl & ./LogSender &Посмотреть диагностических данные, отправляемые программой
log_sender, можно выполнив команду:nc 10.0.2.15 8123 -
Инициируйте атаку, отправив “магический” пакет командой:
echo "~~MAGIC~~" | nc 10.0.2.15 8123 -
Ожидаемое поведение системы:
- Аварийное завершение ядра Linux, на которой развернуты компоненты АСУ ТП.
- Прекращение работы всех компонентов АСУ ТП.
Уведомления о товарных знаках
Зарегистрированные товарные знаки и знаки обслуживания являются собственностью их правообладателей.
Linux – товарный знак Linus Torvalds, зарегистрированный в США и в других странах.
© 2025 АО “Лаборатория Касперского”