
Provas de conceito demonstrando alguns aspectos da mitigação de shadow stack do kernel do Windows.
Este projeto visa destacar certos aspetos da mitigação de shadow stack implementada pela Microsoft no Windows 11. O código é especificamente focado no Windows 11 24H2. Pode não funcionar noutras versões do Windows 11, devido à gestão de offsets do kernel.
O projeto está dividido em duas partes: um cliente e um driver. A comunicação entre eles é tratada através do mecanismo IOCTL. O cliente solicita ao driver que execute ações ao nível do kernel.
CR4 atual, levando a um BSODtry/except e de shadow stack durante uma divisão por zeroUse o build.bat.
Como pré-requisito, os seguintes kits têm de ser da mesma compilação do Windows:
Nota:
O POC foi testado com a versão 10.0.26100.0 dos kits.
Para ativar a mitigação de shadow stack do kernel, os seguintes valores têm de ser adicionados ou definidos na chave HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\:
| Nome | Tipo | Dados |
|---|---|---|
| EnableVirtualizationBasedSecurity | REG_DWORD | 1 |
| Scenarios\HypervisorEnforcedCodeIntegrity\Enabled | REG_DWORD | 1 |
| Scenarios\KernelShadowStacks\Enabled | REG_DWORD | 1 |
Além disso, para carregar um driver assinado para teste, o seguinte comando tem de ser executado numa consola de administrador:
bcdedit /set testsigning on
Em seguida, é necessário reiniciar o sistema.
Para carregar o driver, os seguintes comandos têm de ser introduzidos numa consola de administrador:
sc create shadow type= kernel binPath= ABSOLUTE_PATH_TO_THE_DRIVER
sc start shadow
O cliente tem as seguintes opções:
| Opção | Descrição |
|---|---|
| inc | Incrementa o endereço de retorno ao chamador em 1 |
| skip | Ajusta o RSP para apontar para o quadro de pilha anterior |
| cdisable | Desativa CET no CR4 |
| cenable | Ativa CET no CR4 |
| wrmsr REGISTER VALUE | Escreve o REGISTER com o VALUE fornecido |
| wrshsk | Escreve na shadow stack |
| wrshskpte | Reescreve o PTE da shadow stack |
| div DIVIDEND DIVISOR | Executa divisão inteira no espaço do kernel |
SergiusTheBest pelo seu FindWDK.