Penetratietests (basisprincipes van apparaten)
De penetratietests van device fundamentals voeren verschillende vormen van invoeraanvallen uit. Dit is een essentieel onderdeel van beveiligingstests. Aanvallen en penetratietests kunnen helpen bij het identificeren van beveiligingsproblemen in software-interfaces.
Penetratie
De penetratietests omvatten twee soorten tests: Fuzz-tests en I/O Spy en I/O Attack tests. De Fuzz-tests waren ook een onderdeel van het Device Path Exceriser testhulpprogramma.
Test | Beschrijving |
---|---|
I/O Spy uitschakelen |
Schakel I/O Spy uit op 1 of meer apparaten. Binair testen: Devfund_IOSpy_DisableSupport.wsc Testmethode: DisableIoSpy Parameters: - zie Testparameters voor apparaat fundamentals DQ |
Toon I/O Spy-ingeschakeld Apparaat |
Apparaten weergeven waarvoor I/O Spy ingeschakeld zijn. Binair testen: Devfund_IOSpy_DisplayEnabledDevices.wsc Testmethode: DisplayIoSpyDevices |
I/O Spy inschakelen |
Schakel I/O Spy- in op een of meer apparaten. Binair testen: Devfund_IOSpy_EnableSupport.wsc Testmethode: EnableIoSpy Parameters: - zie Testparameters voor apparaat fundamentals DQ DFD- - hiermee geeft u het pad naar het IoSpy-gegevensbestand op. De standaardlocatie is %SystemDrive%\DriverTest\IoSpy |
Fuzz Allerlei API-test |
De Fuzz Misc API-tests zijn tests die bepalen of het stuurprogramma verschillende veelvoorkomende aanroepen van kernelmodusstuurprogramma's kan verwerken. De tests omvatten de volgende tests:
Binair testen: Devfund_DevicePathExerciser.dll testmethode : DoMiscAPITest Parameters: - zie Testparameters voor basisprincipes van het apparaat DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags imiteren VulNullenPaginaMetNull- |
Fuzz Misc API met query-test van nul lengte |
Met deze test worden dezelfde tests uitgevoerd als fuzz Misc API-test. Deze keer wordt een lege query (nullengte) en een ongeldig bufferadres aan het stuurprogramma doorgegeven tijdens het ophalen van de uitgebreide kenmerken van een bestand. Binair testen: Devfund_DevicePathExerciser.dll Testmethode : DoMiscAPIWithZeroLengthTest Parameters: - zie Testparameters voor appraatbasisprincipes DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags imiteren VulNulpaginaMetNul |
test Fuzz openen en sluiten |
Met deze test worden duizenden create-open-close-reeksen uitgevoerd. Zie Over de open- en sluittestvoor gedetailleerde informatie over deze test. Binair testen: Devfund_DevicePathExerciser.dll Testmethode: DoOpenCloseTest Parameters: - zie Testparameters voor apparaat fundamentals DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags imiteren FillZeroPageWithNull- |
Fuzz Query en Bestandsinformatie Instellen test |
Met deze test worden aanroepen uitgevoerd om de object-, bestand- en volume-informatie van apparaten op te halen en te wijzigen. Tijdens de Query en Set File Information Testroept de fuzztest op om de object-, bestand- en volume-informatie op te halen en te wijzigen van apparaten die zijn geopend door de Basic Open Operations en andere open bewerkingen, inclusief die uitgevoerd door de fuzz-subopens-test. Met de Fuzz-test wordt elke query of set minstens 1024 keer aangeroepen met een geldige buffer en diverse bufferlengten en bestandsinformatieklassen. Eén aanvraag van elk type wordt ook ingediend met een ongeldige bufferaanwijzer en een bufferlengte van nul. Als u de parameter ChangeBufferProtectionFlags gebruikt, die de beveiligingsoptie instelt, varieert de Fuzz-test de beveiligingsinstelling van de buffer bij elke query en elke set-aanroep. Met deze test wordt ook de Fuzz Sub-opens test uitgevoerd. Deze test maakt gebruik van de functies ZwQueryInformationFile, ZwSetInformationFile, ZwQueryVolumeInformationFileen ZwSetVolumeInformationFile. Binair testen: Devfund_DevicePathExerciser.dll testmethode: DoQueryAndSetFileInformationTest Parameters: - zie Parameters voor apparaatfundamenten testen DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags Imiteer bij FillZeroPageWithNull- |
Fuzz-query en beveiligingstest instellen |
Deze test roept aan om de beveiligingsdescriptor op te halen en de beveiligingsstatus van apparaten te wijzigen. Tijdens de Query en Instelling Beveiligingstestroept de Fuzz-test procedures aan om de beveiligingsdescriptor op te halen en de beveiligingsstatus van apparaten te wijzigen die zijn geopend door de Basic Open Operations en andere open bewerkingen, inclusief de bewerkingen uitgevoerd door de Fuzz Sub-opens test. Bij de Fuzz-test voert het elke query of set-oproep minimaal 1024 keer uit met een geldige buffer en verschillende bufferlengtes en beveiligingsinformatietypen (OWNER_SECURITY_INFORMATION, GROUP_SECURITY_INFORMATION, DACL_SECURITY_INFORMATION, SACL_SECURITY_INFORMATION en geen informatietype). Eén aanvraag van elk type wordt ook verzonden met een ongeldige bufferaanwijzer en een bufferlengte van nul. Als u de parameter ChangeBufferProtectionFlags gebruikt, die de beveiligingsoptie instelt, verandert de Fuzz-test de beveiligingsinstelling van de buffer bij elke query- en set-oproep. Binair testen: Devfund_DevicePathExerciser.dll Testmethode: DoQueryAndSetSecurityTest Parameters: - zie Testparameters voor de basisprincipes van apparaten DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags imiteren FillZeroPageWithNull- |
Fuzz Random FSCTL-test / Fuzz Random IOCTL-test |
Met deze test wordt een reeks aanroepen naar de functie DeviceIoControl uitgevoerd met functiecodes, apparaattypen, methoden voor gegevensoverdracht en toegangsvereisten die willekeurig zijn geselecteerd vanuit een opgegeven bereik met waarden. De aanroepen bevatten invoer- en uitvoerbuffers met geldige en ongeldige bufferpunten en lengten, en willekeurig gegenereerde inhoud. Tijdens willekeurige tests geeft de Fuzz-test een reeks aanroepen uit naar de DeviceIoControl functie met functiecodes, apparaattypen, methoden voor gegevensoverdracht en toegangsvereisten die willekeurig zijn geselecteerd vanuit een opgegeven bereik van waarden. De aanroepen bevatten invoer- en uitvoerbuffers met geldige en ongeldige bufferpunten en lengten, en willekeurig gegenereerde inhoud. De Fuzz-test voert de willekeurige tests uit op alle apparaten die zijn geopend tijdens de Basic Open Operations en aanvullende open tests. U kunt deze test aanpassen met behulp van de volgende parameters:
De functie die de Fuzz-test gebruikt om willekeurige getallen voor de test te genereren, maakt gebruik van een seed-nummer, een beginnummer voor het algoritme voor het genereren van willekeurige getallen. Als u de testvoorwaarden wilt reproduceren, gebruikt u het zaadnummer parameter om het seed-nummer op te geven dat is gebruikt in de oorspronkelijke testtest. Een op maat gemaakte willekeurige test wordt opgenomen als onderdeel van de willekeurige test. De op maat gemaakte willekeurige test gebruikt de resultaten van de willekeurige test om de reactie van het stuurprogramma op IOCTL- of FSCTL-aanvragen gedetailleerder te onderzoeken. De gerichte aanvullende test onderzoekt gebieden die door de willekeurige test zijn gemist en gebieden waarop het driver-programma niet heeft gereageerd zoals verwacht, gebaseerd op de status die door de willekeurige testoproepen is geretourneerd. Binair testen: Devfund_DevicePathExerciser.dll Testmethoden: DoRandomIOCTLTest, DoRandomFSCTLTest Parameters: - zie Testparameters voor basisprincipes apparaat MinInBuffer MaxInBuffer- MinOutBuffer MaxOutBuffer MaxRandomCalls MaxTailoredCalls SeedNumber- MinDeviceType- MaxDeviceType MinFunctionCode- MaxFunctionCode- DoPoolCheck DQ- TestCycles ChangeBufferProtectionFlags imiteren VulNulPaginaMetNullen |
test Fuzz Sub wordt geopend |
De test voert een snelle reeks aanroepen uit om objecten in de naamruimte van het apparaat te openen. In deze aanroepen wordt een pad doorgegeven dat begint met het apparaat en willekeurige namen en zinloze reeksen van verschillende lengte en inhoud bevat. Tijdens een relatieve opentest(ook wel een subopen testgenoemd) probeert de Fuzz-test objecten te openen in de naamruimte van het apparaat. Tijdens deze test voert de Fuzz-test een snelle reeks aanroepen uit om objecten te openen in de naamruimte van de apparaten die zijn geopend met behulp van Basic Open Operations en andere open bewerkingen. In deze aanroepen gebruikt de Fuzz-test een pad dat begint met het apparaat en willekeurige namen en onzinnige tekenreeksen van verschillende lengte en inhoud bevat. Deze test bepaalt hoe het stuurprogramma of bestandssysteem open aanvragen beheert in de naamruimte. Met name als het stuurprogramma geen ondersteuning biedt voor open aanvragen in de naamruimte, moet het onbevoegde toegang voorkomen, hetzij door de aanvragen te mislukken of door de FILE_DEVICE_SECURE_OPEN apparaatkenmerken in te stellen wanneer het gebruikmaakt van IoCreateDevice- of IoCreateDeviceSecure- om het apparaatobject te maken. Zie Apparaatnaamruimtetoegang beherenvoor meer informatie over de naamruimte van een apparaat. Binair testen: Devfund_DevicePathExerciser.dll Testmethode : DoSubOpensTest Parameters: - zie Testparameters voor apparaat fundamentals DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags imiteren FillZeroPageWithNull- |
Fuzz-sub wordt geopend met streams-test |
Met deze test wordt geprobeerd verschillende benoemde gegevensstromen op het apparaat te openen. De test maakt gebruik van een reeks willekeurige stroomnamen met inhoud en tekens die mogelijk geldig zijn voor andere toepassingen op sommige apparaten. Tijdens de Streams Testprobeert de Fuzz-test verschillende benoemde gegevensstromen op het apparaat te openen. De tests gebruiken een reeks willekeurige stroomnamen met inhoud en tekens die mogelijk geldig zijn voor andere toepassingen op sommige apparaten. Met deze test wordt bepaald of het stuurprogramma aanvragen voor gegevensstromen correct kan verwerken, met name als het stuurprogramma een apparaat exporteert dat geen gegevensstromen ondersteunt of verwacht. Een benoemde gegevensstroom is een kenmerk van een bestandsobject. U geeft een benoemde gegevensstroom op door de naam van het bestand, een dubbele punt en de naam van de gegevensstroom te schrijven, bijvoorbeeld 'File01.txt:AccessDate' waarbij AccessDate- een benoemde gegevensstroom is, dat wil gezegd een kenmerk van het File01.txt bestand. De Fuzz-test registreert de stroomnamen die in de test worden gebruikt. Binair testen: Devfund_DevicePathExerciser.dll Testmethode: DoSubOpensWithStreamsTest Parameters: - zie Fundamentele testparameters voor apparaten DoPoolCheck DQ TestCycles ChangeBufferProtectionFlags imiteren FillZeroPageWithNull- |
Fuzz Zero-Length Buffer FSCTL-test / Fuzz Zero-Length Buffer IOCTL-test |
Deze test doet een reeks aanroepen naar de DeviceIoControl-functie met invoer- en/of uitvoerbufferlengtes van 0. De test genereert verschillende systeembeheercodes met behulp van verschillende functiecodes, apparaattypen, methoden voor gegevensoverdracht en toegangsvereisten. Tijdens de Zero-Length Buffertest geeft de Fuzz-test een reeks aanroepen uit naar de functie DeviceIoControl met invoer- en/of uitvoerbufferlengten van 0. De test genereert verschillende I/O-besturingscodes met behulp van verschillende functiecodes, apparaattypen, methoden voor gegevensoverdracht en toegangsvereisten. Zie I/O-besturingscodes definiërenvoor meer informatie over de inhoud van I/O-besturingscodes. Als u de verwerking van ongeldige bufferaanwijzers van het stuurprogramma wilt testen, geven de bufferaanwijzers in deze aanroepen in de gebruikersmodus adressen op die hoog zijn in de virtuele kerneladresruimte, zoals 0xFFFFFC00). De Fuzz-test voert de Zero-Length Buffertest uit op alle apparaten die tijdens de basis- en aanvullende open tests zijn geopend. U kunt deze test aanpassen met behulp van de MinFunctionCode en MaxFunctionCode opdrachtparameters om het bereik van de IOCTL- of FSCTL-functiecodes op te geven die worden gebruikt in de aanroepen en MinDeviceType en MaxDeviceType om het bereik van apparaattypen op te geven dat in de aanroepen wordt gebruikt. Binair testen: Devfund_DevicePathExerciser.dll Testmethoden: DoZeroLengthBufferIOCTLTest, DoZeroLengthBufferFSCTLTest Parameters: - zie Testparameters voor apparaat fundamentals MinDeviceType- MaxDeviceType MinFunctionCode- MaxFunctionCode DoPoolCheck TestCycles ChangeBufferProtectionFlags imiteren FillZeroPageWithNull- |
I/O-aanval uitvoeren |
Voert I/O-aanval uit op het opgegeven apparaat of de opgegeven apparaten. Binair testen: Devfund_IOAttack_DeleteDataFile.wsc testmethode: RunIoAttack Parameters: - zie Basisparameters voor apparaat testen DQ |
Over de open- en sluittest van de fuzz
De Fuzz-test voor openen en sluiten maakt gebruik van verschillende manieren om exemplaren van het opgegeven apparaat of de opgegeven apparaten te openen en te sluiten: Basic Open Operations, Direct Device Open Operationsen een openen en sluiten test.
Basis open bewerkingen
Tijdens de Basic Open Operationsopent (maakt) de Fuzz-test herhaaldelijk exemplaren van de opgegeven apparaten of van apparaten die door het opgegeven stuurprogramma zijn geëxporteerd, met verschillende methoden en opties.
De Fuzz-test voert altijd de Basic Open Operations uit. U hoeft ze niet te selecteren en u kunt ze niet uitsluiten van een testsessie.
De Fuzz-test voert alle open bewerkingen uit in de gebruikersmodus door systeemservices (ZwXxx Routines) aan te roepen die geschikt zijn voor het apparaat. Als een open aanroep een handle naar het apparaat retourneert, gebruikt de Fuzz-test deze handle om de andere apparaattests uit te voeren die voor de testsessie zijn geselecteerd.
Er zijn vijf typen Basic Open Operations:
Standaard instellen op open. de Fuzz-test opent het apparaat asynchroon en geeft alleen de systeemeigen apparaatnaam op.
Openen met toegevoegde backslash. de Fuzz-test geeft een open aanroep voor de apparaatnaam, gevolgd door een backslash (), zoals \device\cdrom\, alsof de aanroep een hoofdmap binnen het apparaat zou openen.
Deze bewerking bepaalt hoe het stuurprogramma of bestandssysteem open aanvragen beheert in de naamruimte. Met name, als het apparaat geen ondersteuning biedt voor open aanvragen in zijn naamruimte, moet het stuurprogramma onbevoegde toegang voorkomen, hetzij door de aanvragen te laten falen, hetzij door het FILE_DEVICE_SECURE_OPEN apparaatkenmerk in te stellen wanneer het IoCreateDevice of IoCreateDeviceSecure aanroept om het apparaatobject te maken.
Open als een benoemde pijp. De Fuzz-test opent het apparaat en brengt een benoemde pijp naar het apparaat. De toegangsparameter (ShareAccess) is in eerste instantie ingesteld op lezen en schrijven, maar wordt aangepast als de aanvraag mislukt. Als het apparaat geen ondersteuning biedt voor benoemde pijpen, mislukt de aanvraag.
Open als een brievenbus. De Fuzz-test opent het apparaat als een mailslot. Als het apparaat dit type verbinding niet ondersteunt, mislukt de aanvraag.
Open als een boomstructuurverbinding. de Fuzz-test opent het apparaat als een structuurverbinding voor gebruik in externe netwerktoegang. De toegangsparameter (ShareAccess) is in eerste instantie ingesteld op lezen en schrijven, maar wordt aangepast als de aanvraag mislukt. Als het apparaat dit type verbinding niet ondersteunt, mislukt de aanvraag.
De parameters die in de open aanroepen worden gebruikt, zijn afhankelijk van de kenmerken van het apparaat en zorgen ervoor dat de aanroepen waarschijnlijk slagen. Als een eenvoudige open bewerking bijvoorbeeld mislukt omdat de aanroep niet voldoet aan de beveiligingsvereisten van het apparaat, herhaalt de Fuzz-test de open bewerking met een aanvraag voor minder toegang. Als een open bewerking die schrijftoegang heeft aangevraagd bijvoorbeeld een beveiligingsfout retourneert, wordt het openen herhaald met een aanvraag voor leestoegang.
Directe Operaties voor het Openen van Apparaten
Tijdens de Direct Device Open Operationsopent de Fuzz-test het apparaat rechtstreeks als een apparaat, niet als een bestand in een bestandssysteem. Open bewerkingen voor directe apparaten zijn altijd synchroon. Als de aanroep is geslaagd, gebruikt de Fuzztest de handler die is opgegeven om andere geselecteerde tests uit te voeren.
Test openen en sluiten
Tijdens de Open- en Sluittest , creëert de Fuzz-test verschillende threads, waarbij ieder duizenden create-open-close-sequenties uitvoert. Hiermee wordt het vermogen van de bestuurder getest om een buitengewoon volume van anders eenvoudige en verwachte aanroepen af te handelen.
De Open- en Sluittest gebruikt dezelfde opties die worden gebruikt in Basic Open Operations en Openen met Toegevoegde Backslash-test en worden direct voor deze tests uitgevoerd.
Verwante onderwerpen
Hoe een stuurprogramma tijdens runtime te testen met behulp van Visual Studio
Hoe u de basisapparatentests selecteert en configureert
Basisprincipestests voor apparaten
Geleverde WDTF Simple I/O-invoegtoepassingen
Een stuurprogramma tijdens runtime testen vanaf een opdrachtprompt