Application Verifier - Panoramica

Riepilogo

Application Verifier (AppVerifier) è uno strumento di verifica in fase di esecuzione per il codice non gestito che aiuta a trovare errori di programmazione sottili, problemi di sicurezza e problemi limitati relativi ai privilegi degli account utente che possono essere difficili da identificare con le normali tecniche di test delle applicazioni.

Panoramica

Una delle principali sfide affrontate dai programmatori, dagli architetti software, dai tester e dai consulenti per la sicurezza consiste nel comprendere i percorsi di esecuzione variabili delle applicazioni quando vengono distribuiti nell'ambiente di produzione. Anche con l'accesso al codice sorgente, è difficile comprendere tutto ciò che si verificherà durante l'esecuzione a causa di una varietà di dipendenze, ad esempio più gruppi che contribuiscono al codice o sfruttano componenti esterni. Microsoft AppVerifier può svolgere un ruolo utile per gestire questa complessità e i potenziali effetti collaterali dei bug. AppVerifier aiuta a trovare errori di programmazione, problemi di sicurezza e privilegi dell'account utente che possono essere difficili da identificare durante un normale passaggio di test.

Application Verifier (AppVerif.exe) è uno strumento di verifica dinamico per le applicazioni in modalità utente. Questo strumento monitora le azioni dell'applicazione durante l'esecuzione dell'applicazione, esegue l'applicazione a diversi stress e test e genera un report sui potenziali errori nell'esecuzione o nella progettazione dell'applicazione.

Application Verifier può rilevare errori in qualsiasi applicazione in modalità utente non basata su codice gestito, inclusi i driver in modalità utente. Rileva errori di programmazione sottili che potrebbero essere difficili da rilevare durante i test standard dell'applicazione o i test dei driver.

Se usato durante tutto il ciclo di vita dello sviluppo software, AppVerifier può offrire vantaggi a livello di costo per le attività di sviluppo, perché facilita l'identificazione dei problemi all'inizio quando sono più facili e più economici da risolvere. Consente anche di rilevare gli errori che potrebbero non essere stati rilevati e garantisce che l'applicazione finale possa essere eseguita in ambienti limitati (ad esempio, non amministratori).

supporto ARM64EC

Application Verifier non supporta ARM64EC.

Installazione di AppVerifier

Application Verifier è incluso in Windows Software Development Kit (SDK). Per installare Application Verifier, selezionare la casella di controllo durante l'installazione dell'SDK.

Screenshot del menu principale di Application Verifier con una singola app di test selezionata e i test elencati sul lato destro.

È possibile usare solo Application Verifier o insieme a un debugger in modalità utente. L'utente corrente deve essere membro del gruppo Administrators nel computer.

Che cosa verifica AppVerifier?

AppVerifier è uno strumento progettato per rilevare e aiutare a eseguire il debug di danneggiamenti della memoria, vulnerabilità di sicurezza critiche e problemi limitati relativi ai privilegi degli account utente. AppVerifier facilita la creazione di applicazioni affidabili e sicure monitorando l'interazione di un'applicazione con il sistema operativo Microsoft Windows e profilando l'uso di oggetti, il Registro di sistema, il file system e le API Win32 (inclusi heap, handle e blocchi). AppVerifier include anche controlli per stimare il livello di prestazioni dell'applicazione in ambienti non amministratori.

Problemi identificati da AppVerifier

AppVerifier consente di determinare:

Quando l'applicazione usa correttamente le API:

  • API TerminateThread non sicure.
  • Uso corretto delle API di Archiviazione locale thread (TLS).
  • Uso corretto delle manipolazioni dello spazio virtuale, ad esempio VirtualAlloc, MapViewOfFile.
  • Indica se l'applicazione nasconde le violazioni di accesso tramite la gestione strutturata delle eccezioni.
  • Indica se l'applicazione sta tentando di usare handle non validi.
  • Se sono presenti danneggiamenti o problemi di memoria nell'heap.
  • Indica se l'applicazione esaurisce la memoria in risorse basse.
  • Indica se si verifica l'utilizzo corretto delle sezioni critiche.
  • Indica se un'applicazione in esecuzione in un ambiente amministrativo verrà eseguita correttamente in un ambiente con privilegi inferiori.
  • Se si verificano potenziali problemi quando l'applicazione è in esecuzione come utente limitato.
  • Indica se sono presenti variabili non inizializzate nelle chiamate di funzione future nel contesto di un thread.

Test di AppVerifier

AppVerifier è costituito da set di test denominati "livelli di verifica". Questi possono essere attivati o disattivati per ogni applicazione sottoposta a test. Espandendo il livello di verifica all'interno dell'area test, vengono visualizzati i test specifici. Per attivare un test per l'applicazione, selezionare la casella di controllo accanto. Per attivare un intero livello di verifica, ad esempio Informazioni di base, selezionare la casella di controllo al livello superiore.

Esistono tredici tipi diversi di test che Possono essere eseguiti da AppVerifier.

Nozioni di base: è necessario eseguire almeno Application Verifier con l'impostazione Informazioni di base selezionata. Ognuno di questi test verificherà un'area che causerà arresti anomali o altri scenari negativi, che hanno un impatto diretto e significativo dell'esperienza del cliente. Per altri dettagli, vedere Application Verifier- Tests within Application Verifier

Compatibilità : i test del livello di verifica della compatibilità consentono di identificare un'applicazione che potrebbe avere problemi con il sistema operativo Microsoft Windows. Molti di questi controlli possono essere usati anche per testare i requisiti del logo. Per altri dettagli, vedere Application Verifier- Tests within Application Verifier

Cuzz : il livello di verifica Cuzzing (Concurrency Fuzzing) rileva bug di concorrenza e condizioni di race condition dei dati. Cuzz regola la pianificazione dei thread inserendo ritardi casuali nei punti chiave nel codice di un'applicazione. Per altri dettagli, vedere Application Verifier- Tests within Application Verifier

Simulazione risorse bassa: la simulazione di risorse bassa tenta di simulare un ambiente con risorse basse, ad esempio memoria insufficiente. Questa simulazione identificherà i bug che si verificano in condizioni di memoria insufficiente. Questa operazione è nota anche come inserimento di errori. Per altri dettagli, vedere Application Verifier- Tests within Application Verifier (Verifica dell'applicazione all'interno di Application Verifier)

LuaPriv : i test LuaPriv - Limited User Account Privilege Predictor (LuaPriv ) sono sia predittivi che diagnostici e funzionano per risolvere i problemi relativi all'esecuzione di un'applicazione con privilegi amministrativi e se l'applicazione funzioni anche se viene eseguita con privilegi minori (in genere, come utente normale). Per altri dettagli, vedere Application Verifier- Tests within Application Verifier

Varie : vari sono costituiti da test per un assortimento di test, ad esempio per LE API pericolose che esesistono in azioni non sicure. Per altri dettagli, vedere Application Verifier- Tests within Application Verifier

Rete: i test di rete cercano un uso improprio delle API WinSock. Ad esempio, se un'API di rete chiamata prima di una chiamata WSAStartup() o dopo una chiamata WSACleanup() riuscita al bilanciamento è stata effettuata. Per altri dettagli, vedere Application Verifier- Tests within Application Verifier

NTLM : monitora l'uso delle API di autenticazione AcquireCredentialsHandle e InitializeSecurityContext per rilevare gli usi del protocollo NTLM. NTLM è un protocollo di autenticazione obsoleto con difetti che potrebbero compromettere la sicurezza delle applicazioni e del sistema operativo. Per altri dettagli, vedere Application Verifier- Tests within Application Verifier

Stampa: l'oggetto Print Verifier consente di individuare e risolvere i problemi che possono verificarsi quando un'applicazione chiama il sottosistema di stampa. Print Verifier è destinato ai due livelli del sottosistema di stampa, il livello PrintAPI e il livello PrintDriver. Per altri dettagli, vedere Application Verifier- Tests within Application Verifier

Webservices : il livello di verifica WWSAPI (Windows Webservices API) funziona per verificare l'uso appropriato di WWSAPI, ad esempio una WWSAPI chiamata che fa riferimento a un oggetto WWSAPI intrinseco non valido o WWSAPI chiamato con riferimenti a un singolo oggetto threaded già in uso. Per altri dettagli, vedere Application Verifier- Tests within Application Verifier

Servizi : i test dei servizi verificano l'uso corretto dei servizi Windows. Ad esempio, i servizi vengono avviati e arrestati correttamente. Per informazioni sulle eccezioni di codice di arresto generate da questi test, vedere Application Verifier - Stop Codes and Definitions.

Perf: il controllo del test perf per un uso efficiente delle API che influisce sulle prestazioni del sistema e sul consumo energetico, ad esempio la chiamata di una funzione Windows che usa un periodo di attesa non corretto. Per informazioni sulle eccezioni di codice di arresto generate da questi test, vedere Application Verifier - Stop Codes and Definitions.

Hangs : i test di blocco per l'uso delle API che causano la mancata risposta del sistema, ad esempio quando il thread DllMain è in attesa di un altro thread bloccato. Per informazioni sulle eccezioni di codice di arresto generate da questi test, vedere Application Verifier - Stop Codes and Definitions.

Come funziona AppVerifier?

AppVerifier funziona modificando le tabelle dei metodi delle DLL non gestite in modo che vengano eseguiti i controlli necessari prima dell'esecuzione della funzione reale (detto anche "Hook delle funzioni"). Ad esempio, l'indirizzo del metodo CreateFileA dell'API Win32 viene sostituito con un metodo AppVerifier interno che attiverà una serie di test che, quando positivi, verranno registrati.

Quando vengono avviati nuovi processi, l'uso delle tecniche di hook delle tabelle dei metodi di AppVerifier è controllato dalle voci create in chiavi del Registro di sistema specifiche. Se la voce del Registro di sistema esiste, la DLL di AppVerifier verrà caricata in un processo appena creato che gestirà le sostituzioni della tabella dei metodi nelle DLL esistenti e caricate successivamente. Poiché questi hook vengono eseguiti quando viene caricata la DLL, non è possibile usare AppVerifier in un processo già in esecuzione.

L'interfaccia utente di AppVerifier viene usata per controllare le impostazioni della chiave del Registro di sistema e per fornire informazioni sui log esistenti. Dopo aver impostato l'applicazione e i test all'interno dell'interfaccia utente e aver fatto clic sul pulsante "Salva", vengono effettuate le impostazioni del Registro di sistema. L'applicazione dovrà quindi essere riavviata, che avvierà il monitoraggio. È importante notare che le impostazioni verranno mantenute fino a quando l'applicazione non viene rimossa da AppVerifier.

Quando viene identificato un problema, si verificherà un arresto del verificatore. Il numero specificato viene usato per identificare la natura esatta e il motivo della sua occorrenza.

Uso di Application Verifier nel ciclo di vita dello sviluppo software

È consigliabile usare Application Verifier per tutto il ciclo di vita dello sviluppo software.

Fase dei requisiti- AppVerifier deve essere pianificata e il tempo allocato per l'esecuzione e il completamento.

Fase di progettazione: pianificare l'uso di Application Verifier e definire quali componenti (moduli, DLL o EXEs) verranno testati.

Fase di implementazione: eseguire Application Verifier in build stabili (da Alpha a RTM) dei diversi componenti in fase di sviluppo (è importante testare i componenti singolarmente e collettivamente).

Fase di verifica: i tester devono eseguire tutti i test (sia manuali che automatici) con Application Verifier perché sarà la prima volta che l'applicazione verrà inserita nei limiti e nei comportamenti imprevisti e i dati verranno inviati. AppVerifier è anche uno strumento potente per i consulenti di sicurezza che eseguono controlli (casella nera e casella bianca) perché consentirà l'enumerazione rapida di attacchi reali (o potenziali) attacchi/vettori di exploit.

Fase di rilascio: i client e i consulenti per la sicurezza possono usare AppVerifier nei file binari rilasciati per identificare potenziali vulnerabilità di sicurezza.

Fase di supporto e manutenzione: usare Application Verifier per assicurarsi che le modifiche al codice (ad esempio gli aggiornamenti, i Service Pack) non introducono regressioni.

Argomenti della sezione

Questa sezione contiene i seguenti argomenti:

Application Verifier - Funzionalità

Application Verifier - Testing Applications

Verifica applicazione - Test all'interno di Application Verifier

Application Verifier - Codici e definizioni di arresto

Application Verifier - Debug dell'applicazione verifier arresta

Application Verifier - Domande frequenti