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

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

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

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

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

Категории

Все категории
Loading categories
linux-kernel-zero-day-mitigation-zero-downtime-kernel-defense- — Нейтрализация активных CVE ядра Linux из каталога CISA (CVE-2025-39964, CVE-2026-53266, CVE-2025-39682) с помощью современного eBPF, отключения модулей и пользовательских пространств имён containerd. | Kitploit
Инструменты/GitHubGitHub/mc493/linux-kernel-zero-day-mitigation-zero-downtime-kernel-defense-
Оборонительные ИнструментыБезопасность контейнеровАнализ уязвимостейDevSecOpsРеагирование на Инциденты
GitHubmc493/linux-kernel-zero-day-mitigation-zero-downtime-kernel-defense-

linux-kernel-zero-day-mitigation-zero-downtime-kernel-defense-

Нейтрализация активных CVE ядра Linux из каталога CISA (CVE-2025-39964, CVE-2026-53266, CVE-2025-39682) с помощью современного eBPF, отключения модулей и пользовательских пространств имён containerd.

Популярное

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

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

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

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

Смотреть все инструменты →
Репозиторий
61 день назадЕщё не проверено
Поделиться

Защита от zero-day уязвимостей ядра Linux без простоя: многоуровневые компенсирующие меры через eBPF-телеметрию, отключение модулей и пользовательские пространства имён

Когда Агентство по кибербезопасности и защите инфраструктуры (CISA) добавляет критические уязвимости ядра Linux в свой каталог Known Exploited Vulnerabilities (KEV), для инфраструктурных команд и руководителей SRE начинается обратный отсчёт:

Разрыв с upstream-патчами:
Период между публичной эксплуатацией zero-day в реальных атаках и появлением протестированных, подписанных бинарных пакетов ядра от корпоративных дистрибутивов (Ubuntu HWE, Debian, RHEL) обычно составляет от 7 до 21 дня.

В производственных кластерах Kubernetes пассивное ожидание пакетов от вендора подвергает системы риску активной эксплуатации, тогда как преждевременное обновление ядра или экстренная перезагрузка грозят операционными сбоями.

Этот кейс описывает фреймворк компенсирующих мер по принципу эшелонированной защиты, предназначенный для управления тремя одновременными уязвимостями ядра Linux (CVE-2025-39964, CVE-2026-53266, CVE-2025-39682) на уровнях пользовательского пространства, загрузчика ядра и среды выполнения без необходимости перезагрузки хостов.


Матрица угроз и таксономия защиты

Для обеспечения операционной точности средства защиты строго категорируются по их свойствам безопасности (Предотвращение, Обнаружение во время выполнения и Сдерживание):

УязвимостьПодсистемаМеханизм атакиКритичностьРежим защитыМеханизм реализации
CVE-2026-53266Мостовой Netfilter (ebtables)Арифметическое переполнение в правилах перезаписи ARP-таблицы мостаВысокая (повреждение памяти)Предотвращение (отключение)Выгрузка из RAM (modprobe -r) + переопределение загрузчика (/bin/true)
CVE-2025-39964Crypto Netlink (AF_ALG)Усечение целых чисел при выделении netlink-сокета cryptoВысокая (LPE / выход из контейнера)Обнаружение (eBPF) / ГейтингСовременный eBPF (sys_enter_socket, domain 38) + SECCOMP
CVE-2025-39682Kernel TLS (kTLS)Ошибка обработки записей нулевой длины в TCP ULPВысокая (паника ядра / куча)Обнаружение (eBPF)Современный eBPF (sys_enter_setsockopt, TCP_ULP 31 и SOL_TLS 282)

Архитектура эшелонированной защиты

root@kitploit:~
flowchart TD
    subgraph Ring3 ["Пользовательское пространство / Pod контейнера (Ring 3)"]
        Workload["Рабочая нагрузка контейнера / Недоверенный процесс"]
        Probe["Векторы эксплуатации: socket(AF_ALG) или setsockopt(TCP_ULP)"]
        Workload --> Probe
    end

    subgraph Ring0 ["Ядро Linux (Ring 0)"]
        SyscallTrap["Перехват системного вызова (sysenter)"]
        Probe --> SyscallTrap
        
        Tracepoint["Точка трассировки ядра: sys_enter"]
        SyscallTrap --> Tracepoint
        
        subgraph eBPFEngine ["Современное обнаружение eBPF (CO-RE Ring Buffer)"]
            Filter{"Гейтинг системных вызовов:\n- domain == 38 (AF_ALG)\n- SOL_TCP + TCP_ULP\n- SOL_TLS (282)"}
            Tracepoint --> Filter
        end
        
        Disarmed["Хук Modprobe: /bin/true\n(ebtables выгружен и заблокирован)"]
        UserNS["Переназначение пользовательских пространств имён containerd v2.2.4\nUID 0 контейнера -> UID 4050714624 хоста\n(Ограниченное сдерживание учётных данных)"]
        
        Filter -- "Совпадение (<1мс)" --> AlertRingBuf["Эмиссия в Ring Buffer"]
        Filter -- "Пропуск" --> KernelExec["Обычный путь выполнения"]
        KernelExec --> UserNS
    end

    subgraph SecurityPipeline ["Конвейер реактивных событий"]
        Falcosidekick["Демон Falco и Sidekick (:2801)"]
        Forwarder["Демон пересылки событий (:9876)"]
        NATSBus["Шина безопасности NATS (sovereign.security.alert)"]
        
        AlertRingBuf --> Falcosidekick
        Falcosidekick --> Forwarder
        Forwarder --> NATSBus
    end

    subgraph Enforcement ["Автоматизированное устранение и аудит"]
        Remediator["Динамический блокировщик (CrowdSec / nftables Drop)"]
        AuditLedger["Криптографически защищённая от подмены цепочка хешей\n(Связывание SHA-256 и кросс-нодовая репликация)"]
        
        NATSBus --> Remediator
        NATSBus --> AuditLedger
    end

    classDef danger fill:#ffdddd,stroke:#ff0000,stroke-width:2px;
    classDef safe fill:#ddffdd,stroke:#00aa00,stroke-width:2px;
    classDef arch fill:#f0f4f8,stroke:#0066cc,stroke-width:1px;
    class Probe danger;
    class Disarmed,UserNS,AuditLedger safe;

Уровень 1: Отключение модулей ядра (превентивный)

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

Распространённая ошибка с переопределениями в /etc/modprobe.d/ заключается в том, что install /bin/true блокирует только последующие попытки загрузки модуля. Если мостовые сети (Docker, устаревший CNI) загрузили ebtables ранее в жизненном цикле хоста, уязвимый код остаётся активным в RAM ядра.

Отключение без простоя требует двухэтапной последовательности:

  1. Выгрузка: Удаление текущих резидентных модулей из памяти ядра.
  2. Запечатывание: Настройка переопределений загрузчика /bin/true для предотвращения повторной загрузки.

2. Реализация

root@kitploit:~
# Шаг A: Выгрузить активные модули ebtables из RAM работающего ядра
sudo modprobe -r ebtable_nat ebtable_filter ebtable_broute ebt_snat ebt_dnat ebt_arpreply ebtables 2>/dev/null || true

# Шаг B: Запечатать загрузчик через /etc/modprobe.d/blacklist-ebtables.conf
sudo tee /etc/modprobe.d/blacklist-ebtables.conf << 'EOF'
# Митигация для CVE-2026-53266: повреждение ARP-таблицы Netfilter
install ebtables /bin/true
install ebtable_nat /bin/true
install ebtable_broute /bin/true
install ebtable_filter /bin/true
install ebt_snat /bin/true
install ebt_dnat /bin/true
install ebt_arpreply /bin/true

blacklist ebtables
blacklist ebtable_nat
blacklist ebt_snat
blacklist ebt_arpreply
EOF

3. Проверка

root@kitploit:~
# Тест явной загрузки:
$ sudo modprobe ebt_snat
$ lsmod | grep ebt
# Вывод: (Пусто - 0 модулей в памяти ядра)

Уровень 2: Телеметрия системных вызовов eBPF и поведенческий гейтинг (обнаружение)

1. Обнаружение против встроенного предотвращения

  • Falco eBPF (асинхронный EDR): Перехватывает sys_enter через современные кольцевые буферы eBPF, обеспечивая оповещение в SIEM/NATS с задержкой менее миллисекунды. Оптимизирован для наблюдения с нулевыми накладными расходами без изменения потока управления ядра.
  • Встроенная блокировка (синхронный LSM): Для сред, требующих синхронного отклонения (-EACCES), зонд eBPF LSM или профиль SECCOMP может отбросить системный вызов до его выполнения.

2. Исправленная механика системных вызовов kTLS (двухфазный гейтинг)

Включение Kernel TLS на TCP-соединении происходит в две отдельные фазы:

  1. Фаза 1 (присоединение): setsockopt(fd, SOL_TCP=6, TCP_ULP=31, "tls", 4) присоединяет протокол верхнего уровня.
  2. Фаза 2 (конфигурация): setsockopt(fd, SOL_TLS=282, TLS_TX/TLS_RX, ...) инициализирует криптографические ключи.

Фильтрация только по SOL_TLS (282) пропускает фазу присоединения ULP. Правило оценивает обе фазы:

root@kitploit:~
# falco-rules-kernel-cve.yaml
customRules:
  rules-kernel-cve.yaml: |-
    - rule: Detect AF_ALG Crypto Socket Creation (CVE-2025-39964)
      desc: Detects creation of Crypto API Netlink sockets used in local privilege escalation
      condition: evt.type = socket and evt.rawarg.domain = 38
      output: "Active Exploit Probe: AF_ALG socket requested (domain=%evt.rawarg.domain type=%evt.rawarg.type user=%user.name proc=%proc.name container=%container.id)"
      priority: WARNING
      tags: [cve, zero-day, cve-2025-39964, crypto, container_escape]

    - rule: Detect Container Kernel TLS Activation (CVE-2025-39682)
      desc: Detects container workloads attaching kTLS TCP_ULP or configuring SOL_TLS
      condition: container.id != host and evt.type = setsockopt and 
                 ((evt.rawarg.level = 6 and evt.rawarg.optname = 31) or (evt.rawarg.level = 282))
      output: "Container kTLS Activation Detected (level=%evt.rawarg.level optname=%evt.rawarg.optname user=%user.name proc=%proc.name container=%container.name)"
      priority: WARNING
      tags: [cve, zero-day, cve-2025-39682, ktls, tcp_ulp]

3. Производственная стабильность: инвариант фильтра ABI Linux 7.0

На современных ядрах Linux (Linux 7.0+ HWE) движок инспектора пользовательского пространства Falco (sinsp) сталкивается с несоответствиями разбора регистров для параметров openat (sinsp_exception: could not parse param 2 (name)).

Для обеспечения непрерывной стабильности DaemonSet без циклов падения:

root@kitploit:~
falco:
  base_syscalls:
    custom_set: ['!openat']

4. (Опционально) Синхронная встроенная блокировка через SECCOMP

Если рабочим нагрузкам внутри контейнера должно быть строго запрещено вызывать AF_ALG, примените профиль SECCOMP, возвращающий SCMP_ACT_ERRNO:

root@kitploit:~
{
  "defaultAction": "SCMP_ACT_ALLOW",
  "syscalls": [
    {
      "names": ["socket"],
      "action": "SCMP_ACT_ERRNO",
      "args": [
        {
          "index": 0,
          "value": 38,
          "op": "SCMP_CMP_EQ"
        }
      ]
    }
  ]
}

Уровень 3: Изоляция пользовательских пространств имён (сдерживание)

1. Ограниченная эскалация против произвольной записи в Ring-0

  • Ограниченная эскалация привилегий: Большинство LPE через Netlink/сокеты эксплуатируют логические ошибки ядра для получения root в структуре учётных данных процесса (current->cred).
  • Защита UserNS: В containerd v2.2.4 с Kubernetes CRI v1.30 (hostUsers: false) root контейнера (UID 0) отображается на непривилегированный диапазон хоста (UID хоста 4050714624). Ограниченные эскалации учётных данных остаются в пределах непривилегированного пространства имён.
  • Реалистичная граница: Полные уязвимости произвольной записи в ring-0 (прямой контроль указателя инструкций ядра или таблиц страниц) могут обойти границы пользовательских пространств имён; такие угрозы требуют изоляции на уровне microVM или гипервизора (например, Firecracker, Kata).

2. Конфигурация рабочей нагрузки

root@kitploit:~
apiVersion: v1
kind: Pod
metadata:
  name: hardened-workload
spec:
  runtimeClassName: runc
  hostUsers: false  # Переназначает root контейнера в сторону от root хоста
  containers:
  - name: app
    image: app:latest

3. Проверка на хосте

root@kitploit:~
$ cat /proc/$(pgrep -f hardened-workload)/uid_map
         0 4050714624      65536

Уровень 4: Криптографически защищённое от подмены связывание аудита

1. Защита от подмены против аппаратного WORM

Локальные файлы журналов на скомпрометированном хосте теоретически могут быть изменены, если злоумышленник получит неограниченное выполнение в ring-0. Истинная неизменяемость требует либо физического носителя с однократной записью, либо криптографического распределения:

  1. Последовательное связывание SHA-256: Каждая запись фиксирует хеш предыдущей записи: $$\text{Hash}n = \mathcal{H}\left(n \parallel \text{Timestamp} \parallel \text{Topic} \parallel \text{Payload} \parallel \text{Hash}{n-1}\right)$$
  2. Кросс-нодовая репликация: Журналы передаются через NATS и реплицируются на независимый узел аттестации (192.0.2.52), предотвращая одностороннюю перезапись журналов одним скомпрометированным хостом.

2. Пример записи цепочки

root@kitploit:~
{
  "index": 386200,
  "timestamp": "2026-09-22T08:58:36.564478+00:00",
  "topic": "sovereign.security.alert",
  "prev_hash": "b2f6ef1e467cf8402da283f58e470ee64993a479a957a0914ec8c351be7fa83d",
  "hash": "cece8f9bd8839d3753232dd7e504c538a0f58fe0bcf2e260fbefb7d27e77b8cf",
  "data": {
    "output": "Active Exploit Probe: AF_ALG socket requested (domain=38 type=5 user=root ...)",
    "priority": "Warning",
    "rule": "Detect AF_ALG Crypto Socket Creation (CVE-2025-39964)"
  }
}

Эмпирическая проверка и телеметрия

Валидация проводилась с использованием синтетического выделения сокета AF_ALG в непривилегированном тестовом контейнере:

root@kitploit:~
import socket
# Запрашивает семейство AF_ALG Netlink (domain 38, SOCK_SEQPACKET 5)
s = socket.socket(38, socket.SOCK_SEQPACKET, 0)

Жизненный цикл события:

  1. Системный вызов ядра: socket(38, 5, 0) вызывает sys_enter_socket.
  2. Оценка eBPF (< 1мс): Точка трассировки современного eBPF оценивает domain == 38 и отправляет событие в кольцевой буфер.
  3. Отправка по конвейеру (2мс): Falco отправляет оповещение в webhook Falcosidekick (:9876).
  4. Распространение через NATS (4мс): Демон пересылки транслирует событие в sovereign.security.alert.
  5. Запечатывание реестра (12мс): Демон аудита добавляет запись в криптографическую цепочку SHA-256.
  6. Криптографическая валидация:
    root@kitploit:~
    $ python3 fsm_audit_vault.py --verify
    # Verified 386,213 records. Zero tampering detected.
    

Структура репозитория и развёртываемые артефакты

Этот репозиторий включает готовые к производству конфигурации для немедленного развёртывания:

root@kitploit:~
|-- etc/
|   \-- modprobe.d/
|       \-- blacklist-ebtables.conf     # Переопределение загрузчика Modprobe
|-- helm/
|   |-- falco-rules-kernel-cve.yaml     # Правила современного eBPF Falco (CO-RE)
|   \-- README.md                       # Руководство по развёртыванию Helm в одну строку
|-- k8s/
|   \-- pod-userns-hardened.yaml        # Манифест UserNS containerd v2.2.4
|-- scripts/
|   |-- evict-and-harden.sh             # Двухэтапная выгрузка и запечатывание модулей
|   \-- verify-mitigation.sh            # Автоматизированная проверка и набор тестов CI
|-- seccomp/
|   \-- seccomp-block-af-alg.json       # Профиль встроенной блокировки SECCOMP (EACCES)
|-- vault/
|   \-- audit_vault.py                  # Криптографический движок цепочки хешей SHA-256
|-- README.md
\-- LICENSE

Выводы для SRE и системных архитекторов

  1. Компенсирующие меры закрывают разрыв с патчами: Когда активные zero-day уязвимости ядра начинают эксплуатироваться, немедленно развёртывайте средства управления загрузчиком и средой выполнения, ожидая проверки пакетов upstream-дистрибутива.
  2. Выгрузка активных модулей обязательна: Переопределения Modprobe влияют только на будущие запросы загрузчика; всегда проверяйте работающую память через lsmod и явно выгружайте резидентные модули (modprobe -r).
  3. Двухфазный гейтинг для kTLS: Правила безопасности для kTLS должны оценивать как присоединение TCP_ULP (SOL_TCP=6, optname=31), так и инициализацию опций (SOL_TLS=282).
  4. Пользовательские пространства имён ограничивают эскалацию привилегий: Сочетание рабочих нагрузок Kubernetes с пользовательскими пространствами имён containerd (hostUsers: false) не позволяет эскалации привилегий на уровне контейнера тривиально получить root ring-0 хоста.
  5. Разделяйте EDR и встроенное принуждение: Используйте асинхронный eBPF (Falco) для кластерного наблюдения с низкими накладными расходами и синхронный LSM / SECCOMP, когда обязательно немедленное прерывание.

Поддерживается командой Sovereign Systems & Security Architecture.
Протестировано в производстве на Linux HWE и Kubernetes CRI v1.30 (containerd v2.2+).

Скачать инструмент