Exportar (0) Imprimir
Expandir todo

Descripción de correcciones de compatibilidad (shim)

Funcionamiento de las correcciones de compatiblidad (shim)

La experiencia de uso y la compatibilidad de las aplicaciones en los sistemas operativos de Microsoft® Windows® constituye uno de los pilares fundamentales del desarrollo de Windows, junto con el rendimiento, la confiabilidad y la capacidad de administración. Con el fin de reducir los costos de implementación y acelerar la adopción, Microsoft invierte en soluciones técnicas minuciosas para garantizar una amplia compatibilidad con el software existente, lo que impulsa la compatibilidad en el proceso de ingeniería y comercialización.

La infraestructura de compatibilidad de aplicaciones de Microsoft Windows (infraestructura de correcciones de compatibilidad [shim]) es una solución técnica eficaz. A medida que el sistema operativo Windows evoluciona de una versión a otra (para admitir nuevas tecnologías, incorporar correcciones de errores e implementar una modificación en estrategia), los cambios realizados en la implementación de algunas funciones pueden afectar a las aplicaciones que dependen de estas funciones. Debido a la naturaleza del software, modificar de nuevo la función para solucionar este problema de compatibilidad podría interrumpir otras aplicaciones o requerir que Windows permanezca igual sin importar la mejora que ofrece la implementación alternativa. Se puede evitar este problema mediante la colocación de ramas directamente en el código fuente de Windows, pero realizar esta acción supone un desafío a largo plazo en cuanto a la facilidad y la confiabilidad del sistema operativo Windows. Sin embargo, al usar la infraestructura de correcciones de compatibilidad (shim), puede abordar una corrección de aplicación específica para una aplicación determinada (y normalmente, para versiones determinadas de dicha aplicación) con estas correcciones hospedadas fuera de las funciones principales de Windows y mantenidas por separado.

La infraestructura de correcciones de compatibilidad (shim) implementa una forma de enlace a la interfaz de programación de aplicaciones (API). Específicamente, aprovecha la naturaleza de vinculación para redirigir las llamadas API desde Windows hasta el código alternativo, que son las correcciones de compatibilidad (shim) en sí. La especificación del formato de archivo de objeto común (COFF) y de archivo portable ejecutable (PE) de Windows incluye diversos encabezados, y los directorios de datos proporcionan un nivel de indirección entre la aplicación y el archivo vinculado. Las llamadas a los archivos binarios externos se efectúan mediante la tabla de direcciones de importación (IAT). En consecuencia, una llamada a Windows se asemeja a la Figura 1 en el sistema.

643f2bee-8329-4018-9d90-2ffcc7c76a6c

Figura 1   Llamada de la aplicación a Windows a través de la IAT

Específicamente, puede modificar la dirección de la función de Windows que se resuelve en la tabla de importación y, a continuación, reemplazarla con un puntero a una función en el código de correcciones de compatibilidad (shim) alternativo, tal como se muestra en la Figura 2.

Imagen ART

Figura 2   Aplicación redirigida a las correcciones de compatibilidad (shim) antes de llamar a Windows

Esta indirección tiene lugar cuando se carga la aplicación para los archivos .dll vinculados estáticamente. También se puede corregir la compatibilidad (shim) de los archivos .dll vinculados dinámicamente mediante un enlace a la API de GetProcAddress.

Implicaciones de diseño de la infraestructura de correcciones de compatibilidad (shim)

El diseño de la infraestructura de correcciones de compatibilidad (shim) tiene consecuencias que podrían ser relevantes al determinar la estrategia de correcciones de compatibilidad (shim).

En primer lugar, tal como se muestra en la Figura 2: aplicación redirigida a las correcciones de compatibilidad (shim) antes de llamar a Windows, el código que se ejecuta dentro de correcciones de compatibilidad aún sigue ubicado fuera de Windows. En consecuencia, Windows impone al código de correcciones de compatibilidad (shim) las mismas restricciones de seguridad que al código de la aplicación en sí. De hecho, en Windows, el código de correcciones de compatibilidad (shim) parece ser el código de la aplicación. Por consiguiente, no puede usar las correcciones de compatibilidad (shim) para omitir los mecanismos de seguridad presentes en Windows. Por ejemplo, no hay ninguna corrección de compatibilidad (shim) disponible para omitir los avisos del Control de cuentas de usuario (UAC) de Windows 7 mientras se ejecuta la aplicación con permisos elevados. Puede corregir la compatibilidad de la aplicación para que no requiera derechos de administrador o para que los solicite, pero a fin de recibir derechos de administrador con el UAC habilitado, el usuario deberá aprobar la elevación. Lo mismo ocurre con el código que escribe usted mismo.

Por lo tanto, cuando se evalúan las implicaciones de seguridad de usar correcciones de compatibilidad (shim) en la empresa, no se abre ninguna vulnerabilidad de seguridad adicional. De hecho, el uso de correcciones de compatibilidad (shim) para evitar la necesidad de usar descriptores de seguridad o para que las directivas de seguridad sean menos estrictas, por lo general, resulta la opción más segura. Por ejemplo, sin correcciones de compatibilidad (shim), puede mitigar un problema de compatibilidad al reducir las listas de control de acceso (ACL) en un directorio en particular, pero esta decisión afectará a todo el sistema. Con correcciones de compatibilidad (shim), puede redirigir el acceso a los archivos a una ubicación definida por cada usuario para dicha aplicación. Como otro ejemplo, una aplicación puede comprobar de forma explícita los derechos de administrador. Sin correcciones de compatibilidad (shim), es posible que deba conceder a la aplicación derechos de administrador para pasar esta comprobación. Sin embargo, si la comprobación es innecesaria, las correcciones de compatibilidad (shim) pueden simplemente falsificar si el usuario actual tiene derechos de administrador, lo que permite que la comprobación se realice correctamente sin exponer áreas de seguridad adicionales.

En segundo lugar, debido a que la infraestructura de correcciones de compatibilidad (shim), básicamente, inserta otro código en la aplicación antes de la llamada a Windows, puede realizar cualquier mitigación en la que pueda usar correcciones de compatibilidad (shim) para lograrla mediante la modificación del código de la aplicación. Como mínimo, la aplicación puede incluir código similar al que implementa Windows en las correcciones de compatibilidad (shim) inmediatamente antes de la llamada a las API de Windows.

Por último, debido a que las correcciones de compatibilidad (shim) se ejecutan como código en modo usuario dentro de un proceso de aplicación en modo usuario, no puede usar correcciones de compatibilidad (shim) para resolver problemas de código en modo kernel. Por ejemplo, no puede usar correcciones de compatibilidad (shim) para resolver problemas de compatibilidad con controladores de dispositivo o con otro código en el modo kernel. (Por ejemplo, algunos antivirus, firewall y código antispyware se ejecutan en modo kernel).

¿Te ha resultado útil?
(Caracteres restantes: 1500)
Gracias por sus comentarios

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft