2010-12-08 10 views
0

DetourXSと呼ば​​れる関数迂回パッケージを使用するコードを見ています。私のアプリケーションは、Microsoft Serverオペレーティングシステムを対象としています。 Microsoft ResearchにはDetoursパッケージもあり、その仕組みについての記事があります。メモリにロードされたマシンコードにパッチを当て、新たに挿入されたコードに無条件にジャンプするコードを挿入します。関数の迂回パッケージがセキュリティを迂回する方法

実行時にマシンコードを変更してこのコードを動作させる場合は、オペレーティングシステムによるセキュリティ制限を受ける必要があります。カーネル32のような重要なDLLを修正して、私が望むことをすることができるようになると、これはOS上の重大なセキュリティ上の問題となります。私の理解は、ユーザープロセスが既にメモリにロードされているDLLのコードを変更しようとすると、OSによって停止されるはずです。このチェックを有効または無効にする設定はWidows Server OSにありますか?

これをどのように克服しますか?

エンタープライズプロダクション環境のどのアプリケーションでも、この種の迂回パッケージを使用した経験がありますか?

+0

Microsoftは、Detoursを使用する場合、お客様またはお客様からのサポート呼び出しを考慮しません。そしてあなたのアプリケーションがそれを使用しているという事実は、あなたのアプリケーションを_marker_ DLLにリンクさせることによって人為的に明示されます - ** Detoured.dll ** – Andrey

答えて

1

最初に重要なことは、迂回路での手順を変更することです。。あなたのプロセスでは、とにかく何でもしてもいいし、何かを迂回する必要もなく、OSの観点から、ユーザ空間コード(DLL内のコードやシステムのkernel32.dll内のコードなど)はまさにセキュリティの観点からも同じです。理由は簡単です.OSのセキュリティをハッキングすることは、ユーザー空間でプロセスのコードを変更することと同じではありません。 OSは、プロセスにあまりにも多くの電力を与えないことで、自分自身を保護します(管理者として実行している場合を除く)。セキュリティ上の目的で、別のプロセスのコードを変更して(パスワードなどの特権や興味深いデータを得るために)、もっと面白いですが、別の議論の対象です。

第2に、detouringはホットパッチを実装する方法、すなわち重要なシステムサービスを再起動せずにオンザフライでパッチする方法と考えられていました。私はそれが現在Microsoft(Google によるとによる)によって使用されているかサポートされているかわからないが、標準プロローグの長さが5バイトであることは偶然ではない(はい、jmp命令を置くのが理想的) 。

1

その名前にもかかわらず、kernel32.dllではありません。実際にはカーネルです。 NTシステムコールに対するWin32のインターフェイスを実装するWin32 API関数へのエントリポイントが含まれています。

さらにWindowsはコピーオンライトをサポートしているので、迂回を使用してkernel32.dllのような共有DLLにパッチを当てた場合、OSはまず自分のプロセスのプライベートコピーを作成してパッチを適用します。 NTカーネル自体は完全に安全です。

関連する問題