Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Application Verifier (AppVerifier) è uno strumento di verifica di runtime per il codice non gestito. Lo strumento è utile per trovare problemi che possono essere difficili da identificare con le tecniche standard di test delle applicazioni o di test dei driver. AppVerifier può essere utile per individuare errori di programmazione sottili, problemi di sicurezza e problemi limitati relativi ai privilegi degli account utente.
Panoramica di AppVerifier
Una delle sfide più significative per i programmatori, gli architetti software, i tester e i consulenti per la sicurezza è comprendere i percorsi di esecuzione variabili delle applicazioni quando vengono distribuiti nell'ambiente di produzione. Anche con l'accesso al codice sorgente, può essere difficile comprendere tutto ciò che può verificarsi durante l'esecuzione. Diverse dipendenze, ad esempio più gruppi che contribuiscono al codice o all'esercizio di componenti esterni, possono aumentare la complessità per la risoluzione dei problemi.
AppVerifier (AppVerif.exe) is a dynamic verification tool for user-mode applications. Può rilevare errori in qualsiasi applicazione in modalità utente non basata su codice gestito, inclusi i driver in modalità utente. Lo strumento monitora le azioni dell'applicazione durante l'esecuzione dell'applicazione. L'applicazione viene sottoposto a vari stress e test e genera un report sugli errori potenziali nell'esecuzione o nella progettazione dell'applicazione.
Se usato per tutto il ciclo di vita dello sviluppo software, AppVerifier può offrire vantaggi a livello di costo per le attività di sviluppo. Facilita l'identificazione dei problemi in anticipo quando sono più facili e più economici da risolvere. Lo strumento consente anche di rilevare gli errori non rilevati in precedenza. Garantisce che l'applicazione finale possa essere eseguita in ambienti con restrizioni (ad esempio, non amministratori).
Requisiti e installazione di AppVerifier
AppVerifier è incluso in Windows Software Development Kit (SDK). Per installare Application Verifier, selezionare la casella di controllo per lo strumento durante l'installazione dell'SDK.
Per usare AppVerifier, esaminare le condizioni e i requisiti seguenti:
È possibile usare Solo AppVerifier o con un debugger in modalità utente.
L'utente corrente deve essere membro del gruppo Administrators nel computer.
AppVerifier non supporta ARM64EC.
Dati che è possibile controllare con 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. Esegue la profilatura dell'uso degli oggetti del sistema operativo, del Registro di sistema, del file system e delle API Win32 (inclusi heap, handle e blocchi). AppVerifier include anche controlli per stimare il livello di prestazioni dell'applicazione in ambienti non amministrativi.
Problemi che è possibile analizzare con AppVerifier
AppVerifier consente di determinare quando un'applicazione usa correttamente le API. Lo strumento può verificare la presenza dei problemi seguenti nell'applicazione:
- API TerminateThread unsafe
- Uso non corretto delle API di archiviazione locale del thread (TLS)
- Uso non corretto delle manipolazioni dello spazio virtuale (ad esempio, VirtualAlloc, MapViewOfFile)
- L'applicazione nasconde le violazioni di accesso usando la gestione delle eccezioni strutturata
- Tentativi di utilizzo di handle non validi da parte dell'applicazione
- Danneggiamenti o problemi di memoria nell'heap
- L'applicazione esaurisce la memoria in risorse scarse
- Uso non corretto delle sezioni critiche
- L'applicazione in esecuzione in un ambiente amministrativo non può essere eseguita in un ambiente con privilegi ridotti
- L'applicazione in esecuzione come utente limitato potrebbe causare potenziali problemi
- Variabili non inizializzate nelle chiamate di funzione future nel contesto di un thread
Test che è possibile eseguire con AppVerifier
AppVerifier è costituito da set di test denominati "livelli di verifica". I livelli possono essere attivati o disattivati per ogni applicazione controllata.
Per visualizzare i test specifici, espandere il livello di verifica all'interno del set.
Per attivare un test per l'applicazione, selezionare la casella di controllo per il test.
To turn on all the tests in a verification layer, such as Basics, select the checkbox at the top level.
La tabella seguente elenca i 13 tipi di test che AppVerifier può eseguire e fornisce collegamenti ad articoli per altre informazioni.
| Test type | Description | More information |
|---|---|---|
| Basics | At a minimum, you should run Application Verifier with the Basics setting selected. Ogni test di base controlla un'area che può causare arresti anomali o altri scenari negativi che hanno un effetto diretto e significativo sull'esperienza del cliente. | Verifica applicazione - Test all'interno di Application Verifier (Nozioni di base) |
| Compatibility | 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. | Verifica applicazione - Test all'interno di Application Verifier (compatibilità) |
| Cuzz | Il livello di verifica Concurrency Fuzzing (Cuzz) rileva bug di concorrenza e race condition dei dati. Cuzz regola la pianificazione dei thread inserendo ritardi casuali nei punti chiave nel codice dell'applicazione. | Application Verifier - Test in Application Verifier (Cuzz) |
| Simulazione di risorse basse | La simulazione di risorse insufficiente tenta di simulare un ambiente con risorse basse, ad esempio memoria insufficiente. Questa simulazione identifica i bug che si verificano in condizioni di memoria insufficiente. This test is also referred to as Fault Injection. | Verifica applicazione - Test all'interno di Application Verifier (Simulazione risorse basse) |
| LuaPriv | I test luaPriv (Limited User Account Privilege Predictor) sono sia predittivi che diagnostici e consentono di risolvere i problemi relativi all'esecuzione di un'applicazione con privilegi amministrativi. I test rivelano anche se l'applicazione può funzionare se si esegue l'app con privilegi ridotti (in genere, come utente generale). | Verifica applicazione - Test all'interno di Application Verifier (LuaPriv) |
| Miscellaneous | Vari test controllano la presenza di un assortimento di condizioni, ad esempio il rilevamento di API pericolose che eseguono azioni non sicure. | Verifica applicazione - Test all'interno di Application Verifier (varie) |
| Networking | I test di rete cercano un uso improprio delle API WinSock. Ad esempio, se un'API di rete chiama prima di una chiamata corretta al WSAStartup() metodo o dopo una chiamata riuscita al bilanciamento del WSACleanup() metodo. |
Verifica applicazione - Test all'interno di Application Verifier (rete) |
| NTLM | Monitora l'uso delle API AcquireCredentialsHandle di autenticazione e InitializeSecurityContext per rilevare gli usi del protocollo NT LAN Manager (NTLM). NTLM è un protocollo di autenticazione obsoleto con difetti che potrebbero compromettere la sicurezza delle applicazioni e del sistema operativo. |
Application Verifier - Test in Application Verifier (NTLM) |
| Printing | 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. | Verifica applicazione - Test all'interno di Application Verifier (stampa) |
| Webservices | Il livello di verifica WWSAPI (Webservices API) di Windows verifica l'uso corretto di WWSAPI, ad esempio una chiamata WWSAPI che fa riferimento a un oggetto WWSAPI intrinseco non valido o una chiamata WWSAPI con riferimenti a un oggetto a thread singolo già in uso. | Verifica applicazione - Test all'interno di Application Verifier (WebServices) |
| Services | I test dei servizi controllano l'uso corretto dei servizi Windows. Ad esempio, il test verifica se i servizi vengono avviati e interrotti correttamente. | Application Verifier - Stop Codes - Services |
| Perf | Il test Perf verifica l'uso efficiente delle API che influiscono sulle prestazioni del sistema e sul consumo energetico, ad esempio la chiamata a una funzione di Windows che usa un periodo di attesa non corretto. | Application Verifier - Stop Codes - Perf |
| Hangs | Il test Hangs verifica l'uso delle API che causano la mancata risposta del sistema. Ad esempio, quando il thread DllMain è in attesa di un altro thread bloccato. | Verifica dell'applicazione - Codici di arresto - Blocchi |
Funzionamento di 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 (questo approccio viene chiamato anche "Hook delle funzioni"). Ad esempio, l'indirizzo del metodo API CreateFileA Win32 viene sostituito con un metodo AppVerifier interno che attiva una serie di test che, quando positivi, vengono registrati.
All'avvio dei nuovi processi, il controllo delle tecniche di hook delle tabelle del metodo AppVerifier viene eseguito con voci in chiavi specifiche del Registro di sistema. Se la voce del Registro di sistema esiste, la DLL AppVerifier viene caricata in un processo appena creato che gestisce le sostituzioni della tabella dei metodi in DLL e DLL esistenti caricate in un secondo momento. Poiché gli hook vengono eseguiti quando viene caricata la DLL, non è possibile usare AppVerifier in un processo attualmente 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. After the application and tests are set within the UI and you select Save, the Registry settings are configured. Si riavvia quindi l'applicazione, che avvia il monitoraggio. Tenere presente che le impostazioni vengono mantenute fino a quando l'applicazione non viene rimossa da AppVerifier.
When AppVerifier identifies a problem, a verifier stop occurs. Lo strumento fornisce un numero che identifica la natura esatta e il motivo dell'interruzione dell'esecuzione.
AppVerifier e ciclo di vita dello sviluppo software
È consigliabile usare Application Verifier durante il ciclo di vita dello sviluppo software. Ecco alcuni suggerimenti per iniziare:
Requirements Phase: Plan to use AppVerifier to help determine app requirements. Allocare tempo per l'esecuzione dello strumento e seguire i problemi identificati.
Design Phase: Plan to use AppVerifier as you design your app. Definire i componenti (moduli, DLL o EXEs) da testare.
Implementation Phase: Run AppVerifier on stable builds (from Alpha to RTM) of the different components under development. Testare i componenti singolarmente e collettivamente.
Verification Phase: Test engineers should run all tests (both manual and automatic) with AppVerifier for the initial verification. Questa fase del ciclo è la prima volta che l'app viene spostata ai limiti. Il comportamento imprevisto e i dati vengono comunemente individuati durante la verifica iniziale. AppVerifier è anche uno strumento potente per i consulenti di sicurezza che eseguono controlli (casella nera e casella bianca). Lo strumento consente l'enumerazione rapida di vettori di attacco/exploit reali (o potenziali).
Release Phase: Clients and security consultants can use AppVerifier on the released binaries to identify potential security vulnerabilities.
Fase di supporto e manutenzione: usare AppVerifier per assicurarsi che le modifiche al codice come gli aggiornamenti e i Service Pack non introducono regressioni.
Articoli correlati su AppVerifier
La sezione include: