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

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

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

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

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

Категории

Все категории
Loading categories
SPiCa — Обнаружитель руткитов для Linux на основе eBPF, использующий многоканальный кросс-просмотровый анализ (sched_switch, NMI, /proc) для обнаружения DKOM, подмены точек трассировки и сокрытия процессов с верификацией целостности на уровне оборудования. | Kitploit
Инструменты/GitHubGitHub/0xkirisame/spica
Оборонительные ИнструментыУправление индикаторами компрометации (IOC)ФорензикаАнализ вредоносных программАнализ Бинарных ФайловОбнаружение ВторженийСтатьи и ИсследованияОбучение и ОбразованиеРеагирование на ИнцидентыОбнаружение Аномалий
GitHub
1046292 месяцев назадПроверено Kitploit

Популярное

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

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

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

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

Смотреть все инструменты →
0xkirisame/spica

SPiCa

Обнаружитель руткитов для Linux на основе eBPF, использующий многоканальный кросс-просмотровый анализ (sched_switch, NMI, /proc) для обнаружения DKOM, подмены точек трассировки и сокрытия процессов с верификацией целостности на уровне оборудования.

Репозиторий
Поделиться

SPiCa

Системный анализ целостности процессов и перекрёстный просмотр

SPiCa

«Я спою, так сияй ярко, SPiCa...»

SPiCa — это детектор руткитов для Linux на основе eBPF, написанный на Rust. Название происходит от песни Hatsune Miku SPiCa и звезды, на которую она ссылается — Спики (Альфа Девы), самой яркой точки в созвездии Девы. То, что невооружённому глазу кажется одной звездой, на самом деле является спектроскопической двойной: две звезды во взаимной орбите, неразличимые как отдельные объекты без измерения их спектров. SPiCa применяет тот же принцип к наблюдению за ядром: несколько независимых каналов измеряют одно и то же состояние ядра с помощью физически различных механизмов, и руткит, подавляющий один из них, раскрывается другими.

Отказ от ответственности: Значительные части этой кодовой базы были сгенерированы или рефакторизованы с помощью GLM. Было проведено тщательное тестирование и итеративное проектирование, но перед использованием в производстве проверьте код на безопасность и производительность.


Содержание

  1. Модель угроз
  2. Обзор архитектуры
  3. Канал наблюдения sched_switch
  4. Канал целостности NMI
  5. Логика обнаружения
  6. Секретность адреса с проверкой верификатором
  7. Шлюз доступа к картам LSM
  8. Управление ключами и запутывание
  9. Привязка к PCR TPM (проект)
  10. Эшелонированная защита
  11. Инцидент с ошибкой BTF
  12. Известные ограничения и поверхность атаки
  13. Сборка и запуск
  14. План развития
  15. Глоссарий

1. Модель угроз

Ограниченный противник: eBPF-руткит

SPiCa разработан для победы над ограниченным eBPF-противником — злоумышленником с повышенными привилегиями (CAP_BPF или CAP_SYS_ADMIN), который загружает привилегированную программу eBPF в ядро. Этот противник принципиально слабее руткита в виде LKM, поскольку верификатор BPF накладывает жёсткие ограничения:

ОграничениеВлияние на противника
Ограниченные циклы (~1 млн инструкций на программу)Не может сканировать всю память ядра
Безопасность указателей (прямое разыменование требует доказуемо корректной, ограниченной цели)Не может следовать произвольным указателям
Ограниченные хелперы (белый список для каждого типа программы)Не может вызывать kmalloc, vmalloc или любую функцию выделения памяти ядра
Нет произвольной записи в ядро (bpf_probe_write_kernel сильно ограничен)Не может изменять task_struct, массивы функций точек трассировки или байт-код программы BPF
Доступ к картам ограничен загруженными ссылкамиНе может получить доступ к картам других программ (если они не перечислены по ID — см. §7)

Поскольку LKM блокируются шлюзом LSM после загрузки, этот ограниченный противник является реалистичной остаточной угрозой. Механизмы защиты от обхода в SPiCa настроены именно на эту угрозу — каждая защита честно сообщает, что она покрывает, а что нет.

Нецелевые области

  • Эксплойты ядра уровня национальных государств — повреждение памяти, приводящее к произвольной записи в ядро без init_module. SPiCa поднимает планку, блокируя более лёгкий вектор LKM, но не ограничивает противника сверху.
  • Враждебные LKM, загруженные до запуска SPiCa — для окна загрузки требуется эшелонированная защита (Secure Boot, подпись модулей, IMA).
  • Эксплойты верификатора — если верификатор BPF ненадёжен (исторические CVE: CVE-2020-27194, CVE-2022-23222, CVE-2023-2163), противник выходит из ограниченной модели в произвольное выполнение кода ядра. Это отдельный класс угроз. Защита SPiCa работает при корректном верификаторе.

SPiCa — это последний рубеж в стеке эшелонированной защиты, а не замена вышележащим уровням.


2. Обзор архитектуры

SPiCa запускает четыре программы eBPF, прикреплённые к хукам ядра, а также пользовательский движок обнаружения, который перекрёстно коррелирует их вывод с представлением системы о самой себе (/proc).

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

КаналМеханизмЧто его подавляетСтоимость подавления
/procПеречисление каталогов procfsDKOM (отвязка процесса от списка задач)Низкая — хорошо известный метод руткитов
sched_switchТочка трассировки eBPF на планировщикеОткрепление программы от массива функций; фильтрация контекстаСредняя — требуется запись в ядро в массив функций
NMIПрерывание аппаратного счётчика производительности → событие eBPF perfПерехват IDT/обработчика NMIПочти гарантированная паника ядра — аппаратное прерывание, не маскируемое

Ключевое архитектурное свойство: руткит не может подавить все три канала одновременно, чтобы само подавление не стало обнаруживаемым или дестабилизирующим. Подавление NMI требует модификации IDT (таблицы дескрипторов прерываний), что приводит к панике на большинстве ядер. Это «живая бомба» — единственный путь атакующего к полной слепоте с высокой вероятностью приведёт к краху системы.

Модель обнаружения — три предложения```

sched sees it, /proc doesn't → DKOM NMI finds sched's heartbeat stopped → TAMPER sched goes globally silent, /proc != empty → SILENT

Каждый класс обнаружения — это дифференциальный вердикт: расхождение между двумя или более каналами. Движок обнаружения — это чистая функция над снимком реестра + /proc + метками времени каналов — без ввода-вывода, без побочных эффектов, полностью модульно тестируемый.

### Редизайн NMI: от наблюдения к целостности

В исходном дизайне NMI был вторым каналом наблюдения за процессами, который производил выборку ЦП и сообщал, какая задача выполняется. Это было избыточно: `sched_switch` уже наблюдает за планированием, а NMI получал те же данные через другой механизм. Избыточность стоила ~1000+ событий в кольцевом буфере/сек/ЦП данных о процессах, которые в 99,999% случаев подтверждали «да, планировщик делает то, что делает планировщик».

В переработанной архитектуре **NMI перепрофилирован с наблюдения за процессами на проверку целостности точек трассировки.** Он больше не сообщает, какой процесс находится на ЦП. Вместо этого он проверяет, что `sched_switch` действительно выполняется, считывая разделяемое сердцебиение в `.bss`. Это:

1. Устраняет ~99% трафика NMI в кольцевом буфере (почти нулевые события в установившемся режиме)
2. Напрямую обнаруживает отсоединение точек трассировки, подавление и сбои BTF/присоединения (исходная ошибка BTF — см. [§11](#11-the-btf-bug-incident))
3. Выполняется из аппаратного прерывания, вне пути диспетчеризации точек трассировки — невосприимчив к `bpf_override_return`, перехвату kprobe и манипуляциям с массивом funcs
4. Читает глобальные переменные `.bss` через прямой доступ к памяти, а не через помощники BPF — невосприимчив к `fmod_ret` на вспомогательных функциях

---

## 3. Канал наблюдения sched\_switch
Скачать инструмент