0 оценок0% нашли этот документ полезным (0 голосов)
38 просмотров5 страниц
Este documento describe cómo analizar DLLs maliciosas. Explica que las DLLs se ejecutan en el contexto del proceso que las carga, lo que permite al malware esconderse e interactuar con el sistema. Detalla formas de enumerar las funciones exportadas de una DLL, como usar CFF Explorer, Pefile y IDA Pro. También discute nombres comunes y aleatorios de funciones exportadas y cómo ejecutar DLLs usando Rundll32.exe.
Este documento describe cómo analizar DLLs maliciosas. Explica que las DLLs se ejecutan en el contexto del proceso que las carga, lo que permite al malware esconderse e interactuar con el sistema. Detalla formas de enumerar las funciones exportadas de una DLL, como usar CFF Explorer, Pefile y IDA Pro. También discute nombres comunes y aleatorios de funciones exportadas y cómo ejecutar DLLs usando Rundll32.exe.
Este documento describe cómo analizar DLLs maliciosas. Explica que las DLLs se ejecutan en el contexto del proceso que las carga, lo que permite al malware esconderse e interactuar con el sistema. Detalla formas de enumerar las funciones exportadas de una DLL, como usar CFF Explorer, Pefile y IDA Pro. También discute nombres comunes y aleatorios de funciones exportadas y cómo ejecutar DLLs usando Rundll32.exe.
Windows expone la mayora de su Interfaz de Aplicacin de Programacin (API) en
archivos DLL. Las funciones que el proceso necesita para interactuar con el sistema de archivo, Registro, Red, e interfaz GUI son contenidas en DLLs. Cuando un proceso llama a una funcin API, este debe primero cargar una copia de la DLL que exporta la API en su espacio privado de memoria. El hecho de que las DLLs se ejecutan en el contexto de un proceso hace que su uso sea muy deseable por autores de malware. Para distribuir cdigos maliciosos como DLLs en vez de EXEs, el malware puede ejcutarse dentro de cualquier proceso (de ahora en adelante conocido como el blanco o proceso local), incluyendo winlogon.exe, csrss.exe, o explorer.exe. No solo es capaz de ayudar al malware a esconder sus capacidades (cualquier accin que el malware realiza parecer originarse del proceso local), pero este dan acceso al malware para determinar el rango entero direccionable adueado por el proceso local.
Si el proceso local es un navegador, el malware puede robar credenciales desde transacciones seguras SSL antes de dar pase al cifrado. Si el proceso local acepta entrada del usuario, el malware puede grabar las pulsaciones de teclado o movimientos del mouse. Po supuesto, hay otras maneras para desarrollar estas acciones maliciosas, pero desde la perspectiva del programador, crear un DLL que contenga la funcionalidad y entonces inyectar la DLL en un proceso local es extremadamente fcil. Los atacantes son tentados por soluciones fciles, porque ahorran tiempo. Otras de las razones para que los atacantes usen DLLs son porque los investigadores y analistas estn familiarizados con DLLs como ellos con los EXEs. Por ejemplo, muchas personas tuvieron problemas al realizar un anlisis dinmico de la muestra de Conficker cuando se descubri por primera vez, porque no saban como ejecutar la DLL maliciosa utilizada por el bicho. Este paper discute algunos retos envueltos con el anlisis de las DLLs y muestra cmo puedes pasar el reto. Como siempre, debes analizar DLLs maliciosas en entornos virtuales o sobre sistemas basadas en Unix.
ENUMERANDO LAS EXPORTACIONES DE LA DLL
Muchos atacantes asignan nombres significativos a las funciones que exportan sus DLLs maliciosos, estos te dan una rpida y fcil primera impresin de las capacidades de la DLL. Otros atacantes pueden usar un nombre aleatorio y engaoso para distraerte. Este apartado mostrara unas cuantas tcnicas para enumerar funciones exportadas. La DLL usado en este ejemplo est en el componente del rootkit 4DW4R3 descrita el foro de Sysinternals [1].
CFF Explorer
CFF Explorer [2] de Daniel Pistelli es un robusto visor/editor PE para plataformas basadas en Windows. Si abres un archivo PE este exportara funciones, dando clic en el botn Export Directory, como se muestra en la figura. La aplicacin muestra la siguiente informacin por cada funcin: Ordinal: Un ndice dentro de la Export Address Table (EAT) que contienen informaciones de cada funcin exportada. Function RVA: La direccin relativa virtual (por ejemplo, el offser desde la image base de la DLL) donde los cdigos de funciones pueden ser encontradas en memoria. Name: Los nombre de las funciones.
Pefile Si quieres enumerar las exportaciones usando script de python en mltiples plataformas (por ejemplo, para un procesar un gran nmero de DLLs de inmediato), puedes usar el pefile de Ero Carrera. El siguiente cdigo muestra los comandos que puedes usar:
$ python Python 2.5.1 (r251:54863, Feb 6 2009, 19:02:12) >>> import pefile >>> pe = pefile.PE(4DW4R3c.dll) >>> if hasattr(pe, DIRECTORY_ENTRY_EXPORT): ... for exp in pe.DIRECTORY_ENTRY_EXPORT.symbols: ... print hex(pe.OPTIONAL_HEADER.ImageBase + exp.address), \ ... exp.name, exp.ordinal ... 0x10002415 FileDownload 1 0x1000249b HideConnection 2 0x10002484 InjectorAdd 3 0x1000234c ModuleDownload 4 0x10002504 SetCmdDelay 7 0x10002509 SetRedirUrl 8 0x10002255 _ModuleLoad@4 5 0x100021e3 _ModuleUnload@4 6 Puedes ver que en la salida muestra l VA (virtual Address) de las funciones exportas en vez del RVA, como muestro CFF Explorer. Esto es porque agregamos las funciones del RVA a la image base de la DLL (as crean l VA) antes de imprimir la direccin. Asumiendo que la DLL recibe su image base preferida (0x10000000 en este caso) cuando este es cargado dentro el proceso, puedes esperar buscar la direccin de la funcin FileDownload en 0x10002415. IDA Pro Desarrollar anlisis esttico en IDA Pro es una de la mejor manera de investigar el comportamiento potencial de una DLL. No irse a conclusiones respecto a cmo se comporta basado en su nombre. En vez de eso, inspeccionar el cdigo para cada funcin exportada. Para esto, abrir la DLL maliciosa en IDA Pro e irse a la etiqueta Exports como se muestra en la figura. Desde la etiqueta Exports, puedes dar clic en el nombre de una funcin para ver el cdigo desensamblado de la funcin. En el ejemplo, tambin usamos el plug-in Hex-Rays para descompilar la funcin HideConnection.
Como puedes ver, IDA Pro revela informacin crtica para hacer ingeniera inversa a la DLL. Este muestra que HideConnection acepta un parmetro, que es un puntero de carcter que la funcin pasara a gethostname. Adems, este muestra que las referencias de funcin al miembro h_addr_list del valor regresado por gethotname. Este miembro h_addr_list contiene una lista de direcciones IP para un host. As el argumento para HideConnection es una hostname (ejemplo www.hidethisaddress.com) que el malware deber esconder en el sistema vctima. Comunes y No Comunes Nombres Exportados Cmo pudiste haber reunido, los atacantes eligen cualquier nombre para sus funciones exportadas por sus DLL. De hecho, si el nombre est en blanco o no contiene carcter ASCII, un proceso an puede buscar y llamar las funciones basadas en valores ordinales de funciones. Adems, estars ejecutando dentro de todos los nombres ordenados durante su investigacin. Aqu unos cuantos ejemplo de nombres descriptivos: HideProcess ExecuteFile KillProcess BindIEBrowser StartHook ResetSSDT Aqu unos cuantos ejemplos de nombres genricos que los autores de malware usan frecuentemente: Install Launch Init Load Start ServiceMain Hook Aqun unos cuantos ejemplos de nombre que son nicos (y lnea limtrofe chistosa), pero no descriptiva: KIIsSes_McafEe Kisses_To_Trojanhunter _GetAwayFromME _CreateSweetPlace YouTalkinTooMuch IFoundTreasure ByeByeMyLove TheirKnifeIsSharp _BangBangBang Por ltimo, unos cuantos ejemplos de nombres aleatorios: Lymomohu WanoRivacyde KenyjybopymoJo AddCvqidsd Kepibagipefowo Una cosa que debes hacer con todas las DLLs que tienes en tu coleccin de malware es usar un script pefile para volcar todos los nombres exportados en una base de datos. Entonces podras consultar la base de datos cada vez que recibas nuevas DLLs e intentar encontrar nuevas con viejas muestras basadas en nombres de funciones exportadas u otros atributos. [1] http://forum.sysinternals.como/topic21838_page1.html [2] http://www.ntcore.com/exsuite.php EXECUTANDO DLLS CON RUNDLL32.EXE A diferencia de los programas ejecutables, sencillamente no puedes dar doble clic en una DLL para ejecutarlo por una DLL no es una entidad autosostenible, este requiere un proceso local, o contenedor, para operar. Windows los abarca con un programa llamado rundll.exe (versin de 16 bit) o rundll32.exe (versin de 32 bit) que sirven como un proceso local genrico para ejecutar DLLs arbitrariamente (para ms informacin, ver la interfaz de Rundll y Rundll32 [3]). Ambas versiones del programa usan las siguiente sintaxis, pero nos enfocaremos en rindll32.exe en este apartado. C:\> rundll32 <dllpath>,<export> [optional arguments] Aqu una descripcin de los parmetros: El parmetro dllpath debe ser una ruta completa de la DLL en el disco (pero sin ningn espacio o caracteres especiales). El parmetro export es el nombre de una funcin exportada para llamar despus a la DLL cargada. Ah deber estar una coma (pero no espacio) entre el dllpath y el parmetro export. Puedes reemplazar opcionalmente los argumentos a la funcin export para alojar los ltimos en la lnea de comandos. Los siguientes pasos explican cmo trabaja rundll32.exe: Llama a GetCommandLineW para obtener los parmetros de lnea de comando que t brindaste. Validara los parmetros de lnea de comando y saldr si su sintaxis es incorrecta. Cargara el DLL especificado llamando a LoadLibraryW. Este paso ejecutara automticamente el cdigo en el punto de entrada de la DLL (mantn esto en mente, es muy importante). Intentar obtener la direccin de la funcin export llamando a GetProcAddress y saldr si la funcin no puede encontrarse. Llamar a la funcin export, abasteciendo cualquiera de los argumentos opcionales que es provisto. La sintaxis de rundll32 es realmente simple, pero muchas personas tienen problemas en entenderlos. Aqu estas algunos tips para errores comunes: Tip #1 El error en la siguiente lnea de comando es que no se especific la funcin export. Como resultado, la sintaxis comprobara fallas y rundll32.exe saldr antes de llamar a LoadLibraryW. C:\>rundll32 malicious.dll Asumiendo que deseas cargar una DLL y llamar nicamente a su funcin de punto entrada (por ejemplo, no cualquier exportacin), entonces puedes usar el siguiente comando: C:\>rundll32 malicious.dll. ThisIsFake En el ejemplo, su sintaxis es vlida, as que rundll32.exe procede a llamar a LoadLibraryW. Como se mencion previamente, LoadLibraryW invoca a la DLL en su funcin de punto de entrada automticamente. Estas funciones de punto de entrada ejecutan antes rundll32.exe para lograr el paso 3 para comprobar si ThisIsFake existe. Tip #2 La siguiente lnea de comando contiene un error: C:\rundll32 kernel32.dll, sleep 100 El error es que puedes llamar nicamente a las funciones que no requieren argumentos o que esperan recibir argumentos desde cadena (ejemplo, un puntero a un buffer ANSI o UNICODE). La llamada de la API sleep acepta un valor entero representando el nmero de milisegundos para dormirse. En el ejemplo, sleep recibe actualmente la direccin de memoria donde la cadena 100 existe, y el proceso de rundll32.exe finalizara apagndose por alguna cantidad impredecible de tiempo en vez de 100 milisegundos. Como puedes ver en BYPASSING HOST PROCESS RESTRINCTIONS, la funcin HideConnection acepta un hostname desde cadena. Puedes llamar legtimamente esa funcin de la siguiente manera: C:\>rundll32 4DW4R3c.dll, HideConnection www.hideth1saddress.com Monitoreando DLLs Dinamicamente