
byte helado Es un proyecto POC que combina diferentes técnicas de evasión de defensa. He estado experimentando con la técnica de inyección del administrador AppDomain durante los últimos días, con buen éxito en mis compromisos anteriores del equipo rojo contra algunos EDR. Si bien esto es excelente para el acceso inicial a los vectores, me gustaría publicar un POC que ayude a ocultar su shellcode en otro lugar. ¡No más archivos DLL incrustados con shellcode!
¡pregunta!
Si bien es una técnica excelente cuando se usa sola, se usa junto con técnicas de entrega, como enviar C# ClickOnce en archivos ISO/ZIP/VHD/VHDX. El problema real es que la heurística AI/ML de AV/EDR detecta la DLL 1 del dominio de la aplicación en 10 veces. Esto se debe a que el archivo DLL debe colocarse en el disco antes de que se pueda inicializar el dominio de la aplicación. Ignorando la carga DLL remota (ruta UNC en .config) por ahora, la DLL del dominio de la aplicación contendrá shellcode, que creo firmemente que es la razón por la que es posible la detección estática, ya que el resto del código para las llamadas WINAPI se puede resolver dinámicamente y ofuscar bien.
Me gustaría mejorar esta técnica en términos de minimizar lo que contiene inicialmente la DLL.Primero puse el shellcode encriptado en un archivo separado en el disco con el DLL del inyector, pero luego encontré este increíble blog de Checkpoint campaña de Zloader
Versión TLDR: podemos incrustar datos arbitrarios en algunos campos en el PE de una manera que no rompa la firma del archivo. Por lo tanto, nuestros datos se incrustarán y el exe seguirá estando firmado digitalmente.
Más información–
Entonces, la idea es incrustar un código auxiliar cifrado en un ejecutable firmado conocido y aún así lograr mantener la firma como el malware Zloader. Al hacer esto, la DLL del administrador AppDomain ya no contendrá el código de shell en sí mismo, sino que simplemente tendrá la lógica para analizar el código de shell del binario PE que lo carga para descifrarlo y ejecutarlo como un subproceso separado. Si lo hace, puede reducir la tasa de detección estática de la DLL mientras su shellcode está bien ubicado en el binario firmado.
Traté de hacer esto manipulando manualmente las muestras de ZLoader que obtuve de VirusTotal, pero luego encontré un proyecto que ya implementa todas estas técnicas bastante bien: Sigflip. En este POC, utilizo el código del cargador de Sigflip para compilar el inyector AppDomain DLL y SigFlip para incrustar el shellcode encriptado en nuestro C# exe.
ventaja
Independientemente de la técnica de ofuscación/codificación utilizada, fragmentos de shellcode como el shellcode sin etapas de Cobalt Strike ya no residirán en archivos DLL sin firmar en el disco. Los archivos DLL son más limpios, más pequeños y sigilosos, con un código mínimo, lo que genera menos cambios detectados.
Servicio

Pasos para compilar un ejecutable Shellcode firmado
- Elija cualquier binario C# firmado x64 de su elección en el que desee que Cobalt Strike Beacon resida y se ejecute: por ejemplo: CasPol.exe, etc.
- Genere su Shellcode de Cobalt Strike Stageless – x64-stageless.bin
- Póngalos a ambos en la misma carpeta que SigFlip y ejecute el siguiente comando:
SigFlip.exe -i "Z:\ZLoader\CasPol.exe" "Z:\ZLoader\x64-stageless.bin" "Z:\ZLoader\update.exe" "S3cretK3y"
- Gracias a SigFlip, ahora tiene un binario llamado (¿Windows firmado?)
update.exe
Este será un PE firmado digitalmente con un shellcode encriptado incrustado en él.
Pasos para compilar la DLL del cargador de dominio de aplicaciones
- Obtenga el código de la plantilla de C# desde aquí
- Reemplace su clave de cifrado con la clave que eligió al ejecutar SigFlip en la línea: 163 (es posible que deba ajustar algunos bytes para confirmar que su código de shell CS se descifra correctamente)
- Reemplazar con ruta binaria en Línea: 146
- Cambie la ruta del archivo de registro en línea: 158,165
- Compile el código en una DLL usando el siguiente comando:
csc /target:library /out:test.dll test.cs
- Coloque la DLL compilada y el archivo update.exe.config en la misma carpeta donde se encuentra el archivo exe Shellcode firmado.
- Ejecute el update.exe.