
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 .ko via modinfo e verificadoslsmod) — enumeração e verificação de integridade.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 /etc/security/pam_env.conf e ~/.pam_environment/etc/security//etc/update-motd.d/) — verificação de pacote; modificado → CRITICAL~/.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