Qué es Shellcode y Cómo Se Crea
Qué es Shellcode y Cómo Se Crea

¿Qué es Shellcode y Cómo Se Crea?

La primera vez que escuchaste “shellcode“, es posible que pensaras en shell scripting. Sorprendentemente, ni el shellcode ni la inyección de shellcode tienen nada que ver con el shell scripting. Sigue leyendo para saber más.

Supongamos que la red de tu organización es un gran y hermoso jardín rodeado de gruesos y altos muros, y tiene una puerta fortificada. En esta analogía, los muros representan tus medidas de seguridad que mantienen alejados a los intrusos, y la puerta representa los puntos de acceso seguros a través de los cuales pueden entrar tus empleados. Si tus muros son lo suficientemente gruesos y altos, pueden mantener alejados a los hackers, pero por desgracia, incluso los sistemas de seguridad más seguros tienen puntos vulnerables. La mayoría de los hackers intentan encontrar estos puntos y explotarlos en lugar de aporrear ruidosamente la puerta principal o golpear las paredes con un mazo.

La inyección de shellcode es una forma sofisticada de encontrar un punto vulnerable en la capa de ciberseguridad de una organización y explotarlo con fines maliciosos. En este artículo explicaremos qué es shellcode, la inyección de shellcode y cómo puedes proteger a tu organización de ella.

¿Qué es un Shellcode?

En el contexto del hacking, un shellcode hace referencia a un pequeño fragmento de código que se utiliza para explotar una vulnerabilidad de un software. El nombre es un apelativo a la capacidad del shellcode para iniciar un intérprete de comandos a través del cual el hacker obtiene el control del dispositivo comprometido. Con el tiempo, la definición de “shellcode” se amplió para abarcar cualquier trozo de código que pueda llevar a cabo una tarea similar.

Concepto de código ensamblador
Concepto de código ensamblador

Un shellcode tiene este aspecto en hexadecimal:

"\xb0\x01\x31\xdb\xcd\x80"

¿Por qué el código shell suele estar en formato hexadecimal?

Shellcode generalmente se representa en hexadecimal porque el hexadecimal es más corto que el binario, lo que facilita la lectura y escritura para los humanos (un dígito hexadecimal se expande a cuatro dígitos binarios).

Escrito a menudo en código máquina, un shellcode puede ser local o remoto. Un hacker que tiene poco o ningún acceso a la máquina, pero que puede explotar con éxito una vulnerabilidad como un desbordamiento de búfer, suele optar por un shellcode local. Por otro lado, un shellcode remoto es preferido por un hacker que desea atacar la máquina objetivo a través de una red local, una red remota o una intranet. La gran mayoría de los shellcodes remotos emplean conexiones de socket TCP/IP.

Tipos de Shellcodes

Los shellcodes pueden dividirse en dos categorías: locales o remotos. La forma en que se clasifican en estos dos grupos depende de si el atacante ha obtenido el control sobre el dispositivo objetivo en el que se ejecuta el shellcode (local) o a través de una red (remoto).

Local

Este tipo de shellcode es utilizado por un atacante que tiene acceso restringido a una máquina, pero que sigue siendo capaz de explotar una vulnerabilidad. Un ejemplo de explotación puede ser un ataque de desbordamiento de búfer que, si se realiza con éxito, puede hacer que el shellcode proporcione al atacante mayores privilegios para permitirle un mayor control sobre el dispositivo objetivo.

Remoto

El shellcode remoto implica que el atacante se dirige a un dispositivo a través de una red local, una intranet o una red remota para acceder a la máquina. El método distintivo utilizado para este tipo de shellcode es la aplicación del shellcode a través de la red. El atacante suele utilizar un socket TCP/IP estándar para acceder al shell en la máquina objetivo, ya que los shellcodes remotos suelen funcionar utilizando estas conexiones de socket.

Si el shellcode autentica la conexión, se convierte en un “shell inverso” (“reverse shell” en inglés) o un shellcode de “conexión de vuelta” (“connect-back” en inglés), ya que el shellcode se conecta de vuelta al dispositivo del atacante. Sin embargo, si el dispositivo del atacante se conecta al shellcode objetivo, el shellcode se denomina “bindshell“, ya que el shellcode se conecta a un determinado puerto del dispositivo objetivo.

Descarga y ejecución

Este tipo de shellcode descarga y ejecuta malware en el dispositivo o sistema objetivo. En lugar de generar otro shell, el shellcode ordena al dispositivo objetivo que descargue el malware, lo guarde y lo ejecute. En los tiempos modernos, esto se lleva a cabo en forma de ataques drive-by download.

Este tipo de shellcode contiene códigos más pequeños que no requieren que el shellcode cree un nuevo proceso en el sistema objetivo. Además, no es necesario que el shellcode limpie el proceso objetivo, ya que esto lo realiza la biblioteca cargada en el proceso.

Por Etapas

Si los datos que el atacante pretende inyectar tienen un tamaño limitado, pueden ejecutarse por etapas. En la etapa 1, se puede ejecutar un fragmento de código shell, seguido de otro más grande (etapa 2).

Egg-Hunt

De forma similar a los shellcodes por etapas, este tipo de shellcode se lleva a cabo mediante un pequeño código “egg-hunt” que se inyecta y ejecuta en el proceso. El propósito de inyectar este código más pequeño es escanear el espacio de direcciones del proceso para que se ejecute el shellcode más grande (el huevo).

Omelette (tortilla)

Este tipo de shellcode funciona de manera similar a los shellcodes de egg-hunt, sin embargo, la característica diferente es que múltiples bloques de datos pequeños (huevos) se reorganizan en una pieza grande (la tortilla). A continuación, se ejecuta el shellcode omelette. Este shellcode se utiliza si el atacante sólo dispone de pequeños bloques de datos para inyectar.

Cómo Crear un Shellcode

section	.text
	global _start       ;debe declararse para utilizar gcc
_start:                     ;indicar el punto de entrada
	mov	edx, len    ;longitud del mensaje
	mov	ecx, msg    ;mensaje a escribir
	mov	ebx, 1	    ;descriptor de archivo (stdout)
	mov	eax, 4	    ;número de llamada del sistema (sys_write)
	int	0x80        ;llamar al kernel
	mov	eax, 1	    ;número de llamada del sistema (sys_exit)
	int	0x80        ;llamar al kernel

section	.data

msg	db	'Hola, esgeeks!',0xa	;nuestro querido string
len	equ	$ - msg			;longitud de nuestra querida cadena

Crear un shellcode puede ser una tarea difícil, pero gratificante para cualquier pentester. En un próximo artículo profundizaremos más sobre su creación. Asimismo, si quieres empezar en la creación de shellcodes, estas son algunas buenas recomendaciones:

¿Qué es la Inyección de Shellcode?

En pocas palabras, la inyección de shellcode es una técnica de hacking en la que el hacker explota programas vulnerables. El hacker se infiltra en los programas vulnerables y hace que ejecute su propio código.

El proceso de inyección de shellcode consta de tres pasos:

  1. Creación del shellcode
  2. Inyección del shellcode
  3. Modificación del flujo de ejecución y/o ejecución del shellcode
Inyección de shellcodes con Shellter
Inyección de shellcodes con Shellter

Para crear el shellcode, el hacker necesita crear un código máquina compilado escribiendo y ensamblando el código, y extrayendo bytes del código máquina. Para inyectar el shellcode, se manipula el programa para que tome la entrada y lea los archivos externos.

¿Cómo Protegerme de la Inyección de Shellcode?

A menudo, los hackers intentan aplicar ingeniería inversa a los programas para encontrar sus puntos vulnerables. Puedes empezar por asegurarte de que todas las vulnerabilidades del software que utilizas están mitigadas. Además, también puedes abordar los desbordamientos de búfer para asegurarte de que tu organización está a salvo de la inyección de shellcode.

Entre otras medidas que pueden adoptarse para evitar la explotación de shellcode se incluye asegurarse de que un sistema o dispositivo esté equipado con un cortafuegos o un dispositivo que impida los intentos de conexión no deseados. Es importante disponer de una solución de seguridad multicapa que incluya el uso de aprendizaje automático para detectar actividades maliciosas antes de que se produzca la explotación.

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda