Reverse Shells: la conversación secreta entre tu ordenador y el atacante
Imagina que tu servidor, obediente y silencioso, marca por teléfono a un desconocido y le abre una línea directa. Esa línea no es para pedir ayuda: es para entregar las llaves de la casa. Eso es, en esencia, un reverse shell. En vez de esperar a que el atacante se conecte a tu máquina, la víctima “llama de vuelta” al atacante y le ofrece una terminal remota.
No hay películas. No hay ruidos. Solo una conexión saliente que parece, a simple vista, tráfico legítimo. Y por eso funcionan tan bien.
¿Cómo funciona un reverse shell? (explicación técnica simple)
-
Bind shell (contrario): el servidor comprometido abre un puerto y espera que el atacante se conecte (más visible, porque hay un puerto en escucha).
-
Reverse shell: la víctima inicia la conexión hacia el atacante (evita firewalls entrantes y camufla el tráfico en puertos salientes permitidos como 80 o 443).
Flujo típico:
-
El atacante prepara un listener (p. ej.
nc -lvp 4444ometasploit handler). -
El atacante hace que la víctima ejecute un comando/pequeño script que abre un socket TCP/UDP y enlaza stdin/stdout/stderr al socket.
-
El atacante obtiene una sesión interactiva (shell), puede ejecutar comandos, subir/descargar archivos, pivotar, etc.
Comandos REALES que usan los atacantes (ejemplos — analiza y protégelos)
Linux / BSD
-
Bash (cuando
/dev/tcpestá disponible):
-
Netcat (si está instalado):
-
Python 3:
-
Perl:
Windows
-
Netcat for Windows:
-
PowerShell (no interactivo, más ofuscado):
-
PowerShell encoded (común para evadir detección):
Desde aplicaciones web (PHP)
-
PHP reverse shell (ejecución desde web):
Estos ejemplos muestran la diversidad: lenguajes, utilidades y técnicas. Si un atacante domina al menos uno de estos medios, puede obtener control remoto instantáneo.
Señales de compromiso (IoC) específicas a buscar
-
Conexiones salientes no habituales: hosts internos conectando persistentemente a IPs extranjeras en puertos atípicos (o a 443/80 hacia IPs nuevas).
-
Procesos hijos extraños:
httpd/php-fpm/nginx/w3wp.exeque lanzansh/bash/cmd.exe/powershell. -
Netcat / nc / ncat / socat instalados / ejecutados en servidores que no deberían tenerlos.
-
PowerShell con parámetros peligrosos:
-EncodedCommand,-NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass. -
Comandos encadenados y FIFOs en
/tmp(ej: creación de named pipes/tmp/fy uso demkfifo). -
Procesos que se reconectan periódicamente (ejemplo de heartbeat cada X segundos).
-
Tráfico cifrado saliente inusual donde no hay conosimiento de uso legítimo (por ejemplo, conexiones TLS persistentes a hosts cuyo certificado es auto-firmado o dinámico).
-
Archivos temporales con nombres raros o binarios descargados en
/tmp,C:\Windows\Tempo carpetas de usuarios.
Mapeo rápido a MITRE ATT&CK
-
T1059 — Command and Scripting Interpreter (powerShell, bash, python).
-
T1071 — Application Layer Protocol (C2 over HTTP/HTTPS).
-
T1105 — Ingress Tool Transfer (descarga de payloads).
-
T1218 — Signed Binary Proxy Execution (abusar de utilidades del sistema). Este mapeo ayuda a priorizar detecciones y playbooks.
Cómo detectarlo y mitigarlo (estrategia defensiva)
Prevención
-
Filtrado egress: permitir solo destinos salientes necesarios; usar listas blancas (egress allowlist). Bloquear conexiones salientes a IPs/países sospechosos.
-
Eliminar/utilizar control sobre herramientas peligrosas: si no necesitas
nc,socat, opythonen ciertos hosts, elimínalos o restríngelos. -
Harden de aplicaciones web: deshabilitar
exec,system,popen,proc_openen PHP si no son necesarios; validar uploads y evitar ejecución de contenido subido. -
Políticas de ejecución en Windows: AppLocker/Windows Defender Application Control para bloquear binarios no autorizados.
-
SSH bastion y jump hosts: evita acceso SSH directo a servidores productivos desde Internet.
Detección
-
EDR: buscar parent-child unusual relationships (ej:
nginx -> /bin/shophp-fpm -> python). -
Sysmon (Windows): monitorizar Event ID 1 (ProcessCreate) + Event ID 3 (NetworkConnect). Alerta si
powershell.exeocmd.exeestablecen conexiones salientes tras ser invocados por procesos web. -
Auditd / process accounting (Linux): registrar ejecución de
execvepor procesos con UID de servicio web. -
Netflow / DNS logs: correlacionar sesiones salientes persistentes, picos de transferencia y dominios dinámicos.
-
Inspección TLS (si es posible): detectar C2 sobre HTTPS por patrones anómalos (SNI dinámico, certificados inusuales).
Reglas y plantillas de detección (para adaptar)
Detección genérica de parent-child sospechoso (pseudo-regla EDR):
Si parent_process en {apache2,nginx,php-fpm,httpd,iis} crea un proceso cuya image esté en {bash,sh,cmd.exe,powershell.exe,nc.exe,python.exe,perl.exe} → ALERT: posible reverse shell.
YARA (archivo o playoad que contenga patrones de reverse shell)
(Estas plantillas requieren ajuste a tu red y falsos positivos deben ser afinados).
Playbook rápido de respuesta ante la detección de un reverse shell
-
Detectar / Confirmar
-
Correlaciona logs EDR, netflow y Sysmon/Auditd. ¿Existe proceso con parent web server y conexión saliente?
-
-
Contener
-
Aislar el host: bloquear egress desde la máquina (firewall) o mover a VLAN/QoS de cuarentena.
-
Desconectar de la red si es necesario y factible.
-
-
Recolectar
-
Guardar volcado de memoria (memory dump), volcado de procesos,
ps auxww,netstat -tunapl,ss -tnp,lsof -i. -
Copia de logs (web server, applicación, auth logs).
-
-
Analizar
-
Identificar persistencia: tareas programadas, servicios nuevos, entradas en crontab, claves SSH añadidas.
-
Buscar binarios/archivos en
/tmp,C:\Windows\Temp, rutas de usuarios.
-
-
Erradicar
-
Revocar credenciales comprometidas (rotar claves, cambiar contraseñas, revocar tokens).
-
Eliminar artefactos, o —si hay dudas— reconstruir el host desde una imagen limpia.
-
-
Recuperar
-
Restaurar desde backup verificado; validar integridad antes de exponer de nuevo.
-
-
Post-mortem
-
Registrar indicadores, timeline, y acciones correctivas para prevenir reingresos. Actualizar reglas EDR/IDS.
-
Checklist operativo inmediato (qué hacer HOY mismo si te preocupa esto)
-
Revisar procesos hijos de servicios web para las últimas 24–72 horas.
-
Revisar conexiones salientes persistentes (netstat/ss / siem) y correlacionar con horas y usuarios.
-
Asegurar que las funciones de ejecución remota en aplicaciones web estén deshabilitadas si no son críticas.
-
Implementar o validar reglas EDR para alertar sobre
webserver -> shellparent-child. -
Configurar egress control para hosts sensibles (DB, app servers, etc.).
-
Crear playbook de respuesta (breve) y practicar un tabletop sobre reverse shell.
Reflexión final
Un reverse shell no es más que una línea abierta, una conversación secreta que tu sistema mantiene sin que lo notes. Cuando la línea está activa, el atacante tiene la libertad de actuar casi con impunidad: explorar, robar y pivotar. La parte aterradora es que, a ojos no entrenados, esa línea puede parecer simplemente tráfico saliente — un “check-in” del sistema — y nadie levantará la mano hasta que sea demasiado tarde.
Y aquí la pregunta que dejo a mis lectores: Si tu servidor pudiera "llamar" a cualquier dirección hoy,
¿sabrías distinguir una llamada de mantenimiento legítima de una que abre la puerta a un intruso?
Artículos Relacionados
Continúa explorando contenido similar.
Del notebook al producto: llevando tu proyecto de IA a producción
Leer artículo
Automatización de informes: la nueva era del radiólogo digital
Leer artículo
El paciente digital: cómo cambió la relación médico-paciente en 10 años
Leer artículo
Automatización de procesos clínicos: qué tareas dejarán de hacer los médicos
Leer artículo
La evolución del cuidado: de curar enfermedades a prevenirlas
Leer artículo
El rol del médico en el mundo automatizado
Leer artículo
Patrones de prompt reutilizables que todo desarrollador debería conocer
Leer artículo
La incursión de la Impresión 3D en la creación de implantes médicos
Leer artículo
Toolformer mental: cómo lograr que el modelo use tus herramientas y APIs
Leer artículo
Big Data clínico: cómo el análisis de millones de historias salva vidas
Leer artículo
Evaluación continua: asegurando que tu modelo no empeore con el tiempo
Leer artículo
Interoperabilidad en salud: cómo lograr que todos los sistemas se hablen
Leer artículo
Cómo el deep learning mejora resonancias y tomografías
Leer artículo