Formas de inyectar archivos DLL maliciosos en un archivo exe y ejecutarlo

3

Estoy tratando de encontrar todas las vulnerabilidades en mi sistema dado.

Supongamos que un usuario malintencionado tiene el ejecutable (archivo .exe ) de mi aplicación .NET (C #) y una DLL maliciosa que él o ella creó. ¿Se puede inyectar la DLL en mi ejecutable para ejecutar el código contenido en la DLL?

    
pregunta Mr. Question 15.05.2014 - 07:45
fuente

2 respuestas

2

El artículo de wikipedia relacionado con la inyección de Dll ha hecho un resumen de diferentes técnicas.

Para resumir:

  • Puede incluir una dll debajo de HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs y se cargará en cada proceso (nuevo) que se vincule a user32.dll (es decir, en casi todos los procesos en modo de usuario)
  • Explotando una debilidad en una función que carga una biblioteca por una ruta de manera incorrecta (normalmente, colocando una dll cargada en el proceso de destino más arriba en la ruta de búsqueda) o simplemente reemplazando una biblioteca existente por la suya.
  • A través de CreateRemoteThread o CreateRemoteThreadEx . Esto es un poco más complejo (e interesante) pero le permite hacerlo para los procesos existentes.
  • A través de SetWindowsHookEx . Esta es la forma más fácil de hacerlo para un proceso en ejecución IMNSHO.
  • Suspender un hilo y cambiar su contexto a su propio código.
  • escribiendo un shim .
respondido por el Stephane 15.05.2014 - 11:58
fuente
1

Sí, hay varias posibilidades de hacerlo, y una gran parte de los ataques se basan en la conexión de archivos DLL.

Y esta es también la causa, por la que las versiones de Windows más nuevas y más recientes contienen políticas normalmente más estrictas y más estrictas sobre el manejo de dll.

El objetivo principal es crear una dll falsa , que solo envuelve algunas de las llamadas a la API en su dll original, y también hace otra cosa. El objetivo del atacante es, en tales casos, permitir que se cargue el dll falso de la aplicación que se va a descifrar, en contra de su versión original.

La alternativa a esta solución es cuando la dll original obtiene algún tipo de hack binario. Es más difícil.

El funcionamiento interno de la DLL enganchada es el siguiente:

  • en abierto: abre también la dll original, no modificada con una llamada dllopen() , y encuentra la dirección de las llamadas de api también en ella
  • también contiene la versión falsa de las llamadas api enganchadas

¿Cómo se puede inyectar la DLL enganchada en la aplicación?

La solución más común es colocar esto en el mismo directorio donde se encuentra el archivo que se va a enganchar. Al iniciar un ejecutable, Windows busca sus archivos DLL siempre en el mismo directorio primero. Esto es lo que hace la mayoría de las grietas de protección / activación de copia de software.

Una segunda posibilidad es colocar la dll del envoltorio en algún lugar del PATH, pero aún antes de C:\windows\... . Las dll se buscan en el PATH, como los ejecutables también.

Una tercera posibilidad es usar un depurador o la API de Windows originalmente diseñada para la depuración. Con él puedes manipular el código de apertura dll del ejecutable ejecutable. También es difícil, aunque también es realmente útil.

    
respondido por el peterh 15.05.2014 - 11:28
fuente

Lea otras preguntas en las etiquetas