
Rusty Hypervisor - Rust製Windowsカーネル Blue Pill Type-2ハイパーバイザー(コードネーム: Matrix)
ブログ: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
Intel VT-x用フックを備えた、軽量でメモリ安全、かつ非常に高速なRust製タイプ2研究用ハイパーバイザーです。仮想化の核となる概念を学ぶことに焦点を当てています。
注記: Illusion ハイパーバイザー(Windows UEFI Blue Pill Type-1 Hypervisor in Rust)の方が安定しており、より多くの機能をサポートし、全体的に優れた設計です。Matrix ハイパーバイザー(Windows Kernel Blue Pill Type-2 Hypervisor in Rust)は古い実験版であり、本番環境での使用を意図していません。どちらのプロジェクトも、Rustでのハイパーバイザー開発を始めるためのテンプレートとして役立ちます。
図 0: 拡張ページテーブル(EPT)フック(Matrix)
ExceptionOrNmi (#GP, #PF, #BP, #UD)、Cpuid、Getsec、Vmcall、Vmclear、Vmlaunch、Vmptrld、Vmptrst、Vmresume、Vmxon、Vmxoff Rdmsr、Wrmsr、Invd、Rdtsc、EptViolation、、、、 の処理。int3)フック。rustup toolchain install nightly および rustup default nightly。winget install LLVM.LLVM。cargo install cargo-make cargo-expand cargo-edit cargo-workspaces。WDKContentRoot 環境変数を WDK のインストールパスを指すように設定します:[System.Environment]::SetEnvironmentVariable("WDKContentRoot", "C:\Program Files (x86)\Windows Kits\10", [System.EnvironmentVariableTarget]::User)
cargo make --profile development。cargo make --profile release。bcdedit.exe /set testsigning on でテスト署名を有効にします。bcdedit.exe /bootdebug {bootmgr} on
bcdedit.exe /bootdebug on
bcdedit.exe /debug on
セットアップ: bcdedit.exe /dbgsettings net hostip:w.x.y.z port:n。
regedit.exe を開きます。HKLM\SYSTEM\CurrentControlSet\Control\Session Manager に移動します。DEFAULT DWORD = 8 で Debug Print Filter を作成します。$serialPort = New-Object System.IO.Ports.SerialPort COM2,9600,None,8,One; $serialPort.Open()。Service Controller(sc.exe)を使用して、ハイパーバイザーサービスを作成および管理します:
sc.exe create matrix type= kernel binPath= C:\Windows\System32\drivers\matrix.sys
sc.exe query matrix
sc.exe start matrix
VMware Workstation のセットアップ
プロジェクトのビルド: 前のセクションで提供されたビルド手順に従ってプロジェクトをコンパイルします。
VMware Workstation の構成
デバッグ用に VMware のシリアルポートを構成します。
図 1: VMware シリアルポート設定
"Virtualize Intel VT-x/EPT or AMD-V/RVI" が有効であり、"Virtualize IOMMU (IO memory management unit)" が有効であることを確認します。
図 2: VMware プロセッサ設定
ドライバーのコピー
matrix.sys ドライバーを C:\Windows\System32\drivers ディレクトリにコピーします。
VMware シリアルポートデバッグ
[シリアルポートデバッグ] セクションの PowerShell スクリプトを実行して、シリアルポートを開きます。
ハイパーバイザーのロード
[サービスの管理] セクションに示されている load.ps1 PowerShell スクリプトを使用して、ハイパーバイザーサービスを作成および開始します。
図 3: ハイパーバイザーのロード
図 4: ログと Windbg PoC セットアップ
図 5: ログと Windbg PoC 実行
このプロジェクトを形作ってくれた素晴らしい人々とリソースに感謝します。以下に挙げる皆さんに特に感謝します。私は自分の作業でこれらのリソースをすべて使用したわけではありませんが、それらは情報の宝庫であり、私を含めハイパーバイザー開発に飛び込もうとしている人にとって非常に役立ちます。
Daax (@daaximus): ハイパーバイザー開発に関する彼の優れた無料シリーズに対して。これは利用可能な最高のリソースの1つであり、その徹底的な調査と明確な説明で私の作業に大きな影響を与えました。彼のサポートと私の質問への回答は、ハイパーバイザー開発を始める上で非常に貴重でした:
Satoshi Tanda (@tandasat): Satoshi Tanda のガイダンス、プロジェクト、構造化されたトレーニングプログラムは非常に役立ちました。GitHub での彼の詳細な説明と貢献は私の理解を大幅に向上させ、私の旅を通して偉大なメンターとなってくれました:
Jess (@jessiep_): このプロジェクトのいくつかの分野における貴重なサポートと協力、本質的な洞察と専門知識の提供、そして私の質問への迅速な回答に対して。
Drew (@drew): ハイパーバイザー開発のさまざまな側面における彼の助け、ガイダンス、そして私の質問への迅速な回答に対して。
Sina Karvandi (@Intel80x86): 彼の詳細な無料の Hypervisor From Scratch シリーズに対して:
Matthias (@not-matthias): amd_hypervisor プロジェクトへの彼の影響力のある取り組みに対して。これはこの研究に大きな影響を与え、刺激を与えました。
および : ハイパーバイザーによるイントロスペクションと syscall フックに関する彼らの洞察に満ちた探求に対して:
Secret Club: アンチチートシステムとハイパーバイザー検出に関する洞察。これもこのプロジェクトに影響を与えました:
その他の必須リソース:
特別な感謝を:
このプロジェクトは MIT ライセンスの下でライセンスされています。詳細については、MIT License details を参照してください。
EptMisconfigurationInveptInvvpidXsetbv