Me preguntaba si el secuestro de DLL funcionaría con todos los tipos de enlace o solo en tiempo de ejecución. He oído que el malware lo usa y quería saber cómo funciona
Hay dos tipos de enlace: enlace estático y enlace dinámico. Secuestro de DLL es cuando un programa malicioso se aprovecha de la vinculación dinámica. Para que el enlace dinámico funcione, debe haber una lista de rutas para encontrar la biblioteca compartida que se está enlazando. En Windows hay varias formas de Ruta de búsqueda para ser afectado. Pero generalmente hay un orden en la forma en que se realiza la búsqueda, y la mayoría de las aplicaciones no proporcionan una ruta completa (por ejemplo, C:\WINDOWS\system32\kernel32.dll
) para el objeto compartido que planean cargar.
Lo que sucede es que un atacante colocará una DLL con el mismo nombre en una ubicación buscada antes de la ubicación de la DLL legítima. Por ejemplo, digamos que la ruta de búsqueda cuando se intenta cargar kernel32.dll
es primero C:\Program Files\MaliciousDir\
y luego C:\WINDOWS\system32\
. La aplicación simplemente llama a LoadLibraryW(L"kernel32.dll");
.
Mientras el atacante tenga su versión de kernel32.dll
en MaliciousDir
, su versión se cargará, no la versión legítima. Esto se puede mitigar proporcionando una ruta completa a la biblioteca que está cargando.
El enlace estático significa que toda la biblioteca se integró en la aplicación. La aplicación conserva una copia completa y todas las direcciones de funciones de esa biblioteca se resuelven en el momento de la compilación. Lo que significa que no hay una búsqueda de la biblioteca, y un atacante no puede reemplazar la biblioteca en sí. La desventaja de esto es que la aplicación se agranda por el tamaño de la biblioteca, y la actualización de la biblioteca en sí significa que toda la aplicación debe actualizarse.
En este caso, el secuestro de DLL no funciona.
Lea otras preguntas en las etiquetas malware programming