Trabajo como operador en BlackArrow, el Red Team de Tarlogic. Soy un entusiasta del desarrollo de malware y dedico gran parte de mi tiempo libre a la investigación, desarrollo de nuevas técnicas de hacking y el aprendizaje autodidacta.
Para evitar «pisar» disco, a día de hoy el malware suele llevar a cabo la inyección y ejecución de código directamente desde la memoria de un proceso. Esta ejecución desde regiones de memoria privada genera diversos IoCs, entre ellos la presencia de malformaciones en la pila de llamadas (call stack), siendo estas malformaciones una fuenta de telemetría que los EDRs están empezando a utilizar para detectar la ejecución de implantes desde memoria. En esta charla, exploraremos los motivos que dan lugar a esta situación y analizaremos las distintas alternativas que podemos implementar en nuestro malware para ocultar la presencia de nuestro implante a través de la falsificación de la pila de llamadas.
Información técnica / Estado del arte:
La charla contará con dos partes diferenciadas: una primera parte donde se llevará a cabo un análisis del funcionamiento interno de la pila en sistemas operativos windows con arquitectura de 64 bits con el objetivo de asentar conceptos y mostrar el motivo por el que la ejecución de implantes desde memoria rompe el proceso de «desenrollado» (unwinding) de la pila de llamadas; y una segunda parte donde se propondrán distintas alternativas para solventar esta situación desde el punto de vista del desarrollador de malware. Esta segunda parte comprenderá el análisis de técnicas como module stomping, template stomping (ambas implementadas en https://github.com/Kudaes/DInvoke_rs), SilentMoonWalk y stack replacement (https://github.com/Kudaes/Unwinder).
La capacidad de inyectar código arbitrario en otro proceso del sistema sin ser detectado por los EDRs es fundamental a la hora de ejecutar un ejercicio de Red Team. En esta charla, se presentará un nuevo método de inyección de código “threadless” para equipos con sistema operativo Windows a través del secuestro de puntos de entrada de DLLs que rompe con los patrones habituales utilizados en la actualidad.
El continuo desarrollo del conocido como “juego del gato y el ratón” que lleva a desarrolladores de malware y de sistemas de EDR a competir entre ellos para intentar anular al otro ha permitido a los EDR mejorar enormemente sus capacidades a la hora de detectar la inyección de código en un proceso remoto. Parte de este éxito se debe a que la gran mayoría de técnicas de inyección de código en equipos con sistema operativo Windows siguen una misma secuencia de acciones conocida: alojamiento de memoria, escritura de payload y generación de un nuevo hilo para ejecutar el código malicioso, todo ello involucrando a un proceso origen y a un proceso destino.
A pesar de que existen numerosas maneras de llevar a cabo dichas acciones combinando una gran cantidad de funciones del API de Windows al final la lógica siempre es la misma, por lo que para poder evadir a los EDRs empiezan a surgir alternativas que intentan romper con esta tendencia.