チームは最近、仮想化ソフトウェアのサードパーティ製のpeiceと当社のソフトウェアは、互換性のある作りの課題に直面してきました。このソフトウェアは、カーネルドライバを使用してWindowsネイティブレジストリAPI(ZwCreateKey
など)のフックを実行します。 Ntdllで呼び出しをフックすることによって動作します。私たちのソフトウェアもかなり低いレベルであり、状況によっては、実際のレジストリにアクセスする必要があります。カーネルモードでZwCreateKeyを呼び出すのがWindowsセキュリティを迂回するように見えるのはなぜですか?私が一緒に仕事
我々は彼らのフックを回避する当社に代わって、ZwCreateKey
、などを呼び出すために私たち自身のカーネルドライバを使用しての可能性を模索しています。これは基本的に、NT Legacyドライバと独自のネイティブレジストリ機能を提供するユーザーモードライブラリを作成することを意味していました。ライブラリとドライバは、我々は単にそれから、我々はコールのカーネルバージョンを呼び出し、結果を返す私たちの運転手にZwCreateKey
のすべてのパラメータなどを渡すためにIOCTLを使用し、非常に単純です。
アプローチがうまく機能している、と私たちは今、仮想化されたときに、実際のレジストリへの書き込み/読み取りのシステムを持っているように見えます。唯一の問題は、新しいシステムがWindowsのセキュリティをレジストリオブジェクトに引き継いでいるように見えることです。
ZwCreateKey
はそうのようなアクセスマスクを取ります
NTSTATUS ZwCreateKey(
__out PHANDLE KeyHandle,
__in ACCESS_MASK DesiredAccess,
__in POBJECT_ATTRIBUTES ObjectAttributes,
__reserved ULONG TitleIndex,
__in_opt PUNICODE_STRING Class,
__in ULONG CreateOptions,
__out_opt PULONG Disposition
);
私の理解では、我々は今、カーネルモードで実行されていたが、我々はまだユーザーのトークンのコンテキストを持っていたということでした。これは、カーネルバージョンZwCreateKey
が、アクセスマスクテストが失敗した場合にユーザが持つように失敗することを意味するはずです。実際に何が起こっていることは、当社のドライバが呼び出されたときに限られたユーザーが起動したときにも、限られたトークンを使用して、それが制限された部品HKLMのキーを作成することができるということです。何がありますか? ACLを実行して自分自身をチェックする必要がありますか?カーネルモードで自分の特権を制限するために何かする必要がありますか?どんな助けでも大歓迎です。説明のための
Ahah 、はい、PreviousModeが問題になる可能性があります。 – Benj
Windowsの内部のアレックスIonescuは以前のモードをカバーしています:http://www.alex-ionescu.com/BH08-AlexIonescu.pdf、彼はすべてのシステムコール基本的に私がやっていることです)は以前のモードを設定し、以前のモードの呪文を "危険"に設定してはいけません。非常に劇的で優れたアドバイス:-) – Benj