CVE-2023-32784 エクスプロイトデモンストレーション
プロジェクト概要
このリポジトリは、KeePass 2.54 以前のバージョンに見られる重大な脆弱性 CVE-2023-32784 のデモンストレーションを提供します。このエクスプロイトにより、メモリダンプを介してマスターパスワードが復元され、保存された認証情報が露出します。このドキュメントでは、エクスプロイト環境のセットアップ、PoCツールの実行、および緩和戦略の理解に関する段階的なガイドを説明します。
脆弱性の詳細
説明
CVE-2023-32784 は、KeePass 2.0 から 2.53 までのバージョンにおけるメモリ漏洩の脆弱性であり、KeePass の Secure Textbox EX コンポーネント内での文字列の不適切な処理に起因します。マスターパスワードの入力された各文字はメモリに痕跡を残し、メモリダンプを通じて復元可能になります。
主な特徴:
- 深刻度: 高
- エクスプロイト可能性: メモリダンプへの物理的またはローカルアクセスが必要です。リモートコード実行は含まれません。
- 影響: メモリからのマスターパスワード(最初の文字を除く)の抽出により、保存された認証情報への不正アクセスが可能になります。
エクスプロイトの詳細
ツールと手法
このエクスプロイトは、メモリパターン認識を使用してメモリダンプから文字を抽出する KeePass Master Password Dumper ツールを利用します。
- 制限: パスワードの最初の文字は復元されませんが、残りのパスワードは簡単に再構築または推測できるため、大きな障害にはなりません。
- 脅威モデル: この脆弱性は、メモリダンプ(例:
pagefile.sys または hiberfil.sys)へのアクセスが可能な共有システムや無人システム上でのリスクを浮き彫りにします。
エクスプロイト計画
前提条件
このエクスプロイトを正常に実行するには、以下の環境とツールが必要です。
- 仮想化ソフトウェア: テスト環境を隔離するための VMware または同等のツール。
- Windows 10 ISO: 脆弱な KeePass インストール用のオペレーティングシステム。
- KeePass 2.x: 2.54 より前のバージョン。
- .NET 7 ランタイム: PoC ツールの実行に必要。
- PoC ツール: GitHub で入手可能な KeePass Password Dumper。
手順とその正当性
1. 環境設定
- なぜ VM を使うのか?
仮想マシンは、本番システムを危険にさらすことなく脆弱性をテストするための安全で制御された環境を提供します。
- 手順:
- VMware をインストールし、Windows 10 で新しい VM インスタンスを作成します。
- KeePass 2.x(例: バージョン 2.53)をインストールし、マスターパスワードを設定します。
- マスターパスワードの例:
user
2. 依存関係のインストール
- なぜ .NET 7 なのか?
PoC ツールは .NET 7 フレームワーク上に構築されています。正しいランタイムを使用することで互換性が確保されます。
- 手順:
- 公式 Microsoft ウェブサイトから
.NET 7 をダウンロードしてインストールします。
- インストールを確認するには以下を実行:
3. メモリダンプの作成
- なぜ KeePass プロセスのメモリをダンプするのか?
脆弱性は KeePass のメモリ処理にあります。ダンプを取得することで、パスワードの痕跡が存在するメモリフットプリントの分析が可能になります。
- 手順:
- KeePass を開き、マスターパスワードを使用してデータベースのロックを解除します。
- タスクマネージャーを使用して KeePass プロセスの
.DMP ファイルを作成します。
- タスクマネージャーで KeePass を見つけます。
- 右クリックして ダンプファイルの作成 を選択します。
.DMP ファイルの場所をメモします(通常は %TEMP% ディレクトリ)。
4. PoC ツールの実行
- なぜダンプを PoC ディレクトリにコピーするのか?
PoC ツールは作業ディレクトリ内のダンプファイルを処理します。この手順により、正しいファイルが分析されることが保証されます。
- 手順:
.DMP ファイルを展開した PoC フォルダに移動します。
- 一貫性のためにファイル名を
KeePass.DMP に変更します。
- ターミナルを開き、PoC ディレクトリに移動してツールを実行します:
cd Downloads/keepass-password-dumper-main
dotnet run KeePass.DMP
- 期待される結果:
ツールは最初の文字以外のパスワード文字を出力します。
コマンド例
cd Downloads/keepass-password-dumper-main
dir
dotnet run KeePass.DMP
緩和戦略
推奨される修正
-
KeePass の更新:
KeePass 2.54 へのアップグレードにより、以下の改善が導入され、脆弱性に対処します。
- 機密データのメモリ処理の強化。
- メモリ内の予測可能性を低減するためのランダム化された文字列挿入。
-
メモリダンプの保護:
pagefile.sys や hiberfil.sys などの機密ファイルを定期的にクリアまたは上書きします。
- システムを定期的に再起動して、機密データをメモリからフラッシュします。
-
安全なメモリ管理の実践:
開発者は、変更可能なデータ構造の使用や使用後のメモリバッファのクリアなど、機密文字列を処理するためのベストプラクティスを採用する必要があります。
重要な注意事項
- デモンストレーションのみの使用目的:
このエクスプロイトは、管理された環境での教育目的を意図しています。この情報を悪意を持って使用しないでください。
- 影響の認識:
組織は、共有システムやマルチユーザーシステムにおけるこの脆弱性の影響を評価し、それに応じた緩和策を実施する必要があります。
CVE の実際のエクスプロイトについては私の YouTube 動画をご覧ください
https://youtu.be/o855F0RvI30?si=WXOtPu-jgtC31O-5
参考文献
著者
Bhargav Raj Dutta
サイバーセキュリティとデジタルフォレンジックの情報技術学士(マードック大学)
質問やコラボレーションのお問い合わせがありましたら、[LinkedIn www.linkedin.com/in/bhargav-raj-dutta-80251a1b4) までお気軽にご連絡ください。