
Proof of concept che dimostrano alcuni aspetti della mitigazione dello shadow stack del kernel Windows.
Questo progetto mira a evidenziare alcuni aspetti della mitigazione shadow stack implementata da Microsoft in Windows 11. Il codice è specificamente focalizzato su Windows 11 24H2. Potrebbe non funzionare su altre versioni di Windows 11, a causa della gestione degli offset del kernel.
Il progetto è diviso in due parti: un client e un driver. La comunicazione tra loro è gestita tramite il meccanismo IOCTL. Il client richiede al driver di eseguire azioni a livello di kernel.
CR4 corrente, portando a un BSOD.try/except e dello shadow stack durante una divisione per zero.Usa build.bat.
Come prerequisito, i seguenti kit devono essere per la stessa build di Windows:
Nota:
I POC sono stati testati con la versione 10.0.26100.0 dei kit.
Per attivare la mitigazione kernel shadow stack, i seguenti valori devono essere aggiunti o impostati nella chiave HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\:
| Nome | Tipo | Dati |
|---|---|---|
| EnableVirtualizationBasedSecurity | REG_DWORD | 1 |
| Scenarios\HypervisorEnforcedCodeIntegrity\Enabled | REG_DWORD | 1 |
| Scenarios\KernelShadowStacks\Enabled | REG_DWORD | 1 |
Inoltre, per caricare un driver con firma di test, il seguente comando deve essere eseguito in una console amministrativa:
bcdedit /set testsigning on
Quindi, è richiesto un riavvio.
Per caricare il driver, i seguenti comandi devono essere inseriti in una console amministrativa:
sc create shadow type= kernel binPath= ABSOLUTE_PATH_TO_THE_DRIVER
sc start shadow
Il client ha le seguenti opzioni:
SergiusTheBest per il suo FindWDK.
| Opzione | Descrizione |
|---|
| inc | Incrementa l'indirizzo di ritorno del chiamante di 1 |
| skip | Applica una patch a RSP per puntare al frame dello stack precedente |
| cdisable | Disabilita CET in CR4 |
| cenable | Abilita CET in CR4 |
| wrmsr REGISTER VALUE | Scrive il REGISTER con il VALUE indicato |
| wrshsk | Scrive nello shadow stack |
| wrshskpte | Riscrive la PTE dello shadow stack |
| div DIVIDEND DIVISOR | Esegue una divisione intera nello spazio del kernel |