
DLLサイドローディングは、プログラムの動作に必要なライブラリをロードするなど、正当な目的で使用されることもありますが、悪意のある目的にも使用される可能性があります。攻撃者は、DLLサイドローディングを使用して、多くの場合、DLLをロードするために使用される正当なアプリケーションの脆弱性を悪用し、対象システム上で任意のコードを実行する可能性があります。
DLLサイドローディングプロセスを自動化し、より効果的にするために、EDR/AV製品を回避するための回避手法を含むツール、Chimeraが作成されました。このツールは、ランダムキーによるXORでシェルコードを自動的に暗号化し、Visual Studioにインポートして悪意のあるDLLを作成するためのテンプレートイメージを作成できます。
また、SysWhispers3の動的Syscallと、EDRが検索するパターンを回避するために修正されたアセンブリバージョンが使用され、ランダムなNOPスレッドが追加され、レジスタが移動されます。さらに、Early Bird Injectionも使用され、ユーザーが指定できる別のプロセスにシェルコードを注入します。これには、ハードディスクチェックやプロセスがデバッグ中かどうかの確認などのサンドボックス回避メカニズムも含まれます。最後に、ローダーにはタイミング攻撃が仕込まれており、待機可能タイマーを使用してシェルコードの実行を遅延させます。
このツールはテスト済みであり、EDR/AV製品をバイパスし、対象システム上で任意のコードを実行するのに効果的であることが示されています。
Chimera Unleashedの更新バージョンは、静的解析と動的解析の両方を回避する点で顕著な進歩を示しており、特にMicrosoft 365のEndpoint Detection and Response (EDR)システムのコンテキストにおいて顕著です。このツールのサイドローディング技術は、OneDriveのようなよく知られたバイナリに適用された場合でも、検出を免れました。ただし、サイドローディングの側面は検出されなかったものの、ツールで採用されているEarly Bird InjectionプロセスはEDRシステムによって識別されたことに注意が必要です。これは、ツールの全体的なステルス機能をさらに強化するための改良の余地があることを示しています。
主な更新内容と機能:
ChimeraはPython3で記述されており、追加の依存関係をインストールする必要はありません。
Chimeraは現在、Microsoft TeamsまたはMicrosoft OneDriveの2つのDLLオプションをサポートしています。
userenv.dllを作成できます。これはMicrosoft Teamsに存在しないDLLであり、以下の特定のフォルダに挿入されます。
%USERPROFILE%/Appdata/local/Microsoft/Teams/current
Microsoft OneDriveの場合、スクリプトはバージョンDLLを使用します。これは、onedriveupdater.exeのようなバイナリに存在しないことが一般的であるためです。
Chimera Unleashedは、コマンドライン引数の解析にargparserを使用します。以下の引数が利用可能です:
--raw または -r: シェルコードを含むファイルへのパス。必須。--path または -p: Cテンプレートファイルの出力先パス。必須。--pname または -n: シェルコードを注入するプロセスの名前。必須。--dexports または -d: 使用するDLLエクスポートを指定します('teams' または 'onedrive')。必須。--enc または -e: 優先する暗号化方式を指定します(XOR / AES)。必須。--inj または -i: 優先するインジェクション手法を指定します(EB / MS)。必須。--rshell または -s: [オプション] シェルコード変数名を一意の名前に置き換えます。デフォルトは 'encoded_shell' です。使用例: python Chimera.py --raw <path_to_shellcode> --path <output_path> --pname <process_name> --dexports <exports_file> --enc AES --inj EB --rshell my_shellcode
コンパイルプロセスが完了すると、DLLが生成されます。このDLLは、OneDriveの場合は "version.dll"、Microsoft Teamsの場合は "userenv.dll" のいずれかを含む必要があります。次に、元のDLLの名前を変更する必要があります。
たとえば、元の "userenv.dll" は "tmpB0F7.dll" に、元の "version.dll" は "tmp44BC.dll" に名前を変更する必要があります。さらに、デフォルトのスクリプト名を使用する代わりに、DLLエクスポートのソースコードを変更することで、プロキシDLLの名前を必要に応じて変更することもできます。
code.hファイルにはシェルコードが含まれています。
ステップ1: DLLテンプレートを使用した新しいVisual Studioプロジェクトの作成


ステップ2: Visual Studioプロジェクトへのファイルのインポート
ステップ3: ビルドのカスタマイズ
ステップ4: MASMの有効化

ステップ5:


ステップ1: 最適化の変更

ステップ2: デバッグ情報の削除

オリジナルコントリビューター:
コントリビューター:
適用される法律で認められる最大限の範囲において、私(George Sotiriadis)および/または私のリポジトリにコンテンツを提出した関連会社は、間接的、偶発的、特別、結果的または懲罰的損害、または逸失利益または収入、直接的または間接的に発生するかどうかを問わず、データ、使用、のれん、またはその他の無形の損失の損失について、以下に起因する場合に責任を負わないものとします。(i) お客様の本リソースへのアクセスおよび/またはアクセス不能 (ii) 本リソースによって参照される第三者の行為またはコンテンツ(これには、他のユーザーまたは第三者の名誉毀損、攻撃的、または違法な行為またはコンテンツが含まれますが、これに限定されません) (iii) 本リソースから取得したコンテンツ
https://evasions.checkpoint.com/
https://github.com/Flangvik/SharpDllProxy
--rxor-x--rkey または -k: [オプション] キー変数名を一意の名前に置き換えます。デフォルトは 'key' です。--rsleep または -z: [オプション] 実行中に含める合計スリープ時間(秒)。デフォルトは4000です。--size または -f: [オプション] ジャンクデータのファイルサイズ(KB)。ゼロ(0)は無効、1はランダムなファイルサイズ。デフォルトは0です。