Шпаргалка по обнаружению и удалению руткитов ядра Linux
Обнаружение руткитов ядра Linux
Поиск руткитов в sysfs/tracing
/sys/kernel/tracing/available_filter_functions
# Перечисляет функции ядра, которые можно отфильтровать для трассировки./sys/debug/kernel/tracing/available_filter_functions
# Альтернатива для перечисления фильтруемых функций в режиме отладки./sys/kernel/tracing/available_filter_functions_addrs
# Перечисляет фильтруемые функции с адресами, только в ядре 6.5+/sys/debug/kernel/tracing/available_filter_functions_addrs
# Как и предыдущий, но в режиме отладки, ядро 6.5+/sys/kernel/tracing/enabled_functions
# Перечисляет функции ядра, которые в данный момент включены для трассировки/sys/debug/kernel/tracing/enabled_functions
# альтернативный список отслеживаемых функций, в режиме отладки/sys/kernel/debug/tracing/trace
# Где события отслеживания записываются в режиме реального времени/sys/kernel/tracing/trace
# Как и предыдущий, позволяет просматривать трассировку, не требует режима отладки/sys/kernel/debug/dynamic_debug/control
# включить/отключить отладочные сообщения ядра в реальном времени для определенных модулей/sys/kernel/tracing/touched_functions
# показывает все функции, которые когда-либо трассировались ftrace или прямым трамплином (только для ядра 6.4+)/sys/fs/bpf/*
# Каталог карт и программ BPF (eBPF), используемых для отслеживания и безопасности/sys/module/*
# Содержит информацию о загруженных модулях ядра, такую как параметры и состояния/sys/kernel/tracing/kprobe_events
# Содержит события kprobes
Поиск руткитов в procfs
/proc/kallsyms
# Перечисляет все символы ядра, включая адреса функций и переменных/proc/modules
# Отображает модули, загруженные в ядро, с такой информацией, как размер, использование и т. д./proc/vmallocinfo
# Показывает использование памяти, выделенной vmalloc/proc/sys/kernel/tainted
# Указывает на состояние «загрязнения» ядра, сигнализируя об изменениях или ошибках.
Журналы
/var/log/dmesg*
# Журналы сообщений ядра, собранные командой dmesg/var/log/kern.log
# Хранит журналы событий и сообщений ядра, полезные для мониторинга и отладки/dev/kmsg
# Интерфейс для отправки и чтения сообщений ядра в реальном времениdmesg
# Команда для просмотра сообщений журнала ядра и загрузкиjournalctl -k
# Показывает журналы ядра, захваченные systemd-journald
Инструменты с открытым исходным кодом
Делаем руткит на основе ftrace бесполезным
Большинство руткитов, которые все еще работают с последними версиями ядра, используют известный метод перехвата ftrace, поскольку перехват таблицы системных вызовов устарел и не работает для большинства последних версий ядер именно из-за защит и изменений, которым подверглось ядро.
Поскольку большинство современных руткитов используют ftrace, почему бы не отключить его?

Вы можете сделать это для поиска PID, скрытых каталогов, например. Отключая ftrace, вы фактически делаете любой хук ftrace бесполезным, но если вы включите его снова, хуки снова будут работать. (помните, что есть способы защитить ваш руткит, который использует ftrace, от обхода таким образом).
echo 0 > /proc/sys/kernel/ftrace_enabled
or
sysctl kernel.ftrace_enabled=0
Удаление руткитов LKM
Империум
Вы можете использовать комбинацию трассировки, чтобы получить адрес функции, например module_show
, из diamorphine, с помощью imperius. По сути, imperius вызовет эту функцию, добавит ее обратно в lsmod и сделает руткит LKM видимым.

КонтрТрейсер
Цель ModTracer — найти скрытые внутри системы руткиты LKM и снова сделать их видимыми.
