隠蔽されたコード実行
Hunt & Hackett は、Windows上でコード実行を隠蔽する攻撃手法を説明するツールセットと技術文書を提供しています。ここでは、これらの手法がどのように機能するかの説明、検出に関するアドバイス、そして検出範囲をテストするためのサンプルソースコードを入手できます。
目次
このリポジトリは、Windows内部メカニズムを多用する2つのクラスの攻撃手法をカバーし、それらを検出するための提案とツールを提供します。
このプロジェクトの核となる価値観:
- 体系的なアプローチ。このリポジトリは、単なるツールコレクションや外部リソースへのリンク以上のものを含んでいます。各テーマは基礎となる概念の詳細な説明を受け、それぞれの具体的なケースは一般的なカテゴリに分類されます。
- 概念実証ツール。解説記事には、説明された機能の実践的な使用を示すC言語のサンプルプロジェクトが付属しています。
- 初心者からプロフェッショナルまで。説明している概念を理解するためにサイバーセキュリティの専門家である必要はありません。しかし、該当分野の専門家でさえ、細部への注意と落とし穴の説明により、内容を価値があり教育的だと感じるはずです。
実装
このプロジェクトの最後の際立った特徴は、サンプル全体でNative APIを広範囲に使用していることです。この選択の動機は以下の通りです:
- 機能性。最も高度な手法(Process Tamperingなど)に必要な一部の操作は、他のAPIを介して公開されていません。
- 制御。オペレーティングシステムとの相互作用の最下層であるため、その動作を最も細かく制御できます。Win32 APIはNative APIの上に実装されているため、前者で達成可能なことは後者でも可能です。
- 可用性。ntdll.dllによって公開されているため、Native APIはシステムプロセスを含むすべてのプロセスで利用可能です。
- 一貫性。このAPIによって公開されるインターフェースは驚くほど一貫しています。基本的な設計上の選択を学べば、API名だけからほとんどの関数プロトタイプを正しく推測することが可能になります。
- フッキングへの耐性。Native APIを使用すると、ユーザーモードのフックを削除またはバイパスすることがはるかに容易になり、セキュリティソフトウェアを部分的に盲目にします。パッチされる可能性のある下位レベルのライブラリがないため、フック解除はntdll.dllの2番目のインスタンスをロードしてそこに呼び出しをリダイレクトするのと同じくらい簡単になります。
コンパイルに関する注意
サンプルコードは、PHNT プロジェクトが提供するNative APIヘッダーを使用しています。この依存関係を取得するために、git clone --recurse-submodules コマンドを使用してリポジトリをクローンしてください。あるいは、リポジトリをクローンした後に git submodule update --init を使用することもできます。
リポジトリに含まれるプロジェクトをビルドするには、最新の Windows SDK が必要です。Visual Studio を使用する場合は、内蔵のSDKインストールを参照してください。あるいは、EWDK のスタンドアロンビルド環境を使用することもできます。すべてのツールを一度にコンパイルするには、MSBuild AllTools.sln /t:build /p:configuration=Release /p:platform=x64 を使用してください。