
Dropper de autoinyección en C++ basado en diversas técnicas de evasión de EDR.
Este proyecto consiste en un dropper simple de autoinyección en C++ centrado en un POC de evasión de EDR. Para implementarlo, he combinado el uso de Windows Thread Pooling para ocultar la pila de llamadas y el uso de indirect syscalls para evitar el hooking en NTDLL.
2023-10-08-23-22-35-Trim
image
image
image
image
Como se puede observar en las imágenes, desde el código de Cordyceps se realiza un salto a ntdll para utilizar una de las instrucciones syscall. Esto debería considerarse una acción maliciosa; sin embargo, al ejecutar el retorno en ntdll, volvemos al código de tpWorker, que se encuentra dentro de ntdll. Así, desde la perspectiva del antivirus (AV), ntdll parecería estar haciendo una llamada a otra parte de ntdll, lo cual no se considera malicioso.
nasm -f win64 .\Assembly.asm -o .\Assembly.obj
g++ -o poc.exe main.cpp Assembly.obj
https://0xdarkvortex.dev/hiding-in-plainsight/
https://redops.at/en/blog/direct-syscalls-vs-indirect-syscalls
https://captmeelo.com/redteam/maldev/2022/05/10/ntcreateuserprocess.html
https://klezvirus.github.io/RedTeaming/AV_Evasion/StackSpoofing/
https://medium.com/@sruthk/cracking-assembly-fastcall-calling-convention-in-x64-c6d77b51ea86