README.md

    Демонстрация атаки на цепочку поставок в АСУ ТП

    English version

    Демонстрация атаки на цепочку поставок (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 адаптер:

    1. Подключите адаптер к хостовому компьютеру и соедините его с Radxa ROCK 3A.
    2. На хостовом компьютере назначьте адаптеру статический IP-адрес, выполнив следующую команду:

      sudo ip addr add 10.0.2.35/24 dev <имя_адаптера>

    3. Настройте 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

    Подготовка загрузочной SD-карты

    Для установки операционной системы на Radxa ROCK 3A необходимо записать загрузочный образ системы на SD-карту. Для этого на Linux следуйте следующим инструкциям:

    1. Выполните команду для просмотра информации о всех блочных устройствах системы:

      lsblk
      
    2. В выводе команды найдите устройство, соответствующее вашей SD-карте, вида /dev/sd[X].
    3. Запишите загрузочный образ на устройство, выполнив команду:

      # В следующей команде 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.3.0 KasperskyOS CE SDK c поддержкой аппаратной платформы Radxa ROCK 3A и соберите необходимые драйвера для Radxa ROCK 3A, выполнив следующие команды:

    # Замените <lang> на одно из двух значений: en или ru.
    sudo dpkg -i KasperskyOS-Community-Edition-RadxaRock3a-1.3.0.111_<lang>.deb
    sudo apt --fix-broken install
    sudo /opt/KasperskyOS-Community-Edition-RadxaRock3a-1.3.0.111/drivers/cross-build.sh -s /opt/KasperskyOS-Community-Edition-RadxaRock3a-1.3.0.111/
    sudo /opt/KasperskyOS-Community-Edition-RadxaRock3a-1.3.0.111/common/radxa_prepare_sdcard_image.sh
    

    Сборка и запуск решения на KasperskyOS

    1. Перейдите в директорию проекта и запустите команды конфигурации CMake:

      export SDK_PREFIX=/opt/KasperskyOS-Community-Edition-RadxaRock3a-1.3.0.111/
      export PATH="$SDK_PREFIX/toolchain/bin:$PATH"
      cmake -G "Unix Makefiles" -B./.build -DCMAKE_TOOLCHAIN_FILE=/opt/KasperskyOS-Community-Edition-RadxaRock3a-1.3.0.111/toolchain/share/toolchain-aarch64-kos.cmake
      
    2. Соберите загрузочный образ, выполнив команды:

      # Сборка всех программ (предупреждения можно игнорировать)
      cmake --build ./.build --target all
      
      # Сборка загрузочного образа
      cmake --build ./.build --target sd-image
      
    3. Запишите собранный образ на SD-карту:

      # Замените /dev/sd[X] на ваше устройство
      sudo dd bs=64k if=./.build/hdd.img  of=/dev/sd[X]
      
    4. Подключите загрузочную SD-карту к Radxa ROCK 3A. Подайте питание на Radxa ROCK 3A и дождитесь, пока запустится решение KasperskyOS, в котором будут работать компоненты АСУ ТП.

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

      nc 10.0.2.15 8123
      
    5. Инициируйте атаку, отправив “магический” пакет командой:

      echo "~~MAGIC~~" | nc 10.0.2.15 8123
      
    6. Ожидаемое поведение АСУ ТП:

      1. Драйвер NetworkDriver обрабатывает “магический” пакет.
      2. Уязвимость вызывает критическую ошибку в работе драйвера.
      3. NetworkDriver аварийно завершает работу с сообщением в системный журнал.
      4. Компоненты АСУ ТП ValveControl, VirtualValve и ядро KasperskyOS продолжают штатную работу, LogSender прекращает отправку диагностических данных по сети.

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

    Сборка и запуск решения на Linux

    1. Подготовьте 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
      
    2. Настройка сети между управляющим компьютером и Radxa ROCK 3A. Подключитесь к Radxa ROCK 3A со стандартными учетными данными:

      Login: rock
      Password: rock
      

      Настройте сетевой интерфейс, выполнив команду:

      sudo ip addr add 10.0.2.15/24 dev eth0
      
    3. В соответствии с инструкцией соберите ядро 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
      
    4. Установите собранное ядро по инструкции.

      # На хостовой системе
      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
      
    5. Соберите этот проект для 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:~
      
    6. Запустите симуляцию АСУ ТП на Radxa ROCK 3A:

      ./VirtualValve &
      ./ValveControl &
      ./LogSender &
      

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

      nc 10.0.2.15 8123
      
    7. Инициируйте атаку, отправив “магический” пакет командой:

      echo "~~MAGIC~~" | nc 10.0.2.15 8123
      
    8. Ожидаемое поведение системы:

      • Аварийное завершение ядра Linux, на которой развернуты компоненты АСУ ТП.
      • Прекращение работы всех компонентов АСУ ТП.

    Уведомления о товарных знаках

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

    Linux – товарный знак Linus Torvalds, зарегистрированный в США и в других странах.

    © 2025 АО “Лаборатория Касперского”

    Описание

    DoS for an entire system through a driver crash

    Конвейеры
    0 успешных
    0 с ошибкой