Freigeben über


Application Verifier

Application Verifier (AppVerifier) ist ein Laufzeitüberprüfungstool für nicht verwalteten Code. Das Tool ist hilfreich, um Probleme zu finden, die mit standardanwendungstests oder Treibertests schwer zu identifizieren sind. AppVerifier kann bei der Suche nach subtilen Programmierfehlern, Sicherheitsproblemen und eingeschränkten Problemen mit Benutzerkontenberechtigungen helfen.

Übersicht über AppVerifier

Eine der wichtigsten Herausforderungen für Programmierer, Softwarearchitekten, Tester und Sicherheitsberater ist das Verständnis der variablen Ausführungspfade von Anwendungen, wenn sie in der Produktion bereitgestellt werden. Auch bei Zugriff auf Quellcode kann es schwierig sein, alles zu erfassen, was während der Ausführung auftreten kann. Verschiedene Abhängigkeiten wie mehrere Gruppen, die zu Code beitragen oder externe Komponenten ausüben, können die Komplexität für die Problembehandlung erhöhen.

AppVerifier (AppVerif.exe) is a dynamic verification tool for user-mode applications. Es kann Fehler in jeder Anwendung im Benutzermodus erkennen, die nicht auf verwaltetem Code basiert, einschließlich Benutzermodustreibern. Das Tool überwacht Anwendungsaktionen, während die Anwendung ausgeführt wird. Die Anwendung wird verschiedenen Belastungen und Tests unterzogen und generiert einen Bericht über mögliche Fehler bei der Anwendungsausführung oder -entwicklung.

Wenn AppVerifier während des gesamten Lebenszyklus der Softwareentwicklung verwendet wird, kann AppVerifier Kostenvorteile für entwicklungsbezogene Anstrengungen bringen. Es erleichtert das Erkennen von Problemen frühzeitig, wenn sie einfacher und billiger zu beheben sind. Das Tool hilft auch, Fehler zu erkennen, die zuvor unbemerkt waren. Dadurch wird sichergestellt, dass die endgültige Anwendung in eingeschränkten Umgebungen (z. B. nichtadmin) ausgeführt werden kann.

AppVerifier-Installation und -Anforderungen

AppVerifier ist im Windows Software Development Kit (SDK) enthalten. Zum Installieren von Application Verifier aktivieren Sie das Kontrollkästchen für das Tool während der Installation des SDK.

Screenshot des Hauptmenüs

Um AppVerifier zu verwenden, überprüfen Sie die folgenden Bedingungen und Anforderungen:

  • Sie können AppVerifier allein oder mit einem Benutzermodusdebugger verwenden.

  • Der aktuelle Benutzer muss Mitglied der Gruppe "Administratoren" auf dem Computer sein.

  • AppVerifier unterstützt ARM64EC nicht.

Daten, die Sie mit AppVerifier überprüfen können

AppVerifier ist ein Tool zur Erkennung und Beseitigung von Speicherfehlern, kritischen Sicherheitslücken und Problemen mit eingeschränkten Benutzerrechten. AppVerifier unterstützt die Erstellung zuverlässiger und sicherer Anwendungen, indem die Interaktion einer Anwendung mit dem Microsoft Windows-Betriebssystem überwacht wird. Sie stellt die Verwendung von Objekten, der Registrierung, dem Dateisystem und win32-APIs (einschließlich Heaps, Handles und Sperren) des Betriebssystems dar. AppVerifier enthält auch Überprüfungen, um vorherzusagen, wie gut die Anwendung in nichtadmin-Umgebungen ausgeführt werden kann.

Probleme, die Sie mit AppVerifier untersuchen können

AppVerifier hilft zu bestimmen, wann eine Anwendung APIs richtig verwendet. Das Tool kann auf die folgenden Probleme in Ihrer Anwendung überprüfen:

  • Unsichere TerminateThread-APIs
  • Falsche Verwendung von TLS-APIs (Thread Local Storage)
  • Falsche Verwendung virtueller Raummanipulationen (z. B. VirtualAlloc, MapViewOfFile)
  • Die Anwendung blendet Zugriffsverletzungen mithilfe der strukturierten Ausnahmebehandlung aus.
  • Anwendung versucht, ungültige Handles zu verwenden
  • Speicherbeschädigungen oder Probleme im Heap
  • Die Anwendung hat unter geringen Ressourcen nicht genügend Arbeitsspeicher.
  • Falsche Verwendung kritischer Abschnitte
  • Anwendung, die in einer Administrativen Umgebung ausgeführt wird, kann nicht in einer Umgebung mit eingeschränkten Berechtigungen ausgeführt werden.
  • Die Anwendung, die als eingeschränkter Benutzer ausgeführt wird, kann potenzielle Probleme verursachen.
  • Nicht initialisierte Variablen in zukünftigen Funktionsaufrufen im Kontext eines Threads

Tests, die Mit AppVerifier ausgeführt werden können

AppVerifier besteht aus Gruppen von Tests, die als "Überprüfungsebenen" bezeichnet werden. Die Ebenen können für jede anwendung, die Sie überprüfen, aktiviert oder deaktiviert werden.

  • Um die spezifischen Tests anzuzeigen, erweitern Sie die Überprüfungsebene innerhalb der Gruppe.

  • Um einen Test für die Anwendung zu aktivieren, aktivieren Sie das Kontrollkästchen für den Test.

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

In der folgenden Tabelle sind die 13 Testtypen aufgeführt, die AppVerifier ausführen kann und Links zu Artikeln enthält, um weitere Informationen zu erhalten.

Test type Description More information
Basics At a minimum, you should run Application Verifier with the Basics setting selected. Jeder grundlegende Test überprüft einen Bereich, der Abstürze oder andere negative Szenarien verursachen kann, die einen direkten und erheblichen Einfluss auf die Kundenerfahrung haben. Application Verifier – Tests in Application Verifier (Grundlagen)
Compatibility Kompatibilitätsüberprüfungsschichttests helfen bei der Identifizierung einer Anwendung, die möglicherweise Probleme mit dem Microsoft Windows-Betriebssystem hat. Viele dieser Prüfungen können auch für die Prüfung der Logoanforderungen verwendet werden. Application Verifier – Tests in Application Verifier (Kompatibilität)
Cuzz Die Überprüfungsebene für Parallelitäts-Fuzzen (Cuzz) erkennt Parallelitätsfehler und Datenrennensbedingungen. Cuzz passt die Threadplanung an, indem zufällige Verzögerungen an wichtigen Punkten im Anwendungscode eingefügt werden. Application Verifier - Tests in Application Verifier (Cuzz)
Simulation geringer Ressourcen Die Simulation geringer Ressourcen versucht, eine Umgebung unter niedrigen Ressourcen zu simulieren, z. B. nicht genügend Arbeitsspeicher. Diese Simulation identifiziert Fehler, die in geringen Arbeitsspeicherbedingungen auftreten. This test is also referred to as Fault Injection. Application Verifier - Tests in Application Verifier (Low Resource Simulation)
LuaPriv Limited User Account Privilege Predictor (LuaPriv)-Tests sind sowohl Vorhersage- als auch Diagnosetests und arbeiten an der Oberfläche von Problemen im Zusammenhang mit der Ausführung einer Anwendung mit Administratorrechten. Die Tests zeigen auch, ob die Anwendung funktionieren kann, wenn Sie die App mit eingeschränkten Berechtigungen (im Allgemeinen als allgemeiner Benutzer) ausführen. Application Verifier - Tests in Application Verifier (LuaPriv)
Miscellaneous Verschiedene Tests überprüfen auf eine Reihe von Bedingungen, z. B. das Erkennen gefährlicher APIs, die unsichere Aktionen ausführen. Application Verifier - Tests in Application Verifier (Miscellaneous)
Networking Die Netzwerktests suchen nach nicht ordnungsgemäßer Verwendung von WinSock-APIs. Wenn beispielsweise eine Netzwerk-API vor einem erfolgreichen Aufruf der WSAStartup() Methode oder nach einem erfolgreichen Ausgleichsaufruf der WSACleanup() Methode aufruft. Application Verifier – Tests in Application Verifier (Networking)
NTLM Überwacht die Verwendung der Authentifizierungs-APIs AcquireCredentialsHandle und InitializeSecurityContext die Erkennung der Verwendung des NT LAN Manager (NTLM)-Protokolls. NTLM ist ein veraltetes Authentifizierungsprotokoll mit Schwachstellen, die die Sicherheit von Anwendungen und des Betriebssystems gefährden können. Application Verifier - Tests in Application Verifier (NTLM)
Printing Die Drucküberprüfung hilft beim Auffinden und Beheben von Problemen, die beim Aufrufen des Drucksubsystems durch eine Anwendung auftreten können. Print Verifier zielt auf die beiden Schichten des Druck-Subsystems, die PrintAPI-Schicht und die PrintDriver-Schicht. Application Verifier - Tests in Application Verifier (Drucken)
Webservices Die Überprüfungsebene der Windows Webservices-API (WWSAPI) sucht nach der ordnungsgemäßen Verwendung von WWSAPI, z. B. einem WWSAPI-Aufruf, der auf ein ungültiges systeminternes WWSAPI-Objekt verweist, oder einen WWSAPI-Aufruf mit Verweisen auf ein bereits verwendetes Singlethread-Objekt. Application Verifier – Tests in Application Verifier (WebServices)
Services Die Dienste testen die ordnungsgemäße Verwendung von Windows-Diensten. Beispielsweise überprüft der Test, ob Dienste ordnungsgemäß gestartet und beendet werden. Application Verifier - Stop Codes - Services
Perf Der Perf-Test überprüft die effiziente Verwendung von APIs, die sich auf die Systemleistung und den Energieverbrauch auswirken, z. B. das Aufrufen einer Windows-Funktion, die einen falschen Wartezeitszeitraum verwendet. Application Verifier - Stop Codes - Perf
Hangs Der Hangs-Test überprüft die Verwendung von APIs, die dazu führen, dass das System nicht mehr reagiert. Beispiel: Wenn der DllMain-Thread auf einen anderen blockierten Thread wartet. Application Verifier - Stoppcodes - Hängt

Funktionsweise von AppVerifier

AppVerifier funktioniert durch Ändern der nicht verwalteten DLLs-Methodentabellen, sodass die erforderlichen Prüfungen ausgeführt werden, bevor die eigentliche Funktion ausgeführt wird (dieser Ansatz wird auch als "Funktions-Hooking" bezeichnet). Beispielsweise wird die Adresse der Win32-API-Methode durch eine interne AppVerifier-Methode CreateFileA ersetzt, die eine Reihe von Tests auslöst, die protokolliert werden, wenn positiv.

Wenn neue Prozesse beginnen, erfolgt die Steuerung der AppVerifier Method Hooking-Techniken mit Einträgen in bestimmten Registrierungsschlüsseln. Wenn der Registrierungseintrag vorhanden ist, wird die AppVerifier-DLL in einen neu erstellten Prozess geladen, der die Methodentabellenersetzungen in vorhandenen DLLs und DLLs verarbeitet, die später geladen wurden. Da die Hooks beim Laden der DLL vorgenommen werden, ist es nicht möglich, AppVerifier für einen derzeit ausgeführten Prozess zu verwenden.

Die Benutzeroberfläche (AppVerifier) wird verwendet, um die Registrierungsschlüsseleinstellungen zu steuern und Informationen zu den vorhandenen Protokollen bereitzustellen. After the application and tests are set within the UI and you select Save, the Registry settings are configured. Anschließend starten Sie die Anwendung neu, wodurch die Überwachung initiiert wird. Beachten Sie, dass die Einstellungen beibehalten werden, bis die Anwendung aus AppVerifier entfernt wird.

When AppVerifier identifies a problem, a verifier stop occurs. Das Tool stellt eine Zahl bereit, die die genaue Art und den Grund für das Anhalten der Ausführung identifiziert.

AppVerifier und der Softwareentwicklungslebenszyklus

Es empfiehlt sich, application Verifier während des gesamten Softwareentwicklungslebenszyklus zu verwenden. Hier sehen Sie einige Vorschläge:

  • Requirements Phase: Plan to use AppVerifier to help determine app requirements. Weisen Sie Zeit für die Ausführung des Tools zu und folgen Sie auf identifizierte Probleme.

  • Design Phase: Plan to use AppVerifier as you design your app. Definieren Sie, welche Komponenten (Module, DLLs oder EXEs) getestet werden sollen.

  • Implementation Phase: Run AppVerifier on stable builds (from Alpha to RTM) of the different components under development. Testen Sie die Komponenten einzeln und gemeinsam.

  • Verification Phase: Test engineers should run all tests (both manual and automatic) with AppVerifier for the initial verification. Diese Phase im Zyklus ist das erste Mal, wenn die App an die Grenzen verschoben wird. Unerwartetes Verhalten und Daten werden bei der anfänglichen Überprüfung häufig ermittelt. AppVerifier ist auch ein leistungsstarkes Tool für Sicherheitsberater, die Audits ausführen (Black Box und White Box). Das Tool ermöglicht die schnelle Aufzählung realer (oder potenzieller) Angriffs-/Exploit-Vektoren.

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

  • Support- und Wartungsphase: Verwenden Sie AppVerifier, um sicherzustellen, dass Codeänderungen wie Updates und Service Packs keine Regressionen einführen.

Dieser Abschnitt umfasst: