
このプロジェクトは、Microsoft が Windows 11 に実装したシャドウスタック緩和策の特定の側面を浮き彫りにすることを目的としています。 このコードは特に Windows 11 24H2 を対象としています。 カーネルオフセット管理のため、他のバージョンの Windows 11 では動作しない可能性があります。
このプロジェクトは、クライアントとドライバの2つの部分に分かれています。 両者間の通信は IOCTL メカニズムを介して処理されます。 クライアントはドライバに対し、カーネルレベルでのアクションを実行するよう要求します。
CR4 レジスタで CET を有効/無効にし、BSOD を引き起こします。try/except とシャドウスタックの動作を強調します。build.bat を使用します。
前提条件として、以下のキットが同じ Windows ビルド用である必要があります:
注:
POC はキットのバージョン 10.0.26100.0 でテストされています。
カーネルシャドウスタック緩和策を有効にするには、以下の値を HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceGuard\ キーに追加または設定する必要があります:
| Name | Type | Data |
|---|---|---|
| EnableVirtualizationBasedSecurity | REG_DWORD | 1 |
| Scenarios\HypervisorEnforcedCodeIntegrity\Enabled | REG_DWORD | 1 |
| Scenarios\KernelShadowStacks\Enabled | REG_DWORD | 1 |
また、テスト署名されたドライバを読み込むには、管理者コンソールで次のコマンドを実行する必要があります:
bcdedit /set testsigning on
その後、再起動が必要です。
ドライバを読み込むには、管理者コンソールで次のコマンドを入力する必要があります:
sc create shadow type= kernel binPath= ABSOLUTE_PATH_TO_THE_DRIVER
sc start shadow
クライアントには次のオプションがあります:
FindWDK の SergiusTheBest 氏に感謝します。
| Option | Description |
|---|
| inc | 呼び出し元への戻りアドレスを1増やします |
| skip | 前のスタックフレームを指すように RSP をパッチします |
| cdisable | CR4 で CET を無効にします |
| cenable | CR4 で CET を有効にします |
| wrmsr REGISTER VALUE | REGISTER に指定された VALUE を書き込みます |
| wrshsk | シャドウスタックに書き込みます |
| wrshskpte | シャドウスタック PTE を書き換えます |
| div DIVIDEND DIVISOR | カーネル空間で整数除算を実行します |