Cómo evitar la detección de malware por parte de EDR Antivirus e inyectar código en procesos confiables de Windows

Mockingjay es el nombre de una técnica innovadora de inyección de procesos que tiene el potencial de permitir que los actores de amenazas eviten ser detectados por EDR (Detección y respuesta de punto final). La inyección de procesos es un método bien conocido que utilizan el software malicioso y los atacantes para introducir y ejecutar código en el área de memoria de un proceso. Esto se puede lograr insertando el código directamente en el proceso mismo. El origen de esta inyección puede ser el proceso que lleva a cabo la operación en sí (conocido como autoinyección) u otro proceso completamente. Para obtener acceso ilegal, controlar el comportamiento del proceso o enmascarar el código inyectado de las herramientas de seguridad y los defensores, los atacantes suelen apuntar a procesos legítimos cuando inyectan código en uno externo, como ejecutar aplicaciones o procesos del sistema.
Un atacante utilizará una colección de API de Windows, cada una de las cuales está diseñada para realizar una función específica dentro de la lógica de inyección, para inyectar y ejecutar código en la memoria. Esto se puede hacer dentro del mismo proceso o dentro de un proceso remoto. Dependiendo de la base tecnológica del enfoque de inyección de código que se utilice, puede haber una diferencia en la cantidad de llamadas a funciones que se realizan, así como las API de Windows exactas que se utilizan.

Los métodos típicos para la inyección de procesos incluyen la inyección de biblioteca de enlaces dinámicos (DLL), la inyección de ejecutables portátiles, el secuestro de ejecución de subprocesos, el vaciado de procesos y la duplicación de procesos, entre otros. Algunos de estos métodos son más conocidos que otros.

Es importante tener en cuenta que cada una de estas técnicas necesita una combinación de llamadas al sistema particulares y API de Windows para llevar a cabo la inyección. Esto permite a los defensores construir procesos adecuados de detección y mitigación, algo que no debe pasarse por alto.

Se han creado varios enfoques diferentes a lo largo del tiempo para lograr los objetivos de inyección y ejecución de código dentro del área de memoria de los programas que se ejecutan en Windows. Las técnicas de Inyección de Proceso más frecuentes se describen y contrastan en la siguiente tabla, que sirve de referencia según la empresa Joes Security. La tabla está organizada de acuerdo con las llamadas a la API de Windows que son necesarias para la implementación efectiva de los métodos.

Mockingjay se distingue de otros programas por el hecho de que elude estas capas de seguridad. Lo hace eliminando el requisito de ejecutar interfaces de programación de aplicaciones (API) de Windows, que normalmente son monitoreadas por soluciones de seguridad. En su lugar, utiliza archivos ejecutables portátiles de Windows preexistentes que ya vienen con un bloque de memoria que está protegido con permisos de lectura, escritura y ejecución (RWX).

Esto, a su vez, se logra con la ayuda de msys-2.0.dll, que viene con un “generoso espacio RWX disponible de 16 KB”, lo que lo convierte en un excelente candidato para cargar código malicioso y pasar desapercibido al mismo tiempo. Dicho esto, es importante resaltar la posibilidad de que haya DLL más vulnerables que tengan cualidades comparables.

La empresa dijo que investigó dos enfoques distintos, conocidos como autoinyección e inyección remota de procesos, para realizar la inyección de código de una manera que no solo mejorara la efectividad del ataque sino que también evadiera la detección.

El primer método implica el uso de un programa especializado para cargar directamente la DLL vulnerable en el espacio de direcciones de la aplicación, lo que luego permite que la sección RWX finalmente lleve a cabo la ejecución prevista del código. Por el contrario, la inyección de procesos remotos implica el uso de la sección RWX de una DLL vulnerable para llevar a cabo la inyección de procesos en un proceso remoto como ssh.exe. Esto se puede lograr aprovechando la DLL vulnerable.

La particularidad de este enfoque radica en el hecho de que no es necesario asignar memoria, establecer permisos o crear un nuevo subproceso dentro del proceso de destino para iniciar la ejecución de nuestro código inyectado. Es difícil para EDR para identificar esta táctica ya que difiere de otras estrategias utilizadas actualmente.