
Persistnux — Updated!
Инструмент обнаружения персистентности в Linux на Bash для расследований DFIR. Сканирует 15+ механизмов персистентности (systemd, cron, модули ядра, SSH, контейнеры) с оценкой достоверности и генерирует CSV/JSONL отчеты для криминалистического анализа.
Persistnux
Комплексный инструмент обнаружения механизмов сохранения доступа (persistence) в Linux для расследований в области цифровой криминалистики и реагирования на инциденты (DFIR).
Обзор
Persistnux — это инструмент на Bash, предназначенный для выявления известных механизмов сохранения доступа в Linux, используемых злоумышленниками для поддержания контроля над скомпрометированными системами. Он выполняет всесторонние проверки системы и генерирует подробные отчёты в форматах CSV и JSONL для дальнейшего анализа.
Возможности
- Всестороннее обнаружение: охватывает все основные механизмы сохранения доступа в Linux
- Анализ на работающей системе: запускается непосредственно на живых системах с минимальными зависимостями
- Подробные отчёты: создаёт отчёты в форматах CSV и JSONL, содержащие хеши файлов, метаданные и оценки надёжности
- Работа от root и обычного пользователя: работает как с привилегиями root, так и без них (с ограниченной областью проверки для обычных пользователей)
- Готовность для DFIR: форматы вывода совместимы с распространёнными инструментами и рабочими процессами DFIR
- Оценка подозрительности: автоматическое присвоение уровня доверия (LOW, MEDIUM, HIGH, CRITICAL) на основе выявленных индикаторов
- Снижение ложных срабатываний: интеграция с менеджером пакетов и белый список известных корректных служб
- Анализ на основе времени: недавно изменённые файлы получают более высокий уровень доверия
- Поиск по шаблонам: обнаруживает обратные оболочки, шаблоны «скачать-и-выполнить», техники обфускации
Обнаруживаемые механизмы сохранения доступа
1. Systemd-службы
- Файлы служб (
.service) в/etc/systemd/system,/lib/systemd/system,/usr/lib/systemd/system - Пользовательские службы systemd
- Отсеивает отключённые службы и службы без ExecStart
- Обнаруживает подозрительные команды ExecStart
- Проверяет целостность исполняемых файлов/скриптов через менеджер пакетов
2. Задачи Cron и планировщики
- Системные crontab (
/etc/crontab,/etc/cron.d/*) - Каталоги периодического выполнения (
/etc/cron.{daily,hourly,weekly,monthly}) - Пользовательские crontab для всех пользователей (режим root)
- Задачи At
- Подозрительные шаблоны команд в запланированных задачах
- Файлы ACL
/etc/cron.allowи/etc/cron.deny— записи, ссылающиеся на несуществующих пользователей, помечаются
3. Профили оболочки и RC-файлы
- Системные профили (
/etc/profile,/etc/bash.bashrc,/etc/zshrc) - Скрипты Profile.d (
/etc/profile.d/*) - Пользовательские профили (
.bashrc,.bash_profile,.zshrc,.profileи т. д.) - Конфигурации Fish shell
- Обнаруживает вредоносные команды в файлах профилей
4. Init-скрипты и RC.local
/etc/rc.localи его варианты- Init-скрипты SysV (
/etc/init.d) - Скрипты уровней выполнения (
/etc/rc*.d) - Обнаруживает подозрительные команды скачивания/выполнения
5. Модули ядра и предзагрузка библиотек
- Настройки LD_PRELOAD (
/etc/ld.so.preload) — каждая указанная библиотека проверяется через менеджер пакетов - Конфигурации динамического компоновщика (
/etc/ld.so.conf,/etc/ld.so.conf.d/) — проверка целостности conf-файлов и сканирование.so-файлов в нестандартных путях /etc/environmentLD_PRELOAD/LD_LIBRARY_PATH — помечается как HIGH; указанные пути библиотек проверяются (неуправляемые/изменённые → CRITICAL)- Параметры модулей ядра (
/etc/modprobe.d/,/etc/modprobe.conf) — целостность файлов; анализ директивinstallна предмет подозрительных целей команд;blacklistмодулей безопасности (apparmor, selinux, seccomp) помечается как HIGH - Конфигурации автозагрузки модулей ядра (
/etc/modules,/etc/modules-load.d/) — целостность конфигураций; имена модулей разрешаются в.ko-файлы черезmodinfoи проверяются - Загруженные модули ядра (
lsmod) — перечисление и проверка целостности
6. Дополнительные механизмы
- Записи автозапуска XDG (
.config/autostart,/etc/xdg/autostart) — при работе от root сканируются все домашние каталоги пользователей - Системные файлы окружения (
/etc/environment) — проверка путей библиотек LD_PRELOAD/LD_LIBRARY_PATH - Конфигурации sudoers и дополнительные файлы (
/etc/sudoers,/etc/sudoers.d/) — шаблоны NOPASSWD/ALL → HIGH - PAM (Pluggable Authentication Modules):
- Все модули
.soпроверяются через менеджер пакетов; обрабатываются директивы@include; включается/etc/pam.conf - Анализ скриптов
pam_exec.so— отсутствующие/подозрительные скрипты → CRITICAL - Обнаружение релеев
pam_python.so/pam_perl.so— скрипт извлекается и анализируется - Обнаружение hook-файлов
pam_script.soв/etc/security/ - Целостность конфигурационных файлов — изменённые принадлежащие пакетам конфигурации PAM → CRITICAL
- Проверка библиотек LD_PRELOAD в
pam_env.confи~/.pam_environment - Общее сканирование
/etc/security/
- Все модули
- Скрипты MOTD (
/etc/update-motd.d/) — проверка пакета; изменённые → CRITICAL - Вспомогательные программы Git credential и настройки core.pager — анализ содержимого для всех пользователей
- Web-шеллы в распространённых веб-каталогах
8. Сохранение доступа через SSH
- Пользовательские
~/.ssh/authorized_keys— недавно изменённые ключи помечаются; анализируется содержимое опцииcommand=на предмет подозрительных шаблонов - Пользовательские
~/.ssh/rc— наличие помечается как MEDIUM; подозрительное содержимое/обратная оболочка → HIGH/CRITICAL
9. Перехват бинарных файлов (Binary Hijacking)
- Проверка установленных системных бинарных файлов по базе пакетов (
dpkg -Vна Debian/Ubuntu,rpm -Vaна RHEL/CentOS) - Изменённые файлы в
/usr/bin,/usr/sbin,/bin,/sbin→ CRITICAL - Изменённые модули PAM в
/lib/security→ CRITICAL - Conffiles (конфигурационные файлы dpkg) исключаются для снижения ложных срабатываний
10. Загрузчик и Initramfs
- Инъекция параметра ядра
init=в GRUB (/etc/default/grub,/etc/default/grub.d/*.cfg) - Init-скрипты на корневом уровне в
/ - Initramfs-модули Dracut с хуками
pre-pivot, записывающими в/sysroot/etc/shadow - Hook-скрипты Ubuntu initramfs-tools в
/etc/initramfs-tools/scripts/и/hooks/ - Недавно изменённые образы
/boot/initrd.img-*(по mtime)
11. Манипуляции Polkit (PolicyKit)
- Файлы
.pklaс безусловнымиResultAny/ResultInactive/ResultActive=yes - Предоставление прав с подстановочным идентификатором (
unix-user:*) - Файлы
.rulesс безусловнымpolkit.Result.YES(Polkit на JavaScript, версия >= 0.106)
12. D-Bus и NetworkManager
- Регистрация вредоносных системных служб D-Bus через
Exec=(/usr/share/dbus-1/system-services/) - Подстановочные директивы политик D-Bus
allow own="*"илиsend_destination="*" - Скрипты диспетчера NetworkManager (
/etc/NetworkManager/dispatcher.d/)
13. Правила Udev
- Директивы Udev
RUN+=, выполняющие произвольные команды или скрипты (/etc/udev/rules.d/,/lib/udev/rules.d/) - Правила, внедрённые во время выполнения в
/run/udev/rules.d/ - Шаблоны делегирования
at/cronвRUN+=(распространённый обход ограничений на выполнение в фоновом режиме)
14. Побег из контейнера
- Привилегированные Docker-контейнеры (
--privileged,--pid=host) - Монтирование
docker.sockвнутрь контейнеров (полный контроль над хостом через Docker API) nsenter -t 1в точках входа контейнеров или Dockerfile- Dockerfile в каталогах, доступных для записи пользователями, содержащие техники побега
15. Расширенные проверки бинарных файлов и привилегий
- Сканирование активных SUID/SGID-файлов по системным каталогам
- Сканирование файловых возможностей через
getcap—cap_setuid+epна GTFOBins → CRITICAL - Перехват бинарных файлов: переименованные оригиналы (
.original,.old,.bak,.real) с скриптами-обёртками - Учётные записи без root с UID 0 в
/etc/passwd - Маскировка оболочки с помощью завершающего пробела в поле оболочки
/etc/passwd - Системные учётные записи (UID 1-999) с файлами
authorized_keysSSH