Compartir a través de


Application Verifier

Application Verifier (AppVerifier) es una herramienta de comprobación en tiempo de ejecución para código no administrado. La herramienta es útil para encontrar problemas que pueden ser difíciles de identificar con las técnicas estándar de pruebas de aplicaciones o pruebas de controladores. AppVerifier puede ayudar a localizar errores de programación sutiles, problemas de seguridad y problemas de privilegios de cuenta de usuario limitados.

Introducción a AppVerifier

Uno de los desafíos más significativos para los programadores, arquitectos de software, evaluadores y consultores de seguridad es comprender las rutas de ejecución de variables de las aplicaciones cuando se implementan en producción. Incluso con el acceso al código fuente, puede ser difícil comprender todo lo que puede ocurrir durante la ejecución. Varias dependencias como varios grupos que contribuyen al código o al ejercicio de componentes externos pueden aumentar la complejidad de la solución de problemas.

AppVerifier (AppVerif.exe) is a dynamic verification tool for user-mode applications. 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. La herramienta supervisa las acciones de la aplicación mientras se ejecuta la aplicación. Somete la aplicación a diversas tensiones y pruebas, y genera un informe sobre posibles errores en la ejecución o el diseño de la aplicación.

Cuando se usa durante el ciclo de vida de desarrollo de software, AppVerifier puede aportar ventajas de costos a los esfuerzos de desarrollo. Facilita la identificación temprana de problemas cuando son más fáciles y más baratos de corregir. La herramienta también ayuda a detectar errores que antes eran desapercibidos. Garantiza que la aplicación final se puede ejecutar en entornos restringidos (por ejemplo, noadmin).

Requisitos y instalación de AppVerifier

AppVerifier se incluye en el Kit de desarrollo de software (SDK) de Windows. Para instalar Application Verifier, active la casilla de la herramienta 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.

Para usar AppVerifier, revise las siguientes condiciones y requisitos:

  • Puede usar AppVerifier solo o con un depurador en modo de usuario.

  • El usuario actual debe ser miembro del grupo Administradores en el equipo.

  • AppVerifier no admite ARM64EC.

Datos que puede comprobar con 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. Se perfila el uso del sistema operativo 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 puede investigar con AppVerifier

AppVerifier ayuda a determinar cuándo una aplicación usa correctamente las API. La herramienta puede comprobar si hay los siguientes problemas en la aplicación:

  • API TerminateThread no seguras
  • Uso incorrecto de las API de almacenamiento local de subprocesos (TLS)
  • Uso incorrecto de manipulaciones de espacio virtual (por ejemplo, VirtualAlloc, MapViewOfFile)
  • La aplicación oculta las infracciones de acceso mediante el control de excepciones estructurado
  • Intentos de aplicación para usar identificadores no válidos
  • Daños en la memoria o problemas en el montón
  • La aplicación se queda sin memoria en recursos bajos
  • Uso incorrecto de secciones críticas
  • La aplicación que se ejecuta en un entorno administrativo no se puede ejecutar en un entorno con privilegios reducidos
  • La aplicación que se ejecuta como un usuario limitado puede provocar posibles problemas
  • Variables no inicializadas en futuras llamadas de función en el contexto de un subproceso

Pruebas que puede ejecutar con AppVerifier

AppVerifier consta de conjuntos de pruebas denominadas "capas de comprobación". Las capas se pueden activar o desactivar para cada aplicación que compruebe.

  • Para ver las pruebas específicas, expanda la capa de comprobación dentro del conjunto.

  • Para activar una prueba para la aplicación, active la casilla para la prueba.

  • To turn on all the tests in a verification layer, such as Basics, select the checkbox at the top level.

En la tabla siguiente se enumeran los 13 tipos de prueba que AppVerifier puede realizar y se proporcionan vínculos a artículos para obtener más información.

Test type Description More information
Basics At a minimum, you should run Application Verifier with the Basics setting selected. Cada prueba básica comprueba un área que puede provocar bloqueos u otros escenarios negativos que tengan un efecto directo y significativo en la experiencia del cliente. Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones (aspectos básicos)
Compatibility Las pruebas de nivel de comprobación de compatibilidad ayudan a identificar una aplicación que podría tener problemas con el sistema operativo Microsoft Windows. Muchas de estas comprobaciones también se pueden usar para probar los requisitos del logotipo. Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones (compatibilidad)
Cuzz La capa de comprobación de simultaneidad aproximada (Cuzz) detecta errores de simultaneidad y condiciones de carrera de datos. Cuzz ajusta la programación de subprocesos mediante la inserción de retrasos aleatorios en puntos clave en el código de la aplicación. Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones (Cuzz)
Simulación de recursos bajos La simulación de recursos bajos intenta simular un entorno con recursos bajos, como memoria insuficiente. Esta simulación identifica errores que se producen en condiciones de memoria baja. This test is also referred to as Fault Injection. Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones (simulación de recursos bajos)
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. Las pruebas también revelan si la aplicación puede funcionar si ejecuta la aplicación con privilegios reducidos (por lo general, como usuario general). Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones (LuaPriv)
Miscellaneous Varias pruebas comprueban si hay una variedad de condiciones, como detectar API peligrosas que ejecutan acciones no seguras. Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones (varios)
Networking Las pruebas de red buscan un uso incorrecto de las API de WinSock. Por ejemplo, si una API de redes llama antes de una llamada correcta al WSAStartup() método o después de una llamada correcta al WSACleanup() método . Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones (redes)
NTLM Supervisa el uso de las API AcquireCredentialsHandle de autenticación y InitializeSecurityContext para detectar los usos del protocolo NT LAN Manager (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. Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones (NTLM)
Printing El Comprobador de impresión ayuda a encontrar y solucionar problemas que pueden producirse 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. Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones (impresión)
Webservices La capa de verificación de la API de servicios web de Windows (WWSAPI) comprueba el uso adecuado de WWSAPI, como una llamada WWSAPI que hace referencia a un objeto WWSAPI intrínseco no válido o una llamada WWSAPI con referencias a un objeto uniproceso que ya está en uso. Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones (WebServices)
Services Los servicios comprueban el uso adecuado de los servicios de Windows. Por ejemplo, la prueba comprueba si los servicios se inician y detienen correctamente. Comprobador de aplicaciones: códigos de detención: servicios
Perf La prueba perf comprueba el 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. Comprobador de aplicaciones: códigos de detención: rendimiento
Hangs La prueba Hangs comprueba el uso de las API que hacen que el sistema deje de responder. Por ejemplo, cuando el subproceso DllMain está esperando otro subproceso bloqueado. Comprobador de aplicaciones: códigos de detención: bloqueos

Funcionamiento de AppVerifier

AppVerifier funciona modificando las tablas de métodos dll no administradas para que las comprobaciones necesarias se realicen antes de que se ejecute la función real (este enfoque también se denomina "Enlace de funciones"). Por ejemplo, la dirección del método de API CreateFileA de Win32 se reemplaza por un método appVerifier interno que desencadena una serie de pruebas que, cuando son positivas, se registran.

Cuando se inician nuevos procesos, el control de las técnicas de enlace de tabla de métodos appVerifier se realiza con entradas en claves del Registro específicas. Si existe la entrada del Registro, el archivo DLL de AppVerifier se carga en un proceso recién creado que controla los reemplazos de tabla de métodos existentes en archivos DLL y DLL cargados más adelante. Dado que los enlaces se realizan cuando se carga el archivo DLL, no es posible usar AppVerifier en un proceso que se está ejecutando actualmente.

La interfaz de usuario (UI) de AppVerifier se usa para controlar la configuración de la clave del Registro y proporcionar información sobre los registros existentes. After the application and tests are set within the UI and you select Save, the Registry settings are configured. A continuación, reinicie la aplicación, que inicia la supervisión. Tenga en cuenta que la configuración persiste hasta que se quita la aplicación de AppVerifier.

When AppVerifier identifies a problem, a verifier stop occurs. La herramienta proporciona un número que identifica la naturaleza exacta y el motivo de la detención en la ejecución.

AppVerifier y el ciclo de vida de desarrollo de software

Se recomienda usar el Comprobador de aplicaciones durante todo el ciclo de vida de desarrollo de software. Estas son algunas sugerencias:

  • Requirements Phase: Plan to use AppVerifier to help determine app requirements. Asigne tiempo para ejecutar la herramienta y realizar un seguimiento de los problemas identificados.

  • Design Phase: Plan to use AppVerifier as you design your app. Defina qué componentes (módulos, archivos DLL o EXE) se van a probar.

  • Implementation Phase: Run AppVerifier on stable builds (from Alpha to RTM) of the different components under development. Pruebe los componentes de forma individual y colectiva.

  • Verification Phase: Test engineers should run all tests (both manual and automatic) with AppVerifier for the initial verification. Esta fase del ciclo es la primera vez que la aplicación se inserta en los límites. El comportamiento inesperado y los datos se detectan normalmente durante la comprobación inicial. AppVerifier también es una herramienta eficaz para consultores de seguridad que ejecutan auditorías (caja negra y caja blanca). La herramienta permite la enumeración rápida de vectores de ataque o vulnerabilidad real (o potencial).

  • Release Phase: Clients and security consultants can use AppVerifier on the released binaries to identify potential security vulnerabilities.

  • Fase de soporte técnico y mantenimiento: use AppVerifier para asegurarse de que los cambios de código, como las actualizaciones y los Service Packs, no introducen regresiones.

Esta sección incluye: