Share via


Estrategia de seguridad de Windows Presentation Foundation: Seguridad de la plataforma

Actualización: noviembre 2007

Aunque Windows Presentation Foundation (WPF) proporciona diversos de servicios de seguridad, también aprovecha las características de seguridad de la plataforma subyacente, que incluye el sistema operativo, CLR e Internet Explorer. Estas capas se combinan para proporcionar a WPF un modelo de seguridad sólido de defensa en profundidad que intenta evitar todos los punto de concentración de errores, como se muestra en la figura siguiente:

Ilustración de seguridad de WPF

En el resto de este tema se explican las características de cada una de estas capas que pertenecen específicamente a WPF.

Este tema contiene las secciones siguientes.

  • Seguridad del sistema operativo
  • Seguridad de Common Language Runtime
  • Seguridad de Microsoft Internet Explorer
  • Temas relacionados

Seguridad del sistema operativo

El nivel mínimo de sistema operativo que WPF es Windows XP SP2 requiere. El núcleo de Windows XP SP2 proporciona varias características de seguridad que constituyen los cimientos de seguridad de todas las aplicaciones de Windows, incluidas las generadas con WPF. Windows Vista incorpora las características de seguridad de WPF y las amplía. En este tema se aborda el alcance de estas características de seguridad que son importantes para WPF, así como la manera en que WPF se integra con ellas para proporcionar una mayor defensa en profundidad.

Microsoft Windows XP Service Pack 2 (SP2)

Además de una revisión general y del fortalecimiento de Windows, en este tema abordaremos tres características clave de Windows XP SP2:

  • Compilación con /GS

  • Microsoft Windows Update.

Compilación con /GS

Windows XP SP2 proporciona protección volviendo a compilar numerosas bibliotecas de sistema básicas, incluidas todas las dependencias de WPF, como CLR, a fin de ayudar a mitigar las saturaciones del búfer. Esto se logra utilizando el parámetro /GS con el compilador de línea de comandos de C/C++. Aunque se las saturaciones del búfer se deben evitar explícitamente, la compilación con /GS proporciona un ejemplo de defensa en profundidad contra las vulnerabilidades potenciales que dichas saturaciones crean de manera inadvertida o malintencionada.

Históricamente, las saturaciones del búfer han sido la causa de muchas hazañas de seguridad de gran impacto. Una saturación del búfer se produce cuando un atacante se aprovecha de una vulnerabilidad del código que permite la inyección de código malintencionado que escribe más allá de los límites de un búfer. A su vez, esto permite que el atacante secuestre el proceso en el que se ejecuta el código sobrescribiendo la dirección de devolución de una función, a fin de ejecutar el código del atacante. El resultado es un código malintencionado que ejecuta código arbitrario con los mismos privilegios que el proceso secuestrado.

En los niveles superiores, marcador de compilación con /GS protege contra algunas saturaciones del búfer potenciales insertando una cookie de seguridad especial para proteger la dirección de devolución de una función que tiene búferes de cadena locales. Cuando una función se devuelve, la cookie de seguridad se compara con su valor anterior. Si el valor ha cambiado, es posible que se haya producido una saturación del búfer y el proceso se detiene con una condición de error. Al detener el proceso, se evita la ejecución de código potencialmente malintencionado. Consulte /GS (Comprobación de seguridad del búfer) para obtener más detalles al respecto.

WPF se compila con el marcador /GS para agregar una capa más de defensa a las aplicaciones de WPF.

Mejoras de Microsoft Windows Update

Microsoft Windows Update también se mejoró en Windows XP SP2 para simplificar el proceso de descarga e instalación de actualizaciones. Estos cambios mejoran significativamente la seguridad para los clientes de WPF, al ayudarles a garantizar que sus sistemas están actualizados, en particular con respecto a las actualizaciones de seguridad.

Windows Vista

Los usuarios de WPF en Windows Vista se beneficiarán de las mejoras de seguridad adicionales del sistema operativo, que incluyen el acceso de usuarios con privilegios mínimos, las comprobaciones de integridad del código y el aislamiento de privilegios.

Control de cuentas de usuario (UAC)

En la actualidad, los usuarios de Windows tienden a realizar la ejecución con privilegios de administrador porque muchas aplicaciones los requieren para su instalación o ejecución, o ambas. Poder escribir los valores de aplicación predeterminados en el Registro es un ejemplo de ello.

La ejecución con privilegios de administrador, en realidad, significa que las aplicaciones ejecutan a partir de los procesos a los que se han otorgado privilegios de administrador. El impacto en la seguridad de esta situación es que cualquier código malintencionado que secuestre un proceso que se ejecuta con privilegios de administrador heredará automáticamente esos privilegios, incluso el acceso a los recursos del sistema críticos.

Una manera de protegerse contra esta amenaza de seguridad es ejecutar las aplicaciones con los mínimos privilegios que se requieren. Esto se conoce como el principio de privilegios mínimos y es una característica básica del sistema operativo Windows Vista. Esta característica se denomina control de cuentas de usuario (UAC) y Windows Vista UAC la utiliza de dos maneras fundamentales:

  • Para ejecutar de manera predeterminada la mayoría de las aplicaciones con privilegios de UAC, aunque el usuario sea un administrador; sólo las aplicaciones que requieran privilegios de administrador se ejecutarán con privilegios de administrador. Para ejecutarse con privilegios de administrador, las aplicaciones se deben marcar explícitamente en su manifiesto de aplicación o como una entrada en directiva de seguridad.

  • Para proporcionar soluciones de compatibilidad, como la virtualización. Por ejemplo, muchas aplicaciones intentan escribir en ubicaciones restringidas, como C:\Archivos de programa. Para las aplicaciones que se ejecutan con UAC, existe una ubicación por usuario alternativa que no exige privilegios de administrador para la escritura. Para las aplicaciones que se ejecutan en UAC, UAC virtualiza C:\Archivos de programa, de manera que parece que las aplicaciones escriben en este directorio, pero, en cambio, están escribiendo en la ubicación alternativa del usuario. Este tipo de trabajo de compatibilidad permite al sistema operativo ejecutar muchas aplicaciones que antes no se podían ejecutar en UAC.

Comprobaciones de la integridad del código

Windows Vista incorpora comprobaciones de la integridad del código más profundas a fin de ayudar a evitar que el código malintencionado se inserte en los archivos del sistema o en el kernel en tiempo de carga o de ejecución. Esto va más allá de la protección de archivos del sistema.

Proceso de derechos limitados para las aplicaciones hospedadas por el explorador

Las aplicaciones de WPF hospedadas por explorador se ejecutan dentro del recinto de seguridad de la zona de Internet. La integración de WPF con Microsoft Internet Explorer amplía esta protección con compatibilidad adicional.

Internet Explorer 6 Service Pack 2 e Internet Explorer 7 para XP

WPF aprovecha la seguridad del sistema operativo limitando los privilegios del proceso para las Aplicaciones del explorador XAML (XBAPs), a fin de aumentar la protección. Antes de que se inicie una aplicación de WPF hospedada por el explorador, el sistema operativo crea un proceso del host que quita los privilegios innecesarios del símbolo (token) del proceso. Algunos ejemplos de privilegios que se quitan incluyen la capacidad de cerrar la máquina del usuario, cargar controladores y tener de lectura todos los archivos del equipo.

Internet Explorer 7 para Vista

En Windows Internet Explorer 7, las aplicaciones de WPF se ejecutan en modo protegido. Específicamente, las Aplicaciones del explorador XAML (XBAPs) se ejecutan con integridad de nivel intermedio.

Capa de defensa en profundidad

Puesto que el conjunto de permisos de la zona de Internet suele colocar las Aplicaciones del explorador XAML (XBAPs) en un recinto de seguridad, al quitar estos privilegios no se daña la compatibilidad de las Aplicaciones del explorador XAML (XBAPs). En cambio, se crea una capa de defensa en profundidad adicional; aunque una aplicación encerrada en un recinto de seguridad sea capaz de usar otras capas y secuestrar el proceso, este último únicamente tendrá privilegios limitados.

Consulte Using a Least-Privileged User Account.

Seguridad de Common Language Runtime

common language runtime (CLR) proporciona diversas ventajas clave de seguridad que incluyen validación y comprobación, Seguridad de acceso a código (CAS) y la Metodología de seguridad crítica.

Validación y comprobación

Para proporcionar aislamiento de ensamblados e integridad, CLR utiliza un proceso de validación. La validación de CLR se asegura de que los ensamblados se aíslen validando su formato de archivo ejecutable portable (PE) para las direcciones que señalan fuera del ensamblado. La validación de CLR también valida la integridad de los metadatos incrustados dentro de un ensamblado.

Para garantizar la seguridad de tipos, ayudar a evitar problemas de seguridad comunes (por ejemplo, las saturaciones del búfer) y habilitar el uso de recintos de seguridad mediante el aislamiento de subprocesos, la seguridad de CLR utiliza el concepto de comprobación.

Las aplicaciones administradas se compiladas al Lenguaje intermedio de Microsoft (MSIL). Cuando se ejecutan métodos en una aplicación administrada, su MSIL se compila al código nativo mediante la compilación Just-In-Time (JIT). La compilación JIT incluye un proceso de comprobación que aplica numerosas reglas de seguridad y solidez que se aseguran de que el código no haga lo siguiente:

  • Infringir los contratos de tipo

  • Introducir saturaciones de búfer

  • Acceso descontrolado a la memoria.

El código administrado que no cumple a las reglas de comprobación no se puede ejecutar, a menos que se lo considere código de confianza.

La ventaja de código comprobable es uno de los motivos fundamentales por los que WPF se basa en .NET Framework. En la medida en que se utiliza código comprobable, la posibilidad de aprovecharse de las posibles vulnerabilidades se reduce mucho.

Seguridad de acceso a código

Un equipo cliente expone gran variedad de recursos a los que puede tener acceso una aplicación administrada, lo que incluye el sistema de archivos, el Registro, los servicios de impresión, la interfaz de usuario, la reflexión y las variables de entorno. Antes de que una aplicación administrada pueda tener acceso a cualquiera de los recursos en un equipo cliente, debe tener permiso de Seguridad de acceso a código (CAS) de .NET Framework para ello. Un permiso de CAS es una subclase de CodeAccessPermission; CAS implementa una subclase para cada recurso al que las aplicaciones administradas pueden tener acceso.

El conjunto de permisos que CAS otorga a una aplicación administrada cuando comienza a ejecutarse se denomina el conjunto de permisos y se determinado en función de la evidencia proporcionada por la aplicación. Para las aplicaciones de WPF, la evidencia que se proporciona es la ubicación, o zona, desde la que se inician las aplicaciones. CAS identifica las zonas siguientes:

  • Mi PC. Aplicaciones iniciadas desde el equipo cliente (de plena confianza).

  • Intranet local. Aplicaciones iniciadas desde la intranet (de confianza parcial).

  • Internet. Aplicaciones iniciadas desde Internet (de confianza mínima).

  • Sitios de confianza. Aplicaciones identificadas por el usuario como de confianza (de confianza mínima).

  • Sitios que no son de confianza. Aplicaciones identificadas por el usuario como que no son de confianza (no son de confianza).

Para cada una de estas zonas, CAS proporciona un conjunto de permisos predefinido que incluye los permisos correspondientes al nivel de confianza asociado a cada una de ellas. Incluyen los siguientes:

  • FullTrust. Para las aplicaciones iniciadas desde la zona Mi PC. Se otorgan todos los permisos posibles.

  • LocalIntranet. Para las aplicaciones iniciadas desde la zona Intranet local. Se otorga un subconjunto de permisos que proporciona acceso moderado a los recursos de un equipo cliente, que incluyen: almacenamiento aislado, acceso a la interfaz de usuario sin restricciones, cuadros de diálogo de archivos sin restricciones, reflexión limitada, acceso limitado a las variables de entorno. No se proporcionan permisos para los recursos críticos, tales como el Registro.

  • Internet. Para las aplicaciones iniciadas desde la zona Internet o Sitios de confianza. Se otorga un subconjunto de permisos a fin de proporcionar acceso limitado a los recursos de un equipo cliente, incluidos: almacenamiento aislado, apertura de archivos únicamente, y e interfaz de usuario limitada. Esencialmente, este conjunto de permisos aísla las aplicaciones del equipo cliente.

CAS no otorga ningún permiso a las aplicaciones identificadas como pertenecientes a la zona Sitios que no son de confianza. Por consiguiente, para ellos no existe un conjunto de permisos predefinido.

En la ilustración siguiente se muestra la relación entre las zonas, los conjuntos de permisos, los permisos y los recursos.

Conjuntos de permisos CAS

Las restricciones del recinto de seguridad de la zona de Internet se aplican por igual a todo el código que una XBAP importa desde una biblioteca del sistema, incluso WPF. De este modo se garantiza que todos los fragmentos del código están bloqueados, incluso WPF. Por desgracia, para poder para ejecutarse, una XBAP necesita ejecutar funcionalidades que requieren más permisos que los habilitados por el recinto de seguridad de zona de Internet.

Supongamos que aplicación XBAP incluye la página siguiente:

FileIOPermission fp = new FileIOPermission(PermissionState.Unrestricted);
fp.Assert();

// Perform operation that uses the assert

// Revert the assert when operation is completed
CodeAccessPermission.RevertAssert();

Para ejecutar esta XBAP, el código WPF subyacente debe ejecutar más funcionalidades de las que están disponibles para la XBAP que realiza la llamada, y que incluyen:

  • Crear un identificador de ventana (hWnd) para la representación

  • Enviar mensajes

  • Cargar la fuente Tahoma

Desde el un punto de vista de la seguridad, permitir el acceso directo a cualquiera de estas operaciones de la aplicación encerrada en el recinto de seguridad sería catastrófico.

Por suerte, WPF se encarga de esta situación permitiendo que se ejecuten estas operaciones con privilegios elevados en nombre de la aplicación encerrada en el recinto de seguridad. Aunque todas las operaciones de WPF se comprueban con respecto a los permisos de seguridad de la zona de Internet limitados del dominio de aplicación de la XBAP, se otorga a WPF (al igual que sucede con otras bibliotecas del sistema) un conjunto de permisos que incluye todos los permisos posibles.

Esto requiere que WPF reciba privilegios elevados al mismo tiempo que se evite que éstos se rijan por el conjunto de permisos de zona de Internet del dominio de la aplicación host.

WPF lo consigue mediante el método Assert de un permiso. En el código siguiente se muestra cómo se hace.

FileIOPermission fp = new FileIOPermission(PermissionState.Unrestricted);
fp.Assert();

// Perform operation that uses the assert

// Revert the assert when operation is completed
CodeAccessPermission.RevertAssert();

El método Assert evita, en esencia, que los permisos ilimitados requeridos por WPF queden restringidos por los permisos de zona de Internet de la XBAP.

De la perspectiva de la plataforma, WPF es responsable de utilizar Assert correctamente; un uso incorrecto de Assert podría permitir que el código malintencionado elevase sus privilegios. Por este motivo, es importante llamar a Assert únicamente cuando se necesite y asegurarse de que las restricciones del recinto de seguridad permanezcan intactas. Por ejemplo, el código encerrado en un recinto de seguridad no puede abrir archivos aleatorios, pero sí puede utilizar fuentes. WPF permite a las aplicaciones encerradas en un recinto de seguridad utilizar las funcionalidades de fuente llamando a Assert y que WPF lea los archivos que sabe que contienen estas fuentes en nombre de la aplicación encerrada en el recinto de seguridad.

Implementación ClickOnce

ClickOnce es una tecnología de implementación completa que se incluye con .NET Framework y se integra con Microsoft Visual Studio (consulte Información general sobre la implementación de ClickOnce para obtener información detallada). Las aplicaciones de WPF independientes se pueden implementar mediante ClickOnce, mientras que las aplicaciones hospedadas por explorador se deben implementar con ClickOnce.

Las aplicaciones implementadas mediante ClickOnce reciben una capa de seguridad adicional sobre Seguridad de acceso a código (CAS); en esencia, las aplicaciones implementadas por ClickOnce solicitan los permisos que necesitan. Sólo se les otorgan esos permisos si no superan el conjunto de permisos correspondiente a la zona desde la que se implementa la aplicación. Al reducir el conjunto de permisos únicamente a aquéllos que se necesitan, aunque sean menores que los proporcionados por el conjunto de permisos de la zona de inicio, el número de recursos a los que tiene acceso la aplicación se reduce al mínimo. Por consiguiente, si se secuestra la aplicación, se reduce el potencial de daños al equipo cliente.

Metodología de seguridad crítica

El código WPF que utiliza permisos para habilitar el recinto de seguridad de zona de Internet para las aplicaciones XBAP debe someterse al máximo grado posible de auditoría de seguridad y control. A fin de facilitar este requisito, .NET Framework admite ahora la administración de código que eleva los privilegios. En particular, CLR permite identificar el código que eleva los privilegios y lo marca con SecurityCriticalAttribute; cualquier código no marcado con SecurityCriticalAttribute se vuelve transparente utilizando esta metodología. A la inversa, se impide que eleve sus privilegios cualquier código administrado que no esté marcado con SecurityCriticalAttribute.

La Metodología de seguridad crítica permite la organización de código WPF que eleva los privilegios al kernel de seguridad crítico, mientras que el resto queda transparente. Al aislar el código seguridad crítico, el equipo de ingeniería de WPF puede centrar mejor el análisis de seguridad y el control de código fuente en el kernel crítico para la seguridad muy por encima de las prácticas de seguridad estándar (vea Estrategia de seguridad de Windows Presentation Foundation: Ingeniería de seguridad).

Observe que .NET Framework permite al código de confianza ampliar el recinto de seguridad de zona de Internet de la XBAP, al permitir que los programadores escriban ensamblados administrados marcados con AllowPartiallyTrustedCallersAttribute (APTCA) que se implementan en la Caché de ensamblados global (GAC) del usuario. Marcar un ensamblado con APTCA es una operación extremadamente sensible para la seguridad, por cuanto permite que cualquier código llame a ese ensamblado, incluso el código malintencionado procedente de Internet. Deben extremarse las precauciones y utilizarse los procedimientos recomendados cuando se haga; además, los usuarios deben decidir confiar en ese software para que se instale.

Seguridad de Microsoft Internet Explorer

Además de reducir los problemas de seguridad y simplificar la configuración de seguridad, Microsoft Internet Explorer 6 (SP2) contiene varias características que mejoran la seguridad para los usuarios de Aplicaciones del explorador XAML (XBAPs). La potencia de estas características pretende ofrecer al usuario un mayor control sobre su experiencia de navegación.

Antes de IE6 SP2, los usuarios podían sufrir cualquiera de estos inconvenientes:

  • Ventanas emergentes aleatorias.

  • Redirección de script confusa.

  • Numerosos cuadros de diálogo de seguridad en algunos sitios web.

En algunos casos, en sitios web poco confiables se intentaba engañar a los usuarios suplantando una interfaz de usuario (UI) de instalación o mostrando repetidamente un cuadro de diálogo de instalación de Microsoft ActiveX, aunque el usuario lo hubiera cancelado. Con estas técnicas, es posible que se haya inducido a un número significativo de usuarios a tomar malas decisiones que han dado lugar a la instalación de aplicaciones spyware.

IE6 SP2 incluye varias características que mitigan estos tipos de problemas, y que se basan en el concepto de iniciación por parte del usuario. IE6 SP2 detecta cuando un usuario ha hecho clic en un vínculo o elemento de página antes de una acción, lo que se denomina iniciación por parte del usuario, y lo trata de manera diferente que cuando una acción parecida se activa por el script de una página. Un ejemplo de ello es el Bloqueador de elementos emergentes que incorporado por IE6 SP2, que detecta cuando un usuario hace clic en un botón antes de la página que crea un elemento emergente. De este modo, IE6 SP2 puede permitir la mayoría de los elementos emergentes inocuos y evitar aquéllos que los usuarios no han solicitado ni desean. Los elementos emergentes bloqueados se interceptan bajo la nueva Barra de información, que permite al usuario invalidar manualmente el bloqueo y ver el elemento emergente.

Esta misma lógica de iniciación por parte del usuario se aplica asimismo a seguridad de los mensajes de confirmación de seguridad de Abrir/Guardar. Los cuadros de diálogo de instalación de ActiveX siempre se interceptan bajo la Barra de información, a no ser que representen una actualización de un control previamente instalado. Estas medidas se combinan para ofrecer a los usuarios una experiencia del usuario más segura y controlada, puesto que los protegen contra los sitios molestos que insisten en que se instale software no deseado o malintencionado.

Además, estas características protegen a los clientes que utilizan IE6 SP2 para ir a sitios web que permiten descargar e instalar aplicaciones de WPF. En particular, se debe a que IE6 SP2 ofrece una mejor experiencia del usuario que reduce las posibilidades de que este instale aplicaciones malintencionadas o dañinas, independientemente de la tecnología utilizada para desarrollarlas, lo que incluye WPF. WPF aporta mayor protección gracias al uso de ClickOnce para facilitar la descarga de sus aplicaciones a través de Internet. Puesto que las Aplicaciones del explorador XAML (XBAPs) se ejecutan dentro de un recinto de seguridad de zona de Internet, se pueden iniciar sin problemas. Por otro lado, las aplicaciones de WPF independientes exigen plena confianza para ejecutarse. Para estas aplicaciones, ClickOnce mostrará un cuadro de diálogo de seguridad durante el proceso de inicio, a fin de notificar los requisitos de seguridad adicionales para utilizar la aplicación. Sin embargo, debe tratarse de un proceso iniciado por el usuario, también se rige por la lógica de iniciación por parte del usuario y se puede cancelar.

Internet Explorer 7 incorpora y amplía las funciones de seguridad de IE6 SP2 como parte de un compromiso constante con la seguridad.

Vea también

Conceptos

Seguridad de Windows Presentation Foundation

Seguridad de confianza parcial en Windows Presentation Foundation

Estrategia de seguridad de Windows Presentation Foundation: Ingeniería de seguridad

Otros recursos

Top 10 Reasons to Deploy Microsoft Windows XP Service Pack 2

Understanding Security in Microsoft Internet Explorer 6 in Windows XP SP2

Microsoft Internet Explorer 7 for Vista Protected Mode Security

Microsoft Windows XP Service Pack 2

Microsoft Vista Security

Seguridad de acceso a código