
Script per il rilevamento della persistenza, la caccia e la raccolta di artefatti su Linux
persisthunt.sh aiuta ad accelerare le indagini raccogliendo artefatti mirati relativi alla persistenza ed evidenziando pattern sospetti comunemente associati alle tecniche di persistenza Linux.
Lo script assiste nel rilevamento della persistenza, nella caccia alle minacce e nella raccolta di artefatti attraverso i meccanismi di persistenza Linux più noti. I risultati sono categorizzati in tre livelli - High, Low, e Informational - in base a confidenza e severità. Gli esempi includono voci di autorun sospette che fanno riferimento a /tmp/, /home/, /dev/tcp, curl, o il rilevamento di bind/reverse shell attive.
È progettato come una base flessibile che i difensori possono personalizzare per i propri ambienti aggiungendo o rimuovendo logiche di rilevamento e parole chiave. L'output può essere voluminoso e potrebbe richiedere un'analisi specifica dell'ambiente, ma è anche adatto alla revisione e al riepilogo tramite LLM o agenti AI.
Esegui come utente root e reindirizza l'output su un file
sudo persisthunt.sh > output.log
Esegui su un host remoto tramite SSH
ssh [email protected] 'bash -s' < persisthunt.sh > output.log 2>&1
=== [HIGH] Reverse shell attiva ===
bob 3889906 0.0 0.0 2800 1848 pts/2 S+ 06:38 0:00 sh -i
=== [HIGH] Bind shell attiva ===
LISTEN 0 1 0.0.0.0:4444 0.0.0.0:* users:(("python3",pid=3891687,fd=3))
bob 3891687 0.7 0.3 19540 12320 pts/3 S+ 06:41 0:00 python3 -c exec("""import socket as s,subprocess as sp;s1=s.socket(s.AF_INET,s.SOCK_STREAM);s1.setsockopt(s.SOL_SOCKET,s.SO_REUSEADDR, 1);s1.bind(("0.0.0.0",4444));s1.listen(1);c,a=s1.accept(); while True: d=c.recv(1024).decode();p=sp.Popen(d,shell=True,stdout=sp.PIPE,stderr=sp.PIPE,stdin=sp.PIPE);c.sendall(p.stdout.read()+p.stderr.read())""")
=== [HIGH] Programmi eBPF con socket di rete grezzi (possibile persistenza BPFdoor) ===
PID: 3903559, Eseguibile: bpfdoorpoc, Stack trace: /proc/3903559/stack:[<0>] packet_recvmsg+0x6e/0x5c0
=== [LOW] Recente binario ELF in directory tmp/home/nascoste ===
/var/tmp/.test
| Confidence | Tecnica | Descrizione |
|---|
| Alta | Persistenza tramite job AT | I job 'at' legittimi sono rari; voci inattese in /var/spool/at sono altamente sospette. |
| Alta | Voce cron che fa riferimento a una parola chiave sospetta | File cron che fanno riferimento a curl/wget/nc/ncat/socat o percorsi come /tmp, /var/tmp, /dev/shm, /home, o file nascosti. |
| Alta | Bind shell attiva | Rileva processi interprete (bash/sh/zsh/dash/ksh/python*/perl/nc/ncat/socat) in ascolto su socket di rete (bind shell). |
| Alta | Reverse shell attiva | Rileva processi il cui stdin e stdout sono reindirizzati a socket, indicando reverse shell. |
| Alta | Persistenza tramite socket di rete grezzi eBPF | Rootkit come BPFdoor usano programmi eBPF con socket di rete grezzi per backdoor persistenti. Leggi di più |
| Alta | Servizio/timer systemd che fa riferimento a una parola chiave sospetta | Cerca file .service e .timer nei percorsi systemd (incluse le unità utente sotto ~/.config/systemd/user/) per parole chiave sospette. |
| Alta | Script init/rc.local/profile che fa riferimento a una parola chiave sospetta | Script di init e file rc.local/profile che fanno riferimento a parole chiave sospette o strumenti di rete in percorsi di persistenza. |
| Alta | Script MOTD che fa riferimento a una parola chiave sospetta | Script MOTD che fanno riferimento a parole chiave sospette o strumenti di persistenza. |
| Alta | Profilo shell che fa riferimento a una parola chiave sospetta | Profili shell (/etc/profile, /etc/profile.d, ~/.bashrc, ~/.profile, ecc.) contenenti comandi o percorsi sospetti. |
| Alta | File di servizio D-BUS che fanno riferimento a una parola chiave sospetta | File di servizio D-BUS trovati nel percorso */dbus-1/* che fanno riferimento a parole chiave sospette |
| Alta | Script dispatcher NetworkManager che fanno riferimento a una parola chiave sospetta | Script dispatcher NetworkManager trovati nel percorso */NetworkManager/dispatcher.d/* che fanno riferimento a parole chiave sospette |
| Alta | File eseguibili ELF nascosti in directory tmp/home/nascoste | Dotfile nascosti (nomi che iniziano con un punto) in /tmp, /var/tmp, /home, /dev/shm che sono eseguibili ELF. |
| Alta | Processi in esecuzione | Processi in esecuzione che fanno riferimento a una parola chiave sospetta |
| Alta | Binario ELF SUID/SGID/scrivibile da tutti | File scrivibili da tutti con bit SUID o SGID impostati che sono binari ELF (potenziale escalation di privilegi/backdoor). |
| Alta | Processo nascosto rilevato in /proc (possibile rootkit) | Enumera i PID in /proc e confrontali con l'output di ps per trovare processi nascosti da rootkit (es. Diamorphine); include note su come gli attaccanti compromettono ps per nascondere i PID. |
| Alta | Processo nascosto con trucco del bind mount | Rileva mount che sovrappongono /proc/ (es. mount -o bind mydir /proc/1234) che possono nascondere le voci di processo da ps. |
| Alta | LD_PRELOAD configurato a livello di sistema | Presenza o modifica di /etc/ld.so.preload che può essere abusata dai rootkit per la persistenza. |
| Bassa | File con capabilities | File sul sistema con capabilities POSIX impostate (da getcap) — indicatore a bassa confidenza ma vale la pena controllare. |
| Bassa | Recente binario ELF in directory tmp/home/nascoste | Binari ELF eseguibili modificati o creati di recente (entro 7 giorni) in /tmp, /var/tmp, /dev/shm, /home — indicatore a bassa confidenza. |
| Bassa | File di configurazione o hook Git | File di configurazione o hook git non di esempio (es. .git/config o .git/hooks/*) che potrebbero essere abusati per la persistenza. |
| Bassa | Hook APT | Gli hook APT potrebbero essere abusati per la persistenza. |
| Bassa | Plugin Yum/DNF | Plugin Yum/DNF che fanno riferimento a una parola chiave sospetta |
| Bassa | File .pth con contenuto sospetto (persistenza Python) | File .pth contenenti import o chiamate eseguite come import, os.system, exec() che vengono eseguiti all'importazione del modulo Python. |
| Bassa | Regole udev | Regole udev con chiave RUN (possibile persistenza) |
| Bassa | Moduli PAM | Moduli PAM che fanno riferimento a pam_exec che potrebbe essere abusato per la persistenza |
| Bassa | Dirottamento di binari di sistema | File binari modificati di recente in /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin/ |
| Informativa | Tutte le voci cron (revisione manuale) | Stampa tutti i file relativi a cron e il loro contenuto (non commento) per la revisione manuale. |
| Informativa | Tutti i profili shell (revisione manuale) | Stampa il contenuto di tutti i file di profilo shell di sistema e utente per l'ispezione manuale. |
| Informativa | Tutti gli script init.d e rc.local (revisione manuale) | Stampa gli script init.d e rc.local per l'ispezione manuale. |
| Informativa | Tutti i file MOTD (revisione manuale) | Stampa gli script/file MOTD e update-motd.d per la revisione manuale. |
| Informativa | Binari ELF recenti (7 giorni) (revisione manuale) | Elenca i file ELF eseguibili recenti (7 giorni) per la revisione manuale. |
| Informativa | Elenca tutti i dotfile nelle directory home (revisione manuale) | Enumera i dotfile nelle directory home degli utenti per la revisione manuale. |
| Informativa | Chiavi autorizzate SSH nelle directory home (revisione manuale) | Stampa i file authorized_keys non vuoti in /root e /home per l'ispezione manuale. |
| Informativa | Utenti e gruppi locali (revisione manuale) | Elenca utenti e gruppi locali tramite getent per la revisione manuale. |
| Informativa | Mount (revisione manuale) | Stampa i mount correnti per l'ispezione manuale. |
| Informativa | Connessioni di rete attive (revisione manuale) | Mostra le connessioni di rete attive (ss -tunap) per la revisione manuale. |
| Informativa | Servizi systemd (revisione manuale) | Elenca i servizi systemd in esecuzione (systemctl list-units --type=service --state=running). |
| Informativa | File di servizio D-BUS (revisione manuale) | Trova i file di servizio D-BUS nelle directory dbus-1 per la revisione. |
| Informativa | Script dispatcher NetworkManager | NetworkManager-dispatcher esegue script al verificarsi di cambi di rete; controlla gli script eseguibili in dispatcher.d sotto NetworkManager per potenziale persistenza. |
| Informativa | Immagini container e container in esecuzione | Elenca tutte le immagini container e i container in esecuzione con Docker, Podman e Containerd |
| Informativa | Pacchetti installati | Elenca tutti i pacchetti installati con dpkg/rpm/dnf |
| Informativa | Moduli kernel caricati | Elenca tutti i moduli kernel caricati |