
Proof of concepts demonstrating some aspects of the Windows kernel shadow stack mitigation.
Dieses Projekt zielt darauf ab, bestimmte Aspekte der von Microsoft in Windows 11 implementierten Shadow-Stack-Mitigation hervorzuheben. Der Code ist speziell auf Windows 11 24H2 ausgerichtet. Er funktioniert möglicherweise nicht mit anderen Versionen von Windows 11, bedingt durch die Kernel-Offset-Verwaltung.
Das Projekt ist in zwei Teile gegliedert: einen Client und einen Treiber. Die Kommunikation zwischen ihnen erfolgt über den IOCTL-Mechanismus. Der Client fordert den Treiber auf, Aktionen auf Kernel-Ebene auszuführen.
CR4-Register aktivieren/deaktivieren, was zu einem BSOD führttry/except und Shadow Stack bei einer Division durch Null hervorzuhebenVerwenden Sie build.bat.
Als Voraussetzung müssen die folgenden Kits für denselben Windows-Build vorhanden sein:
Hinweis:
Der POC wurde mit der Version 10.0.26100.0 der Kits getestet.
Um die Kernel-Shadow-Stack-Mitigation zu aktivieren, müssen die folgenden Werte im Schlüssel HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\ hinzugefügt oder festgelegt werden:
| Name | Typ | Daten |
|---|---|---|
| EnableVirtualizationBasedSecurity | REG_DWORD | 1 |
| Scenarios\HypervisorEnforcedCodeIntegrity\Enabled | REG_DWORD | 1 |
| Scenarios\KernelShadowStacks\Enabled | REG_DWORD | 1 |
Außerdem muss der folgende Befehl in einer Administratorkonsole ausgeführt werden, um einen test-signierten Treiber zu laden:
bcdedit /set testsigning on
Anschließend ist ein Neustart erforderlich.
Um den Treiber zu laden, müssen die folgenden Befehle in einer Administratorkonsole eingegeben werden:
sc create shadow type= kernel binPath= ABSOLUTE_PATH_TO_THE_DRIVER
sc start shadow
Der Client bietet die folgenden Optionen:
SergiusTheBest für sein FindWDK.
| Option | Beschreibung |
|---|
| inc | Die Rücksprungadresse an den Aufrufer um 1 erhöhen |
| skip | RSP patchen, sodass er auf den vorherigen Stack-Frame zeigt |
| cdisable | CET in CR4 deaktivieren |
| cenable | CET in CR4 aktivieren |
| wrmsr REGISTER VALUE | Das REGISTER mit dem angegebenen VALUE beschreiben |
| wrshsk | In den Shadow Stack schreiben |
| wrshskpte | Das Shadow-Stack-PTE neu schreiben |
| div DIVIDEND DIVISOR | Ganzzahlige Division im Kernelbereich durchführen |