Comprobador de aplicaciones - Información general

Resumen

El comprobador de aplicaciones (AppVerifier) es una herramienta de comprobación en tiempo de ejecución para código no administrado que ayuda a encontrar errores de programación sutiles, problemas de seguridad y problemas de privilegios de cuenta de usuario limitados que pueden ser difíciles de identificar con técnicas de prueba de aplicaciones normales.

Información general

Uno de los mayores desafíos a los que se enfrentan los programadores, arquitectos de software, evaluadores y consultores de seguridad es comprender las rutas de ejecución de variables de sus aplicaciones cuando se implementan en producción. Incluso con el acceso al código fuente, es difícil comprender todo lo que se producirá durante la ejecución debido a una variedad de dependencias (por ejemplo, varios grupos que contribuyen al código o aprovechan componentes externos). Microsoft AppVerifier puede desempeñar un papel útil para ayudar a administrar esta complejidad y los posibles efectos secundarios de los errores. AppVerifier ayuda a buscar errores de programación, problemas de seguridad y problemas de privilegios de cuentas de usuario que pueden ser difíciles de identificar durante una prueba típica superada.

El comprobador de aplicaciones (AppVerif.exe) es una herramienta de verificación dinámica para aplicaciones en modo de usuario. Esta herramienta supervisa las acciones de la aplicación mientras se ejecuta la aplicación, somete la aplicación a una variedad de tensiones y pruebas, y genera un informe sobre posibles errores en la ejecución o el diseño de la aplicación.

El comprobador de aplicaciones puede detectar errores en cualquier aplicación en modo de usuario que no se base en código administrado, incluidos los controladores en modo de usuario. Encuentra errores sutiles de programación que pueden ser difíciles de detectar durante las pruebas de aplicaciones estándar o las pruebas de controladores.

Cuando se usa durante todo el ciclo de vida de desarrollo de software, AppVerifier puede aportar ventajas a los costos a los esfuerzos de desarrollo, ya que facilita la identificación de problemas al principio cuando son más fáciles y más baratos de corregir. También ayuda a detectar errores que pueden haber pasado desapercibidos y garantiza que la aplicación final se pueda ejecutar en entornos restringidos (por ejemplo, no administradores).

compatibilidad con ARM64EC

Application Comprobador no admite ARM64EC.

Instalación de AppVerifier

El comprobador de aplicaciones se incluye en el Kit de desarrollo de software de Windows (SDK). Para instalar el comprobador de aplicaciones, active la casilla correspondiente durante la instalación del SDK.

Captura de pantalla del menú principal del comprobador de aplicaciones con una sola aplicación de prueba seleccionada y pruebas enumeradas en el lado derecho.

Puede usar el comprobador de aplicaciones solo o junto con un depurador en modo de usuario. El usuario actual debe ser miembro del grupo Administradores en el equipo.

¿Qué comprueba AppVerifier?

AppVerifier es una herramienta diseñada para detectar y ayudar a depurar daños en la memoria, vulnerabilidades de seguridad críticas y problemas de privilegios de cuenta de usuario limitados. AppVerifier ayuda a crear aplicaciones confiables y seguras mediante la supervisión de la interacción de una aplicación con el sistema operativo Microsoft Windows y la generación de perfiles de su uso de objetos, el registro, el sistema de archivos y las API de Win32 (incluidos montones, identificadores y bloqueos). AppVerifier también incluye comprobaciones para predecir el rendimiento de la aplicación en entornos que no son administradores.

Problemas que AppVerifier identifica

AppVerifier ayuda a determinar:

Cuándo la aplicación usa correctamente las API:

  • API TerminateThread no seguras.
  • Uso correcto de las API de almacenamiento local de subprocesos (TLS).
  • Uso correcto de manipulaciones de espacio virtual (por ejemplo, VirtualAlloc, MapViewOfFile).
  • Si la aplicación oculta las infracciones de acceso mediante el control estructurado de excepciones.
  • Si la aplicación intenta usar identificadores no válidos.
  • Si hay daños en la memoria o problemas en el montón.
  • Si la aplicación se queda sin memoria en recursos bajos.
  • Si se está produciendo el uso correcto de secciones críticas.
  • Si una aplicación que se ejecuta en un entorno administrativo se ejecutará bien en un entorno con menos privilegios.
  • Si hay posibles problemas cuando la aplicación se ejecuta como un usuario limitado.
  • Si hay variables no inicializadas en futuras llamadas de función en el contexto de un subproceso.

Pruebas de AppVerifier

AppVerifier consta de conjuntos de pruebas denominadas "capas de comprobación". Se pueden activar o desactivar para cada aplicación que se está probando. Al expandir la capa de comprobación dentro del área de pruebas, se muestran las pruebas específicas. Para activar una prueba para la aplicación, active la casilla situada junto a ella. Para activar una capa de verificación completa, como Aspectos básicos, active la casilla en el nivel superior.

Hay trece tipos diferentes de pruebas que AppVerifier puede realizar.

Básicas : como mínimo, debe ejecutar el comprobador de aplicaciones con la configuración Básicas seleccionada. Cada uno de ellas probará un área que provocará bloqueos u otros escenarios negativos, que tienen un impacto directo y significativo en la experiencia del cliente. Para obtener más información, consulte Comprobador de aplicaciones - Pruebas dentro del comprobador de aplicaciones

Compatibilidad: las pruebas en la capa de comprobación de compatibilidad ayudan a identificar una aplicación que puede tener problemas con el sistema operativo Microsoft Windows. Muchas de estas comprobaciones también se pueden usar para probar los requisitos del logotipo. Para obtener más información, consulte Comprobador de aplicaciones - Pruebas dentro del comprobador de aplicaciones

Simultaneidad aproximada : la capa de comprobación de simultaneidad aproximada detecta errores de simultaneidad y condiciones de carrera de datos. La simultaneidad aproximada ajusta la programación de subprocesos mediante la inserción de retrasos aleatorios en puntos clave en el código de una aplicación. Para obtener más información, consulte Comprobador de aplicaciones - Pruebas dentro del comprobador de aplicaciones

Simulación de recursos bajos: la simulación de recursos baja intenta simular un entorno bajo en recursos bajos, como la memoria insuficiente. Esta simulación identificará los errores que se producen en condiciones de memoria baja. Esto también se conoce como inyección de errores. Para obtener más información, consulte Comprobador de aplicaciones - Pruebas dentro del comprobador de aplicaciones

LuaPriv: las pruebas de predicción de privilegios de cuenta de usuario limitada (LuaPriv) son predictivas y de diagnóstico y funcionan para exponer problemas relacionados con la ejecución de una aplicación con privilegios administrativos y si esa aplicación funcionaría también si se ejecuta con menos privilegios (por lo general, como usuario normal). Para obtener más información, consulte Comprobador de aplicaciones - Pruebas dentro del comprobador de aplicaciones

Varias: constan de pruebas para una gran variedad de pruebas, como las API peligrosas que realizan acciones no seguras. Para obtener más información, consulte Comprobador de aplicaciones - Pruebas dentro del comprobador de aplicaciones

Redes: las pruebas de redes buscan un uso incorrecto de las API de WinSock. Por ejemplo, si se llama a una API de red antes de que se realice una llamada WSAStartup() correcta o después de realizar una llamada de equilibrio WSACleanup() correcta. Para obtener más información, consulte Comprobador de aplicaciones - Pruebas dentro del comprobador de aplicaciones

NTLM: supervisa el uso de las API de autenticación AcquireCredentialsHandle e InitializeSecurityContext para detectar los usos del protocolo NTLM. NTLM es un protocolo de autenticación obsoleto con errores que potencialmente ponen en peligro la seguridad de las aplicaciones y el sistema operativo. Para obtener más información, consulte Comprobador de aplicaciones - Pruebas dentro del comprobador de aplicaciones

Impresión: el comprobador de impresión ayuda a encontrar y solucionar problemas que pueden surgir cuando una aplicación llama al subsistema de impresión. El comprobador de impresión tiene como destino las dos capas del subsistema de impresión, la capa PrintAPI y la capa PrintDriver. Para obtener más información, consulte Comprobador de aplicaciones - Pruebas dentro del comprobador de aplicaciones

Webservices: la capa de comprobación de la API de servicios web de Windows (WWSAPI) funciona para comprobar el uso adecuado de WWSAPI, como una WWSAPI a la que se llama que hace referencia a un objeto WWSAPI intrínseco no válido o WWSAPI a la que se llama con referencias a un único objeto subproceso que ya está en uso. Para obtener más información, consulte Comprobador de aplicaciones - Pruebas dentro del comprobador de aplicaciones

Servicios: las pruebas de servicios comprueban el uso adecuado de los servicios de Windows. Por ejemplo, que los servicios se inician y se detienen correctamente. Para obtener información sobre las excepciones de código de detención generadas por estas pruebas, consulte Comprobador de aplicaciones - Códigos de detención y definiciones.

Perf: la comprobación de pruebas perf para un uso eficaz de las API que afectan al rendimiento del sistema y al consumo de energía, como llamar a una función de Windows que usa un período de espera incorrecto. Para obtener información sobre las excepciones de código de detención generadas por estas pruebas, consulte Comprobador de aplicaciones - Códigos de detención y definiciones.

Bloqueos: las pruebas de bloqueo del uso de las API que hacen que el sistema deje de responder, por ejemplo, cuando el subproceso DllMain está esperando otro subproceso bloqueado. Para obtener información sobre las excepciones de código de detención generadas por estas pruebas, consulte Comprobador de aplicaciones - Códigos de detención y definiciones.

¿Cómo funciona AppVerifier?

AppVerifier funciona modificando las tablas de métodos dll no administradas para que se realicen las comprobaciones necesarias antes de que se ejecute la función real (esto también se denomina "Enlace de funciones"). Por ejemplo, la dirección del método CreateFileA de la API win32 se reemplaza por un método AppVerifier interno que desencadenará una serie de pruebas que, cuando sea positivo, se registrarán.

Cuando se inician nuevos procesos, el uso de las técnicas de enlace de tabla de métodos de AppVerifier se controla mediante entradas realizadas en claves del Registro específicas. Si existe la entrada del Registro, el archivo DLL de AppVerifier se cargará en un proceso recién creado que controlará los reemplazos de tabla de métodos en los archivos DLL existentes y cargados posteriormente. Dado que estos enlaces se realizan cuando se carga el archivo DLL, no es posible usar AppVerifier en un proceso que ya se está ejecutando.

La interfaz de usuario de AppVerifier se usa para controlar la configuración de la clave del Registro y para proporcionar información sobre los registros existentes. Una vez que la aplicación y las pruebas se establecen dentro de la interfaz de usuario y se hace clic en el botón "Guardar", se realiza la configuración del Registro. La aplicación tendrá que reiniciarse, lo que iniciará la supervisión. Es importante tener en cuenta que la configuración se conservará hasta que la aplicación se quite de AppVerifier.

Cuando se identifica un problema, se producirá una detención del comprobador. El número proporcionado se usa para identificar la naturaleza exacta y el motivo de su aparición.

Uso del comprobador de aplicaciones en el ciclo de vida de desarrollo de software

Debe usar el comprobador de aplicaciones durante todo el ciclo de vida de desarrollo de software.

Fase de requisitos: AppVerifier debe planificarse y se le debe asignar tiempo para su ejecución y seguimiento.

Fase de diseño: planifique el uso del comprobador de aplicaciones y defina qué componentes (módulos, archivos DLL o EXE) se probarán.

Fase de implementación: ejecute el comprobador de aplicaciones en compilaciones estables (de Alfa a RTM) de los distintos componentes en desarrollo (es importante probar los componentes de forma individual y colectiva).

Fase de verificación: los evaluadores deben ejecutar todas sus pruebas (tanto manuales como automáticas) con el comprobador de aplicaciones, ya que esta será la primera vez que la aplicación se llevará al límite y que se presentarán comportamientos y datos inesperados. AppVerifier también es una herramienta eficaz para consultores de seguridad que realizan auditorías (caja negra y caja blanca), ya que permitirá la enumeración rápida de vectores reales (o potenciales) de ataque o vulnerabilidades de seguridad.

Fase de lanzamiento: los clientes y los consultores de seguridad pueden usar AppVerifier en los archivos binarios publicados para identificar posibles vulnerabilidades de seguridad.

Fase de soporte técnico y mantenimiento: use el comprobador de aplicaciones para asegurarse de que los cambios de código (por ejemplo, actualizaciones, Service Packs) no introducen regresiones.

Temas de la sección

Esta sección contiene los temas siguientes.

Comprobador de aplicaciones - Características

Comprobador de aplicaciones - Pruebas de aplicaciones

Comprobador de aplicaciones - Pruebas dentro del comprobador de aplicaciones

Comprobador de aplicaciones - Códigos de detención y definiciones

Comprobador de aplicaciones - Depuración de las detenciones del comprobador de aplicaciones

Comprobador de aplicaciones - Preguntas más frecuentes