Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
sel4-ics-gateway-demo — Демонстрация оборонительной безопасности: шлюз на микроядре seL4, защищающий уязвимые ICS от CVE-2019-14462 | Kitploit
Инструменты/GitHubGitHub/spanwich/sel4-ics-gateway-demo
Оборонительные ИнструментыБезопасность контейнеровАнализ уязвимостейЭксплуатацияБезопасность SCADA/ICSСетевая безопасностьОбнаружение ВторженийОбучение и Образование
GitHubspanwich/sel4-ics-gateway-demo

sel4-ics-gateway-demo

Демонстрация оборонительной безопасности: шлюз на микроядре seL4, защищающий уязвимые ICS от CVE-2019-14462

Репозиторий
6 месяцев назадЕщё не проверено

Популярное

Смотреть все →

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

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Демонстрация шлюза seL4 для ICS

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

Документация:

  • Сетевая архитектура — схемы сети и потоки трафика
  • Архитектура контейнеров — связи между контейнерами Docker
  • Пояснения по CVE — детали уязвимостей и механизмы атак

Мотивация исследования

Современные ICS/SCADA-системы сталкиваются со сложными атаками, такими как FrostyGoop, которая в январе 2024 года атаковала украинские системы районного отопления через Modbus TCP, оставив более 600 домохозяйств без тепла при температуре ниже нуля. Традиционные решения безопасности (межсетевые экраны, IDS) используют архитектуры пересылки пакетов, которые проверяют трафик in-line, но поддерживают единое сквозное TCP-соединение.

Этот проект демонстрирует альтернативу: шлюз с разрывом протокола на основе формально верифицированного микроядра seL4. Завершая TCP-соединения и проверяя семантику протокола перед установлением новых соединений с защищаемыми устройствами, такая архитектура обеспечивает более строгие гарантии безопасности.

Ключевые результаты

Архитектура

root@kitploit:~
┌─────────────────────────────────────────────────────────────────────────────┐
│ Docker Network: ics-untrusted (192.168.96.0/24)                             │
│                                                                             │
│   ┌───────────────────────┐       ┌───────────────────────┐                │
│   │ seL4 Gateway          │       │ Snort IDS             │                │
│   │ Port 502              │       │ Port 503              │                │
│   │                       │       │                       │                │
│   │ • Protocol-break      │       │ • Packet-forwarding   │                │
│   │ • TCP termination     │       │ • Inline inspection   │                │
│   │ • Length validation   │       │ • Rule-based detection│                │
│   └───────────┬───────────┘       └───────────┬───────────┘                │
│               │                               │                             │
├───────────────┼───────────────────────────────┼─────────────────────────────┤
│ Docker Network: ics-protected (192.168.95.0/24)                             │
│               │                               │                             │
│               └───────────────┬───────────────┘                             │
│                               ▼                                             │
│               ┌───────────────────────────────┐                             │
│               │ PLC (District Heating)        │                             │
│               │ Vulnerable libmodbus 3.1.2    │                             │
│               │ Port 5020 (direct access)     │                             │
│               └───────────────────────────────┘                             │
└─────────────────────────────────────────────────────────────────────────────┘

Быстрый старт

Предварительные требования

  • Docker и Docker Compose v2
  • Образ ядра шлюза seL4 (предоставляется пользователем)
  • ~4 ГБ ОЗУ для QEMU

1. Добавьте образ seL4

root@kitploit:~
# Place your seL4 kernel image at:
gateway/sel4-image/capdl-loader-image-arm-qemu-arm-virt

2. Сборка и запуск

root@kitploit:~
# Build all containers
sudo docker compose build

# Start individual containers
sudo docker compose up plc        # PLC only
sudo docker compose up gateway    # seL4 gateway + PLC
sudo docker compose up snort      # Snort IDS + PLC

# Start all
sudo docker compose up

3. Проверка соединений

root@kitploit:~
# Through seL4 gateway (protected - protocol-break)
echo -ne '\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x01' | nc localhost 502 | xxd

# Through Snort IDS (protected - packet-forwarding)
echo -ne '\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x01' | nc localhost 503 | xxd

# Direct to PLC (unprotected - vulnerable)
echo -ne '\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x01' | nc localhost 5020 | xxd

Сопоставление портов

Примечание: ПЛК по умолчанию теперь работает в режиме CVE-2022-0367 с ASAN. Используйте --profile cve14462 для тестирования CVE-2019-14462.

Демонстрация уязвимостей

CVE-2019-14462: переполнение буфера кучи в libmodbus

ПЛК использует намеренно уязвимый libmodbus 3.1.2. Атака эксплуатирует доверенные поля длины MBAP:

root@kitploit:~
# Start PLC in CVE-2019-14462 mode
sudo docker compose --profile cve14462 up plc-14462

# Build attack tools
cd cve_tools && make

# Attack unprotected PLC (crashes)
./cve_14462_attack 127.0.0.1 5022

# Attack through seL4 (BLOCKED)
./cve_14462_attack 127.0.0.1 502

# Attack through Snort (DETECTED by Quickdraw rules)
./cve_14462_attack 127.0.0.1 503

CVE-2022-0367: недополнение буфера кучи в libmodbus

Ошибка проверки границ в modbus_mapping_new_start_address() позволяет вызвать недополнение буфера кучи через код функции 0x17 (Write and Read Registers):

root@kitploit:~
# Default PLC runs in CVE-2022-0367 mode with ASAN
sudo docker compose up plc

# Build attack tools
cd cve_tools && make

# Attack PLC - ASAN will detect heap-buffer-overflow
./cve_0367_attack 127.0.0.1 5020

# Attack with custom parameters
./cve_0367_attack 127.0.0.1 5020 88 0x4141  # Corrupt tab_registers pointer
./cve_0367_attack 127.0.0.1 5020 72 0xFFFF  # Corrupt nb_registers

# Attack through seL4 (BLOCKED - address validation)
./cve_0367_attack 127.0.0.1 502

# Attack through Snort (DETECTED by custom rules)
./cve_0367_attack 127.0.0.1 503

Технические детали:

  • Сервер использует start_registers=100, допустимые адреса — 100-109
  • Атака отправляет write_address < 100, что приводит к отрицательному индексу массива
  • Недополнение кучи может повредить поля структуры mb_mapping, включая указатели

CVE-2022-20685: DoS препроцессора Modbus в Snort

В Snort 2.9.18 есть целочисленное переполнение в препроцессоре Modbus, вызывающее бесконечный цикл и полностью блокирующее весь трафик через IDS:

root@kitploit:~
# 1. Verify Snort is working (should return Modbus response)
echo -ne '\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x01' | nc -w 2 localhost 503 | xxd

# 2. Attack the Snort IDS
./cve_20685_attack 127.0.0.1 503

# 3. Verify Snort is frozen (should timeout with NO response)
echo -ne '\x00\x01\x00\x00\x00\x06\x01\x03\x00\x00\x00\x01' | nc -w 5 localhost 503 | xxd

# 4. Check Snort CPU (should be 100%)
sudo docker exec ics-snort top -b -n 1 | grep snort

# 5. seL4 is IMMUNE (no Modbus preprocessor to exploit)
./cve_20685_attack 127.0.0.1 502  # No effect on seL4

# 6. Restart Snort after demo
sudo docker compose restart snort

Почему это критично: Snort работает во встроенном режиме NFQUEUE, то есть пакеты удерживаются в очереди ядра, пока Snort не вынесет вердикт. Когда Snort зависает, вердикты не возвращаются, и ВЕСЬ трафик останавливается — не просто «слепота» IDS, а полный отказ в обслуживании.

CVE-2024-1086: повышение привилегий в ядре Linux

Уязвимость use-after-free в Linux netfilter nf_tables (ядра v5.14-v6.6) позволяет выйти из контейнера:

root@kitploit:~
# Check if host is vulnerable
uname -r  # Vulnerable: v5.14 - v6.6 (before patches)

# The exploit is available at:
ls cve_tools/cve-2024-1086/

Почему это важно: контейнеры Docker используют ядро хоста. Если атакующий скомпрометирует Snort (например, через CVE-2022-20685), он сможет использовать CVE-2024-1086 для выхода из контейнера и получения root на хосте. seL4 неуязвим, поскольку запускает минимальное микроядро, а не Linux.

Демонстрационные скрипты

root@kitploit:~
# Full demo with 4 quadrants (PLC, seL4, Snort, User terminal)
./scripts/demo.sh

# Snort-only demo with 3 panes (PLC, Snort, User terminal)
./scripts/demo-snort.sh

Полный сравнительный эксперимент

root@kitploit:~
# Run automated comparison
./scripts/run_comparison.sh

Профили правил Snort

Доступно несколько конфигураций Snort для сравнения эффективности обнаружения:

root@kitploit:~
# Run Snort with specific profile
sudo docker compose --profile snort-talos up

# Compare detection efficiency
sudo docker compose --profile snort-quickdraw up -d
./cve_tools/cve_0367_attack 127.0.0.1 503  # Test detection
sudo docker compose --profile snort-quickdraw down

sudo docker compose --profile snort-combined up -d
./cve_tools/cve_0367_attack 127.0.0.1 503  # Test detection
sudo docker compose --profile snort-combined down

Сравнение покрытия правил

Разрыв протокола против пересылки пакетов

Пересылка пакетов (традиционные IDS/IPS)

root@kitploit:~
Client ────TCP────► Snort ────TCP────► PLC
          (same connection flows through)
  • Единое сквозное TCP-соединение
  • Атакующий может манипулировать состоянием TCP
  • IDS может быть атакован (CVE-2022-20685)
  • Требуются сигнатуры для каждого варианта атаки

Разрыв протокола (шлюз seL4)

root@kitploit:~
Client ────TCP1────► seL4 ────TCP2────► PLC
              (terminates, validates, new connection)
  • Два независимых TCP-соединения
  • Клиент не может влиять на состояние TCP ПЛК
  • Проверка до того, как данные достигнут ПЛК
  • Отсекает целые классы некорректного ввода

Компоненты

Инструменты для работы с CVE

Моделирование ПЛК

ПЛК моделирует контроллер районного отопления с поддержкой нескольких ведущих устройств (архитектура «поток на клиента», типичная для современных ПЛК).

Режимы ПЛК

РежимСервисПортОписание
CVE-2022-0367plc (по умолчанию)
root@kitploit:~
# Default mode (CVE-2022-0367 with ASAN)
sudo docker compose up plc

# CVE-2019-14462 mode
sudo docker compose --profile cve14462 up plc-14462

Регистры Modbus

В режиме CVE-2022-0367 регистры находятся по адресам 100-109 (в SCADA-инструментах используйте адрес 40101):

Уведомление о безопасности

Этот проект содержит намеренно уязвимый код для исследований в области защитной безопасности. Уязвимые libmodbus 3.1.2 и Snort 2.9.18 включены для демонстрации концепций безопасности.

Не разворачивайте незащищённые компоненты в производственных средах.

Ссылки

Уязвимости

  • CVE-2019-14462 - переполнение буфера кучи libmodbus (длина MBAP)
  • CVE-2022-0367 - недополнение буфера кучи libmodbus (start_address)
  • CVE-2022-20685 - DoS препроцессора Modbus в Snort
  • CVE-2024-1086 - повышение привилегий в ядре Linux через nf_tables

Исследования в области безопасности

  • Claroty Team82 - анализ CVE-2022-20685 в Snort
  • libmodbus Issue #614 - раскрытие информации о CVE-2022-0367
  • CVE-2024-1086 PoC - эксплойт для ядра с вероятностью успеха 99.4%

Ресурсы по ICS/SCADA

  • Микроядро seL4 - формально верифицированное микроядро
  • Digital Bond Quickdraw - отраслевые стандартные правила Snort для ICS/SCADA
  • Отчёт Dragos о FrostyGoop - анализ вредоносного ПО для ICS (атака на Украину в январе 2024 года)
  • The Record - FrostyGoop - 600 украинских домохозяйств без отопления

Лицензия

Только для авторизованных исследований в области защитной безопасности и образовательных целей.

Скачать инструмент
АспектРазрыв протокола (seL4)Пересылка пакетов (Snort)
CVE-2019-14462ЗАБЛОКИРОВАНО (проверка длины)ОБНАРУЖЕНО (правила Quickdraw)
CVE-2022-0367ЗАБЛОКИРОВАНО (проверка адреса)ОБНАРУЖЕНО (пользовательские правила)
CVE-2022-20685НЕУЯЗВИМ (нет препроцессора)УЯЗВИМ (DoS IDS)
CVE-2024-1086НЕУЯЗВИМ (нет ядра Linux)УЯЗВИМ (использует ядро хоста)
Неизвестные вариантыЗАБЛОКИРОВАНО (проверка структуры)ПРОПУЩЕНО (нет сигнатуры)
Атаки на состояние TCPЗАБЛОКИРОВАНО (соединение разорвано)Возможно
Поверхность атаки~1000 строк кода (микроядро)~500 000 строк кода (Linux + Snort)
ПортМаршрутАрхитектураЗащита
502Клиент → seL4 → ПЛКРазрыв протоколаПроверяет структуру Modbus
503Клиент → Snort → ПЛКПересылка пакетовIDS на основе правил
5020Клиент → ПЛК (ASAN)Прямое подключениеРежим CVE-2022-0367
5022Клиент → ПЛКПрямое подключениеРежим CVE-2019-14462 (профиль: cve14462)
ПрофильКомандаПравилОписание
defaultdocker compose up snort12Quickdraw (отраслевой стандарт)
quickdraw--profile snort-quickdraw12Только Digital Bond Quickdraw
talos--profile snort-talos40В стиле Talos с ключевыми словами modbus_func
modbus--profile snort-modbus13Только пользовательские правила обнаружения CVE
combined--profile snort-combined65Все правила вместе
CVEQuickdrawTalosСобственный Modbus
CVE-2019-14462 (длина MBAP)✅✅✅
CVE-2022-0367 (недополнение кучи)❌✅✅
CVE-2022-20685 (DoS в Snort)❌✅✅
Операции записи❌✅✅
Разведка✅✅✅
Коды функций DoS✅✅❌
КаталогОписание
gateway/Контейнер шлюза seL4 (QEMU + ядро seL4)
snort/IDS Snort 2.9.18 с несколькими профилями правил (уязвим к CVE-2022-20685)
plc/Симуляция районного отопления (уязвимый libmodbus 3.1.2, режим CVE-2022-0367)
cve_tools/Инструменты атак для демонстрации CVE
scripts/Вспомогательные и экспериментальные скрипты
docs/Документация с Mermaid-диаграммами (Сеть, Контейнеры, CVE)
ИнструментЦельОписание
cve_14462_attacklibmodbusПереполнение буфера кучи из-за несоответствия длины MBAP
cve_0367_attacklibmodbusНедополнение буфера кучи через недопустимый адрес записи (FC 0x17)
cve_20685_attackSnortБесконечный цикл препроцессора Modbus (DoS)
cve-2024-1086/Ядро LinuxПовышение привилегий через nf_tables (выход из контейнера)
5020
Сборка с ASAN, регистры по адресу 100-109
CVE-2019-14462plc-144625022Обычная сборка, регистры по адресу 0-9
АдресРегистрОписаниеR/W
100HR[0]Внутренняя температура (°C ÷10)R
101HR[1]Команда клапана (0-100%)R/W
102HR[2]Уставка температуры (°C ÷10)R/W
103HR[3]Режим (0=Ручной, 1=Авто)R/W
104HR[4]Наружная температура (°C ÷10)R
105-109HR[5-9]Статус, позиция, температура подачи, время работы, мощностьR