
テンプレート駆動型AV/EDR回避フレームワーク
🚩 これはInceptorの公開リポジトリです。最新バージョンとアップデートについては、https://porchetta.industries/ からサポートをご検討ください。
このプロジェクトをスポンサーしていただき、Inceptorの最新アップデート、最新の修正、最新機能を入手したい場合は、https://porchetta.industries/ でサポートをお願いします。
Discordでおしゃべりしましょう!
NW: 現在テンプレートエンジンの改良に取り組んでいます!次のバージョンをリリースし次第、ツールの使用方法、カスタマイズ方法、拡張方法についての説明がWikiで利用可能になります。
現代のペネトレーションテストやレッドチーム活動では、標的でコードを実行するために一般的なAV/EDR製品を回避する必要があることがよくあります。時が経つにつれ、防御はより複雑になり、一貫してバイパスすることが本質的に困難になっています。
Inceptorは、このプロセスの大部分を自動化し、うまくいけばそれ以上の労力を必要としないツールです。
Inceptorは、Windows向けのテンプレートベースのPEパッカーです。ペネトレーションテスターやレッドチームが一般的なAVおよびEDRソリューションをバイパスするのを支援するように設計されています。Inceptorは使いやすさに重点を置いて設計されており、ユーザーによる広範なカスタマイズが可能です。
何が実装され、なぜなのかをよく理解するには、以下のリソースを参照すると役立つかもしれません。
Inceptorは、さまざまなオープンソースコンバーターを使用して、既存のEXE/DLLをシェルコードに変換できます。
Inceptorは、さまざまな方法でシェルコードをエンコード、圧縮、暗号化できます。ツールの開発中、私はローダー非依存(LI)エンコーディングとローダー依存(LD)エンコーディングを区別し始めました。
ローダー非依存エンコーディングは、ユーザーが選択したテンプレート(ローダー)によって管理されないエンコーディングの一種です。これは通常、デコードスタブがテンプレートの一部ではなく、シェルコード自体に埋め込まれていることを意味します。 Inceptorはこの種の機能を、オープンソースツールsgnを使用して提供します。これはペイロードをポリモーフィックにし、一般的なシグネチャ検出で検出不可能にするために使用されます。
強力ではありますが、Shikata-Ga-Naiは特定のテンプレートにはあまり適していません。そのため、Inceptorはローダー依存エンコーダーも実装しており、ローダーがデコードを担当するように設計されています。したがって、LDエンコーダーはテンプレートに直接デコードスタブをインストールします。この種のエンコーダーは、Inceptor内で実装されているように、「チェーン可能」であり、ペイロードをエンコードするために連結できます。
エンコーダーのチェーンを使用すると、特定のペイロードの難読化が改善されることがありますが、この手法では複数のデコードルーチンが露出する可能性があり、防御側がそれらに対するシグネチャを設計するのに役立つ可能性があります。そのため、Inceptorは最終的なアーティファクトを難読化する複数の方法を提供し、リバースエンジニアリングプロセスを強化します。
現在のところ、公開バージョンのInceptorには以下のエンコーダー/圧縮機/暗号化機が用意されています。
Inceptorはエンコードチェーンを静的に検証すると同時に、デコーダーの入出力タイプを静的にチェックし、独立した実装で動的に実装を検証することもできます。
いつでも、ユーザーはchain-validate.pyユーティリティを使用してチェーンを簡単に検証できます。
InceptorはAV回避メカニズムもネイティブに実装しており、「モジュール」(プラグイン)の形でペイロードにAV回避機能を含めるオプションを提供します。
埋め込むことができるプラグインは以下の通りです。
Inceptorは、フルアンフック、ダイレクトシステムコール呼び出し、手動DLLマッピングなどのEDR回避メカニズムも実装しています。ダイレクトシステムコールは、TheWoverによる優れたプロジェクト「DInvoke」を使用してC#で実装されています。 C/C++では、システムコールはJackson_TによるSysWhispersおよびSysWhispers2プロジェクトを使用して実装されています。さらに、Inceptorはx86システムコールも内蔵サポートしています。
AVバイパス機能と同様に、これらの機能はモジュールとして有効にできますが、それらをサポートするテンプレートで動作させる必要がある点が異なります。これまでに実装された技法は以下の通りです。
Inceptorは、ConfuserExやChameleonなどの外部ユーティリティを使用したペイロードの難読化をサポートしており、LLVM-Obfuscatorを使用したC/C++の難読化もサポートしています。LLVM-Obfuscatorは、LLVMコンパイルプラットフォームを使用したIRベースの難読化ツールです。
Inceptorのもう一つの機能は、CarbonCopyツールを使用して、結果のバイナリ/DLLにコード署名できることです。 通常、コード署名証明書で署名されたファイルは、あまり厳密に分析されません。多くのアンチマルウェア製品は、これらの証明書を検証/確認しません。
完全なワークフローは、次の高レベルかつ簡略化されたスキームで要約できます。

InceptorはWindows上で動作するように設計されています。update-config.pyユーティリティは、必要なMicrosoftバイナリを見つけて、設定を適宜更新します。Microsoft Build Tools、Windows SDK、Visual Studioのインストールが必要になる場合があり、update-config.pyは、必要な依存関係のインストール方法をユーザーに案内します。
git clone --recursive https://github.com/klezVirus/inceptor.git
cd inceptor
virtualenv venv
venv\Scripts\activate.bat
pip install -r requirements.txt
cd inceptor
python update-config.py
現在のバージョンのInceptorは、単純な命名規則(テンプレート名は変更しないでください)と、ユーザーが指定した引数のセットを使用して特定のテンプレートを見つけます。引数の中にはローダー(-t)もあります。指定されていない場合、ローダーは以下の簡単なスキームに従って、パックするファイルの関数として選択されます。
$ python inceptor.py -hh
[*] デフォルトローダー
入力ファイル拡張子 特別条件 推測されるファイルタイプ デフォルトローダー デフォルトテンプレート
0 .raw NaN シェルコード 簡易ローダー Classic
1 .exe .NET Dotnet実行可能ファイル Donut Classic
2 .exe NaN ネイティブ実行可能ファイル Pe2Shellcode PE Load
3 .dll NaN ネイティブライブラリ sRDI Classic
アーティファクトの動作を誤解しないために、テンプレート名の規則を理解することも非常に重要です。
$ usage: inceptor.py [-h] [-hh] [-Z] {native,dotnet,powershell} ...
inceptor: 一般的なAVおよびEDRソリューションをバイパスするために
レッドチームオペレーターを支援するように設計された、WindowsベースのPEパッキングフレームワーク
位置引数:
{native,dotnet,powershell}
native ネイティブバイナリジェネレーター
dotnet .NETバイナリジェネレーター
powershell PowerShellラッパースクリプトジェネレーター
オプション引数:
-h, --help このヘルプメッセージを表示して終了
-hh 機能テーブルを表示
-Z, --check ThreatCheckでファイルをチェック