Delen via


Application Verifier

Application Verifier (AppVerifier) is een runtimeverificatieprogramma voor niet-beheerde code. Het hulpprogramma is handig voor het vinden van problemen die moeilijk kunnen worden geïdentificeerd met standaardtechnieken voor het testen van toepassingen of stuurprogramma's. AppVerifier kan helpen bij het vinden van subtiele programmeerfouten, beveiligingsproblemen en problemen met beperkte bevoegdheden voor gebruikersaccounts.

Overzicht van AppVerifier

Een van de belangrijkste uitdagingen voor programmeurs, softwarearchitecten, testers en beveiligingsadviseurs is het begrijpen van de variabele uitvoeringspaden van toepassingen wanneer ze in productie worden geïmplementeerd. Zelfs met toegang tot broncode kan het lastig zijn om alles te begrijpen wat er kan gebeuren tijdens de uitvoering. Verschillende afhankelijkheden, zoals meerdere groepen die bijdragen aan code of het uitoefenen van externe onderdelen, kunnen de complexiteit voor probleemoplossing verhogen.

AppVerifier (AppVerif.exe) is a dynamic verification tool for user-mode applications. Het kan fouten detecteren in elke toepassing in de gebruikersmodus die niet is gebaseerd op beheerde code, met inbegrip van stuurprogramma's voor de gebruikersmodus. Het hulpprogramma bewaakt toepassingsacties terwijl de toepassing wordt uitgevoerd. De toepassing wordt onderworpen aan verschillende stress en tests en genereert een rapport over mogelijke fouten bij het uitvoeren of ontwerpen van toepassingen.

Wanneer AppVerifier gedurende de levenscyclus van softwareontwikkeling wordt gebruikt, kunnen kostenvoordelen opleveren voor de ontwikkeling. Het vereenvoudigt het identificeren van problemen vroeg wanneer ze gemakkelijker en goedkoper zijn om op te lossen. Het hulpprogramma helpt ook bij het detecteren van fouten die eerder onopgemerkt waren. Het zorgt ervoor dat de uiteindelijke toepassing kan worden uitgevoerd in beperkte omgevingen (bijvoorbeeld niet-beheerders).

Installatie en vereisten van AppVerifier

AppVerifier is opgenomen in de Windows Software Development Kit (SDK). Als u Application Verifier wilt installeren, schakelt u het selectievakje voor het hulpprogramma in tijdens de installatie van de SDK.

Schermopname van het hoofdmenu van Application Verifier met één test-app geselecteerd en tests die aan de rechterkant worden vermeld.

Als u AppVerifier wilt gebruiken, bekijkt u de volgende voorwaarden en vereisten:

  • U kunt AppVerifier alleen gebruiken of met een foutopsporingsprogramma in de gebruikersmodus.

  • De huidige gebruiker moet lid zijn van de groep Administrators op de computer.

  • AppVerifier biedt geen ondersteuning voor ARM64EC.

Gegevens die u kunt controleren met AppVerifier

AppVerifier is een hulpprogramma dat is ontworpen voor het detecteren en opsporen van fouten in geheugenbeschadigingen, kritieke beveiligingsproblemen en problemen met beperkte bevoegdheden voor gebruikersaccounts. AppVerifier helpt bij het maken van betrouwbare en veilige toepassingen door de interactie van een toepassing met het Microsoft Windows-besturingssysteem te bewaken. Het profileert het gebruik van objecten, het register, het bestandssysteem en Win32-API's van het besturingssysteem (inclusief heaps, ingangen en vergrendelingen). AppVerifier bevat ook controles om te voorspellen hoe goed de toepassing kan presteren in niet-beheerdersomgevingen.

Problemen die u met AppVerifier kunt onderzoeken

AppVerifier helpt te bepalen wanneer een toepassing API's correct gebruikt. Het hulpprogramma kan controleren op de volgende problemen in uw toepassing:

  • Onveilige TerminateThread-API's
  • Onjuist gebruik van TLS-API's (Thread Local Storage)
  • Onjuist gebruik van virtuele ruimtemanipulaties (bijvoorbeeld VirtualAlloc, MapViewOfFile)
  • Toepassing verbergt toegangsschendingen met behulp van gestructureerde uitzonderingsafhandeling
  • Toepassingspogingen om ongeldige ingangen te gebruiken
  • Geheugenbeschadigingen of problemen in de heap
  • De toepassing heeft onvoldoende geheugen onder weinig resources
  • Onjuist gebruik van kritieke secties
  • Toepassing die wordt uitgevoerd in een beheeromgeving kan niet worden uitgevoerd in een omgeving met verminderde bevoegdheden
  • Toepassing die wordt uitgevoerd als een beperkte gebruiker kan potentiële problemen veroorzaken
  • Niet-geïnitialiseerde variabelen in toekomstige functie-aanroepen in de context van een thread

Tests die u kunt uitvoeren met AppVerifier

AppVerifier bestaat uit sets tests met de naam 'verificatielagen'. De lagen kunnen worden ingeschakeld of uitgeschakeld voor elke toepassing die u controleert.

  • Als u de specifieke tests wilt bekijken, vouwt u de verificatielaag in de set uit.

  • Als u een test voor de toepassing wilt inschakelen, schakelt u het selectievakje voor de test in.

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

De volgende tabel bevat de 13 testtypen die AppVerifier kan uitvoeren en bevat koppelingen naar artikelen voor meer informatie.

Test type Description More information
Basics At a minimum, you should run Application Verifier with the Basics setting selected. Elke basistest controleert een gebied dat crashes of andere negatieve scenario's kan veroorzaken die een direct en significant effect hebben op de klantervaring. Toepassingsverificator - Tests binnen Toepassingsverifier (basisprincipes)
Compatibility Compatibiliteitscontrolelaagtests helpen bij het identificeren van een toepassing die mogelijk problemen heeft met het Microsoft Windows-besturingssysteem. Veel van deze controles kunnen ook worden gebruikt om te testen op de logovereisten. Toepassingsverifier - Tests binnen Toepassingsverifier (compatibiliteit)
Cuzz De verificatielaag Gelijktijdigheids fuzzing (Cuzz) detecteert gelijktijdigheidsfouten en gegevensracevoorwaarden. Cuzz past threadplanning aan door willekeurige vertragingen op belangrijke punten in de toepassingscode in te voeren. Toepassingsverifier - Tests binnen Application Verifier (Cuzz)
Lage resourcesimulatie Met een lage resourcesimulatie wordt geprobeerd een omgeving te simuleren onder weinig resources, zoals onvoldoende geheugen. Deze simulatie identificeert fouten die optreden in weinig geheugenomstandigheden. This test is also referred to as Fault Injection. Toepassingsverifier - Tests binnen Application Verifier (lage resourcesimulatie)
LuaPriv Beperkte predictor voor gebruikersaccounts (LuaPriv)-tests zijn zowel voorspellend als diagnostisch en werken om problemen op te lossen met betrekking tot het uitvoeren van een toepassing met beheerdersbevoegdheden. De tests geven ook aan of de toepassing kan werken als u de app uitvoert met beperkte bevoegdheden (over het algemeen als een algemene gebruiker). Toepassingsverifier - Tests binnen Toepassingsverifier (LuaPriv)
Miscellaneous Diverse tests controleren op een reeks voorwaarden, zoals het detecteren van gevaarlijke API's die onveilige acties uitvoeren. Toepassingsverifier - Tests binnen Toepassingsverifier (diversen)
Networking De netwerktests zoeken naar onjuist gebruik van WinSock-API's. Als een Networking-API bijvoorbeeld aanroept vóór een geslaagde aanroep naar de WSAStartup() methode of na een geslaagde aanroep naar de WSACleanup() methode. Toepassingsverifier - Tests binnen Toepassingsverifier (netwerken)
NTLM Controleert het gebruik van de verificatie-API's AcquireCredentialsHandle en InitializeSecurityContext detecteert het gebruik van het NT LAN Manager-protocol (NTLM). De NTLM is een verouderd verificatieprotocol met fouten die mogelijk de beveiliging van toepassingen en het besturingssysteem in gevaar kunnen maken. Toepassingsverifier - Tests binnen Application Verifier (NTLM)
Printing De Afdrukverifier helpt bij het vinden en oplossen van problemen die kunnen optreden wanneer een toepassing het afdruksubsysteem aanroept. Afdrukverificator is gericht op de twee lagen van het afdruksubsysteem, de PrintAPI-laag en de PrintDriver-laag. Toepassingsverifier - Tests binnen Toepassingsverifier (afdrukken)
Webservices De Verificatielaag van de Windows Webservices-API (WWSAPI) controleert op het juiste gebruik van WWSAPI, zoals een WWSAPI-aanroep die verwijst naar een ongeldig intrinsiek WWSAPI-object of een WWSAPI-aanroep met verwijzingen naar een object met één thread dat al in gebruik is. Toepassingsverifier - Tests binnen Application Verifier (WebServices)
Services De services testen controleren op het juiste gebruik van Windows-services. De test controleert bijvoorbeeld of services goed worden gestart en gestopt. Toepassingsverificator - Codes stoppen - Services
Perf De test perf controleert op efficiënt gebruik van API's die van invloed zijn op de systeemprestaties en het energieverbruik, zoals het aanroepen van een Windows-functie die gebruikmaakt van een onjuiste wachttijd. Toepassingsverificator - Codes stoppen - Prestatie
Hangs De Hangs-test controleert op het gebruik van API's waardoor het systeem niet meer reageert. Bijvoorbeeld wanneer de DllMain-thread wacht op een andere thread die is geblokkeerd. Toepassingsverificator - Stopcodes - Vastlopen

Hoe AppVerifier werkt

AppVerifier werkt door de niet-beheerde DLL-methodetabellen te wijzigen, zodat de vereiste controles worden uitgevoerd voordat de echte functie wordt uitgevoerd (deze benadering wordt ook wel 'Functiehook' genoemd). Het adres van de Win32-API-methode CreateFileA wordt bijvoorbeeld vervangen door een interne AppVerifier-methode die een reeks tests activeert die, wanneer positief, wordt geregistreerd.

Wanneer nieuwe processen worden gestart, wordt het beheer van de Methodetabelhooktechnieken van AppVerifier uitgevoerd met vermeldingen in specifieke registersleutels. Als de registervermelding bestaat, wordt het DLL-bestand van AppVerifier geladen in een nieuw gemaakt proces waarmee de vervangingen van de methodetabel worden verwerkt in bestaande DLL's en DLL's die later worden geladen. Omdat de haken worden gemaakt wanneer het DLL-bestand wordt geladen, is het niet mogelijk om AppVerifier te gebruiken voor een momenteel uitgevoerd proces.

De Gebruikersinterface (UI) van AppVerifier wordt gebruikt om de registersleutelinstellingen te beheren en informatie te verstrekken over de bestaande logboeken. After the application and tests are set within the UI and you select Save, the Registry settings are configured. Vervolgens start u de toepassing opnieuw op, waarmee de bewaking wordt gestart. Houd er rekening mee dat de instellingen behouden blijven totdat de toepassing uit AppVerifier wordt verwijderd.

When AppVerifier identifies a problem, a verifier stop occurs. Het hulpprogramma biedt een getal waarmee de exacte aard en reden voor de stopzetting van de uitvoering worden geïdentificeerd.

AppVerifier en de levenscyclus van softwareontwikkeling

Het is een goede gewoonte om Application Verifier te gebruiken gedurende de levenscyclus van uw softwareontwikkeling. Hier zijn een paar suggesties:

  • Requirements Phase: Plan to use AppVerifier to help determine app requirements. Wijs tijd toe voor het uitvoeren van het hulpprogramma en het opvolgen van geïdentificeerde problemen.

  • Design Phase: Plan to use AppVerifier as you design your app. Definieer welke onderdelen (modules, DLL's of EXE's) u wilt testen.

  • Implementation Phase: Run AppVerifier on stable builds (from Alpha to RTM) of the different components under development. Test de onderdelen afzonderlijk en gezamenlijk.

  • Verification Phase: Test engineers should run all tests (both manual and automatic) with AppVerifier for the initial verification. Deze fase in de cyclus is de eerste keer dat de app naar de limieten wordt gepusht. Onverwacht gedrag en gegevens worden vaak gedetecteerd tijdens de eerste verificatie. AppVerifier is ook een krachtig hulpmiddel voor beveiligingsadviseurs die audits uitvoeren (zwarte doos en witte doos). Met het hulpprogramma kunt u snel inventariseren van echte (of potentiële) aanvals-/exploitvectoren.

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

  • Ondersteunings- en onderhoudsfase: Gebruik AppVerifier om ervoor te zorgen dat codewijzigingen, zoals updates en servicepacks, geen regressies introduceren.

Dit gedeelte bevat: