Comprobador de aplicaciones: información general

Resumen

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

Información general

Uno de los mayores desafíos que enfrentan los programadores, arquitectos de software, evaluadores y consultores de seguridad es comprender las rutas de ejecución variable 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 encontrar errores de programación, problemas de seguridad y problemas de privilegios de cuenta de usuario que pueden ser difíciles de identificar durante un pase de prueba típico.

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.

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.

Instalación de AppVerifier

El Comprobador de aplicaciones se incluye en el Kit de desarrollo de software (SDK) de Windows. Para instalar Application Verifier, 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.

¿Qué es 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 limitados de privilegios de cuenta de usuario. 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 de administración.

Cuando se usa a lo largo del 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 temprana de los problemas cuando son más fáciles y más baratos de corregir. También ayuda a detectar errores que pueden pasar desapercibidos y garantiza que la aplicación final se pueda ejecutar en entornos restringidos (por ejemplo, no administradores).

Problemas que AppVerifier identifica

AppVerifier ayuda a determinar:

Cuando 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 de excepciones estructurado.
  • Si la aplicación está intentando 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 bajo 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 verificación". Se pueden activar o desactivar para cada aplicación que se está probando. Al expandir la capa de verificació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 de verificación en el nivel superior.

Hay trece tipos diferentes de pruebas que AppVerifier puede realizar.

Aspectos básicos : como mínimo, debe ejecutar Application Verifier con la opción Aspectos básicos seleccionada. Cada uno de ellos probará un área que provocará bloqueos u otros escenarios negativos, que tienen un impacto directo y significativo de la experiencia del cliente. Para obtener más información, consulte Application Verifier- Tests within Application Verifier (Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones).

Compatibilidad: las pruebas del nivel 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 Application Verifier- Tests within Application Verifier (Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones).

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 una aplicación. Para obtener más información, consulte Application Verifier- Tests within Application Verifier (Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones).

Simulación de recursos bajos : la simulación de recursos baja intenta simular un entorno con recursos bajos, como la memoria insuficiente. Esta simulación identificará errores que se producen en condiciones de memoria baja. Esto también se conoce como inyección de errores. Para obtener más detalles, consulte Application Verifier- Tests within Application Verifier (Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones).

LuaPriv : las pruebas de predicción de privilegios de cuenta de usuario limitada (LuaPriv) son un trabajo predictivo y de diagnóstico 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 ejecutaría con menos privilegios (por lo general, como usuario normal). Para obtener más información, consulte Application Verifier- Tests within Application Verifier (Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones).

Varios: varios consta de pruebas para una variedad de pruebas, como las API peligrosas que realizan acciones no seguras. Para obtener más información, consulte Application Verifier- Tests within Application Verifier (Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones).

Redes : las pruebas de red buscan un uso incorrecto de las API de WinSock. Por ejemplo, si se llama a una API de redes antes de que se realice correctamente WSAStartup() o después de realizar una llamada WSACleanup() correcta de equilibrio. Para obtener más información, consulte Application Verifier- Tests within Application Verifier (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 Application Verifier- Tests within Application Verifier (Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones).

Impresión : el comprobador de impresión ayuda a encontrar y solucionar problemas que pueden dar lugar cuando una aplicación llama al subsistema de impresión. Print Verifier 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 Application Verifier- Tests within Application Verifier (Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones).

Servicios web : la capa de verificació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 a WWSAPI que se llama con referencias a un único objeto subproceso que ya está en uso. Para obtener más información, consulte Application Verifier- Tests within Application Verifier (Comprobador de aplicaciones: pruebas dentro del comprobador de aplicaciones).

Servicios : los 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, vea Application Verifier - Stop Codes and Definitions.

Rendimiento : la prueba de rendimiento 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. Para obtener información sobre las excepciones de código de detención generadas por estas pruebas, vea Application Verifier - Stop Codes and Definitions.

Bloqueos : bloquea las pruebas para el 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, vea Application Verifier - Stop Codes and Definitions.

¿Cómo funciona 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 (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 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 posteriormente cargados. 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 (UI) 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 establecida la aplicación y las pruebas en la interfaz de usuario y se hace clic en el botón "Guardar", se realiza la configuración del Registro. A continuación, 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 Application Verifier durante todo el ciclo de vida de desarrollo de software.

Fase de requisitos: AppVerifier debe planearse y asignarse el tiempo para su ejecución y seguimiento.

Fase de diseño : planee 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 comprobación : los evaluadores deben ejecutar todas sus pruebas (tanto manuales como automáticas) con comprobador de aplicaciones, ya que será la primera vez que la aplicación se inserte en los límites y se enviarán los datos y el comportamiento inesperado. AppVerifier también es una herramienta eficaz para los consultores de seguridad que realizan auditorías (caja negra y caja blanca), ya que permitirá la enumeración rápida de vectores de ataque y vulnerabilidad real (o potencial).

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 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 y definiciones de detención

Comprobador de aplicaciones: se detiene la depuración del comprobador de aplicaciones

Comprobador de aplicaciones: preguntas más frecuentes