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 ListDLLs
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.
0 comments:
Post a Comment