
Монитор целостности ядра Linux для обнаружения перехвата системных вызовов
ksentinel отслеживает критические функции ядра и таблицу системных вызовов на предмет несанкционированных изменений. Он обнаруживает распространённые системные вызовы, которые являются целью большинства руткитов, включая перехватчики ftrace, kprobes и захват таблицы системных вызовов.
ПРИМЕЧАНИЕ: ksentinel находится в начальной версии; в будущих коммитах будут добавлены улучшения.
Слой VFS:
Сетевой стек:
Учётные данные:
Система модулей:
Инфраструктура трассировки:
Плюс более 500 дополнительных обёрток системных вызовов через сопоставление префиксов.
make
Во время компиляции генерируется и отображается случайный 32-символьный ключ разблокировки. Запишите его немедленно. Этот ключ встраивается в скомпилированный модуль и не хранится внешне.
Храните его в безопасности, если включена защита от выгрузки.
sudo make install
Модуль загружается скрытым от lsmod с включённой по умолчанию защитой от выгрузки.
sudo insmod ksentinel.ko
sudo ./ksentinel-manager.sh load # загрузить модуль
sudo ./ksentinel-manager.sh status # проверить состояние
sudo ./ksentinel-manager.sh watch # мониторинг в реальном времени
sudo ./ksentinel-manager.sh violations # просмотр предупреждений
dmesg -wT | grep ksentinel
Если защита от выгрузки включена, модуль необходимо разблокировать перед удалением:
echo "your_32char_key" > /proc/.ksctl
Или через менеджер:
sudo ./ksentinel-manager.sh unlock
sudo rmmod ksentinel
Пример с пользовательскими параметрами:
sudo insmod ksentinel.ko period_ms=5000 anti_unload=false
ksentinel выполняет периодические проверки целостности на основе параметра period_ms.
Меньшие интервалы обеспечивают более быстрое обнаружение, но увеличивают загрузку ЦП. Интервал по умолчанию (2000 мс) оказывает минимальное влияние на современные системы.
ksentinel: [CHANGE - HOOK PATTERN] sys_getdents64 @ 0xffffffff81234567
baseline=1234567890abcdef current=fedcba0987654321
bytes: e9 ab cd ef 12 90 90 90 ...
flags: JMP/CALL_DETECTED ENDBR64_PREFIX
ksentinel: [SCT HOOK] syscall[78] expected=0xffffffff81111111 got=0xffffffffa0222222 (fake_getdents+0x0)
ksentinel: [LSTAR TAMPERED] baseline=0xffffffff81800000 now=0xffffffffa0300000 (evil_syscall_entry+0x0)
ksentinel может обнаруживать изменения, вносимые:
Обнаружение зависит от загрузки ksentinel до загрузки руткита.
Конфигурация ядра:
Поддерживаемые ядра:
Проверьте конфигурацию ядра:
grep -E "KALLSYMS|KPROBES" /boot/config-$(uname -r)
Модуль скрыт и защищён от выгрузки. Сначала разблокируйте:
sudo ./ksentinel-manager.sh unlock
make clean # очистка артефактов сборки
make # компиляция модуля
make install # загрузка модуля
make uninstall # выгрузка модуля
Приветствуются любые contributions. Соблюдайте стиль кода и добавляйте тесты для новых функций.
GPL-2.0-only
Эта программа является свободным программным обеспечением, распространяемым по лицензии GPL версии 2.0. Любые изменения должны сохранять указание авторства оригинального автора и распространяться под той же лицензией.
Полные условия см. в файле LICENSE.
MatheuZSecurity
Сообщество исследователей руткитов: https://discord.gg/66N5ZQppU7
Этот инструмент предназначен для исследований в области безопасности и системного администрирования. Используйте ответственно. Автор не несёт ответственности за неправомерное использование или ущерб, причинённый данным программным обеспечением.
| Параметр | Тип | По умолчанию | Описание |
|---|
| period_ms | uint | 2000 | Интервал проверки целостности в миллисекундах |
| sym_prefixes | string | "sys_,x64_sys,do_sys,ksys_" | Префиксы символов для мониторинга (через запятую) |
| extra_syms | string | "" | Дополнительные конкретные символы для наблюдения |
| anti_unload | bool | true | Включить защиту от выгрузки |