Prueba de características de seguridad de Windows
Prueba la aplicación para comprobar que usa las características de seguridad de Windows y ACL potentes.
Antecedentes
Cambiar las protecciones de seguridad de Windows predeterminadas puede causar grandes riesgos a los clientes.
Detalles de la prueba
Prueba la seguridad de la aplicación ejecutando el analizador binario BinScope y el analizador de la superficie expuesta a ataques.
Acciones correctivas
Soluciona el problema identificado por las pruebas. Recompila y vuelve a probar la aplicación.
Pruebas de analizador binario BinScope
Las pruebas del analizador binario BinScope examinan los archivos binarios de la aplicación para comprobar las prácticas de codificación y diseño que hacen que la aplicación sea menos vulnerable a los ataques o que se use como vector de ataque.
Las pruebas del analizador binario BinScope comprueban el uso correcto de estas características relacionadas con la seguridad:
- AllowPartiallyTrustedCallersAttribute
- Protección de control de excepciones de /SafeSEH
- Prevención de ejecución de datos
- Selección aleatoria del diseño del espacio de direcciones
- Sección PE compartida de lectura y escritura
- AppContainerCheck
- ExecutableImportsCheck
- WXCheck
AllowPartiallyTrustedCallersAttribute
Mensaje de error del Kit para la certificación de aplicaciones en Windows : Error en la prueba APTCACheck
El atributo AllowPartiallyTrustedCallersAttribute (APTCA) habilita el acceso a los códigos de plena confianza desde los códigos de confianza parcial en los ensamblados con signo. Cuando apliques el atributo APTCA en un ensamblado, los llamadores de confianza parcial pueden obtener acceso a ese ensamblado durante su vigencia, lo que puede comprometer la seguridad.
Qué debes hacer si la aplicación no pasa esta prueba
No uses el atributo APTCA en ensamblados con nombre seguro a menos que lo requiera tu proyecto y comprendas cuáles son los riesgos. En aquellos casos en los que sea obligatorio, asegúrate de que todas las API estén protegidas con las peticiones de seguridad de acceso al código apropiadas. APTCA no tiene efectos cuando el ensamblado forma parte de una aplicación de la Tienda Windows.
Observaciones
Esta prueba solo se realiza en código administrado (C#, .NET, etc.).
Protección de control de excepciones de /SafeSEH
Mensaje de error del Kit para la certificación de aplicaciones en Windows: Error en la prueba SafeSEHCheck
Un controlador de excepciones se ejecuta cuando la aplicación encuentra una condición de excepción, como un error de división entre cero. Dado que la dirección del controlador de excepciones se almacena en la pila cuando se llama una función, podría quedar expuesta a un atacante de desbordamiento de búfer si algún software malicioso quisiera sobrescribir la pila.
Qué debes hacer si la aplicación no pasa esta prueba
Habilita la opción /SAFESEH en el comando vinculador cuando diseñes tu aplicación. Esta opción está activada de manera predeterminada en la configuración de lanzamiento de Visual Studio. Comprueba que esta opción esté habilitada en las instrucciones de compilación de todos los módulos ejecutables de la aplicación.
Observaciones
La prueba no se realiza en binarios de 64 bits ni en binarios de conjunto de chips ARM porque no almacenan direcciones de controladores de excepciones en la pila.
Prevención de ejecución de datos
Mensaje de error del Kit para la certificación de aplicaciones en Windows: Error en la prueba NXCheck
Esta prueba comprueba que la aplicación no ejecute el código que se almacena en el segmento de datos.
Qué debes hacer si la aplicación no pasa esta prueba
Habilita la opción /NXCOMPAT en el comando vinculador cuando diseñes tu aplicación. Esta opción está activada de manera predeterminada en las versiones del vinculador que admiten la Prevención de ejecución de datos (DEP).
Observaciones
Te recomendamos que pruebes tus aplicaciones en una CPU con funcionalidad DEP y repares cualquier error que encuentres en los resultados de DEP.
Selección aleatoria del diseño del espacio de direcciones
Mensaje de error del Kit para la certificación de aplicaciones en Windows: Error en la prueba DBCheck
La selección aleatoria del diseño del espacio de direcciones (ASLR) carga imágenes ejecutables en ubicaciones impredecibles de la memoria, lo que dificulta la tarea del software malicioso que espera que se cargue un programa en una dirección virtual determinada para operar de manera predictiva. La aplicación y todos los componentes que usa la aplicación deben admitir ASLR.
Qué debes hacer si la aplicación no pasa esta prueba
Habilita la opción /DYNAMICBASE en el comando vinculador cuando diseñes tu aplicación. Comprueba que todos los módulos que usa la aplicación también usen esta opción de vinculador.
Observaciones
Normalmente, ASLR no afecta al rendimiento. Pero en algunos escenarios, hay una pequeña mejora de rendimiento en sistemas de 32 bits. Es posible que el rendimiento pueda afectar a un sistema muy congestionado con imágenes cargadas en muchas ubicaciones diferentes de la memoria.
Esta prueba se realiza solamente en aquellas aplicaciones escritas en código administrado, como mediante el uso de C# o .NET Framework.
Sección PE compartida de lectura y escritura
Mensaje de error del Kit para la certificación de aplicaciones en Windows: Error en la prueba SharedSectionsCheck
Los archivos binarios con secciones grabables marcadas como compartidas son una amenaza de seguridad. No compiles aplicaciones con secciones compartidas grabables a menos que sea necesario. Usa CreateFileMapping o MapViewOfFile para crear un objeto de memoria compartida debidamente asegurado.
Qué debes hacer si la aplicación no pasa esta prueba
Elimina todas las secciones compartidas de la aplicación y crea objetos de memoria compartidos invocando a CreateFileMapping o MapViewOfFile con los atributos de seguridad apropiados y vuelve a compilar la aplicación.
Observaciones
Esta prueba se realiza solamente en aplicaciones escritas en lenguajes no administrados, como mediante el uso de C o C++.
AppContainerCheck
Mensaje de error del Kit para la certificación de aplicaciones en Windows: Error en la prueba AppContainerCheck.
AppContainerCheck comprueba que esté establecido el bit appcontainer en el encabezado portable ejecutable (PE) de un binario ejecutable. Las aplicaciones de la Tienda Windows deben tener el bit appcontainer establecido en todos los archivos .exe y en todos los DLL no administrados para ejecutarse correctamente.
Qué debes hacer si la aplicación no pasa esta prueba
Si un archivo ejecutable nativo no pasa la prueba, asegúrate de haber usado los últimos compilador y vinculador para compilarlo y de haber usado la marca /appcontainer en el vinculador.
Si un archivo ejecutable administrado no pasa la prueba, asegúrate de haber usado el compilador y vinculador más recientes (como Microsoft Visual Studio) para compilar la aplicación de la Tienda Windows.
Observaciones
Esta prueba se realiza en todos los archivos .exe y en DLL no administrados.
ExecutableImportsCheck
Mensaje de error del Kit para la certificación de aplicaciones en Windows: Error en la prueba ExecutableImportsCheck.
Una imagen portable ejecutable (PE) no pasa esta prueba si su tabla de importación se colocó en una sección de código ejecutable. Esto puede producirse si habilitaste la combinación de .rdata para la imagen PE estableciendo la marca /merge del vinculador C++ de Visual como /merge:.rdata=.text.
Qué debes hacer si la aplicación no pasa esta prueba
No combines la tabla de importación en una sección de código ejecutable. Asegúrate de que la marca /merge del vinculador C++ de Visual no esté configurada para combinar la sección “.rdata” en una sección de código.
Observaciones
Esta prueba se realiza en todo el código binario excepto en los ensamblados puramente administrados.
WXCheck
Mensaje de error del Kit para la certificación de aplicaciones en Windows: Error en la prueba WXCheck.
La comprobación ayuda a garantizar que un binario no tenga ninguna página asignada como de escritura y ejecutable. Esto puede suceder si el binario tiene una sección de escritura y ejecutable o si la SectionAlignment del binario es menor que PAGE_SIZE.
Qué debes hacer si la aplicación no pasa esta prueba
Asegúrate de que el binario no tiene una sección de escritura o ejecutable y de que el valor de SectionAlignment del binario sea al menos igual a su PAGE_SIZE.
Observaciones
Esta prueba se realiza en todos los archivos .exe y en DLL nativos no administrados.
Un ejecutable puede tener una sección de escritura y ejecutable si se compiló con Editar y continuar habilitado (/ZI). Deshabilitar Editar y continuar hará que la sección no válida no esté presente.
PAGE_SIZE es la SectionAlignment predeterminada para los ejecutables.
Archivos prohibidos en la Tienda Windows
Mensaje de error del Kit para la certificación de aplicaciones en Windows: Error en la prueba de archivos prohibidos.
Las aplicaciones de la Tienda Windows no deben contener determinados archivos. Estos archivos tienen una versión más reciente disponible que proporciona importantes mejoras para la seguridad y la confiabilidad, entre otras. Microsoft bloquea estos archivos en el Kit para la certificación de aplicaciones en Windows con el fin de garantizar que todos los desarrolladores usen una versión actual.
La comprobación de archivos prohibidos del Kit para la certificación de aplicaciones en Windows comprueba actualmente los siguientes archivos:
Bing.Maps.JavaScript\js\veapicore.js
Esta comprobación suele producir un error cuando una aplicación usa una versión preliminar del archivo en lugar de la versión oficial más reciente. Para corregirlo, usa la versión más reciente del SDK de mapas de Bing para aplicaciones de la Tienda Windows.
Analizador de la superficie expuesta a ataques
Las pruebas del analizador de la superficie expuesta a ataques examinan los cambios en el estado del sistema, los parámetros de tiempo de ejecución y los objetos asegurables que se producen después de instalar y ejecutar una aplicación para buscar puntos débiles en la seguridad específicos. La corrección de estos puntos débiles no deriva en ninguna penalización al rendimiento. No podemos certificar tu aplicación para la Tienda Windows si tiene algunos de estos puntos débiles en la seguridad.
Las pruebas del analizador de la superficie expuesta a ataques se aplican a todos los lenguajes de programación y buscan estos puntos débiles en la seguridad de una aplicación.
- Archivos ejecutables seguros que tienen ACL débiles
- Directorios seguros que contienen objetos y tienen ACL débiles
- Claves del Registro seguras con ACL débiles
- Servicios que permiten acceso a cuentas de usuarios que no son administradores y son vulnerables a manipulación
- Servicios que tienen reinicios rápidos o pueden reiniciarse más de dos veces cada 24 horas
Archivos ejecutables seguros que tienen ACL débiles
Esta prueba busca archivos ejecutables seguros que tienen listas de control de acceso (ACL) débiles comprobando las ACL en cada archivo ejecutable nuevo o cambiado que un administrador posea. Las ACL de estos archivos deben evitar que los usuarios que no sean administradores los modifiquen. El analizador de la superficie expuesta a ataques prueba los archivos ejecutables (.exe) y también los archivos que pueden tener contenido ejecutable, como scripts y archivos de ayuda.
Qué debes hacer si la aplicación no pasa esta prueba
Si se detecta este punto débil en tu aplicación, comprueba y quita estos derechos para cualquier cuenta de usuarios que no sean administradores: GENERIC_ALL, GENERIC_WRITE, WRITE_OWNER, WRITE_DAC, FILE_WRITE_ATTRIBUTES, FILE_WRITE_EA, FILE_APPEND_DATA o FILE_WRITE_DATA, DELETE
Observaciones
Las ACL débiles permiten que los usuarios que no sean administradores modifiquen un archivo ejecutable. Si se modificó un archivo ejecutable, probablemente no funcione del modo esperado. Si no se configuran correctamente los derechos de acceso, un atacante puede reemplazar o modificar el contenido del archivo y hacer que se comporte de manera malintencionada.
Directorios seguros que contienen objetos y tienen ACL débiles
Esta prueba busca directorios seguros que contienen objetos y tienen ACL débiles comprobando las ACL en jerarquías de carpetas nuevas o cambiadas. Las ACL jerárquicas (o ACL heredadas) controlan el acceso a todos los archivos y carpetas dentro de una carpeta. Las ACL de estas carpetas deben evitar que los usuarios que no sean administradores las modifiquen o modifiquen su contenido.
En lugar de marcar cada subcarpeta y archivo ejecutable que no está correctamente asegurado, esta prueba identifica la carpeta más alta de la jerarquía que tiene la ACL débil.
Qué debes hacer si la aplicación no pasa esta prueba
Si se detecta esta debilidad en tu aplicación, comprueba y quita estos derechos para todas las cuentas de usuarios que no sean administradores en el directorio identificado por la prueba para que no pueda heredarse: GENERIC_ALL, GENERIC_WRITE, WRITE_OWNER, WRITE_DAC, FILE_ADD_FILE, FILE_ADD_SUBDIRECTORY, FILE_WRITE_ATTRIBUTES, FILE_WRITE_EA, FILE_APPEND_DATA, FILE_WRITE_DATA, FILE_DELETE_CHILD y DELETE. Esto puede implicar cambiar la marca de Inherited en la ACL del directorio raíz.
Después de corregir los derechos en el directorio raíz, probablemente también necesites corregir los derechos de los archivos ejecutables individuales como se describe en Archivos ejecutables seguros que tienen ACL débiles.
Observaciones
Esta prueba identifica una jerarquía de directorios y sus archivos que tengan ACL débiles, las cuales otorgan derechos no apropiados a usuarios que no sean administradores. Esta jerarquía puede estar causada por derechos heredados incorrectos. Por lo tanto, busca primero los derechos heredados antes de cambiar los de los archivos y directorios descendentes.
Claves del Registro seguras con ACL débiles
Esta prueba busca claves del Registro seguras que tengan listas de control de acceso (ACL) débiles comprobando las ACL de claves nuevas o cambiadas en el árbol del Registro del equipo local (HKLM). Solamente los administradores deben tener acceso de escritura al subárbol del Registro del equipo local.
Qué debes hacer si la aplicación no pasa esta prueba
Quita estos derechos en el objeto identificado por la prueba para todas las cuentas de usuarios que no sean administradores: GENERIC_ALL, GENERIC_WRITE, WRITE_OWNER, WRITE_DAC, KEY_SET_VALUE, KEY_CREATE_SUBKEY y DELETE.
Observaciones
Los valores del Registro de esta sección pueden determinar dónde encontrar archivos ejecutables como .exe y .dll. Las aplicaciones también usan claves del Registro en el subárbol del Registro del equipo local para almacenar y leer la ruta de un archivo ejecutable. Si un atacante modifica esta clave, como cambiando el valor de la ruta de un ejecutable no confiable, una aplicación puede ejecutar el archivo incorrecto.
Si aparentemente una clave del Registro hace referencia a un archivo ejecutable, esta prueba examinará las ACL de la clave para ver si otorga derechos inapropiados a una cuenta de un usuario que no es administrador.
Servicios que permiten acceso a cuentas de usuarios que no son administradores y son vulnerables a manipulación
Esta prueba busca servicios nuevos o cambiados que permiten acceso a cuentas de usuarios que no son administradores comprobando las ACL en estos servicios. Los servicios nuevos no deben tener ACL débiles en la ruta binaria, la DLL del host, las claves del Registro o el servicio en sí porque podrían permitir que un usuario que no es administrador cambie el modo en que se ejecuta el servicio.
Qué debes hacer si la aplicación no pasa esta prueba
Repara los archivos individuales según se describe en Archivos ejecutables seguros que tienen ACL débiles.
Observaciones
Los servicios tiene derechos tanto genéricos como específicos asociados con ellos. Esta prueba busca derechos inapropiados otorgados a cuentas de usuarios que no son administradores. Si los derechos no están asegurados, un atacante puede redirigir el servicio para ejecutar un archivo no confiable cuando se inicia.
Por ejemplo, un atacante podría llamar a ChangeServiceConfig para cambiar la ruta del archivo ejecutable del servicio.
Servicios que tienen reinicios rápidos o pueden reiniciarse más de dos veces cada 24 horas
Esta prueba busca servicios que pueden reiniciarse con frecuencia comprobando su configuración. Los servicios no deben reiniciarse más de dos veces en un período de 24 horas.
Qué debes hacer si la aplicación no pasa esta prueba
Cambia el Reset Period del servicio para impedir que se reinicie más de dos veces en un período de 24 horas.
Observaciones
Esta prueba buscar vulnerabilidad relacionada con la selección aleatoria del diseño del espacio de direcciones (ASLR). ASLR es una característica que carga código ejecutable en espacios aleatorios en la memoria, lo que hace más difícil crear vulnerabilidades de seguridad confiables. Si un atacante puede hacer que un servicio se reinicie en repetidas ocasiones, podría usar fuerza bruta para cargar código ejecutable en todas las ubicaciones posibles y derrotar a ASLR.
Esta prueba examina los elementos lpsaActions de la estructura de Service Failure Actions en busca de los valores SC_ACTION_REBOOT y SC_ACTION_RESTART. Estos valores pueden configurarse llamando a ChangeServiceConfig2.
La prueba determina si hay más de dos acciones, si sus valores de retraso son menores a 24 horas y si el período de restablecimiento del sistema es menor que 24 horas.