
Script de detección de persistencia, caza y recopilación de artefactos en Linux
# Detección de Persistencia, Búsqueda y Recopilación de Artefactos en Linux - [Resumen](#summary) - [Uso](#usage) - [Ejemplos de Detecciones](#example-detections) - [Tabla de Técnicas](#techniques) ## Resumen [`persisthunt.sh`](https://github.com/raj3shp/persisthunt/blob/main/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. ## Uso 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 ``` ## Ejemplos de Detecciones ``` === [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 ``` ## Técnicas | 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](https://github.com/raj3shp/bpfdoorpoc/tree/main) | | 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/<pid> (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 |