Verifica applicazione - Panoramica

Riepilogo

Application Verifier (AppVerifier) è uno strumento di verifica di runtime per il codice non gestito che aiuta a trovare errori di programmazione sottili, problemi di sicurezza e problemi di privilegi dell'account utente limitati 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 di sicurezza consiste nel comprendere i percorsi di esecuzione delle variabili delle applicazioni quando vengono distribuite in produzione. Anche con l'accesso al codice sorgente, è difficile afferrare 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 i componenti esterni. Microsoft AppVerifier può svolgere un ruolo utile per gestire questa complessità e gli effetti collaterali potenziali dei bug. AppVerifier aiuta a trovare errori di programmazione, problemi di sicurezza e problemi di privilegi dell'account utente che possono essere difficili da identificare durante un tipico passaggio di test.

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

Il verificatore dell'applicazione può rilevare gli errori in tutte le applicazioni in modalità utente che non sono basate sul codice gestito, inclusi i driver in modalità utente. Trova errori di programmazione sottili che potrebbero essere difficili da rilevare durante il test dell'applicazione standard o il test del driver.

È possibile usare solo il verificatore applicazione o in combinazione con un debugger in modalità utente. L'utente corrente deve essere membro del gruppo Administrators nel computer.

Installazione di AppVerifier

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

Screenshot del menu principale di Verifica applicazione con un'unica app di test selezionata e test elencati sul lato destro.

Che cos'è AppVerifier?

AppVerifier è uno strumento progettato per rilevare e aiutare a eseguire il debug di danneggiamenti della memoria, vulnerabilità di sicurezza critiche e problemi di privilegi dell'account utente limitati. AppVerifier aiuta nella 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, il file system e le API Win32 (inclusi heaps, handle e blocchi). AppVerifier include anche controlli per stimare la modalità di esecuzione dell'applicazione in ambienti non amministratori.

Quando viene usato in tutto il ciclo di vita dello sviluppo software, AppVerifier può portare vantaggi di costo agli sforzi di sviluppo perché facilita l'identificazione dei problemi in anticipo quando sono più facili e più economici da risolvere. Consente inoltre di rilevare gli errori che potrebbero non essere stati rilevati e garantisce che l'applicazione finale possa essere eseguita in ambienti con restrizioni (ad esempio, non amministratori).

Problemi identificati da AppVerifier

AppVerifier consente di determinare:

Quando l'applicazione usa correttamente le API:

  • API TerminateThread unsafe.
  • 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 usando la gestione delle eccezioni strutturate.
  • Indica se l'applicazione sta tentando di usare handle non validi.
  • Se si verificano danneggiamenti di memoria o problemi nell'heap.
  • Se l'applicazione esce dalla memoria in risorse basse.
  • Indica se si sta verificando l'utilizzo corretto delle sezioni critiche.
  • Se un'applicazione in esecuzione in un ambiente amministrativo verrà eseguita correttamente in un ambiente con meno privilegi.
  • Se si verificano potenziali problemi quando l'applicazione è in esecuzione come utente limitato.
  • 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". Possono essere attivate o disattivate per ogni applicazione testata. 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 a livello superiore.

Esistono tredici tipi diversi di test che AppVerifier può eseguire.

Nozioni di base : è necessario eseguire il verifica applicazione almeno con l'impostazione Basics selezionata. Ognuna di queste proverà per un'area che causerà arresti anomali o altri scenari negativi, che hanno un impatto diretto e significativo dell'esperienza del cliente. Per altre informazioni, vedere Verifica applicazioni- Test all'interno del verificatore dell'applicazione

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 altre informazioni, vedere Verifica applicazioni- Test all'interno del verificatore dell'applicazione

Cuzz : il livello di verifica Concurrency Fuzzing (Cuzz) rileva bug di concorrenza e condizioni di gara dei dati. Cuzz regola la pianificazione del thread inserendo ritardi casuali nei punti chiave del codice di un'applicazione. Per altre informazioni, vedere Verifica applicazioni- Test all'interno del verificatore dell'applicazione

Simulazione di risorse bassa: la simulazione di risorse bassa tenta di simulare un ambiente con risorse basse, ad esempio la memoria insufficiente. Questa simulazione identifica i bug che si verificano in condizioni di memoria ridotta. Questa operazione viene anche denominata Fault Injection.Per altri dettagli, vedere Verifica applicazioni- Test all'interno del verificatore dell'applicazione

LuaPriv : i test di stima dei privilegi dell'account utente limitati (LuaPriv) sono sia predittivi che diagnostici per risolvere i problemi relativi all'esecuzione di un'applicazione con privilegi amministrativi e se l'applicazione funzionerebbe anche se viene eseguita con privilegi minori (in genere, come utente normale). Per altre informazioni, vedere Verifica applicazioni- Test all'interno del verificatore dell'applicazione

Varie : vari sono costituiti da test per un assortimento di test, ad esempio per le API pericolose che esesistono in azioni non sicure. Per altre informazioni, vedere Verifica applicazioni- Test all'interno del verificatore dell'applicazione

Rete : i test di rete cercano l'uso non corretto delle API WinSock. Se, ad esempio, un'API di rete chiamata prima che sia stata eseguita una corretta chiamata WSAStartup() o dopo che è stata eseguita una chiamata WSACleanup() con esito positivo. Per altre informazioni, vedere Verifica applicazioni- Test all'interno del verificatore dell'applicazione

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 altre informazioni, vedere Verifica applicazioni- Test all'interno del verificatore dell'applicazione

Stampa : il verificatore di stampa consente di trovare e risolvere i problemi che possono causare quando un'applicazione chiama il sottosistema di stampa. Il verificatore di stampa è destinato ai due livelli del sottosistema di stampa, al livello PrintAPI e al livello PrintDriver. Per altre informazioni, vedere Verifica applicazioni- Test all'interno del verificatore dell'applicazione

Webservices : il livello di verifica WWSAPI (Windows Webservices) funziona per verificare l'uso appropriato di WWSAPI, ad esempio un oggetto WWSAPI chiamato che fa riferimento a un oggetto WWSAPI non valido o WWSAPI chiamato con riferimenti a un singolo oggetto thread già in uso. Per altre informazioni, vedere Verifica applicazioni- Test all'interno del verificatore dell'applicazione

Servizi : i test dei servizi, verificare l'uso appropriato 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 Verifica applicazione - Codici e definizioni di arresto.

Perf : il controllo del test perf per l'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 Verifica applicazione - Codici e definizioni di arresto.

Blocca : 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 Verifica applicazione - Codici e definizioni di arresto.

Come funziona AppVerifier?

AppVerifier funziona modificando le tabelle dei metodi DLL non gestite in modo che i controlli necessari vengano eseguiti prima dell'esecuzione della funzione reale(questo è anche chiamato "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.

Al termine dell'avvio di nuovi processi, l'uso delle tecniche di hook della tabella dei metodi di AppVerifier è controllato dalle voci effettuate in chiavi del Registro di sistema specifiche. Se esiste la voce del Registro di sistema, la DLL appVerifier verrà caricata in un processo appena creato che gestirà le sostituzioni della tabella dei metodi nelle DLL esistenti e successivamente caricate. Poiché questi hook vengono caricati quando la DLL viene caricata, 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 fornire informazioni sui log esistenti. Dopo aver impostato l'applicazione e i test all'interno dell'interfaccia utente e il pulsante "Salva" viene fatto clic sulle 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 fornito viene usato per identificare la natura esatta e il motivo della sua occorrenza.

Uso del verificatore di applicazioni nel ciclo di vita dello sviluppo software

È consigliabile usare Verifica applicazione durante il ciclo di vita dello sviluppo software.

Fase dei requisiti : AppVerifier deve essere pianificata e tempo allocata 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 il verifica delle applicazioni nelle build stabili (da Alfa 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é questa sarà la prima volta che l'applicazione verrà inviata ai limiti e ai dati imprevisti. AppVerifier è anche uno strumento potente per i consulenti di sicurezza che eseguono controlli (casella nera e casella bianca) perché consentirà l'enumerazione rapida di vettori di attacco reale (o potenziale).

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

Fase di supporto e manutenzione : usare il verificatore dell'applicazione per assicurarsi che le modifiche del codice (ad esempio gli aggiornamenti, i Service Pack) non introducono regressioni.

Argomenti della sezione

In questa sezione vengono trattati gli argomenti seguenti.

Verifica applicazioni - Funzionalità

Verifica applicazioni - Test delle applicazioni

Verifica applicazione - Test all'interno del verificatore di applicazioni

Verifica applicazioni - Codici e definizioni di arresto

Verifica applicazione - Arresta il verifica dell'applicazione di debug

Verifica applicazioni - Domande frequenti