
Cuando un servidor Linux sufre un ciberataque, la peor reacción es improvisar: reiniciar, borrar archivos, “limpiar” malware o actualizar paquetes sin preservar evidencia. El análisis forense busca responder preguntas concretas: qué pasó, cuándo pasó, cómo entraron, qué usuario o proceso fue usado, qué archivos cambiaron, si hubo movimiento lateral, qué datos pudieron verse afectados y qué acciones deben tomarse para contener y recuperar.
NIST SP 800-86 describe la integración de técnicas forenses en la respuesta a incidentes y recomienda trabajar con fuentes como archivos, sistemas operativos, tráfico de red y aplicaciones; también advierte que no debe interpretarse como asesoría legal y que las organizaciones deben consultar con dirección y asesoría legal cuando corresponda.
Idea central: el análisis forense en Linux debe preservar evidencia antes de modificar el sistema. Primero se documenta, luego se recolecta, después se analiza y recién entonces se contiene, erradica y recupera.
1. Antes de tocar el servidor: preservar evidencia
Después de un incidente, cada acción cambia algo: un reinicio borra memoria, una actualización modifica archivos, un comando puede alterar timestamps y una limpieza apresurada puede destruir rastros del atacante. Por eso, antes de ejecutar cualquier corrección, se debe registrar el estado actual y preservar evidencia.
NIST SP 800-61 Rev. 3 indica que la respuesta a incidentes debe incorporarse a la gestión de riesgos para mejorar preparación, detección, respuesta y recuperación. En la práctica, eso significa que el análisis forense no debe ser una actividad aislada, sino parte de un proceso formal de respuesta a incidentes.
| Acción | ¿Por qué importa? | Prioridad |
|---|---|---|
| No reiniciar | Se perderían procesos, conexiones, memoria y sesiones activas. | Muy alta |
| No borrar archivos sospechosos | Pueden ser evidencia de persistencia, webshell o malware. | Alta |
| No actualizar de inmediato | Puede alterar paquetes, logs y estado del sistema. | Alta |
| Documentar hora y contexto | Permite reconstruir línea de tiempo y cadena de custodia. | Alta |
2. Crear carpeta de evidencia y registrar el inicio
Empieza creando una carpeta de trabajo en un disco seguro, preferiblemente externo o montado solo para recolección. La evidencia debe registrarse con fecha, hora, responsable, servidor, IP, zona horaria y motivo de la intervención.
Después, calcula hashes de los archivos recolectados. Esto no evita manipulación por sí solo, pero permite demostrar si un archivo cambió después de recolectarlo.
3. Orden correcto: primero evidencia volátil
La evidencia volátil desaparece rápido: procesos, conexiones de red, sesiones, memoria, archivos temporales, sockets y comandos en ejecución. CISA, en su guía contra ransomware, recomienda preservar evidencia altamente volátil o con retención limitada para evitar pérdida o manipulación.
Regla práctica: recolecta primero lo que se pierde al reiniciar: procesos, conexiones, sesiones, memoria, sockets, archivos temporales y logs en buffers. Luego pasa a archivos, paquetes, usuarios y persistencia.
| Orden | Evidencia | Ejemplos |
|---|---|---|
| 1 | Volátil | Procesos, conexiones, sesiones, memoria, sockets. |
| 2 | Logs recientes | journalctl, auth.log, secure, nginx, apache, auditd. |
| 3 | Persistencia | cron, systemd, usuarios, SSH keys, shells, servicios. |
| 4 | Disco y archivos | Webroot, /tmp, /dev/shm, binarios, paquetes, hashes. |
4. Capturar procesos activos
Los procesos muestran qué se está ejecutando ahora. Un atacante puede tener una shell reversa, un minero de criptomonedas, un script en Python, un proceso ejecutándose desde /tmp, un binario oculto o un servicio systemd falso.
Herramientas como pstree ayudan a mostrar árbol de procesos y relaciones padre-hijo; su manual documenta opciones para mostrar PIDs, rutas completas y cambios de UID, útiles para detectar procesos extraños o escalamiento.
Busca señales como comandos ejecutados desde directorios temporales, procesos sin ruta clara, nombres parecidos a servicios legítimos, binarios borrados pero aún ejecutándose, procesos con conexiones externas y scripts lanzados por usuarios que no deberían ejecutar tareas administrativas.
5. Capturar conexiones de red
Las conexiones activas pueden revelar exfiltración, shell reversa, comunicación con C2, escaneo interno o descarga de herramientas. ss, parte de iproute2, se usa para volcar estadísticas de sockets y revisar conexiones TCP/UDP; lsof lista archivos abiertos por procesos, incluyendo sockets de red.
Prioriza conexiones con IPs desconocidas, puertos inusuales, procesos ejecutados desde directorios temporales, conexiones salientes desde servicios que no deberían salir a Internet y tráfico hacia países o proveedores que no corresponden a tu operación.
6. Revisar sesiones, usuarios y accesos
Después de procesos y red, revisa quién está conectado, quién inició sesión, qué usuarios existen y qué privilegios tienen. Muchos ataques en Linux terminan creando usuarios, agregando claves SSH o elevando permisos mediante sudo.
Señales de alerta: usuarios creados recientemente, cuentas con shell interactiva inesperada, cuentas de servicio dentro de sudo o wheel, claves SSH nuevas, uso de root directo, intentos fallidos repetidos y acceso desde IPs no reconocidas.
7. Revisar logs con journalctl
En servidores con systemd, journalctl es una fuente central para reconstruir eventos. Su manual permite filtrar por arranque con --boot, por unidad con --unit, por tiempo con --since y exportar en formatos como JSON para análisis posterior.
Busca autenticaciones fallidas, reinicios inesperados, cambios de servicio, errores de sudo, cargas de módulos, ejecución de scripts, fallos de aplicaciones, denegaciones de SELinux/AppArmor y mensajes justo antes o después del momento estimado del ataque.
8. Revisar logs tradicionales: auth.log, secure, nginx, apache y aplicaciones
No todo está en journald. Según la distribución, los accesos SSH y sudo pueden aparecer en /var/log/auth.log, /var/log/secure, /var/log/messages o logs propios de la aplicación. En incidentes web, los logs de Nginx, Apache, PHP-FPM, aplicaciones Java, Node.js, Python o bases de datos son fundamentales.
Patrones que debes buscar
- SSH: intentos fallidos, acceso root, IPs desconocidas, claves aceptadas.
- Sudo: comandos inesperados, cambios de usuario, NOPASSWD.
- Web: rutas raras, subida de archivos, errores 500, parámetros largos, intentos de RCE.
- Aplicación: autenticaciones anómalas, cambios de roles, errores repetidos, tokens inválidos.
- Sistema: reinicios, cron, systemd, instalación de paquetes, errores de kernel.
9. Usar auditd, ausearch y aureport
auditd es el componente en espacio de usuario del sistema de auditoría de Linux. Su manual indica que escribe registros de auditoría en disco y que los logs se visualizan con ausearch o aureport.
ausearch permite consultar eventos del audit daemon por criterios distintos, mientras aureport genera reportes resumidos de los logs de auditoría. Estas herramientas son especialmente útiles para revisar cambios de usuarios, sudo, archivos críticos, SELinux/AppArmor, ejecución de comandos y eventos anómalos.
Si auditd no estaba activo antes del ataque, no inventará evidencia pasada. Aun así, puede activarse después para monitorear contención y recuperación, pero siempre separando claramente qué evidencia existía antes y qué registros se generaron después.
10. Buscar persistencia: cron, systemd, SSH y shells
La persistencia es la forma en que un atacante garantiza volver después de un reinicio o limpieza superficial. En Linux, los mecanismos más comunes son cron, systemd, claves SSH, usuarios nuevos, shell modificada, scripts en directorios temporales, binarios con SUID, servicios falsos y tareas en perfiles de usuario.
Especial cuidado con unidades systemd creadas recientemente, cronjobs que descargan scripts con curl o wget, claves SSH que no pertenecen al administrador, comandos ofuscados con base64, procesos que arrancan desde /tmp o /dev/shm y servicios con nombres que imitan procesos legítimos.
11. Revisar archivos modificados recientemente
Los archivos modificados cerca de la hora del ataque pueden mostrar webshells, binarios nuevos, scripts de persistencia, cambios de configuración o alteración de logs. No basta mirar solo /var/www; revisa también /tmp, /var/tmp, /dev/shm, /etc, directorios de usuarios, rutas de aplicaciones y unidades systemd.
No borres todavía los archivos sospechosos. Cópialos, calcula hash, registra ruta original, propietario, permisos y timestamps. Si contienen malware, guárdalos en un contenedor protegido, sin ejecutarlos.
12. Revisar historial de comandos
El historial de shell puede ser útil, pero no es confiable por sí solo: el atacante puede borrarlo, manipularlo o desactivar su escritura. Aun así, conviene recolectarlo de inmediato.
Busca comandos como creación de usuarios, modificación de sudoers, descarga de scripts, cambios de permisos, uso de base64, ejecución desde temporales, borrado de logs, instalación de paquetes y conexiones hacia IPs desconocidas.
13. Analizar servidores web: Nginx, Apache, PHP y webshells
En servidores web, un ataque suele entrar por vulnerabilidad de aplicación, plugin, CMS, credenciales débiles, subida de archivos, RCE, inclusión de archivos o panel administrativo expuesto. Los logs de acceso y error pueden mostrar el primer punto de entrada.
Si encuentras una webshell, no la abras desde el navegador ni la ejecutes. Cópiala como evidencia, calcula hash, revisa permisos, propietario y relaciónala con las solicitudes HTTP que pudieron haberla creado o invocado.
14. Revisar paquetes instalados y binarios alterados
Un atacante puede instalar herramientas, modificar binarios o reemplazar comandos. Revisa paquetes instalados recientemente y verifica integridad con las herramientas de tu distribución.
Si sospechas que comandos como ps, ss, lsof o journalctl fueron alterados, usa herramientas desde un medio confiable o una imagen forense. En compromisos graves, el sistema vivo no debe considerarse totalmente confiable.
15. Contenedores: Docker, containerd y Kubernetes
Si el servidor usa contenedores, el ataque puede estar dentro de una imagen, un volumen, un contenedor privilegiado, un socket Docker expuesto o una mala configuración. Revisar solo el host puede dejar fuera la causa real.
Busca contenedores privilegiados, montaje de /var/run/docker.sock, imágenes desconocidas, variables de entorno con secretos, puertos publicados innecesarios y contenedores que descargan scripts al arrancar.
16. Construir una línea de tiempo
El objetivo del análisis no es acumular archivos, sino reconstruir la historia del ataque. Una línea de tiempo debe integrar logs de sistema, accesos SSH, eventos web, cambios de archivos, procesos sospechosos, conexiones y acciones administrativas.
Trabaja siempre en UTC o deja clara la zona horaria. Muchos errores forenses ocurren por mezclar hora local, hora del servidor, hora de firewall, hora de cloud y hora de logs de aplicación.
17. Determinar alcance: ¿qué pudo tocar el atacante?
El alcance define la gravedad del incidente. No basta saber que hubo intrusión: hay que establecer si el atacante accedió a datos personales, credenciales, base de datos, backups, servidores internos, nube, correos, repositorios o paneles administrativos.
| Pregunta | Evidencia a revisar |
|---|---|
| ¿Entraron por web? | access.log, error.log, archivos recientes, webroot, logs de aplicación. |
| ¿Usaron SSH? | auth.log, secure, journalctl, authorized_keys, last, lastb. |
| ¿Escalaron privilegios? | sudo logs, SUID, auditd, procesos root, cambios en sudoers. |
| ¿Hubo exfiltración? | conexiones salientes, logs proxy, firewall, tamaños de respuesta, archivos comprimidos. |
| ¿Hay persistencia? | cron, systemd, SSH keys, usuarios, perfiles, binarios sospechosos. |
18. Contener sin destruir evidencia
Contener no significa borrar. Significa detener el daño preservando evidencia suficiente. Puedes aislar el servidor de Internet, bloquear IPs, retirar credenciales comprometidas, congelar una VM, tomar snapshot o mover el tráfico a una instancia limpia. Pero toda acción debe quedar registrada.
No hagas esto sin preservar evidencia
- Reiniciar el servidor.
- Borrar webshells, scripts o binarios sospechosos.
- Limpiar logs.
- Actualizar paquetes masivamente.
- Reinstalar sin snapshot o imagen previa.
- Cambiar contraseñas sin registrar qué cuentas estaban comprometidas.
- Ejecutar herramientas de limpieza automáticas sin saber qué eliminan.
Los playbooks de CISA recomiendan recolectar evidencia, incluyendo evidencia forense, y mantener un registro detallado para toda evidencia. Esa trazabilidad es esencial para auditoría, investigación interna, seguros, aspectos legales y mejora posterior.
19. Recuperación: reconstruir mejor, no solo limpiar
Si el servidor fue comprometido a nivel root, lo más seguro suele ser reconstruir desde una imagen confiable, aplicar parches, restaurar datos verificados y rotar secretos. “Limpiar” un sistema root comprometido puede dejar puertas traseras invisibles.
Recuperación mínima recomendada
- Preservar evidencia: logs, archivos, snapshots, hashes y línea de tiempo.
- Identificar vector: vulnerabilidad, credencial, webshell, plugin, SSH o dependencia.
- Construir servidor limpio: imagen confiable y paquetes actualizados.
- Restaurar datos verificados: evitar traer de vuelta malware o persistencia.
- Rotar secretos: contraseñas, tokens, claves SSH, API keys y certificados expuestos.
- Endurecer: MFA, firewall, SELinux/AppArmor, backups, monitoreo y mínimos privilegios.
- Validar: escaneo, revisión de logs, pruebas funcionales y monitoreo posterior.
20. Informe forense: qué debe contener
El informe debe ser claro, técnico y útil para decisiones. No debe limitarse a “se encontró malware”. Debe explicar qué ocurrió, qué evidencia lo sustenta, qué impacto probable existe, qué acciones se tomaron y qué se recomienda para evitar repetición.
| Sección | Contenido |
|---|---|
| Resumen ejecutivo | Qué pasó, impacto, estado actual y decisiones urgentes. |
| Alcance | Servidores, fechas, sistemas, aplicaciones y evidencia revisada. |
| Línea de tiempo | Eventos ordenados con fuente y evidencia. |
| Hallazgos | Vector de entrada, persistencia, usuarios, procesos, conexiones e impacto. |
| Evidencia | Hashes, rutas, logs, comandos, capturas y responsables. |
| Recomendaciones | Contención, erradicación, recuperación y controles preventivos. |
21. Checklist rápido de análisis forense Linux
Checklist operativo
- Registrar contexto: fecha UTC, responsable, servidor, IP, sistema y kernel.
- Preservar evidencia volátil: procesos, conexiones, sesiones y sockets.
- Copiar logs: journalctl, auth.log, secure, syslog, web, aplicación y auditd.
- Revisar usuarios: cuentas nuevas, sudoers, grupos, claves SSH y accesos.
- Buscar persistencia: cron, systemd, timers, perfiles, SUID y scripts ocultos.
- Analizar archivos recientes: /tmp, /dev/shm, /var/www, /etc, /home y /root.
- Revisar red: ss, lsof, rutas, DNS, puertos abiertos y conexiones salientes.
- Calcular hashes: evidencia, webshells, binarios sospechosos y logs copiados.
- Construir línea de tiempo: correlacionar evento, fuente, hora y evidencia.
- Definir alcance: datos, credenciales, servidores, nube, usuarios y movimiento lateral.
- Contener: aislar sin destruir evidencia.
- Recuperar: reconstruir limpio, parchear, rotar secretos y validar.
- Informar: hallazgos, impacto, acciones y recomendaciones.
22. Errores comunes
- Reiniciar el servidor antes de capturar procesos y conexiones.
- Borrar archivos sospechosos antes de copiarlos y calcular hashes.
- Confiar únicamente en el sistema comprometido sin considerar herramientas alteradas.
- No registrar hora UTC ni zona horaria de los logs.
- No revisar cron, systemd, claves SSH y usuarios nuevos.
- Mirar solo logs web y olvidar logs de autenticación, sudo y sistema.
- No revisar conexiones salientes ni posibles canales de exfiltración.
- Restaurar backups sin verificar si contienen persistencia o malware.
- No rotar secretos después de indicios de compromiso.
- No generar informe con evidencia, línea de tiempo y recomendaciones.
23. Preguntas clave
¿Debo apagar el servidor después de detectar un ataque?
Depende del riesgo. Si el atacante sigue activo y hay peligro de daño mayor, puede ser necesario aislarlo de red. Pero antes de apagar o reiniciar conviene capturar evidencia volátil, como procesos, conexiones, sesiones y logs recientes.
¿Qué evidencia se pierde al reiniciar Linux?
Procesos activos, conexiones de red, memoria, sesiones, sockets, archivos temporales no persistentes y parte del contexto operativo. Por eso la recolección inicial debe priorizar evidencia volátil.
¿journalctl sirve para análisis forense?
Sí. journalctl permite revisar logs por unidad, arranque y rango de tiempo, además de exportar en formatos como JSON. Es una fuente clave en sistemas con systemd.
¿auditd siempre tendrá registros útiles?
Solo si estaba habilitado y configurado antes o durante el evento. auditd escribe registros de auditoría en disco y sus logs se consultan con ausearch o aureport, pero no puede reconstruir eventos que nunca fueron auditados.
¿Cuándo conviene reconstruir el servidor?
Si hubo compromiso root, persistencia desconocida, malware activo, alteración de binarios o dudas sobre integridad del sistema, lo más seguro suele ser reconstruir desde imagen limpia, restaurar datos verificados y rotar secretos.
Recomendamos
- Cómo saber si tu Linux está bien protegido: 30 comprobaciones de seguridad que puedes realizar ahora mismo
- Cómo proteger un servidor Linux frente a vulnerabilidades Zero-Day cuando todavía no existe un parche
- Cómo saber si tu Linux necesita una actualización urgente: kernel, paquetes, firmware y vulnerabilidades críticas
- Cómo crear un sistema de gestión de vulnerabilidades con software libre: inventario, CVE, prioridades, parches y seguimiento
- Cómo proteger un servidor Linux contra ataques DDoS: configuración, monitoreo y mitigación
- Guía completa de SELinux y AppArmor: cómo proteger aplicaciones y servicios sin complicarte la vida
En resumen
Hacer análisis forense en Linux después de un ciberataque exige método, calma y disciplina. Primero se preserva evidencia volátil, luego se copian logs, se revisan procesos, conexiones, usuarios, persistencia y archivos recientes; después se construye una línea de tiempo, se define alcance y se decide contención, erradicación y recuperación.
La diferencia entre una limpieza superficial y una investigación útil está en la evidencia. Sin logs, hashes, contexto, línea de tiempo y documentación, será difícil saber cómo entró el atacante, qué tocó, qué datos estuvieron en riesgo y qué controles deben mejorarse.
Cierre editorial
Un servidor Linux atacado no debe tratarse como una máquina sucia que solo necesita limpieza. Debe tratarse como una escena técnica que cuenta una historia: procesos, conexiones, logs, usuarios y archivos muestran el camino del atacante. Quien preserva evidencia entiende el incidente; quien borra primero, pierde la oportunidad de aprender y proteger mejor.

