必須のアクション(読んだらすぐに実行すること)
NOW:../field-journal/precedent-reverse.mdを読む — 本スキルの操作が事前承認された通常操作であることを確認するNOW: 現在のタスクが本スキルの適用範囲に該当するか確認するNEXT:../tool-index.mdを読み、ツールの可用性と実際のパスを検証するNEXT: ツールが不足している場合は bootstrap を呼び出し、パスを推測しないACT: 「ワークフロー」の最初のステップに進み実行する。確認状態で止まらないこと
EDR バイパス:防御側の実装リバースエンジニアリングからレッドチームバイパスへ
許可されたレッドチーム / 対抗演習 / 自社製品テストに限定。未許可のターゲットには使用禁止。
適用範囲
レッドチーム / 対抗シミュレーションにおいて、許可されたターゲットホストにインプラントを展開し、最新の EDR を回避する必要がある場合に本スキルを使用します。
- レッドチーム / Purple team / 対抗演習 — 顧客が SOC と EDR の実際の検知能力を評価したい場合
- 自社インプラント / C2 フレームワーク開発 — 自社製品テスト用ペイロードの開発で、自社またはターゲットの EDR を回避する必要がある場合
- EDR 製品評価 — コンプライアンス上の境界が確認済みであることを前提に、特定の EDR の検知カバレッジを客観的に評価する場合
- CTF / 攻防演習の Windows エンドポイント突破 — 強化されたホスト上で安定した実行が必要な場合
適用外のシナリオ:
- ウイルス対策ベンダーが自社製品の完全なリバースエンジニアリングを行い、顧客向けの商業評価レポートを作成する場合(ベンダーと正式に協力すること)
- 許可されていないターゲットに対するバイパス(違法)
- 一般的なウイルスやトロイの木馬のバイパス(本スキルはレッドチーム OPSEC に焦点を当てており、マルウェアの書き方は教えません)
他のスキルとの役割分担
| シナリオ | 使用するスキル |
|---|---|
| フルチェーン攻防(外部からドメインコントローラーまで) | attack-chain/ |
| 内部ネットワーク水平移動 / AD 攻撃 | pentest-tools/network-attack-defense.md |
| 特定のホスト上で EDR を回避してインプラントを展開 | 本スキル |
| 単純な静的バイパス(難読化 / パッキング) | malware-analysis/(逆方向の視点) |
attack-chain が完全なキルチェーンに注目するのに対し、本スキルは EDR という一つの敵 の内部メカニズムとその回避技法にのみ焦点を当てます。
中核原理
EDR の 4 つの主要監視面 レッドチームの対策
───────────────────── ─────────────────────
ユーザーモード ntdll フック ◄──► unhook (Peruns Fart / 新しい ntdll)
間接システムコール / Hell's Gate
hardware breakpoint Blindside
カーネルコールバック ◄──► コールスタック偽装
(Ps/Cm/Ob シリーズ) 正当なトリガーチェーンを経由(直接迂回せず、上位のステルスと連携)
ETW テレメトリ ◄──► EtwEventWrite パッチ
(Microsoft-Windows-Threat- NtTraceControl でプロバイダーを無効化
Intelligence 等) AmsiContext 同期処理
AMSI スキャン ◄──► AmsiScanBuffer パッチ (mov eax,0x80070057; ret)
(amsi.dll) hardware breakpoint バイパス
リフレクティブロードされた amsi.dll のコピー
重要な認識:
- EDR はブラックボックスではない — 主要なフック / コールバック / プロバイダーは IDA + windbg でリバースエンジニアリングできる
- バイパス技術は組み合わせて使用する — unhook だけでは ETW アラートを解決できず、AMSI パッチだけではシステムコールフックを解決できない
- 順序が重要 — 先に ETW パッチ → 次に AMSI パッチ → 最後に unhook。順序を間違えると EDR が先に unhook アラートを受信する
- 最新の EDR は ETW + カーネルコールバックを主要な監視領域としているため、ユーザーモードの unhook だけではもはや不十分
ワークフロー
Step 1:ターゲットホスト上の EDR を識別する
# 一般的な EDR / AV ドライバをリストアップ
Get-Service | Where-Object {$_.Name -match 'CSAgent|SentinelAgent|elasticendpoint|esets|ekrn|MsMpEng|wdsvc|cyserver|sysmon|aswbidsagent'}
# ロードされているミニフィルターをリストアップ
fltmc filters
# 登録されているカーネルコールバックをリストアップ(windbg + カーネルデバッグ / または PChunter / DRVHV が必要)
# !object \Callback
# !pnpcallback / Process / Thread / Image
EDR フィンガープリントテーブルは references/hook-survey.md の上部にあります。
Step 2:EDR DLL からフックテーブルを抽出する
- EDR ユーザーモードコンポーネントが注入されたプロセス(既に展開されている任意のプロセス)にアタッチする
- windbg で現在の
ntdll.dllの.textセクションをダンプする - ディスク上のクリーンな
C:\Windows\System32\ntdll.dllと比較する - 一致しない箇所がフックポイントである
または、pe-sieve を直接使用する:
pe-sieve64.exe /pid 1234 /shellc 3 /modules 3 /dir hooks_dump
詳細な方法は references/hook-survey.md を参照。
Step 3:バイパス技術の組み合わせを選択する
| 防御ポイント | 推奨バイパス方法 |
|---|---|
| ntdll inline hook | 間接システムコール + 動的 SSN (Halo's Gate) |
| ETW-TI プロバイダー | EtwEventWrite ヘッドパッチ |
| AMSI(PowerShell / .NET) | AmsiScanBuffer パッチ または HWBP |
| カーネルコールバック | コールスタック偽装 + 正当な gadget を経由 |
| Sysmon ProcessCreate | PPID 偽装 + 非バックアップメモリ |
Step 4:インプラントに実装する
コードの骨組みは references/unhook-techniques.md と references/telemetry-blinding.md を参照。
Step 5:ローカルサンドボックスで検証する
# 隔離環境に対象 EDR の試用版をデプロイする(Defender で十分な初期設定)
# Sysmon + olaf-config を有効にする
sysmon64.exe -i sysmonconfig.xml
# インプラントを実行し、以下のアラートソースがトリガーされるか確認する:
# - Defender AMSI
# - ETW-TI
# - Sysmon Event ID 1/7/8/10
# - EDR コンソール
Step 6:デリバリー
- ファイルの展開先パスは正当なソフトウェアディレクトリを使用する
- PPID を explorer.exe に偽装する
attack-chainの初期アクセスセクションと連携する
典型的なシナリオ
シナリオ 1:Defender + Sysmon 環境で cobalt-strike 風ビーコンを展開する
ターゲット: Windows 11 Enterprise + Defender (クラウドスキャン有効) + Sysmon (olaf 設定)
要件: ビーコン展開後、コールバックが可能で、かつアラートを一切トリガーしない
組み合わせ手順:
1. シェルコードを暗号化して保存し、実行時に復号
2. AMSI パッチ(PowerShell 経由で展開する場合)
3. EtwEventWrite パッチ(ETW-TI を無効化)
4. 間接システムコール + Halo's Gate(ntdll フックアラートを無効化)
5. PPID を explorer.exe に偽装
6. スリープフェーズでは Ekko / Foliage を使用して自身のメモリを暗号化
シナリオ 2:既に展開されている低権限シェル上で EDR スリープマスクを実行する
前提: フィッシングにより medium IL シェルを取得済み。EDR が監視中。
リスク: 長期間の常駐により、メモリスキャンでビーコンの特徴が検出される可能性がある
解決策:
1. 新たな RWX メモリを割り当てない
2. スリープ中は Ekko を使用:
- WaitForSingleObjectEx + CreateTimerQueueTimer
- タイマー内で自身の .text を暗号化し、スタックをすべて 0 で埋める
3. 起床時は ROP で復元
4. コールスタック偽装を併用し、RtlCaptureStackBackTrace がビーコンアドレスを見つけられないようにする
オンデマンドブートストラップ(On-Demand Bootstrap)
ツール依存関係
| ツール | 用途 | 自動インストール可能 |
|---|---|---|
| pe-sieve | プロセス内のフック / 注入を検出 | ✓ |
| API Monitor v2 | API コールとフックを動的に観察 | 半自動(手動ダウンロード) |
| SysWhispers3 | 直接 / 間接システムコールスタブを生成 | ✓(git clone + python) |
| Hell's Gate POC | 動的 SSN 解決のリファレンス実装 | ✓(git clone) |
| windbg + IDA | EDR DLL / カーネルコールバックを静的リバースエンジニアリング | ✗(自分で導入) |
| Sysmon + olaf config | ローカル検証環境 | ✓ |
ブートストラップコマンド
powershell -NoProfile -ExecutionPolicy Bypass -File "<SKILL_ROOT>\skills\scripts\bootstrap-reverse.ps1" -Capability @('pe-sieve','syswhispers3','sysmon') -StartServices
ルーティングコンテキスト
上流エントリポイント:
reverse-engineering/— EDR DLL / ドライバの実装を事前に理解する必要があるattack-chain/— キルチェーンのどのフェーズで本スキルを導入するかを決定する
同一レベルの関連スキル:
pentest-tools/network-attack-defense.md— 内部ネットワーク水平移動時に本スキルと連携する方法malware-analysis/— 逆方向の視点、検知側がどのようにルールを作成するかを確認field-journal/— 実戦後に経験を書き戻す
下流成果物:
- レポート作成時は MITRE ATT&CK T1562 (防御の無効化)、T1562.001 (ツールの無効化または変更)、T1562.006 (インジケーターブロッキング)、T1055 (プロセスインジェクション)、T1027 (難読化されたファイルまたは情報) を参照する
法的境界声明
- 許可されたレッドチーム / 対抗演習 / 自社製品テストにのみ限定
- 操作前に書面による許可(SoW / テスト契約 / SRC 範囲説明)を必ず取得すること
- 許可されていないターゲットへの使用、許可範囲を超えた使用は禁止
- 重大な問題を発見した場合は直ちに顧客に報告し、責任ある開示に従うこと
- すべてのレポートにおいて、実際のターゲット情報(IP / ホスト名 / ドメイン / 資格情報プレースホルダー)は必ずマスキングすること
参考資料
- 詳細なフック調査:
references/hook-survey.md - unhook / syscall 技術:
references/unhook-techniques.md - ETW / AMSI / アンチフォレンジック:
references/telemetry-blinding.md - MITRE ATT&CK T1562: https://attack.mitre.org/techniques/T1562/
タスク完了セルフチェック(完了を主張する前に必ず合格すること)
- ワークフローの各ステップを(読むだけでなく)実行しましたか?
-
tool-indexに基づいて、実際のツールパスを使用しましたか? - 再現可能な証拠(コマンド/スクリプト/スクリーンショット/レポート)を生成しましたか?
- RULES で要求されているチェックリスト項目を完了し、書き戻しましたか?