Normalmente, cuando se carga un archivo DLL en Windows, se llama a LoadLibrary. LoadLibrary toma la dirección de un archivo DLL y lo carga en la memoria. Además de DLL está en el disco, DLL se mostrará cuando se utilizan herramientas como List DLLs para enumerar DLL cargadas en la memoria según expertos de análisis de vulnerabilidades informáticas.
Reflective DLL se refiere a la carga de una DLL de la memoria, en lugar de hacerlo desde el disco. Windows no tiene una función LoadLibrary que apoya en esto, así que para obtener la funcionalidad tenemos que escribir propia función explica Jorge Ríos el maestro de diplomado de hacking ético. Uno de los beneficios de escribir propia función es que omitimos algunas de las cosas que normalmente Windows hace, tales como el registro de la DLL como un módulo cargado en el proceso, lo que hace que reflective DLL más indetectable. Meterpreter es un ejemplo de una herramienta que utiliza la carga reflexiva para ocultarse según el maestro de diplomado hacking ético.
Inyección de reflective DLL es una técnica de inyección de la biblioteca que usa el concepto de programación reflexiva para realizar la carga de una biblioteca de memoria en un proceso de host. Como tal la biblioteca es responsable de cargar a sí mismo mediante la implementación de un archivo de portable ejecutable (PE). Con eso podemos gobernar, con mínima interacción con el sistema host y el proceso, cómo se va a cargar e interactuar con el host según expertos de análisis de vulnerabilidades informáticas.
La principal ventaja de la propia biblioteca de carga es que no está registrada en ninguna manera con el sistema host y como resultado es en gran parte indetectable tanto a nivel de sistema y a nivel de proceso.
Acuerdo con el diplomado de hacking ético, el proceso de inyección de forma remota de una biblioteca en un proceso es de dos pasos. En primer paso, debe indicarse la biblioteca que desea inyectar en el espacio de dirección del proceso destino (referido aquí como el proceso de host). En segundo paso la biblioteca debe ser cargada en ese proceso de host de tal manera que se cumplan las expectativas de tiempo de ejecución de la biblioteca, como resolver sus importaciones o reubicación de un lugar adecuado en la memoria.
Inyección de Reflective DLL funciona de la siguiente forma.
- La ejecución se hace pasar, a través de un pequeño código shell bootstrap, a la biblioteca de
función de ReflectiveLoader que es una función exportada en la biblioteca de tabla de exportación. - Como actualmente se existe la imagen de la biblioteca en una dirección arbitraria en la memoria, el reflectiveloader primero calculará la dirección actual de su propia imagen en la memoria para poder analizar posteriormente sus propias cabeceras para uso.
- ReflectiveLoader analizará a continuación la tabla de exportación de kernel de host para calcular las direcciones de tres funciones requeridas por el cargador, es decir LoadLibrary, GetProcAddress y VirtualAlloc.
- La ReflectiveLoader ahora asignará una región continua de memoria en que se procederá a cargar su propia imagen. La ubicación no es tan importante como el cargador localizará correctamente la imagen más adelante.
- Encabezados y secciones de la biblioteca se cargan en sus nuevas direcciones en la memoria.
El ReflectiveLoader luego procesará la copia recién cargada de tabla de importación de su imagen, eso también cargará cualquier biblioteca adicional y resolver sus direcciones respectivas de función importada. - El ReflectiveLoader luego procesará la copia recién cargada de la tabla de reubicación de su imagen.
- El ReflectiveLoader luego llamará función de punto de entrada de su imagen recién cargada, DllMain con con DLL_PROCESS_ATTACH. La biblioteca ahora ha sido correctamente cargada en la memoria.
- Finalmente el ReflectiveLoader volverá ejecución al inicial de shellcode bootstrap que lo llamó.
Como una biblioteca reflexivamente cargada no se registrará en la lista de procesos de host de los módulos cargados, específicamente la lista de Process Environment Block (PEB), que se modifica durante las llamadas de API como kernel 32 LoadLibrary y LoadLibraryEx, cualquier intento de enumerar los módulos de procesos host no cederá la biblioteca inyectada. Esto es porque la inyección de la biblioteca no registra con su proceso de host en cualquier etapa.
Según expertos de análisis de vulnerabilidades informáticas, a nivel del sistema cuando se utiliza Inyección de Reflective DLL en la explotación remota, la biblioteca debe ser indetectable por los escáneres de archivo, como Anti Virus, ya que nunca entra el disco.
Entusiasta de la seguridad cibernética. Especialista en seguridad de la información, actualmente trabajando como especialista en infraestructura de riesgos e investigador.
Experiencia en procesos de riesgo y control, soporte de auditoría de seguridad, diseño y soporte de COB (continuidad del negocio), gestión de grupos de trabajo y estándares de seguridad de la información.
Envía tips de noticias a info@noticiasseguridad.com o www.instagram.com/iicsorg/.
También puedes encontrarnos en Telegram www.t.me/noticiasciberseguridad