Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
KslDump — KslDump — なぜ自分のナイフを持ち込むのか?Defenderがすでにキッチンに一つ置いてあるのに。 | Kitploit
ツール/GitHubGitHub/andreisss/ksldump
特権昇格脆弱性分析エクスプロイトペネトレーションテストレッドチーミングバイナリエクスプロイト
GitHubandreisss/ksldump

KslDump

KslDump — なぜ自分のナイフを持ち込むのか?Defenderがすでにキッチンに一つ置いてあるのに。

リポジトリを見る
398514ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

KslDump - BMVD (Microsoftの脆弱なドライバを持ち込む)

GitHub stars GitHub forks GitHub downloads Sponsor License: GPL v3

重要な背景

私は2026年3月7日にこの問題をMicrosoftに報告しました。しかし、その約20日前に、ゲームハッキングコミュニティがすでにリバースエンジニアリングし、公に議論していました。 私の側としては、彼らのプロジェクトをフォローしておらず、これらのことを全く知りませんでした。また、これらが完全に別個の無関係なプロジェクトであることも明らかです。

参考文献

  • Avantguard ブログ記事

Defenderがすでに台所にナイフを置いているのに、なぜ自分でナイフを持ち込むのか?

KslDumpは、Microsoft署名済みコンポーネントのみを使用して、PPLで保護されたLSASSから資格情報を抽出します。エクスプロイトは展開されず、ドライバも読み込まれません。攻撃チェーン全体はWindows Defenderにプリインストールされています。Microsoftは、実行中のバージョン(wd\KslD.sys)をMmCopyMemoryを無効化することで修正しましたが、古い脆弱なバージョン(drivers\KslD.sys)をディスク上に残したままです。攻撃者は何も持ち込まず、Microsoftがクリーンアップし忘れたサービスを指し示すだけです。

image

https://github.com/user-attachments/assets/78dfce25-56b3-4eb8-9de2-7c183601e597


脆弱性

KslD.sys は、Microsoft Defenderに搭載されているカーネルドライバです。Microsoft署名済みであり、信頼されたカーネルモジュールとして読み込まれ、ユーザーモードからアクセス可能なデバイスオブジェクト \\.\KslD を公開します。

このドライバは、デバイスハンドルを開くことができる任意のプロセスに対して無制限のカーネルメモリおよび物理メモリアクセスを提供する、複数のサブコマンドを伴うIOCTL 0x222044 を受け入れます。

脆弱なサブコマンド

SubCmd機能影響
2CR3、IDTR、およびその他のCPU制御レジスタをユーザーモードに返す即座にKASLRを無効化
12攻撃者が制御するアドレスとサイズで MmCopyMemory() を呼び出す任意のカーネル/物理メモリ読み取り

「アクセス制御」

デバイスハンドルへの唯一のゲートは、ドライバのサービスキー下のレジストリキー(AllowedProcessName)に保存されたプロセス名文字列です。この値は:

  • 任意のローカル管理者が編集可能
  • Defenderの改ざん防止保護の対象外
  • コード署名、整合性、またはバイナリプロパティに対して検証されない
  • 単なる文字列比較 — バイナリの名前を変更するだけでアクセス可能

違いは CCommand::Initialize の1行です:

root@kitploit:~
// 82 KB version (patched) — deliberately clears the pointer:
v3 = MmGetSystemRoutineAddress(L"MmCopyMemory");
if (v3 >= 0) {
    *(a1 + 24) = 0;        // ← NULLs it — SubCmd 12 is dead
}

// 333 KB version (vulnerable) — stores the pointer:
ptr = MmGetSystemRoutineAddress(L"MmCopyMemory");
if (ptr) {
    *(this + 0x18) = ptr;   // ← Keeps it — SubCmd 12 works
}

Defenderのプラットフォームアップデートは、修正済みの82KBバージョンを drivers\wd\ に配置し、ImagePath をそれを指すように設定する一方、古い333KBバージョンは drivers\ に残ります。テストしたシステムでは、古いバイナリは決して削除されませんでした。エクスプロイトは単に ImagePath を脆弱なバージョンに戻してサービスを再起動するだけです。両方のバイナリはMicrosoft署名済みであり、OSに信頼されています。


なぜ古いドライバがまだディスク上にあるのか - 個人的な推測

Microsoftの公開ドキュメントによると、KB4052623はDefenderのプラットフォームアップデートを提供し、DefenderドライバのSystem32\drivers\wdへの移行を含みます。一方、WindowsサービスはWinSxSでバックアップされたコンポーネントストアファイルをNTFSハードリンクで保持し、クリーンアップ時に置き換えられたコンポーネントバージョンのみを削除します。テストしたシステムでは、これにより新しい82KBのKslD.sysがDefenderプラットフォームアップデートパスを通じて到着する一方、古い333KBのSystem32\drivers\KslD.sysが、新しいCBSバージョンに置き換えられるまで現在のCBSバックアップのコンポーネントストアコピーとして残っている理由が説明されます。


ブロックリストのパラドックス

Microsoftは、BYOVD攻撃を防ぐために特別に脆弱ドライバブロックリスト(DriverSiPolicy.p7b)を維持しています。このブロックリストはHVCIによって強制され、既知の脆弱な署名済みドライバの読み込みをブロックします。

Microsoft自身のドキュメントから:

「脆弱ドライバブロックリストは、Windowsエコシステム全体でMicrosoft以外が開発したドライバに対してシステムを強化するために設計されています」

Microsoft自身のドライバは設計上ブロックリストから除外されています。


なぜこれが機能するのか

根本原因は単純です:MmCopyMemoryはPPLを尊重しません。

PPL(Protected Process Light)は、LSASSに対するOpenProcessおよびReadProcessMemory呼び出しをブロックすることで資格情報の盗難を防ぐために設計されました。しかし、PPLはユーザーモードAPIパスのみを保護します。カーネルモードの物理メモリ読み取りに対しては権限がありません。

KslD.sysは、ユーザーモードコードにMmCopyMemory()への直接パスを提供します。これは、物理アドレスまたは仮想アドレスでメモリをコピーするためのMicrosoft自身のカーネルAPIです。このドライバは以下を実行します:

  • アドレス範囲の検証なし — 任意の物理アドレスが受け入れられる
  • サイズ制限の強制なし — 好きなだけ読み取れる
  • 呼び出し元の検証なし 管理者が編集できるレジストリ文字列チェックのみ

結果:Microsoft署名済みドライバが、そのまま完全なPPLバイパスを提供します。


読み取りプリミティブ

脆弱性の中核はサブコマンド12 — 無制限のMmCopyMemory()ラッパーです:

root@kitploit:~
IOCTL:    0x222044
Input:    struct {
            DWORD  SubCmd;       // 12
            DWORD  Reserved;     // 0
            QWORD  Address;      // Target VA or PA
            QWORD  Size;         // Bytes to read
            DWORD  Flags;        // 1 = Physical, 2 = Virtual
            DWORD  Padding;
          }
Output:   Raw memory contents (up to Size bytes)

物理読み取り(Flags = 1)が重要なプリミティブです。物理メモリアクセスは、プロセス保護レベル、EPROCESSフラグ、またはユーザーモードAPI制限の対象外であり、これがPPLをバイパスするものです。

仮想読み取り(Flags = 2)はカーネル仮想アドレスを直接読み取り、手動のページテーブル変換なしでカーネル構造(EPROCESS、ntoskrnlエクスポート)をウォークするのに便利です。



攻撃チェーン

root@kitploit:~
┌──────────────────────────────────────────────────────────────────┐
│                        KslDump Attack Flow                       │
├──────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. Registry Edit         ImagePath ← vulnerable 333KB KslD.sys *│
│          │                AllowedProcessName ← our process       │
│          │                sc stop/start KslD                     │
│          ▼                                                       │
│  2. KASLR Bypass          SubCmd 2 → CR3 + IDTR                  │
│          │                IDT → lowest ISR → ntoskrnl base       │
│          ▼                                                       │
│  3. Kernel Walk           PsInitialSystemProcess → SYSTEM EPROC  │
│          │                ActiveProcessLinks → find lsass.exe    │
│          │                Read lsass DTB from EPROCESS+0x28      │
│          ▼                      (all via SubCmd 12, flags=2)     │
│                                                                  │
│  4. Physical Read         Page table walk using lsass DTB        │
│          │                MmCopyMemory() reads lsass pages       │
│          │                      *** BYPASSES PPL ***             │
│          ▼                      (SubCmd 12, flags=1)             │
│                                                                  │
│  5. Key Extraction        Find lsasrv.dll via PEB → LDR         │
│          │                Scan .text for LSA key signatures      │
│          │                Follow BCRYPT chain → AES + 3DES + IV  │
│          ▼                                                       │
│  6. Credential Dump       Walk LogonSessionList                  │
│                           Decrypt MSV1_0 credentials             │
│                           → NT hashes                            │
│                                                                  │
└──────────────────────────────────────────────────────────────────┘

必要条件

  • ローカル管理者権限
  • Python 3.x、cryptographyパッケージ(pip install cryptography)
  • 脆弱な333KBのKslD.sysがディスク上に存在すること(デフォルト:C:\Windows\System32\drivers\KslD.sys)

皮肉 — まとめ

この攻撃は、サードパーティ製ドライバ、未署名コード、エクスプロイトを一切必要としません。すべてがMicrosoft署名済み、Microsoft出荷済みで、既にシステム上に存在しています。脆弱なドライバは、まさにこの種の攻撃を防ぐためのブロックリストから除外された状態で、自身のパッチの隣にディスク上に置かれています。


責任ある開示

この脆弱性はMicrosoft Security Response Center(MSRC)に報告されました。彼らは以下の理由により**「脆弱性ではない」**としてクローズしました:

「説明された攻撃は、事前の管理者権限に依存しています。その権限がどのように取得されたかを示す証拠は提供されていません。管理者権限またはルートアクセスを前提とする報告は、それらの権限を付与する脆弱性を示さない限り、影響が低いと見なされます。なぜなら、そのようなアクセスを持つ攻撃者は、より深刻な行動を既に実行できるからです。」

CVEは割り当てられず、修正も発行されませんでした。


免責事項

このツールは許可されたセキュリティテストおよび研究目的のみで提供されます。自分が所有するシステム、またはテストするための明示的な書面による許可があるシステムでのみ使用してください。コンピュータシステムへの不正アクセスは違法です。作者は誤用に対する責任を負いません。


ツールをダウンロード