
Script de detección de persistencia, caza y recopilación de artefactos en Linux
persisthunt.sh ayuda a acelerar las investigaciones recolectando artefactos relacionados con persistencia específicos y destacando patrones sospechosos comúnmente asociados con técnicas de persistencia en Linux.
El script asiste en la detección de persistencia, búsqueda de amenazas y recolección de artefactos a través de mecanismos conocidos de persistencia en Linux. Los hallazgos se categorizan en tres niveles - High, Low e Informational basados en confianza y severidad. Los ejemplos incluyen entradas de autorun sospechosas que referencian /tmp/, /home/, /dev/tcp, curl, o detección de shells bind/reverse activos.
Está diseñado como una base flexible que los defensores pueden personalizar para sus entornos agregando o eliminando lógica de detección y palabras clave. La salida puede ser grande y puede requerir análisis específico del entorno, pero también es adecuada para revisión y resumen usando LLMs o agentes de IA.
Ejecutar como usuario root y redirigir la salida a un archivo
sudo persisthunt.sh > output.log
Ejecutar en un host remoto vía 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
| Confianza | Técnica | Descripción |
|---|
| High | Persistencia de trabajos AT | Los trabajos 'at' legítimos son poco comunes; las entradas inesperadas en /var/spool/at son altamente sospechosas. |
| High | Entrada de cron que referencia una palabra clave sospechosa | Archivos cron que referencian curl/wget/nc/ncat/socat o rutas como /tmp, /var/tmp, /dev/shm, /home, o archivos ocultos. |
| High | Shell bind activo | Detecta procesos intérprete (bash/sh/zsh/dash/ksh/python*/perl/nc/ncat/socat) que están escuchando en sockets de red (bind shells). |
| High | Shell reverso activo | Detecta procesos cuyo stdin y stdout están redirigidos a sockets, indicando shells reversos. |
| High | Persistencia usando socket de red bruto eBPF | Rootkits como BPFdoor usan programas eBPF con sockets de red brutos para puerta trasera persistente. Leer más |
| High | Servicio/temporizador de systemd que referencia una palabra clave sospechosa | Busca archivos .service y .timer bajo rutas de systemd (incluyendo unidades de usuario bajo ~/.config/systemd/user/) por palabras clave sospechosas. |
| High | Script init/rc.local/profile que referencia una palabra clave sospechosa | Scripts init y archivos rc.local/profile que referencian palabras clave sospechosas o red/herramientas en rutas de persistencia. |
| High | Script MOTD que referencia una palabra clave sospechosa | Scripts MOTD que referencian palabras clave sospechosas o herramientas de persistencia. |
| High | Perfil de shell que referencia una palabra clave sospechosa | Perfiles de shell (/etc/profile, /etc/profile.d, ~/.bashrc, ~/.profile, etc.) que contienen comandos o rutas sospechosos. |
| High | Archivos de servicio D-BUS que referencia una palabra clave sospechosa | Archivos de servicio D-BUS encontrados en la ruta */dbus-1/* que referencian palabras clave sospechosas |
| High | Scripts del despachador de NetworkManager que referencia una palabra clave sospechosa | Scripts del despachador de NetworkManager encontrados en la ruta */NetworkManager/dispatcher.d/* que referencian palabras clave sospechosas |
| High | Archivos ejecutables ELF ocultos en directorios tmp/home/ocultos | Archivos ocultos (nombres que comienzan con un punto) en /tmp, /var/tmp, /home, /dev/shm que son ejecutables ELF. |
| High | Procesos en ejecución | Procesos en ejecución que referencian una palabra clave sospechosa |
| High | Binario ELF con SUID/SGID/escribible por todos | Archivos escribibles por todos con bits SUID o SGID establecidos que son binarios ELF (potencial escalada de privilegios/puerta trasera). |
| High | Proceso oculto detectado en /proc (posible rootkit) | Enumera los PID de /proc y los compara con la salida de ps para encontrar procesos ocultos por rootkits (ej., Diamorphine); incluye notas sobre cómo los atacantes modifican ps para ocultar PID. |
| High | Proceso oculto con truco de montaje bind | Detecta montajes que se enlazan sobre /proc/ (ej., mount -o bind mydir /proc/1234) que pueden ocultar entradas de proceso de ps. |
| High | LD_PRELOAD configurado a nivel de sistema | Presencia o modificación de /etc/ld.so.preload que puede ser abusado por rootkits para persistencia. |
| Low | Archivos con capacidades | Archivos en el sistema con capacidades POSIX establecidas (de getcap) — indicador de baja confianza pero que vale la pena revisar. |
| Low | Binario ELF reciente en directorios tmp/home/ocultos | Binarios ELF ejecutables modificados o creados recientemente (dentro de 7 días) en /tmp, /var/tmp, /dev/shm, /home — indicador de baja confianza. |
| Low | Archivo de configuración o hooks de Git | Archivos de configuración o hooks de Git que no son de muestra (ej., .git/config o .git/hooks/*) que podrían ser abusados para persistencia. |
| Low | Hooks de APT | Los hooks de APT podrían ser abusados para persistencia. |
| Low | Plugins de Yum/DNF | Plugins de Yum/DNF que referencian una palabra clave sospechosa |
| Low | Archivo .pth con contenido sospechoso (persistencia en Python) | Archivos .pth que contienen imports o llamadas ejecutadas como import, os.system, exec() que se ejecutan al importar un módulo de Python. |
| Low | Reglas de udev | Reglas de udev con clave RUN (posible persistencia) |
| Low | Módulos PAM | Módulos PAM que referencian pam_exec que podrían ser abusados para persistencia |
| Low | Secuestro de binarios del sistema | Archivos binarios modificados recientemente en /bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin/ |
| Informational | Todas las entradas de cron (revisión manual) | Imprime todos los archivos relacionados con cron y su contenido (sin comentarios) para revisión manual. |
| Informational | Todos los perfiles de shell (revisión manual) | Imprime el contenido de todos los archivos de perfil de shell del sistema y del usuario para inspección manual. |
| Informational | Todos los scripts init.d y rc.local (revisión manual) | Imprime los scripts init.d y rc.local para inspección manual. |
| Informational | Todos los archivos MOTD (revisión manual) | Imprime los scripts/archivos MOTD y update-motd.d para revisión manual. |
| Informational | Binarios ELF recientes (7 días) (revisión manual) | Lista archivos ELF ejecutables recientes (7 días) para revisión manual. |
| Informational | Listar todos los archivos ocultos en directorios home (revisión manual) | Enumera archivos ocultos en directorios home de usuarios para revisión manual. |
| Informational | Claves autorizadas SSH en directorios home (revisión manual) | Imprime archivos authorized_keys no vacíos en /root y /home para inspección manual. |
| Informational | Usuarios y grupos locales (revisión manual) | Lista usuarios y grupos locales mediante getent para revisión manual. |
| Informational | Montajes (revisión manual) | Imprime montajes actuales para inspección manual. |
| Informational | Conexiones de red activas (revisión manual) | Muestra conexiones de red activas (ss -tunap) para revisión manual. |
| Informational | Servicios de systemd (revisión manual) | Lista servicios de systemd en ejecución (systemctl list-units --type=service --state=running). |
| Informational | Archivos de servicio D-BUS (revisión manual) | Encuentra archivos de servicio D-BUS bajo directorios dbus-1 para revisión. |
| Informational | Scripts del despachador de NetworkManager | NetworkManager-dispatcher ejecuta scripts en cambios de red; revisa scripts ejecutables en dispatcher.d bajo NetworkManager para posible persistencia. |
| Informational | Imágenes de contenedores y contenedores en ejecución | Lista todas las imágenes de contenedores y contenedores en ejecución con Docker, Podman y Containerd |
| Informational | Paquetes instalados | Lista todos los paquetes instalados con dpkg/rpm/dnf |
| Informational | Módulos del kernel cargados | Lista todos los módulos del kernel cargados |