私は仮想ドライバーをファズしようとしています。これに関する他の質問を読みましたが、実際にはどこにも行きません。基本的に、見逃している明らかなツールがあるかどうかを確認し、Windows ゲストからのファジング IOCTL が機能するかどうかを知りたいですか? または、IN / OUTなどの低レベルで書き込む必要がある場合は?
Windows ゲストのドライバーをファジングして、hyper-v または VMware のいずれかのハイパーバイザーにアクセスするためのツール
私は仮想ドライバーをファズしようとしています。これに関する他の質問を読みましたが、実際にはどこにも行きません。基本的に、見逃している明らかなツールがあるかどうかを確認し、Windows ゲストからのファジング IOCTL が機能するかどうかを知りたいですか? または、IN / OUTなどの低レベルで書き込む必要がある場合は?
Windows ゲストのドライバーをファジングして、hyper-v または VMware のいずれかのハイパーバイザーにアクセスするためのツール
仮想化コードを実行するには、さまざまな方法があります。
まず、もちろん、Windows を使用している場合は、IOCTL インターフェイスです。
次に、すべての仮想デバイスが、ゲスト OS とホスト OS のコードによって何らかの方法でエミュレートされることを覚えておく必要があります。したがって、入力デバイス (キーボードとマウス)、ビデオ デバイス、ストレージ (ディスク)、ネットワーク カード、通信ポート (シリアル、パラレル)、標準 PC デバイス (PIC、PIT、RTC、DMA)、CPU APIC などへのアクセスも、仮想化コードを実行します。
また、さまざまな PC デバイスの仮想化 (Windows の VMBUS を介して動作する合成デバイスについて話している場合を除く) は、デバイスのメモリ マップされたバッファーとレジスターにアクセスする命令をインターセプト、解析、エミュレート/実行することによって行われることを覚えておくことも非常に重要です。 I/O ポート。これにより、さらに別の「インターフェース」が得られます。
これを使用することで、デバイス関連のバグだけでなく、命令関連のバグも発見できる可能性があります。後者に興味がある場合は、x86 CPU がさまざまなモード (リアル、仮想 8086、保護、64 ビット) の命令レベルでどのように機能するか、割り込みと例外をどのように処理するか、およびどのように処理するかについて十分に理解している必要があります。また、これらの PC デバイスにアクセスする方法 (メモリ アドレスと I/O ポート番号) を知る必要があります。
ところで、Windows では、コードがカーネルで実行されていない限り、これらに直接アクセスすることはできません。Windows の過保護な機能を回避するためだけに、このような場合に Windows 以外のゲスト VM を使用することをお勧めします。エッジ ケース、異常な命令エンコーディング (無効なエンコーディングを含む)、または通常のタスクの異常な命令 (たとえば、FPU/MMX/SSE/etc または特別なプロテクト モード命令 (SIDT など) を使用してデバイスにアクセスする) を探します。考えて、いたずらをしてください。
考慮すべきもう 1 つのことは、競合状態と計算負荷または I/O 負荷です。あなたもその方向に探索する運があるかもしれません。