
persisthunt — Mis à jour !
Script de détection de persistance, de chasse et de collecte d'artefacts Linux
Détection de persistance Linux, chasse aux menaces et collecte d'artefacts
Résumé
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.
Utilisation
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
Exemples de détections
=== [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
Techniques
| 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 |