web-dev-qa-db-ja.com

悪意のあるDLLをexeファイルに挿入して実行する方法

特定のシステムのすべての脆弱性を見つけようとしています。

悪意のあるユーザーが実行可能ファイル(.exeファイル).NETアプリケーション(C#)の悪意のあるDLL彼または彼女が作成したものです。DLLを実行ファイルに挿入して実行できますDLLに含まれるコード?

5
Mr. Question

Dllインジェクションに関する ウィキペディアの記事 は、さまざまな手法の要約をうまく行っています。

要約する:

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLsの下にdllをリストすると、user32.dllにリンクするすべての(新しい)プロセスにロードされます(つまり、ほぼすべてのユーザーモードプロセス)。
  • ライブラリをパスで誤ってロードする関数の弱点を悪用する(通常、ターゲットプロセスによってロードされたdllを検索パスの上位に配置する)、または単に既存のライブラリを独自のものに置き換える。
  • CreateRemoteThread または CreateRemoteThreadEx を使用します。これはもう少し複雑(そして興味深い)ですが、既存のプロセスに対してそれを行うことができます。
  • SetWindowsHookEx 経由。これは、実行中のプロセスIMNSHOに対してこれを行う最も簡単な方法です。
  • スレッドを一時停止し、そのコンテキストを独自のコードに切り替える。
  • shim と書きます。
4
Stephane

はい、それを行うにはいくつかの可能性があり、攻撃の非常に大きな部分はDLLフッキングに基づいています。

そして、これは原因でもあります。なぜ、より新しい、より新しいバージョンのWindowsには、通常、dllの処理に関するより厳格で厳格なポリシーが含まれているのですか。

主な目的はfake dllを構築することです。これは、一部のAPI呼び出しを元のdllでラップするだけで、他のことも行います。攻撃者の目標は、そのような場合、元のバージョンに対して、クラックされるアプリケーションによって偽のdllをロードできるようにすることです。

このソリューションの代替手段は、元のDLLが何らかのタイプのバイナリハックを取得した場合です。難しいです。

フックされたdllの内部動作は次のとおりです。

  • オープン時:dllopen()呼び出しで元の変更されていないdllも開き、その中のapi呼び出しのアドレスも見つけます
  • フックされたapi呼び出しの偽バージョンも含まれています

フックされたdllをアプリに挿入するにはどうすればよいですか?

最も一般的な解決策は、フックされるexeが存在するのと同じディレクトリにこれを置くことだけです。実行可能ファイルを開始すると、Windowsは常に同じディレクトリでそのDLLを最初に探します。これは、ほとんどのソフトウェアコピー保護/アクティベーションクラックによって行われます。

2番目の可能性は、ラッパーDLLをPATHのどこかに、ただしC:\windows\...の前に置くことです。 DLLは、実行可能ファイルとしても、PATHで検索されます。

3番目の可能性は、デバッガー、または本来デバッグ用のWindows APIを使用することです。それを使用して、実行中のexeのdll開始コードを操作できます。それも本当に便利ですが、それも難しいです。