
Script de détection de persistance, de chasse et de collecte d'artefacts Linux
persisthunt.sh accélère les investigations en collectant des artefacts ciblés liés à la persistance et en signalant les modèles suspects couramment associés aux techniques de persistance Linux.
Le script aide à la détection de persistance, à la chasse aux menaces et à la collecte d'artefacts à travers les mécanismes de persistance Linux bien connus. Les résultats sont classés en trois niveaux — High, Low et Informational — selon la confiance et la sévérité. Les exemples incluent des entrées d'exécution automatique suspectes référençant /tmp/, /home/, /dev/tcp, curl, ou la détection de shells bind/inverses actifs.
Il est conçu comme une base flexible que les défenseurs peuvent personnaliser pour leurs environnements en ajoutant ou en supprimant de la logique de détection et des mots-clés. La sortie peut être volumineuse et nécessiter une analyse spécifique à l'environnement, mais elle convient également à la revue et à la synthèse à l'aide de LLM ou d'agents IA.
Exécutez en tant qu'utilisateur root et redirigez la sortie vers un fichier
sudo persisthunt.sh > output.log
Exécutez sur un hôte distant via SSH
ssh [email protected] 'bash -s' < persisthunt.sh > output.log 2>&1
=== [HIGH] Active reverse shell ===
bob 3889906 0.0 0.0 2800 1848 pts/2 S+ 06:38 0:00 sh -i
=== [HIGH] Active bind shell ===
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] eBPF programs with raw network sockets (possible BPFdoor persistence) ===
PID: 3903559, Executable: bpfdoorpoc, Stack trace: /proc/3903559/stack:[<0>] packet_recvmsg+0x6e/0x5c0
=== [LOW] Recent ELF binary in tmp/home/hidden dirs ===
/var/tmp/.test
| Confiance | Technique | Description |
|---|
| Élevée | Persistance via les tâches at | Les tâches « at » légitimes sont rares ; des entrées inattendues dans /var/spool/at sont très suspectes. |
| Élevée | Entrée cron référençant un mot-clé suspect | Fichiers cron qui référencent curl/wget/nc/ncat/socat ou des chemins comme /tmp, /var/tmp, /dev/shm, /home, ou des fichiers cachés. |
| Élevée | Shell bind actif | Détecte les processus interpréteurs (bash/sh/zsh/dash/ksh/python*/perl/nc/ncat/socat) qui écoutent sur des sockets réseau (shells bind). |
| Élevée | Shell inverse actif | Détecte les processus dont stdin et stdout sont redirigés vers des sockets, indiquant des shells inverses. |
| Élevée | Persistance via socket réseau brute eBPF | Des rootkits tels que BPFdoor utilisent des programmes eBPF avec des sockets réseau brutes comme backdoor persistante. En savoir plus |
| Élevée | Service/minuteur systemd référençant un mot-clé suspect | Recherche les mots-clés suspects dans les fichiers .service et .timer sous les chemins systemd (y compris les unités utilisateur sous ~/.config/systemd/user/). |
| Élevée | Script init/rc.local/profile référençant un mot-clé suspect | Scripts d'init et fichiers rc.local/profile qui référencent des mots-clés suspects ou des outils réseau dans les chemins de persistance. |
| Élevée | Script MOTD référençant un mot-clé suspect | Scripts MOTD qui référencent des mots-clés suspects ou des outils de persistance. |
| Élevée | Profil shell référençant un mot-clé suspect | Profils shell (/etc/profile, /etc/profile.d, ~/.bashrc, ~/.profile, etc.) contenant des commandes ou des chemins suspects. |
| Élevée | Fichiers de service D-BUS référençant un mot-clé suspect | Fichiers de service D-BUS trouvés dans le chemin */dbus-1/* référençant des mots-clés suspects |
| Élevée | Scripts dispatcher NetworkManager référençant un mot-clé suspect | Scripts dispatcher NetworkManager trouvés dans le chemin */NetworkManager/dispatcher.d/* référençant des mots-clés suspects |
| Élevée | Fichiers exécutables ELF cachés dans les répertoires tmp/home/cachés | Fichiers cachés (noms commençant par un point) dans /tmp, /var/tmp, /home, /dev/shm qui sont des exécutables ELF. |
| Élevée | Processus en cours | Processus en cours référençant un mot-clé suspect |
| Élevée | Binaire ELF SUID/SGID/accessible en écriture par tous | Fichiers accessibles en écriture par tous avec les bits SUID ou SGID définis et qui sont des binaires ELF (élévation de privilèges/backdoor potentielle). |
| Élevée | Processus caché détecté dans /proc (rootkit possible) | Énumère les PID de /proc et les compare à la sortie de ps pour trouver les processus cachés par des rootkits (par exemple Diamorphine) ; inclut des notes sur la façon dont les attaquants installent un backdoor dans ps pour masquer les PID. |
| Élevée | Processus caché via un bind mount | Détecte les bind mounts recouvrant /proc/ (par exemple mount -o bind mydir /proc/1234), ce qui peut masquer les entrées de processus à ps. |
| Élevée | LD_PRELOAD configuré à l'échelle du système | Présence ou modification de /etc/ld.so.preload qui peut être exploitée par des rootkits pour la persistance. |
| Faible | Fichiers avec capabilities | Fichiers du système avec des capabilities POSIX définies (via getcap) — indicateur de confiance plus faible mais à vérifier. |
| Faible | Binaire ELF récent dans les répertoires tmp/home/cachés | Binaires ELF exécutables récemment modifiés ou créés (moins de 7 jours) dans /tmp, /var/tmp, /dev/shm, /home — indicateur de confiance plus faible. |
| Faible | Fichier de config ou hooks Git | Fichiers de configuration ou hooks Git autres que les exemples fournis (par exemple .git/config ou .git/hooks/*) qui pourraient être détournés pour la persistance. |
| Faible | Hooks APT | Les hooks APT pourraient être détournés pour la persistance. |
| Faible | Plugins Yum/DNF | Plugins Yum/DNF référençant un mot-clé suspect |
| Faible | Fichier .pth avec contenu suspect (persistance Python) | Fichiers .pth contenant des imports exécutés ou des appels comme import, os.system, exec() qui s'exécutent lors de l'import d'un module Python. |
| Faible | Règles udev | Règles udev avec la clé RUN (persistance possible) |
| Faible | Modules PAM | Modules PAM référençant pam_exec qui peuvent être détournés pour la persistance |
| Faible | Détournement de binaires système | Fichiers binaires récemment modifiés dans /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin/ |
| Informationnelle | Toutes les entrées cron (revue manuelle) | Affiche tous les fichiers liés à cron ainsi que leur contenu (hors commentaires) pour une revue manuelle. |
| Informationnelle | Tous les profils shell (revue manuelle) | Affiche le contenu de tous les fichiers de profil shell système et utilisateur pour inspection manuelle. |
| Informationnelle | Tous les scripts init.d et rc.local (revue manuelle) | Affiche les scripts init.d et rc.local pour inspection manuelle. |
| Informationnelle | Tous les fichiers MOTD (revue manuelle) | Affiche les scripts/fichiers MOTD et update-motd.d pour revue manuelle. |
| Informationnelle | Binaires ELF récents (7 jours) (revue manuelle) | Liste les fichiers ELF exécutables récents (7 jours) pour revue manuelle. |
| Informationnelle | Tous les fichiers cachés dans les répertoires home (revue manuelle) | Énumère les fichiers cachés (dotfiles) dans les répertoires home des utilisateurs pour revue manuelle. |
| Informationnelle | Clés autorisées SSH dans les répertoires home (revue manuelle) | Affiche les fichiers authorized_keys non vides dans /root et /home pour inspection manuelle. |
| Informationnelle | Utilisateurs et groupes locaux (revue manuelle) | Liste les utilisateurs et groupes locaux via getent pour revue manuelle. |
| Informationnelle | Montages (revue manuelle) | Affiche les montages actuels pour inspection manuelle. |
| Informationnelle | Connexions réseau actives (revue manuelle) | Affiche les connexions réseau actives (ss -tunap) pour revue manuelle. |
| Informationnelle | Services systemd (revue manuelle) | Liste les services systemd en cours d'exécution (systemctl list-units --type=service --state=running). |
| Informationnelle | Fichiers de service D-BUS (revue manuelle) | Recherche les fichiers de service D-BUS sous les répertoires dbus-1 pour revue. |
| Informationnelle | Scripts dispatcher NetworkManager | NetworkManager-dispatcher exécute des scripts lors des changements réseau ; vérifiez les scripts exécutables de dispatcher.d sous NetworkManager pour une persistance potentielle. |
| Informationnelle | Images de conteneurs et conteneurs en cours d'exécution | Liste toutes les images de conteneurs et les conteneurs en cours d'exécution avec Docker, Podman et Containerd |
| Informationnelle | Paquets installés | Liste tous les paquets installés avec dpkg/rpm/dnf |
| Informationnelle | Modules du noyau chargés | Liste tous les modules du noyau chargés |