Application Verifier – Übersicht

Zusammenfassung

Application Verifier (AppVerifier) ist ein Laufzeitüberprüfungstool für nicht verwalteten Code, das bei der Suche nach subtilen Programmierfehlern, Sicherheitsproblemen und problemen mit eingeschränkten Benutzerkontenberechtigungen unterstützt, die mit normalen Anwendungstestverfahren schwer zu identifizieren sind.

Überblick

Eine der größten Herausforderungen für Programmierer, Softwarearchitekten, Tester und Sicherheitsberater besteht darin, die variablen Ausführungspfade ihrer Anwendungen zu verstehen, wenn sie in der Produktion bereitgestellt werden. Selbst mit dem Zugriff auf Quellcode ist es schwierig, alles zu erfassen, was während der Ausführung aufgrund einer Vielzahl von Abhängigkeiten auftreten wird (z. B. mehrere Gruppen, die zum Code beitragen oder externe Komponenten nutzen). Der Microsoft AppVerifier kann eine nützliche Rolle bei der Bewältigung dieser Komplexität und der potenziellen Nebenwirkungen von Fehlern spielen. AppVerifier unterstützt Sie bei der Suche nach Programmierfehlern, Sicherheitsproblemen und Problemen mit Benutzerkontenberechtigungen, die während eines typischen Testdurchlaufs nur schwer zu identifizieren sind.

Application Verifier (AppVerif.exe) ist ein dynamisches Überprüfungstool für Anwendungen im Benutzermodus. Dieses Tool überwacht Anwendungsaktionen, während die Anwendung ausgeführt wird, unterwird die Anwendung einer Vielzahl von Belastungen und Tests und generiert einen Bericht über potenzielle Fehler bei der Anwendungsausführung oder beim Entwurf.

Application Verifier kann Fehler in Anwendungen im Benutzermodus erkennen, die nicht auf verwaltetem Code basieren, einschließlich Benutzermodustreibern. Es findet subtile Programmierfehler, die bei Standardanwendungstests oder Treibertests möglicherweise schwer zu erkennen sind.

Sie können die Anwendungsüberprüfung allein oder in Verbindung mit einem Debugger im Benutzermodus verwenden. Der aktuelle Benutzer muss Mitglied der Gruppe Administratoren auf dem Computer sein.

Installieren von AppVerifier

Application Verifier ist im Windows Software Development Kit (SDK) enthalten. Um Application Verifier zu installieren, aktivieren Sie das Kontrollkästchen dafür während der Installation des SDK.

Screenshot: Menü

Was ist AppVerifier?

AppVerifier ist ein Tool, das entwickelt wurde, um Speicherbeschädigungen, kritische Sicherheitsrisiken und Probleme mit eingeschränkten Benutzerkontenberechtigungen zu erkennen und zu debuggen. AppVerifier unterstützt die Erstellung zuverlässiger und sicherer Anwendungen, indem die Interaktion einer Anwendung mit dem Microsoft Windows-Betriebssystem überwacht und die Verwendung von Objekten, der Registrierung, dem Dateisystem und Win32-APIs (einschließlich Heaps, Handles und Sperren) profiliert wird. AppVerifier enthält auch Überprüfungen, um vorherzusagen, wie gut die Anwendung in Nicht-Administratorumgebungen funktioniert.

Wenn appVerifier während des gesamten Softwareentwicklungslebenszyklus verwendet wird, kann es Kostenvorteile für Entwicklungsanstrengungen bringen, da es die frühzeitige Identifizierung von Problemen erleichtert, wenn sie einfacher und kostengünstiger zu beheben sind. Es hilft auch, Fehler zu erkennen, die möglicherweise unbemerkt geblieben sind, und stellt sicher, dass die endgültige Anwendung in eingeschränkten Umgebungen (z. B. Nicht-Administratorumgebungen) ausgeführt werden kann.

Probleme, die AppVerifier identifiziert

AppVerifier hilft bei der Ermittlung von:

Wenn die Anwendung APIs ordnungsgemäß verwendet:

  • Unsichere Terminthread-APIs.
  • Richtige Verwendung von Thread Local Storage (TLS)-APIs.
  • Richtige Verwendung von Manipulationen im virtuellen Raum (z. B. VirtualAlloc, MapViewOfFile).
  • Gibt an, ob die Anwendung Zugriffsverletzungen mithilfe der strukturierten Ausnahmebehandlung ausblendet.
  • Gibt an, ob die Anwendung versucht, ungültige Handles zu verwenden.
  • Gibt an, ob Speicherbeschädigungen oder Probleme im Heap vorliegen.
  • Gibt an, ob der Anwendung unter geringen Ressourcen der Arbeitsspeicher ausgeht.
  • Gibt an, ob die richtige Verwendung kritischer Abschnitte auftritt.
  • Gibt an, ob eine Anwendung, die in einer Administrativen Umgebung ausgeführt wird, in einer Umgebung mit weniger Berechtigungen gut ausgeführt wird.
  • Gibt an, ob potenzielle Probleme auftreten, wenn die Anwendung als eingeschränkter Benutzer ausgeführt wird.
  • Gibt an, ob in zukünftigen Funktionsaufrufen im Kontext eines Threads nicht initialisierte Variablen vorhanden sind.

AppVerifier-Tests

AppVerifier besteht aus Testgruppen, die als "Überprüfungsebenen" bezeichnet werden. Diese können für jede getestete Anwendung aktiviert oder deaktiviert werden. Durch Erweitern der Überprüfungsebene innerhalb des Testbereichs werden die spezifischen Tests angezeigt. Aktivieren Sie das Kontrollkästchen daneben, um einen Test für die Anwendung zu aktivieren. Wenn Sie eine gesamte Überprüfungsebene aktivieren möchten, z. B. Grundlagen, aktivieren Sie das Kontrollkästchen auf der obersten Ebene.

Es gibt dreizehn verschiedene Arten von Tests, die AppVerifier ausführen kann.

Grundlagen : Mindestens sollten Sie die Anwendungsüberprüfung mit ausgewählter Einstellung Grundlagen ausführen. Jede dieser Tests wird auf einen Bereich getestet, der Abstürze oder andere negative Szenarien verursacht, die einen direkten und erheblichen Einfluss auf die Kundenerfahrung haben. Weitere Informationen finden Sie unter Application Verifier– Tests in Application Verifier.

Kompatibilität : Tests der Kompatibilitätsüberprüfungsebene helfen, eine Anwendung zu identifizieren, die möglicherweise Probleme mit dem Microsoft Windows-Betriebssystem hat. Viele dieser Überprüfungen können auch verwendet werden, um die Logoanforderungen zu testen. Weitere Informationen finden Sie unter Application Verifier– Tests in Application Verifier.

Cuzz : Die Cuzz-Überprüfungsebene (Concurrency Fuzzing) erkennt Nebenläufigkeitsfehler und Datenrassenbedingungen. Cuzz passt die Threadplanung an, indem zufällige Verzögerungen an wichtigen Punkten im Code einer Anwendung eingefügt werden. Weitere Informationen finden Sie unter Application Verifier– Tests in Application Verifier.

Simulation mit niedrigen Ressourcen : Die Simulation mit niedrigen Ressourcen versucht, eine Umgebung unter niedrigen Ressourcen zu simulieren, z. B. nicht genügend Arbeitsspeicher. Mit dieser Simulation werden Fehler identifiziert, die bei niedrigen Speicherbedingungen auftreten. Dies wird auch als Fehlereinschleusung bezeichnet.Weitere Informationen finden Sie unter Application Verifier– Tests in Application Verifier.

LuaPriv – Limited User Account Privilege Predictor (LuaPriv)-Tests sind sowohl Predictive als auch Diagnose von Problemen im Zusammenhang mit der Ausführung einer Anwendung mit Administratorrechten und ob diese Anwendung auch funktionieren würde, wenn sie mit weniger Berechtigungen (im Allgemeinen als normaler Benutzer) ausgeführt wird. Weitere Informationen finden Sie unter Application Verifier– Tests in Application Verifier.

Sonstiges : Verschiedenes besteht aus Tests für eine Reihe von Tests, z. B. für gefährliche APIs, die unsichere Aktionen ausführen. Weitere Informationen finden Sie unter Application Verifier– Tests in Application Verifier.

Netzwerk : Die Netzwerktests suchen nach einer unsachgemäßen Verwendung von WinSock-APIs. Beispiel: Eine Netzwerk-API, die vor einem erfolgreichen WSAStartup() oder nach einem erfolgreichen WSACleanup()-Aufruf aufgerufen wurde. Weitere Informationen finden Sie unter Application Verifier– Tests in Application Verifier.

NTLM : Überwacht die Verwendung der Authentifizierungs-APIs AcquireCredentialsHandle und InitializeSecurityContext, um die Verwendung des NTLM-Protokolls zu erkennen. Das NTLM ist ein veraltetes Authentifizierungsprotokoll mit Fehlern, die die Sicherheit von Anwendungen und betriebssystemen gefährden können. Weitere Informationen finden Sie unter Application Verifier– Tests in Application Verifier.

Drucken : Die Drucküberprüfung hilft beim Suchen und Beheben von Problemen, die auftreten können, wenn eine Anwendung das Drucksubsystem aufruft. Print Verifier zielt auf die beiden Ebenen des Drucksubsystems ab, die PrintAPI-Ebene und die PrintDriver-Ebene. Weitere Informationen finden Sie unter Application Verifier– Tests in Application Verifier.

Webdienste : Die Überprüfungsebene der Windows-Webdienst-API (WWSAPI) überprüft die ordnungsgemäße Verwendung von WWSAPI, z. B. eine WWSAPI, die auf ein ungültiges intrinsisches WWSAPI-Objekt verweist, oder WWSAPI, das mit Verweisen auf ein einzelnes bereits verwendetes Threadobjekt aufgerufen wird. Weitere Informationen finden Sie unter Application Verifier– Tests in Application Verifier.

Dienste : Bei den Dienstentests wird die ordnungsgemäße Verwendung von Windows-Diensten überprüft. Beispielsweise, dass Dienste ordnungsgemäß gestartet und beendet werden. Informationen zu den von diesen Tests generierten Stoppcodeausnahmen finden Sie unter Application Verifier – Stop Codes and Definitions.

Perf : Die Perf-Testprüfung für die effiziente Verwendung von APIs, die sich auf die Systemleistung und den Energieverbrauch auswirken, z. B. das Aufrufen einer Windows-Funktion, die eine falsche Wartezeit verwendet. Informationen zu den von diesen Tests generierten Stoppcodeausnahmen finden Sie unter Application Verifier – Stop Codes and Definitions.

Hängts : Die Hangs-Tests für die Verwendung von APIs, die dazu führen, dass das System nicht mehr reagiert, z. B. wenn der DllMain-Thread auf einen anderen thread wartet, der blockiert wurde. Informationen zu den von diesen Tests generierten Stoppcodeausnahmen finden Sie unter Application Verifier – Stop Codes and Definitions.

Wie funktioniert AppVerifier?

AppVerifier funktioniert, indem die nicht verwalteten DLLs-Methodentabellen so geändert werden, dass die erforderlichen Überprüfungen ausgeführt werden, bevor die tatsächliche Funktion ausgeführt wird (dies wird auch als "Function Hooking" bezeichnet). Beispielsweise wird die Adresse der CreateFileA-Methode der Win32-API durch eine interne AppVerifier-Methode ersetzt, die eine Reihe von Tests auslöst, die bei Positivem protokolliert werden.

Wenn neue Prozesse gestartet werden, wird die Verwendung der Methoden des Tabellenhakens von AppVerifier durch Einträge in bestimmten Registrierungsschlüsseln gesteuert. Wenn der Registrierungseintrag vorhanden ist, wird die AppVerifier-DLL in einem neu erstellten Prozess geladen, der die Methodentabellenersetzungen in den vorhandenen und anschließend geladenen DLLs verarbeitet. Da diese Hooks beim Laden der DLL erstellt werden, ist es nicht möglich, AppVerifier für einen Prozess zu verwenden, der bereits ausgeführt wird.

Die AppVerifier-Benutzeroberfläche wird verwendet, um die Registrierungsschlüsseleinstellungen zu steuern und Informationen zu den vorhandenen Protokollen bereitzustellen. Nachdem die Anwendung und die Tests auf der Benutzeroberfläche festgelegt und auf die Schaltfläche "Speichern" geklickt wurde, werden die Registrierungseinstellungen vorgenommen. Die Anwendung muss dann neu gestartet werden, wodurch die Überwachung gestartet wird. Es ist wichtig zu beachten, dass die Einstellungen beibehalten werden, bis die Anwendung aus AppVerifier entfernt wird.

Wenn ein Problem erkannt wird, tritt ein Prüferstopp auf. Die angegebene Nummer wird verwendet, um die genaue Art und den Grund für ihr Vorkommen zu identifizieren.

Verwendung von Application Verifier im Softwareentwicklungslebenszyklus

Sie sollten Application Verifier während ihres gesamten Softwareentwicklungslebenszyklus verwenden.

Anforderungsphase : AppVerifier sollte geplant werden und Zeit für die Ausführung und Nachverfolgung zugewiesen werden.

Entwurfsphase : Planen Sie die Verwendung von Application Verifier und definieren Sie, welche Komponenten (Module, DLLs oder EXEs) getestet werden.

Implementierungsphase : Führen Sie Application Verifier für stabile Builds (von Alpha bis RTM) der verschiedenen Komponenten aus, die sich in der Entwicklung befinden (es ist wichtig, die Komponenten einzeln und gemeinsam zu testen).

Überprüfungsphase : Tester sollten alle ihre Tests (sowohl manuell als auch automatisch) mit Application Verifier ausführen, da dies das erste Mal ist, dass die Anwendung an die Grenzwerte gepusht wird und unerwartetes Verhalten und Daten übermittelt werden. AppVerifier ist auch ein leistungsfähiges Tool für Sicherheitsberater, die Audits (BlackBox und White Box) durchführen, da es die schnelle Aufzählung realer (oder potenzieller) Angriffs-/Exploit-Vektoren ermöglicht.

Releasephase : Clients und Sicherheitsberater können AppVerifier für die freigegebenen Binärdateien verwenden, um potenzielle Sicherheitsrisiken zu identifizieren.

Support- und Wartungsphase : Verwenden Sie application verifier, um sicherzustellen, dass Codeänderungen (z. B. Updates, Service Packs) keine Regressionen bewirken.

Abschnittsthemen

In diesem Abschnitt werden die folgenden Themen behandelt:

Application Verifier – Features

Application Verifier – Testen von Anwendungen

Application Verifier– Tests in Application Verifier

Anwendungsüberprüfung – Beenden von Codes und Definitionen

Application Verifier: Debuggen der Anwendungsüberprüfung wird beendet

Application Verifier – Häufig gestellte Fragen