Mostrando entradas con la etiqueta TROYANOS. Mostrar todas las entradas
Mostrando entradas con la etiqueta TROYANOS. Mostrar todas las entradas

jueves, 8 de julio de 2010

Detectando y eliminando PoisonIvy


PoisonIvy es uno de los troyanos más conocidos que existen, el otro día decidí ponerme a jugar un rato con él para ver las funcionalidades que tiene y como se esconde en el sistema. Acto seguido se explicará la forma de detectar si realmente estamos infectados por él y la manera de eliminarlo.

Una de las formas más sencillas para identificar que estamos siendo infectados por troyano es realizar un análisis de los procesos que están siendo ejecutados.

clip_image002

Si analizamos cada uno de los procesos observaremos como sospechosamente existe un proceso con PID 1744 llamado IEXPLORER.EXE (Navegador) que sospechosamente no hemos ejecutado y que a simple vista no lo tenemos abierto en nuestro sistema.

Si eliminamos el proceso, automáticamente vuelve a iniciarse automáticamente. Ejecutaremos ProcessMonitor para detectar quien es el encargado de ejecutar el proceso.

clip_image004

Suponiendo que el explorer.exe no se encuentra modificado (si no perdería la firma y nos avisaría al iniciarse), solo nos queda pensar que algún proceso está inyectando código en el explorer.exe cuando se carga en memoria.

Utilizando el autoruns.exe identificamos que existe un registro en la clave HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run” con un nombre un tanto sospechoso.

clip_image006

Si realizamos la búsqueda del mismo archivo en los runs obtenemos otra entrada en los registros de los ActiveX “HKLM\SOFTWARE\Microsoft\Active Setup\Installed Components” que apunta al mismo fichero.

clip_image008

Ya podemos sospechar que realmente el que infecta el proceso explorer.exe al ejecutarse es este ActiveX. Para detectar si realmente esta sospecha es cierta, podemos ejecutar ProcessMonitor y visualizar los procesos que se ejecutan al cargar un nuevo explorer.exe.

clip_image010

Vemos como realmente es el ActiveX el encargado de inyectar código en el explorer.exe.

Si observamos la ruta que ejecuta dicho ActiveX, vemos como utiliza la técnica del ADS para esconder el binario que ejecuta la infección.

clip_image011

Para comprobar que realmente existe el fichero escondido en la carpeta system32 utilizamos la herramienta streams.exe.

clip_image013

Si en cualquier momento del análisis se intenta eliminar cualquiera de las pruebas que se han encontrado, instantáneamente volverá a generase o iniciarse ya que el explorer.exe infectado se encarga de generarlos.

Para solucionar este problema, tenemos dos alternativas: levantar la máquina con un Live CD y eliminar los registros y ficheros detectados o realizar las operaciones con el explorer.exe cerrado. Para no tener que reiniciar la máquina optaremos por realizar la eliminación de los ficheros sin tener ejecutado el explorer.exe.

Ficheros de Inicio

Tanto el registro del Run como el del ActiveX los podemos eliminar desde el registro o con la aplicación autoruns.exe.

clip_image015

Fichero oculto mediante ADS

Del mismo modo que la aplicación streams.exe nos detecta los ficheros ocultos mediante ADS, nos permite su eliminación añadiendo el parámetro “-d”.

clip_image017

Una vez hayamos eliminado los dos registros y el fichero oculto de nuestro sistema habremos eliminado el troyano y conseguiremos que no se vuelva a ejecutar.

Un Saludo!!

lunes, 29 de marzo de 2010

Inyección de código en ensamblados .NET

Durante este articulo se verá cómo es posible modificar los ensamblados en .NET de modo que se pueda inyectar tanto código .NET o código no manejado en este tipo de aplicaciones, pudiendo dotarlas de nuevas características, tales como plugins (o malware) sin que la aplicación original disponga de soporte para ello.

Para realizar éste ejemplo es necesario un decompilador de .NET (Reflector), un plugin con el que inyectar código IL (Reflexil) y un mínimo de conocimientos del lenguaje .NET y IL.

Antes de comenzar, se debe instalar el plugin ‘Reflexil’ para ‘Reflector’. Para agregarlo, basta con ir a ‘View -> Add-ins -> Add’ y cargar la librería ‘reflexil.dll’. Una vez cargado, es posible acceder a su menú haciendo clic en ‘Tools -> Reflexil’.


Figura 1: Cargando plugin Reflexil

Como segundo paso se crea una pequeña librería en .NET que será la que la aplicación cargará, consiguiendo así la ejecución de código y accesibilidad a sus componentes internos a través de reflexión.

La Liberia, en esta caso es muy sencilla, únicamente cargará un formulario con una imagen y mostrará un mensaje.


Figura 2: Código que se cargará en la aplicación como DLL

Una vez hecha la librería, es necesaria la decompilación de la aplicación sobre la cual se quiere realizar la inyección de código. En éste caso se ha escogido, como ejemploNotepad.NET. Basta con arrastrar el ejecutable sobre el panel de ‘Reflector’, y se mostrará un árbol con todas sus métodos, propiedades, etc...


Figura 3: Código que se cargará en la aplicación como DLL

Para saber donde realizar la inclusión del código se debe localizar el punto de entrada de la aplicación, o el método en el que se desée que se ejecute el código. En este caso se va a realizar sobre la entrada a la aplicación, en Main(String[]).

Una vez llegado a éste punto, es hora de usar ‘Reflexil’ para la inclusión de código IL. Unicamente se deben inyectar las instrucciones necesarias para que realice la carga de forma dinámica de la librería que se ha creado anteriormente.

No os asustéis si no sois expertos en reversing, únicamente son cinco instrucciones. Una vez la aplicación esté parcheada no será necesaria volver a modificarlas. Basta con hacer clic derecho sobre el panel de ‘Instructions’ del plugin y clic sobre ‘Create new’ para agregar las siguientes instrucciones:

· LDSTR ‘c:\ruta\libreria.dll’

· CALL System.Reflection.Assembly::LoadFile(System.String)

· LDSTR ‘namespace.class’

· CALLVIRT System.Reflection.Assembly::CreateInstance(System.String)

· POP


Figura 4: LDSTR ‘c:\ruta\libreria.dll’


Figura 5: CALL System.Reflection.Assembly::LoadFile(System.String)


Figura 6: LDSTR ‘namespace.class’


Figura 7: CALLVIRT System.Reflection.Assembly::CreateInstance(System.String)


Figura 8:POP

Cuando se busque el método CreateInstance() o LoadFile() en las instrucciones CALLy CALLVIRT hay que tener en cuenta que éstas se encontrarán dentro del nodo‘mscorlib -> CommonLanguajeRuntimeLibrary -> System.Reflection -> Assembly’.


Figura 9: Ubicación método LoadFile()

Una vez finalizado, el método modificado debería quedar de forma similar a la siguiente captura de pantalla. En azul está el código inyectado que realiza la carga de la librería:


Figura 10: Código inyectado

Tras todo este proceso, basta con guardar el ensamblado modificado haciendo clic en el nodo del ensamblado en Reflector, y a continuación en ‘Save As’.


Figura 11: Guardando el ensamblado modificado

Si todo se ha realizado correctamente, al ejecutar la aplicación se cargará y ejecutará la nueva librería, consiguiendo así el objetivo de inyectar código en un compila .NET tal y como se puede ver en la siguiente captura de pantalla, donde, junto con la ejecución de la aplicación, también se ha ejecutado el formulario que desarrollado en la librería.


Figura 12: Ejecución de código inyectado

Si se hace uso de ProcessExplorer se puede observar como la aplicación tiene cargada en memoria la librería ‘dll.dll’.


Figura 13: dll.dll vista en Process Explorer

Éste ha sido un sencillo ejemplo de los pasos necesarios para la posibilidad de ejecución de código por una aplicación. Ésto, junto con conocimientos de reflexión en .NET abre un gran número de posibilidades, donde se puede obtener un gran control sobre la aplicación, ofreciendo la posibilidad de crear o agregar nuevas características a las mismas.

Por supuesto, en Black Hat Europe 2009 alguien pensó que estas posibilidades se podían utilizar para crear Rootkits directamente el .NET framework.