Select the product you need help with
Carga segura de las bibliotecas para evitar ataques de precarga de DLLId. de artículo: 2389418 - Ver los productos a los que se aplica este artículo En esta páginaResumenCuando una aplicación carga dinámicamente una biblioteca de vínculos dinámicos (DLL) sin especificar una ruta de acceso completa, Windows intenta encontrar la DLL buscando en un conjunto bien definido de directorios. Si un atacante obtuviera el control de uno de los directorios, podría obligar a que la aplicación cargara una copia malintencionada de la DLL en lugar de la DLL que se esperaba. Estos ataques, conocidos como ?ataques de precarga de DLL?, son habituales en todos los sistemas operativos que admiten la carga dinámica de bibliotecas DLL compartidas. El efecto de tales ataques podría ser que un atacante ejecutara código en el contexto del usuario que ejecuta la aplicación. Cuando la aplicación se ejecuta como administrador, se podría producir una elevación local de privilegios. Conocemos el renovado interés en estos ataques. Para limitar el efecto que este problema tiene en nuestros mutuos clientes, publicamos este documento para la comunidad de desarrolladores a fin de asegurarnos de que conocen este problema y de que disponen de las herramientas necesarias para solucionarlo en sus aplicaciones. Más informaciónDescripción de los ataques de precarga de DLLAtaques basados en LoadLibraryCuando una aplicación carga dinámicamente una DLL sin especificar una ruta de acceso completa, Windows intenta encontrar esta DLL buscando en un conjunto bien definido de directorios, lo que se conoce como orden de búsqueda de DLL. Si Windows encuentra la DLL en el orden de búsqueda de DLL, cargará esa DLL. Sin embargo, si Windows no encuentra la DLL en ninguno de los directorios del orden de búsqueda de DLL, devolverá un error en la operación de carga de la DLL. A continuación, se muestra el orden de búsqueda de DLL de las funciones LoadLibrary
(http://msdn.microsoft.com/es-es/library/ms684175(VS.85).aspx)
y LoadLibraryEx
(http://msdn.microsoft.com/es-es/library/ms684175(VS.85).aspx)
, que se usan para cargar DLL de forma dinámica:
Recomendación Para evitar este ataque, las aplicaciones pueden quitar el directorio de trabajo actual de la ruta de búsqueda de DLL mediante la llamada a la API SetDllDirectory con una cadena vacía (??). Si una aplicación depende de la carga de una DLL del directorio actual, obtenga el directorio de trabajo actual y úselo para pasar una ruta de acceso completa de LoadLibrary
(http://msdn.microsoft.com/es-es/library/ms684175(VS.85).aspx)
.
También sabemos que algunos desarrolladores usan LoadLibrary para validar la presencia de un archivo DLL específico a fin de determinar cuál es la versión de Windows que ejecuta el usuario. Debe saber que esto podría volver la aplicación vulnerable. Si la biblioteca afectada no existe en la versión de Windows en la que se ejecuta la aplicación, un atacante podría introducir una biblioteca con ese mismo nombre en el directorio de trabajo actual. Se recomienda encarecidamente no usar esta técnica. En su lugar, utilice las técnicas recomendadas que se describen en el artículo de MSDN "Obtener la versión del sistema". Una aplicación que carga complementos de terceros y que no puede forzar a los complementos a usar una ruta de acceso completa para sus llamadas de LoadLibrary, debe llamar a la función SetDllDirectory(??) para quitar el directorio de trabajo actual y, a continuación, a la función SetDllDirectory(?ubicación de instalación del complemento?) para agregar el directorio de instalación del complemento en la ruta de búsqueda de DLL. Ataques basados en SearchPathExiste un ataque parecido cuando una aplicación usa la API SearchPath para encontrar un archivo DLL y cargar dinámicamente la ruta que devuelve SearchPath
(http://msdn.microsoft.com/es-es/library/aa365527(v=VS.85).aspx)
. A continuación, se muestra el orden de búsqueda predeterminado de la API SearchPath:
ShellExecute y CreateProcessTambién pueden existir variantes de estos problemas cuando los desarrolladores llaman a funciones parecidas como ShellExecute
(http://msdn.microsoft.com/es-es/library/bb762153(VS.85).aspx)
y CreateProcess
(http://msdn.microsoft.com/es-es/library/ms682425(VS.85).aspx)
para cargar ejecutables externos. Se recomienda a los desarrolladores que tengan cuidado cuando carguen archivos binarios y especifiquen la ruta de acceso completa. Debería ser menos complejo cuando carga un archivo binario en lugar de una biblioteca. Pasos recomendados para los desarrolladores de softwareSe recomienda a los desarrolladores hacer lo siguiente:
Ayuda para identificar cargas de bibliotecas no segurasEn el código fuente, los siguientes son ejemplos de cargas de bibliotecas no seguras:
Uso del Monitor de procesos para detectar cargas no seguras de forma dinámicaMicrosoft publica una herramienta llamada Monitor de procesos. Esta herramienta permite a los desarrolladores y administradores seguir de cerca el comportamiento de un proceso en ejecución. El Monitor de procesos se puede utilizar para detectar de forma dinámica si una de las aplicaciones podría ser vulnerable a este tipo de problema.
Recursos adicionalesPara obtener más información, visite las siguientes páginas web de Microsoft: Orden de búsqueda de biblioteca de vínculos dinámicos http://msdn.microsoft.com/es-es/library/ms682586(VS.85).aspx Documentación de MSDN sobre la función SearchPath
(http://msdn.microsoft.com/es-es/library/ms682586(VS.85).aspx)
http://msdn.microsoft.com/es-es/library/aa365527(v=VS.85).aspx Documentación de MSDN sobre la función LoadLibrary
(http://msdn.microsoft.com/es-es/library/aa365527(v=VS.85).aspx)
http://msdn.microsoft.com/es-es/library/ms684175(VS.85).aspx Documentación de MSDN sobre la función SetDllDirectory
(http://msdn.microsoft.com/es-es/library/ms684175(VS.85).aspx)
http://msdn.microsoft.com/es-es/library/ms686203(VS.85).aspx Documentación de MSDN sobre la función SetSearchPathMode
(http://msdn.microsoft.com/es-es/library/ms686203(VS.85).aspx)
http://msdn.microsoft.com/es-es/library/dd266735(VS.85).aspx Entrada de blog de David Leblanc, ingeniero de seguridad principal para Microsoft Office
(http://msdn.microsoft.com/es-es/library/dd266735(VS.85).aspx)
http://blogs.msdn.com/b/david_leblanc/archive/2008/02/20/dll-preloading-attacks.aspx Entrada de blog de Andrew Roths, equipo de ingeniería de MSRC encargado de los ataques de precarga de DLL
(http://blogs.msdn.com/b/david_leblanc/archive/2008/02/20/dll-preloading-attacks.aspx)
http://blogs.technet.com/b/srd/archive/2009/04/14/ms09-014-addressing-the-safari-carpet-bomb-vulnerability.aspx
(http://blogs.technet.com/b/srd/archive/2009/04/14/ms09-014-addressing-the-safari-carpet-bomb-vulnerability.aspx)
PropiedadesId. de artículo: 2389418 - Última revisión: viernes, 27 de agosto de 2010 - Versión: 2.0 La información de este artículo se refiere a:
|




Volver al principio








