22

過去数年間で、マルウェア(およびMetasploitのmeterpreterペイロードなどの一部の侵入テストツール)は、リフレクティブDLLインジェクション(PDF)を使用してDLLをプロセスのメモリにロードし始めました。利点は、ファイルがディスクに書き込まれることがなく、検出が難しいことです。私が見た多くの例は、JoachimBauchの作品に基づいています。

ただし、DEF CON 20で、Andrew Kingは、リフレクティブDLLインジェクションを使用してDLLインジェクションを検出できることを実証しました。彼のプレゼンテーションは「反射注入の検出」と呼ばれていました。残念ながら、彼はソースコードをリリースしていません(彼は確かにそれを行う義務はありません)。

更新:どうやら私はそれを見逃したようですが、アンドリューは数年前にこの作業をオープンソース化しました:https ://github.com/aking1012/dc20

さらに、「Antimeter」と呼ばれるツールは、反射型dllインジェクションを使用してロードされたときにmeterpreterエンジンを検出できます。繰り返しますが、クローズドソースです。

Andrew KingのツールとAntimeterはどちらもPythonで記述されており、実行中の実行可能ファイルのメモリを列挙するためにpydbg/pydasmを使用していることを理解しています。

リフレクティブDLLインジェクションを検出する方法を示す一般的なソースコード(Python、C、Delphiなど)を共有しても構わないと思っている人はいますか?メモリダンプを分析してこれを見つけることができるメモリフォレンジックツールがありますが、実行中のシステムでアプリケーションを実行し(antimeterのように)、反射的に挿入されたDLLを持つプロセスを見つけようとしています。

リフレクティブDLLインジェクションがどのように機能するかを理解することに興味がある場合は、これを行う方法を示すDelphiで記述されたオープンソースコードがいくつかあります。

更新:テストしたところ、管理者権限なしで(そして通常のユーザーとして)DLLをリフレクティブに挿入できますが、もちろんユーザーとしては、同じ整合性レベルで(そして私のセッションで)実行されているプロセスにのみ挿入できます...しかし、 Officeスイート、InternetExplorerなどのアプリケーションも引き続き対象です。

4

1 に答える 1

4

VirtualProtectAPIをフックするのはどうですか。それ自体をロードするDLLは、確実にそのメモリコード範囲で実行を設定するためです。これは、(おっしゃるように)ユーザーアクセス権を使用するため、プロセスユーザースペースAPIを使用する必要があるためです。

NTSYSAPI NTSTATUS NTAPI ZwProtectVirtualMemory(
    IN HANDLE ProcessHandle,
    IN PVOID *  BaseAddress,
    IN SIZE_T *     NumberOfBytesToProtect,
    IN ULONG    NewAccessProtection,
    OUT PULONG  OldAccessProtection 
);

プログラムの最初でそれをフックすると、疑わしい保護呼び出し(コードの実行を可能にする呼び出し)を除外できます。次に、要求されたページの前にあるPEヘッダーなどをスキャンして、ロード可能なモジュールであることを確認します...注:LoadLibraryがカーネル空間内でこれを処理するため、これは通常のDLLでは呼び出されないと思います。右?TODO:確認する

通常、PEヘッダーは0x1000(4096)バイトまたは最初の実行可能コードの1ページ前にあります。したがって、非常に基本的なアプローチは、「MZ」タグをスキャンすることです。

char* pe = ((char*)BaseAddress) - 0x1000;
if ((NewAccessProtection == PAGE_EXECUTE || ... ) & pe[0] == 'M' && pe[0] == 'Z')
{
    // do checks here
}

APIフックに関する詳細情報が必要な場合は、ネット上の大量の記事を尋ねるか読んでください。もう1つのフッキング候補は、FlushInstructionCache(...)です。しかし、x86アーキテクチャでこれを呼び出す理由がないため、Blizzardだけがこれを監視用アンチチートモジュールに使用していると思います。

... ちょっとした考え、

意思

于 2012-10-05T13:07:41.450 に答える