Penetrationstests (Gerätegrundlagen)
Die Gerätegrundlagen-Penetrationstests führen verschiedene Arten von Eingabeangriffen durch, die eine wichtige Komponente von Sicherheitstests sind. Angriffs- und Penetrationstests können helfen, Sicherheitsrisiken in Softwareschnittstellen zu identifizieren.
Eindringen
Die Penetrationstests umfassen zwei Kategorien von Tests: Fuzz-Tests und E/A-Spion - und E/A-Angriffstests . Die Fuzz-Tests waren auch ein Feature des Testtools Device Path Exceriser .
Testen | Beschreibung |
---|---|
Deaktivieren von E/A-Spion |
Deaktivieren Sie E/A-Spion auf mindestens 1 Geräten. Binärdatei testen: Devfund_IOSpy_DisableSupport.wsc Testmethode: DisableIoSpy Parameter: Siehe Testparameter für Gerätegrundlagen DQ |
E/A Spy-fähiges Gerät anzeigen |
Anzeigen von Geräten, auf denen E/A-Spion aktiviert ist. Binärdatei testen: Devfund_IOSpy_DisplayEnabledDevices.wsc Testmethode: DisplayIoSpyGeräte |
Aktivieren von E/A-Spion |
Aktivieren Sie E/A Spy auf einem oder mehreren Geräten. Binärdatei testen: Devfund_IOSpy_EnableSupport.wsc Testmethode: EnableIoSpy Parameter: Siehe Testparameter für Gerätegrundlagen DQ DFD : Gibt den Pfad zur IoSpy-Datendatei an. Der Standardspeicherort ist %SystemDrive%\DriverTest\IoSpy. |
Fuzz Misc API-Test |
Die Fuzz Misc API-Tests sind Tests, die bestimmen, ob der Treiber eine Vielzahl gängiger Aufrufe von Kernelmodustreibern verarbeiten kann. Die Tests umfassen die folgenden Tests:
Binärdatei testen: Devfund_DevicePathExerciser.dll Testmethode: DoMiscAPITest Parameter: Siehe Testparameter für Gerätegrundlagen DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Fuzz Misc-API mit Abfragetest ohne Länge |
Dieser Test führt dieselben Tests wie der Fuzz Misc-API-Test durch und übergibt dieses Mal eine leere Abfrage (Nulllänge) und eine ungültige Pufferadresse an den Treiber, während versucht wird, die erweiterten Attribute einer Datei abzurufen. Binärdatei testen: Devfund_DevicePathExerciser.dll Testmethode: DoMiscAPIWithZeroLengthTest Parameter: Siehe Testparameter für Gerätegrundlagen DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Fuzz-Test zum Öffnen und Schließen |
Dieser Test führt Tausende von Create-Open-Close-Sequenzen durch. Ausführliche Informationen zu diesem Test finden Sie unter Informationen zum offenen und schließen von Fuzz. Binärdatei testen: Devfund_DevicePathExerciser.dll Testmethode: DoOpenCloseTest Parameter: Siehe Testparameter für Gerätegrundlagen DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Fuzz-Abfrage und Dateiinformationstest festlegen |
Dieser Test gibt Aufrufe aus, um die Objekt-, Datei- und Volumeinformationen von Geräten abzurufen und zu ändern. Während des Tests zum Abfragen und Festlegen von Dateiinformationen führt der Fuzz-Test Aufrufe durch, um das Objekt, die Datei und die Volumeninformationen von Geräten abzurufen und zu ändern, die von den grundlegenden geöffneten Vorgängen und anderen geöffneten Vorgängen geöffnet werden, einschließlich der Vorgänge, die vom Fuzz-Test zum Öffnen von Sub ausgeführt werden. Der Fuzz-Test führt jede Abfrage oder Set-Aufruf mindestens 1024 Mal mit einem gültigen Puffer und einer Vielzahl von Pufferlängen und Dateiinformationsklassen durch. Eine Anforderung jedes Typs wird auch mit einem ungültigen Pufferzeiger und einer Pufferlänge von Null gesendet. Wenn Sie den Parameter ChangeBufferProtectionFlags verwenden, der die Schutzoption festlegt, variiert der Fuzz-Test die Sicherheitseinstellung für den Puffer in jeder Abfrage und jedem Set-Aufruf. Dieser Test führt auch den Fuzz-Test zum Öffnen von Sub aus. Dieser Test verwendet die Funktionen ZwQueryInformationFile, ZwSetInformationFile, ZwQueryVolumeInformationFile und ZwSetVolumeInformationFile . Binärdatei testen: Devfund_DevicePathExerciser.dll Testmethode: DoQueryAndSetFileInformationTest Parameter: Siehe Testparameter für Gerätegrundlagen DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Fuzz-Abfrage und Sicherheitstest festlegen |
Dieser Test gibt Aufrufe aus, um die Sicherheitsbeschreibung abzurufen und den Sicherheitsstatus von Geräten zu ändern. Während des Abfrage- und Festlegen-Sicherheitstests gibt der Fuzz-Test Aufrufe aus, um die Sicherheitsbeschreibung abzurufen und den Sicherheitsstatus von Geräten zu ändern, die durch die grundlegenden geöffneten Vorgänge und andere Öffnungsvorgänge geöffnet wurden, einschließlich der Vorgänge, die vom Fuzz-Unteröffnungstest durchgeführt wurden. Der Fuzz-Test stellt jeden Abfrage- oder Setaufruf mindestens 1024 Mal mit einem gültigen Puffer und einer Vielzahl von Pufferlängen und Sicherheitsinformationstypen aus (OWNER_SECURITY_INFORMATION, GROUP_SECURITY_INFORMATION, DACL_SECURITY_INFORMATION, SACL_SECURITY_INFORMATION und kein Informationstyp). Eine Anforderung jedes Typs wird auch mit einem ungültigen Pufferzeiger und einer Pufferlänge von Null gesendet. Wenn Sie den Parameter ChangeBufferProtectionFlags verwenden, der die Schutzoption festlegt, variiert der Fuzz-Test die Sicherheitseinstellung für den Puffer in jeder Abfrage und jedem Set-Aufruf. Binärdatei testen: Devfund_DevicePathExerciser.dll Testmethode: DoQueryAndSetSecurityTest Parameter: – Siehe Testparameter für Gerätegrundlagen DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Fuzz Random FSCTL-Test/Fuzz Random IOCTL-Test |
Dieser Test gibt eine Reihe von Aufrufen der DeviceIoControl-Funktion mit Funktionscodes, Gerätetypen, Datenübertragungsmethoden und Zugriffsanforderungen aus, die zufällig aus einem angegebenen Wertebereich ausgewählt werden. Die Aufrufe umfassen Eingabe- und Ausgabepuffer mit gültigen und ungültigen Pufferzeigern und -längen sowie zufällig generierten Inhalten. Während zufälliger Tests gibt der Fuzz-Test eine Reihe von Aufrufen an die DeviceIoControl-Funktion mit Funktionscodes, Gerätetypen, Datenübertragungsmethoden und Zugriffsanforderungen aus, die zufällig aus einem bestimmten Wertebereich ausgewählt werden. Die Aufrufe umfassen Eingabe- und Ausgabepuffer mit gültigen und ungültigen Pufferzeigern und -längen sowie zufällig generierten Inhalten. Der Fuzz-Test führt die zufälligen Tests auf allen Geräten durch, die während der grundlegenden Offenvorgänge und zusätzlicher offener Tests geöffnet wurden. Sie können diesen Test mithilfe der folgenden Parameter anpassen:
Die Funktion, die der Fuzz-Test verwendet, um Zufallszahlen für den Test zu generieren, verwendet eine Ausgangszahl, eine Startnummer für den Algorithmus zur Generierung von Zufallszahlen. Um die Testbedingungen zu reproduzieren, verwenden Sie den Seed number-Parameter , um die Startnummer anzugeben, die in der ursprünglichen Testversion verwendet wurde. Ein Angepasster Zufallstest ist im Rahmen des zufälligen Tests enthalten. Der maßgeschneiderte Zufallstest verwendet die Ergebnisse des Zufallstests, um die Antwort der Treiber auf IOCTL- oder FSCTL-Anforderungen ausführlicher zu untersuchen. Der angepasste Zufallstest untersucht Bereiche, die er übersehen hat, und solche, auf denen der Treiber nicht wie erwartet reagiert hat, basierend auf dem Status, der von den Zufallstestaufrufen zurückgegeben wird. Binärdatei testen: Devfund_DevicePathExerciser.dll Testmethoden: DoRandomIOCTLTest, DoRandomFSCTLTest Parameter: – Siehe Testparameter für Gerätegrundlagen MinInBuffer MaxInBuffer MinOutBuffer MaxOutBuffer MaxRandomCalls MaxTailoredCalls SeedNumber MinDeviceType MaxDeviceType MinFunctionCode MaxFunctionCode DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Fuzz: Test zum Öffnen von Sub-Open-Fuzzen |
Der Test führt eine schnelle Reihe von Aufrufen zum Öffnen von Objekten im Namespace des Geräts aus. Bei diesen Aufrufen wird ein Pfad übergeben, der mit dem Gerät beginnt und beliebige Namen und Unsinnszeichenfolgen unterschiedlicher Länge und Inhalt enthält. Während eines Relative Open-Tests (auch als Test zum Öffnen von Sub bezeichnet) versucht der Fuzz-Test, Objekte im Namespace des Geräts zu öffnen. Während dieses Tests führt der Fuzz-Test eine schnelle Reihe von Aufrufen zum Öffnen von Objekten im Namespace der Geräte aus, die mithilfe von grundlegenden Open-Vorgängen und anderen Open-Vorgängen geöffnet werden. In diesen Aufrufen übergibt der Fuzz-Test einen Pfad, der mit dem Gerät beginnt und beliebige Namen und sinnfreie Zeichenfolgen mit unterschiedlicher Länge und Inhalt enthält. Dieser Test ermittelt, wie der Treiber oder das Dateisystem Open-Anforderungen im Namespace verwaltet. Insbesondere wenn der Treiber keine offenen Anforderungen in seinem Namespace unterstützt, muss er den nicht autorisierten Zugriff verhindern, entweder durch fehlschlagende Anforderungen oder durch Festlegen der FILE_DEVICE_SECURE_OPEN Geräteeigenschaft, wenn ioCreateDevice oder IoCreateDeviceSecure zum Erstellen des Geräteobjekts verwendet wird. Weitere Informationen zum Namespace eines Geräts finden Sie unter Steuern des Zugriffs auf den Gerätenamespace. Binärdatei testen: Devfund_DevicePathExerciser.dll Testmethode: DoSubOpensTest Parameter: – Siehe Testparameter für Gerätegrundlagen DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Fuzz Sub-opens with Streams test (Fuzz sub-opens with Streams– Test) |
Dieser Test versucht, eine Vielzahl benannter Datenströme auf dem Gerät zu öffnen. Der Test verwendet eine Reihe beliebiger Streamnamen mit Inhalten und Zeichen, die möglicherweise für andere Verwendungen auf einigen Geräten gültig sind. Während des Streams-Tests versucht der Fuzz-Test, eine Vielzahl benannter Datenströme auf dem Gerät zu öffnen. Die Tests verwenden eine Reihe beliebiger Datenstromnamen mit Inhalten und Zeichen, die für andere Verwendungen auf einigen Geräten gültig sein können. Dieser Test bestimmt, ob der Treiber Datenstromanforderungen ordnungsgemäß verarbeiten kann, insbesondere, wenn der Treiber ein Gerät exportiert, das Datenströme nicht unterstützt oder erwartet. Ein benannter Datenstrom ist ein Attribut eines Dateiobjekts. Sie geben einen benannten Datenstrom an, indem Sie den Namen der Datei, einen Doppelpunkt und den Namen des Datenstroms schreiben, z. B. "File01.txt:AccessDate", wobei AccessDate ein benannter Datenstrom ist, also ein Attribut der File01.txt-Datei. Der Fuzz-Test zeichnet die Datenstromnamen auf, die im Test verwendet werden. Binärdatei testen: Devfund_DevicePathExerciser.dll Testmethode: DoSubOpensWithStreamsTest Parameter: – Siehe Testparameter für Gerätegrundlagen DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Fuzz Zero-Length Buffer FSCTL test/Fuzz Zero-Length Buffer IOCTL test |
Dieser Test gibt eine Reihe von Aufrufen der DeviceIoControl-Funktion mit einer Eingangs- und/oder Ausgabepufferlänge von 0 aus. Der Test generiert unterschiedliche Dateisystemsteuerungscodes mithilfe verschiedener Funktionscodes, Gerätetypen, Datenübertragungsmethoden und Zugriffsanforderungen. Während des Zero-Length Puffertests gibt der Fuzz-Test eine Reihe von Aufrufen der DeviceIoControl-Funktion mit einer Eingangs- und/oder Ausgabepufferlänge von 0 aus. Der Test generiert unterschiedliche E/A-Steuerungscodes mithilfe verschiedener Funktionscodes, Gerätetypen, Datenübertragungsmethoden und Zugriffsanforderungen. Informationen zum Inhalt von E/A-Steuerungscodes finden Sie unter Definieren von E/A-Steuerungscodes. Um die Behandlung von ungültigen Pufferzeigern durch den Treiber zu testen, geben die Pufferzeiger in diesen Benutzermodusaufrufen Adressen an, die sehr weit oben im virtuellen Adressraum des Kernels liegen (z. B. 0xFFFFFC00). Der Fuzztest führt den Nulllängen-Puffertest auf allen Geräten aus, die während der grundlegenden und zusätzlichen Tests geöffnet werden. Sie können diesen Test anpassen, indem Sie die Befehlsparameter MinFunctionCode und MaxFunctionCode verwenden, um den Bereich der IOCTL- oder FSCTL-Funktionscodes anzugeben, die in den Aufrufen verwendet werden, und MinDeviceType und MaxDeviceType , um den Bereich der in den Aufrufen verwendeten Gerätetypen anzugeben. Binärdatei testen: Devfund_DevicePathExerciser.dll Testmethoden: DoZeroLengthBufferIOCTLTest, DoZeroLengthBufferFSCTLTest Parameter: – Siehe Testparameter für Gerätegrundlagen MinDeviceType MaxDeviceType MinFunctionCode MaxFunctionCode DoPoolCheck TestCycles ChangeBufferProtectionFlags Impersonate FillZeroPageWithNull |
Ausführen eines E/A-Angriffs |
Führt E/A-Angriffe auf das angegebene Gerät oder die angegebenen Geräte aus. Binärdatei testen: Devfund_IOAttack_DeleteDataFile.wsc Testmethode: RunIoAttack Parameter: – Siehe Testparameter für Gerätegrundlagen DQ |
Informationen zum Fuzz-Test zum Öffnen und Schließen
Der Fuzz-Test zum Öffnen und Schließen verwendet verschiedene Möglichkeiten zum Öffnen und Schließen von Instanzen des angegebenen Geräts oder der angegebenen Geräte: Grundlegende Open-Vorgänge, Vorgänge zum öffnen von direkten Geräten und einen Test zum Öffnen und Schließen.
Grundlegende Geöffnete Vorgänge
Während der grundlegenden Geöffneten Vorgänge öffnet der Fuzz-Test wiederholt Instanzen der angegebenen Geräte oder der Geräte, die vom angegebenen Treiber mithilfe verschiedener Methoden und Optionen exportiert werden.
Der Fuzz-Test führt immer die Grundlegenden Geöffneten Vorgänge aus. Sie müssen sie nicht auswählen, und Sie können sie nicht aus einer Testsitzung ausschließen.
Der Fuzz-Test führt alle offenen Vorgänge im Benutzermodus durch Aufrufen von Systemdiensten (ZwXxx-Routinen) aus, die für das Gerät geeignet sind. Wenn ein geöffneter Aufruf einen Handle an das Gerät zurückgibt, verwendet der Fuzz-Test den Handle, um die anderen Gerätetests auszuführen, die für die Testsitzung ausgewählt sind.
Es gibt fünf Arten von grundlegenden geöffneten Vorgängen:
Standard geöffnet. Der Fuzz-Test öffnet das Gerät asynchron und gibt nur den systemeigenen Gerätenamen an.
Öffnen Sie mit hinzugefügtem umgekehrtem Schrägstrich. Der Fuzz-Test gibt einen offenen Aufruf für den Gerätenamen aus, gefolgt von einem umgekehrten Schrägstrich (), z. B. \device\cdrom\, als ob der Aufruf ein Stammverzeichnis innerhalb des Geräts öffnen würde.
Dieser Vorgang bestimmt, wie das Treiber- oder Dateisystem offene Anforderungen im Namespace verwaltet. Insbesondere, wenn das Gerät keine offenen Anforderungen in seinem Namespace unterstützt, muss der Treiber den nicht autorisierten Zugriff verhindern, indem entweder die Anforderungen fehlschlagen oder die FILE_DEVICE_SECURE_OPEN Geräteeigenschaft festgelegt wird, wenn IoCreateDevice oder IoCreateDeviceSecure aufgerufen wird, um das Geräteobjekt zu erstellen.
Öffnen Sie als Named Pipe. Der Fuzz-Test öffnet das Gerät und richtet eine Named Pipe für das Gerät ein. Der Zugriffsparameter (ShareAccess) wird zunächst auf Lese- und Schreibzugriff festgelegt, wird jedoch angepasst, wenn die Anforderung fehlschlägt. Wenn das Gerät keine benannten Rohre unterstützt, sollte die Anforderung fehlschlagen.
Öffnen Sie als Maillot. Der Fuzz-Test öffnet das Gerät als Maillot. Wenn das Gerät diesen Verbindungstyp nicht unterstützt, sollte die Anforderung fehlschlagen.
Öffnen Sie als Strukturverbindung. Der Fuzz-Test öffnet das Gerät als Strukturverbindung für den Remotenetzwerkzugriff. Der Zugriffsparameter (ShareAccess) wird zunächst auf Lese- und Schreibzugriff festgelegt, wird jedoch angepasst, wenn die Anforderung fehlschlägt. Wenn das Gerät diesen Verbindungstyp nicht unterstützt, sollte die Anforderung fehlschlagen.
Die Parameter, die in den geöffneten Anrufen verwendet werden, variieren, um die Merkmale des Geräts zu erfüllen und wahrscheinlich, dass die Anrufe erfolgreich sind. Wenn beispielsweise ein einfacher geöffneter Vorgang fehlschlägt, da der Aufruf die Sicherheitsanforderungen des Geräts nicht erfüllt hat, wiederholt der Fuzz-Test den geöffneten Vorgang mit einer Anforderung für weniger Zugriff. Wenn z. B. ein geöffneter Vorgang, der den Schreibzugriff angefordert hat, einen Sicherheitsverletzungsfehler zurückgibt, wird der Geöffnete mit einer Anforderung für den Lesezugriff wiederholt.
Direkte Geräte geöffnete Vorgänge
Während des Direct Device Open Operations öffnet der Fuzz-Test das Gerät direkt, als Gerät, nicht als Datei in einem Dateisystem. Direct Device Open Operations sind immer synchron. Wenn der Aufruf erfolgreich ist, verwendet der Fuzz-Test den zum Ausführen anderer ausgewählter Tests bereitgestellten Handle.
Test öffnen und schließen
Während des Open- und Close-Tests erstellt der Fuzz-Test mehrere Threads, von denen jede Tausende von create-open-close-Sequenzen ausführt. Dadurch wird die Fähigkeit des Fahrers getestet, ein außergewöhnliches Volumen von andernfalls einfachen und erwarteten Anrufen zu behandeln.
Der Test "Öffnen und Schließen" verwendet dieselben Optionen, die in den Tests "Grundlegende Offene Vorgänge " und "Öffnen mit hinzugefügtem umgekehrtem Schrägstrich" verwendet werden und unmittelbar vor diesen Tests ausgeführt werden.
Zugehörige Themen
Gewusst wie: Testen eines Treibers zur Laufzeit mit Visual Studio
Auswählen und Konfigurieren der Gerätegrundlagentests
Bereitgestellte WDTF Simple I/O-Plug-Ins
Testen eines Treibers zur Laufzeit über eine Eingabeaufforderung