DllNotificationInjection: una prueba de concepto de una nueva técnica de inyección

DllNotificationInection es una prueba de concepto de una nueva técnica de inyección de procesos “sin subprocesos” que funciona utilizando el concepto de devoluciones de llamadas de notificación DLL en procesos locales y remotos.

Una publicación de blog adjunta con más detalles está disponible aquí:

DLL Notification Injection

¿Cómo funciona?

DllNotificationInection funciona creando un nuevo LDR_DLL_NOTIFICATION_ENTRY en el proceso remoto. Lo inserta manualmente en la LdrpDllNotificationList remota parcheando el List.Flink del encabezado de la lista y el List.Blink de la primera entrada (ahora segunda) de la lista.

Nuestro nuevo LDR_DLL_NOTIFICATION_ENTRY apuntará a un shellcode de trampolín personalizado (creado con el proyecto ShellcodeTemplate de @C5pider) que restaurará nuestros cambios y ejecutará un shellcode malicioso en un nuevo hilo usando TpWorkCallback.

Después de registrar manualmente nuestra nueva entrada en el proceso remoto, solo tenemos que esperar a que el proceso remoto active nuestra devolución de llamada de notificación de DLL cargando o descargando alguna DLL.

Obviamente, esto no sucede regularmente en todos los procesos, por lo que es necesario un trabajo previo para encontrar candidatos adecuados para esta técnica de inyección. Según mi breve búsqueda, parece que RuntimeBroker.exe y explorer.exe son candidatos adecuados para esto, aunque le recomiendo que busque otros también.

Notas de OPSEC

Este es un POC. Para que esto sea seguro para OPSEC y eluda los productos AV/EDR, se necesitan algunas modificaciones. Por ejemplo, utilicé RWX al asignar memoria para los códigos de shell; no seas perezoso (como yo) y cámbialos.

También es posible que desee reemplazar OpenProcess , ReadProcessMemory y WriteProcessMemory con algunas API de nivel inferior y usar Indirect Syscalls o (complemento descarado) HWSyscalls .

Tal vez cifre los códigos shell o incluso haga un esfuerzo adicional y modifique el código shell del trampolín para adaptarlo a sus necesidades o al menos cambie los valores hash predeterminados en el proyecto ShellcodeTemplate de @C5pider que se utilizó para crear el código shell del trampolín.

Descargar DllNotificationInjection

Relacionado

Salir de la versión móvil