threat-hunting について
threat-huntingは、アラートを回避した攻撃者を能動的に探すセキュリティスキルです。調査権限を持つアナリスト向けに、仮説に基づいて調査し、その結果を検知ルール、記録、ログ収集範囲の改善につなげます。
主な機能
- 01具体的で検証可能かつ範囲の明確な仮説
- 02指標、手法、異常に基づくハンティング
- 03エンドポイント、ネットワーク、クラウド、IDの調査
- 04結果をルール、記録、カバレッジ改善に反映
活用シーン
- 01特定のATT&CK手法に対応する挙動の検索
- 02不審な指標に接触したホストやユーザーの追跡
- 03サービスアカウントの不自然なログイン地域の調査
- 04悪意ある活動の確認後にインシデント対応へ引き継ぎ
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ briiirussell/ cybersecurity-skills --skill threat-huntingインストール後、Claude Code で/threat-huntingを入力して読み込まれたか確認します。
詳細
脅威ハンティング — プロアクティブな攻撃者の検出
すでに侵入しているものの、アラートを発生させていない攻撃者を探します。incident-triage(リアクティブで、アラートが発生中)や、siem-detection(今後アラートが発生するようにルールを設計する)とは異なります。このスキルはプロアクティブなレイヤーです。何かが検知をすり抜けたと想定し、それを探します。
ハンティングは仮説主導であり、探索主導ではありません。「SIEMを見て回ろう」はハンティングではありません。「OfficeプロセスによってT1059.001(PowerShell)が起動されるという特定のパターンを調べよう」がハンティングです。
相互参照:siem-detection(ここで作成するクエリは、多くの場合、最終的に検知ルールになります)、incident-triage(ハンティングで検出が確認された場合の対応方法)、breach-patterns(ハンティング仮説の豊富な情報源)、disk-forensics(検出が確認された対象の詳細な分析)、agent-supply-chain-audit(開発者のマシンにある悪意のある、または提供が打ち切られたAIコーディングエージェント拡張機能のハンティング)、secrets-audit(その流出収集ドメインリストは、すぐに使える送信トラフィックのハンティング対象です。サーバーやCIランナーからwebhook.site、requestbin、ngrok、またはチャットのWebhookへのDNS/プロキシアクセスを調べます)。
認可
ユーザーが所有する環境、または調査を許可されている環境で、アクセス権を与えられたログとテレメトリのみを使ってハンティングしてください。ハンティングは読み取りを行うものであり、封じ込めは行いません。ハンティングで悪意のある活動が確認された場合は、ホストやアカウントに対して行動せず、そこで中断してincident-triageに引き継いでください。従業員の活動をハンティングする場合は、人事部門と法務部門が許可した範囲内にとどめてください。
方法論 — PEAKフレームワーク
Splunk SURGeによるPEAK(Prepare、Execute、Act、Knowledge)フレームワークは、私がこれまで見た中で最も実践的なハンティング方法論です。
ステップ1:準備
仮説を立てます。優れた仮説には、次の3つの特性があります。
- 具体的 — 手法、ログソース、予想されるアーティファクトを明示します
- 検証可能 — どのような証拠が確認または否定につながるかを説明します
- 範囲が限定されている — 時間枠と対象範囲が定義されています
悪い仮説:「SIEMで異常を探す」
良い仮説:「過去30日以内に、サービスアカウントが-encodedCommandフラグを使って対話型PowerShellを実行したことはないはずです(T1059.001 + T1027)。Sysmonのイベント1を検索し、親プロセスがサービスアカウントによって起動されたスケジュール済みタスク、子プロセスがpowershell.exeで、コマンドラインに-encまたは-encodedcommandを含むものを探します。」
ハンティング仮説の情報源を、検出効果の高い順に示します。
| 情報源 | 検出効果 | 労力 |
|---|---|---|
| 最近のインシデント(自組織または同業他社のもの) | 高 | 低 — パターンが具体的です |
breach-patternsスキルのカタログ | 高 | 低 — 公開された侵害事例から一般化できます |
| 検知ルールがないMITRE ATT&CKの手法 | 中 | 中 — 手法を読み、ハンティングを設計します |
| 脅威インテリジェンスレポート(CrowdStrike、Mandiant、ベンダーのレポート) | 中 | 中 — 最新のパターンを把握できます |
| 異常:「この数値が増えたのはなぜか」 | 低 | 低 — 誤検知が多いものの、ときには有益な手がかりになります |
ステップ2:実行
ハンティングを実行します。実行パターンは3つあります。
パターンA — インジケーターを起点にピボットする。 特定のIOC(IP、ハッシュ、ドメイン)から始め、それにアクセスしたホストやユーザーがいないかを調べます。
// Sentinel — pivot from a suspicious IP across all log sources
union *
| where TimeGenerated > ago(90d)
| where contains("198.51.100.42")
| project TimeGenerated, Type, Computer, _ResourceId
パターンB — 手法を起点にピボットする。 ATT&CKの手法から始め、その手法を実行しているホストがないかを調べます。
// Splunk — T1547.001 Registry Run Keys persistence
index=sysmon EventCode=13
TargetObject="*\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\*"
| stats values(Details) by Computer, User
| where len(values(Details)) > 1
パターンC — 異常をハンティングする。 ベースラインを確立し、外れ値を探します。
// Sentinel — service accounts authenticating from new geographies
SigninLogs
| where TimeGenerated > ago(30d)
| where UserType == "Service"
| summarize Countries = make_set(Location) by UserPrincipalName
| where array_length(Countries) > 1
ステップ3:対応
検出結果ごとに、次の3つの対応が考えられます。
| 結果 | 対応 |
|---|---|
| 悪意があると確認済み | 直ちにincident-triageへエスカレーションします |
| 正常と確認済み | 記録して次に進みます |
| 不明/確認できない | 調査を深めます(ホストのアーティファクト、ネットワークトラフィック、ユーザーへの聞き取り) |
検出結果を「不明」のまま放置しないでください。解決するか、次の手順を記録して引き継いでください。
Step 4: ナレッジ
ハンティングの価値は、1つのヒットではなく、成果物にあります。
各ハンティングについて:
- 何かを発見した場合は、検知ルールを作成して、今後同様の事象を自動的に検知できるようにします(
siem-detectionを参照) - 何も発見できなかった場合は、ハンティングを記録します。クエリ、対象範囲、時間枠、結論を記載してください。後続のハンターが同じ調査を繰り返さずに済みます
- ログカバレッジの不足が原因で調査が難しかった場合は、そのギャップを記録し、ログ取り込みを改善するバックログ項目を作成します
成果物を生まないハンティングは、積み重なるリターンのない作業です。この手法の目的は、すべてのハンティングをルール、記録された行き止まり、またはカバレッジの改善につなげることです。
検出効果の高いハンティングカタログ
永続化
- 営業時間外に作成されたスケジュールタスク — Sysmon イベント 1 の
schtasks.exe /create+ Windows Security の EventCode 4698 - Run キーによる永続化 —
HKCU\...\Run、HKLM\...\Run、HKCU\...\RunOnceへのレジストリ書き込み - 既知のソフトウェアインストール時間帯以外でのサービスのインストール — EventCode 7045
- WMI による永続化 —
__EventFilterおよびCommandLineEventConsumerのサブスクリプション - ログイン項目/起動デーモン(macOS) —
/Library/LaunchDaemons/*.plist、~/Library/LaunchAgents/*.plist - Cron/systemd タイマー(Linux) —
/etc/cron.*、/etc/systemd/system/*.timer、ユーザーの crontab
防御回避
-EncodedCommandを使った PowerShell — Base64 エンコードされたスクリプトは、80% の確率で防御回避を目的としていますcertutil.exe -decode— ドロッパーのペイロードをデコードするために使われる LOLBin- 標準外のパスにある既知の不正な DLL を対象とした Sysmon EventCode 7(イメージの読み込み)
%TEMP%、%APPDATA%、\Users\Publicから実行されるプロセス — 標準外の実行パス- コマンドラインの難読化パターン —
^、バッククォート、cmd /c echo y | ...が大量に含まれるもの
認証情報へのアクセス
- 想定外のプロセスによる LSASS へのアクセス — TargetImage が
lsass.exeで、SourceImage が[mssense.exe, NisSrv.exe, ...]に含まれない Sysmon EventCode 10 procdump.exeまたはcomsvcs.dllの使用 — プロセスダンプに使われる LOLBin- バックアップ時間帯以外での NTDS.dit へのアクセス — ドメインコントローラーのデータベース
- 新しい IP からの AWS
GetSessionTokenまたはAssumeRole— 認証情報窃取の足掛かり - 高い権限スコープを持つアプリケーションへの OAuth 同意の付与 —
iam-auditを参照
探索
net group "Domain Admins"または同等の列挙コマンド- 価値の高い SPN に対する AD サービスチケット要求(Kerberoasting の準備)— RC4 暗号化を使用する EventCode 4769
whoami /all、quser、nltest /domain_trusts— サービスアカウントによって実行される状況把握コマンド(人間がこれらを実行することはほとんどありません)- クラウド API の一覧取得 — 見慣れないプリンシパルによる
ListBuckets、ListUsers、DescribeInstances
ラテラルムーブメント
- リモートホストへの WMI 実行 —
wmic.exeまたはInvoke-WmiMethodを含む Sysmon EventCode 1 - PsExec/リモートサービス作成パターン — ランダムなサービス名を伴う EventCode 7045
- 見慣れないホストへのリモートレジストリ接続
- SSH キーの再利用 — 短い時間内に1つの秘密鍵で多数のホストに認証
- アカウント間の AWS/GCP
AssumeRoleチェーン — ピボットの検知
収集/ステージング/流出
- 単一のプリンシパルによるクラウドストレージからの大量読み取り — 通常と異なる S3/GCS アクセスパターン
- アーカイブ作成パターン — ユーザーのホームディレクトリ外にあるディレクトリを対象とした
Compress-Archive、7z.exe、tar、zipの操作 - 最近登録されたドメインへの DNS クエリ — DNS を介した流出、または C2 ビーコンの名前解決
- 高リスク地域へのアウトバウンド TLS 接続 — 組織の通常のパターンによって異なります
- ビーコンのパターン — 数時間にわたり、同じ宛先へ一定間隔(N 秒ごと ± ジッター)で接続
クラウド固有
- IAM 認証情報の窃取パターン — 通常とは異なるプリンシパルによる
GetCredentialReport、GenerateCredentialReport - 通常とは異なるプロセス/コンテナからの IMDS アクセス — クラウド SDK 以外で
169.254.169.254にアクセスするもの - CloudTrail/監査ログの改ざん試行 —
StopLogging、DeleteTrail、ログ記録用ではないプリンシパルによるログバケットへのアクセス - 短時間に単一のプリンシパルが複数リージョンでリソースを作成 — ピボットまたはコインマイニングのセットアップ
ID プロバイダー固有
- 高いスコープの権限を付与する OAuth アプリ(Google Workspace、M365) — ユーザーのパスワード以外で永続化するための攻撃者の手法
- 新しいデバイスからの MFA 方式の登録 — セッションを盗んだ後、攻撃者が自身の MFA を登録
- 不可能な地理的位置からのサインイン — 移動にかかる時間を超える地理的位置の急変
- 新しいクライアント/新しい IP からのサービスアカウント認証 — サービスアカウントの動作は予測可能であるべきです
ツール
- SIEM — Splunk、Sentinel、Elastic、Chronicle、Sumo、Wazuh
- EDR — CrowdStrike(RTR)、SentinelOne(詳細な可視性)、Microsoft Defender(高度なハンティング)、Carbon Black
- Sysmon — Windows 向けのオープンソースのエンドポイントログ記録。SIEM に出力
- osquery — エンドポイントの状態に対する SQL クエリ(クロスプラットフォーム)
- Velociraptor — オープンソースのライブレスポンスおよびハンティング用フレームワーク(無料の EDR よりはるかに高機能)
- Zeek — トラフィック分析用のネットワークメタデータ
- MITRE ATT&CK Navigator — 対応範囲の可視化
- Hunt-Evil — ハンティングのプレイブックコンテンツ(オープンソース)
- MaxMind GeoIP — IP ベースのハンティング用の位置情報検索
出力形式
# Threat Hunt Report
## Hunt name: [descriptive — e.g., "Office process → encoded PowerShell"]
## Hypothesis: [specific, testable, bounded]
## Date range: [from - to]
## Hunter: [name]
### Methodology
- ATT&CK technique(s): [TXXXX.NNN]
- Data sources queried: [list]
- Query / queries:
[the actual SIEM query]
### Findings
| Hit ID | Host / User / Resource | Outcome | Notes |
|--------|------------------------|---------|-------|
### Conclusion
- [Confirmed malicious / All benign / Inconclusive]
- [Confidence level — Low / Medium / High]
### Artifacts produced
- [ ] Detection rule added (link)
- [ ] Coverage gap documented (link)
- [ ] Negative-result documentation filed (link)
### Recommended follow-up
[Anything that needs deeper investigation, escalation, or future hunts]
境界
- ユーザーが認可を得ている環境のみをハンティングしてください
- データセットを利用できる場合でも、ユーザーの権限外の SIEM/EDR データを決して照会しないでください。スコープが重要です
- 悪意が確認された検出結果は、直ちに
incident-triageにエスカレーションしてください。ハンティングを続けて攻撃者に気付かれるリスクを冒さないでください - ライブレスポンスのアクション(ホストの隔離、アカウントの無効化)はインシデント対応であり、ハンティングではありません。エスカレーションしてください
- HR/法務が認可した範囲を超えて従業員を監視するために脅威ハンティングの手法を使用することは拒否してください
- ハンティングで否定的な結果が得られた場合も、失敗ではなく貴重な証拠です。適切に記録し、その価値を認めてください
参考資料
- PEAK 脅威ハンティングフレームワーク(Splunk SURGe)
- TaHiTI(脅威インテリジェンスを統合した標的型ハンティング)— オランダのモデル
- MITRE ATT&CK
- 「The ThreatHunter Playbook」(Cyb3rWard0g)— オープンソースコンテンツ
- Sigma ルールのリポジトリ — 多くのルールをハンティングクエリにできます
- 「Practical Threat Intelligence and Data-Driven Threat Hunting」— Valentina Costa-Gazcón
- David Bianco の「Pyramid of Pain」— IOC の価値の階層
- SANS FOR508/FOR578 のコース教材
- Velociraptor コミュニティのハンティングコンテンツ