security-recommended-actions について
SOC アナリスト向けのセキュリティインシデント対応スキルです。インシデント、資産、脅威、プレイブックの情報を基に、優先順位付きの段階的な対応策を作成します。
主な機能
- 01脅威別の対応計画
- 02重大度に応じた優先順位付け
- 03影響を受けた資産の考慮
- 04組織のプレイブックとの整合
- 05段階別の対応策
- 06MITRE ATT&CK 技術の参照
活用シーン
- 01新規インシデントへの対応指針
- 02エスカレーション時の対応漏れ確認
- 03初級アナリストの手順確認
- 04インシデント終結前の対応確認
MCP 対応
ServiceNow MCP ツールでインシデント、資産、指標、脆弱性、タスクの情報を取得し、対応案を生成してインシデントの作業メモに追加します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ happy-technologies-llc/ happy-platform-skills --skill security-recommended-actionsインストール後、Claude Code で/security-recommended-actionsを入力して読み込まれたか確認します。
詳細
セキュリティインシデントの推奨対応策
概要
このスキルは、脅威の種類、重大度、影響を受けた資産、組織のプレイブックを分析し、優先順位を付けた体系的なセキュリティインシデント対応策を生成します。NIST SP 800-61および組織のSOC手順に準拠した、封じ込め、根絶、復旧を網羅する段階的な対応計画を作成します。
主な機能:
- 脅威に応じた対応策: 特定の脅威カテゴリー(マルウェア、フィッシング、データ窃取、DDoS、内部脅威など)に合わせた対応策を生成します
- 重大度に基づく優先順位付け: インシデントの重大度とビジネス上の重要度に応じて、対応の緊急度と範囲を調整します
- 資産を考慮した推奨事項: 影響を受けた資産の種類、環境、重要度に基づいて対応策を調整します
- プレイブックとの整合: 推奨対応策を既存の組織内プレイブックやランブックに対応付けます
- 段階的な対応計画: 対応策を封じ込め、根絶、復旧、インシデント後の各フェーズに構成します
- MITRE ATT&CKへの対応付け: 検出と対応の指針となる、具体的なATT&CKの手法を参照します
使用する場面:
- 新しいセキュリティインシデントが作成され、アナリストが対応の指針を必要とするとき
- すべての重要な対応策を確実に網羅するため、インシデントをエスカレーションするとき
- 対応手順に関する体系的な指針を必要とするジュニアアナリスト向け
- クローズ前にインシデント対応の網羅性を確認するとき
- 繰り返し発生する脅威の種類に対して、標準化された対応計画を作成するとき
前提条件
- ロール:
sn_si.analyst、sn_si.manager、またはadmin - プラグイン: Security Incident Response(
sn_si)、Threat Intelligence(sn_ti)、Vulnerability Response(sn_vul) - アクセス権:
sn_si_incident、sn_si_task、sn_ti_observable、cmdb_ci、sn_vul_vulnerable_itemへの読み取りアクセス - 知識: NIST SP 800-61、MITRE ATT&CKフレームワーク、組織のプレイブック構成に関する知識
主なテーブル
| テーブル | 目的 | 主なフィールド |
|---|---|---|
sn_si_incident | セキュリティインシデント | number、category、subcategory、priority、severity、state、cmdb_ci、attack_vector、kill_chain_phase、business_criticality |
sn_si_task | 対応タスク | number、short_description、state、task_type、security_incident、assigned_to、priority |
sn_ti_observable | 脅威インジケーター | type、value、confidence、threat_score、security_incident |
cmdb_ci | 影響を受けた資産 | name、sys_class_name、ip_address、os、environment、business_criticality |
sn_vul_vulnerable_item | 既知の脆弱性 | vulnerability、cmdb_ci、state、cvss_score、risk_score |
手順
ステップ1:インシデントの詳細と分類を取得する
脅威の分類フィールドを含む、インシデントレコードの全情報を取得します。
MCPを使用する場合(Claude Code/Desktop):
Tool: SN-Get-Record
Parameters:
table_name: sn_si_incident
sys_id: [INCIDENT_SYS_ID]
fields: sys_id,number,short_description,description,category,subcategory,priority,severity,state,cmdb_ci,attack_vector,kill_chain_phase,business_criticality,risk_score,assigned_to,assignment_group,opened_at,contact_type,affected_user
REST APIを使用する場合:
GET /api/now/table/sn_si_incident?sysparm_query=number=[SIR_NUMBER]&sysparm_fields=sys_id,number,short_description,description,category,subcategory,priority,severity,state,cmdb_ci,attack_vector,kill_chain_phase,business_criticality,risk_score,assigned_to,assignment_group,opened_at&sysparm_limit=1&sysparm_display_value=all
ステップ2:影響を受けた資産のコンテキストを収集する
構成アイテムの詳細を取得し、影響を受けたシステムのビジネスコンテキストを把握します。
MCPを使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: cmdb_ci
query: sys_id=[CMDB_CI_SYS_ID]
fields: sys_id,name,sys_class_name,ip_address,os,environment,business_criticality,support_group,department,location,operational_status
limit: 1
REST APIを使用する場合:
GET /api/now/table/cmdb_ci?sysparm_query=sys_id=[CI_SYS_ID]&sysparm_fields=sys_id,name,sys_class_name,ip_address,os,environment,business_criticality,support_group,department,location,operational_status&sysparm_limit=1&sysparm_display_value=true
ステップ3:脅威インジケーターを収集する
IOCを取得し、脅威に応じた封じ込めと根絶の対応策に役立てます。
MCPを使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: sn_ti_observable
query: security_incident=[INCIDENT_SYS_ID]
fields: sys_id,type,value,source,confidence,threat_score,first_seen,last_seen
limit: 100
REST APIを使用する場合:
GET /api/now/table/sn_ti_observable?sysparm_query=security_incident=[INCIDENT_SYS_ID]&sysparm_fields=sys_id,type,value,source,confidence,threat_score&sysparm_limit=100
ステップ4:影響を受けた資産の既知の脆弱性を確認する
攻撃を可能にした可能性のある、悪用可能な脆弱性を特定します。
MCPを使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: sn_vul_vulnerable_item
query: cmdb_ci=[AFFECTED_CI_SYS_ID]^stateINOpen,Under Investigation
fields: sys_id,vulnerability,cmdb_ci,state,cvss_score,risk_score,first_found
limit: 20
REST APIを使用する場合:
GET /api/now/table/sn_vul_vulnerable_item?sysparm_query=cmdb_ci=[CI_SYS_ID]^stateINOpen,Under Investigation&sysparm_fields=sys_id,vulnerability,cmdb_ci,state,cvss_score,risk_score,first_found&sysparm_limit=20&sysparm_display_value=true
ステップ5:既存の対応タスクを確認する
重複を避けるため、すでに存在するタスクを確認します。
MCPを使用する場合:
Tool: SN-Query-Table
Parameters:
table_name: sn_si_task
query: security_incident=[INCIDENT_SYS_ID]^ORDERBYopened_at
fields: sys_id,number,short_description,state,task_type,assigned_to,priority
limit: 50
ステップ6:推奨対応策を生成する
脅威に応じた段階的な対応策を作成します。
MCPを使用する場合:
Tool: SN-Execute-Background-Script
Parameters:
script: |
var sirNumber = 'SIR0009100'; // Replace with target incident
var gr = new GlideRecord('sn_si_incident');
gr.addQuery('number', sirNumber);
gr.query();
if (!gr.next()) { gs.info('Incident not found'); return; }
var category = gr.category.getDisplayValue().toLowerCase();
var severity = gr.severity.getDisplayValue();
var priority = parseInt(gr.priority.toString()) || 3;
var ciSysId = gr.cmdb_ci.toString();
var actions = { containment: [], eradication: [], recovery: [], post_incident: [] };
// Get CI details
var ciType = 'unknown';
var ciEnv = 'unknown';
if (ciSysId) {
var ci = new GlideRecord('cmdb_ci');
if (ci.get(ciSysId)) {
ciType = ci.sys_class_name.toString();
ciEnv = ci.environment.getDisplayValue() || 'unknown';
}
}
// Collect IOCs
var iocCount = 0;
var iocTypes = {};
var obs = new GlideRecord('sn_ti_observable');
obs.addQuery('security_incident', gr.sys_id.toString());
obs.query();
while (obs.next()) {
iocCount++;
var t = obs.type.getDisplayValue() || 'other';
iocTypes[t] = (iocTypes[t] || 0) + 1;
}
// === CONTAINMENT ACTIONS ===
// Universal containment
actions.containment.push({
action: 'Document initial findings and preserve volatile evidence',
priority: 1, owner: 'SOC Analyst', timeline: 'Immediate',
details: 'Capture memory dump, running processes, network connections before any changes'
});
if (category.indexOf('malware') >= 0 || category.indexOf('ransomware') >= 0) {
actions.containment.push({
action: 'Isolate affected host(s) from network',
priority: 1, owner: 'Network Operations', timeline: '< 30 minutes',
details: 'Apply network isolation via EDR or switch port disable. Do NOT power off to preserve memory.'
});
actions.containment.push({
action: 'Block identified C2 IPs and domains at perimeter',
priority: 1, owner: 'SOC Analyst', timeline: '< 1 hour',
details: 'Update firewall rules and DNS sinkhole for ' + iocCount + ' identified IOCs'
});
actions.eradication.push({
action: 'Remove malware artifacts and persistence mechanisms',
priority: 1, owner: 'DFIR Team', timeline: '< 24 hours',
details: 'Scan with updated signatures, check scheduled tasks, registry run keys, WMI subscriptions'
});
actions.recovery.push({
action: 'Rebuild or restore affected systems from known-good baseline',
priority: 2, owner: 'IT Operations', timeline: '24-48 hours',
details: 'Reimage ' + (ciType.indexOf('server') >= 0 ? 'server' : 'workstation') + ' from golden image or verified backup'
});
}
if (category.indexOf('phishing') >= 0) {
actions.containment.push({
action: 'Quarantine phishing email from all mailboxes',
priority: 1, owner: 'Email Security', timeline: '< 1 hour',
details: 'Use email security tool to search and purge by sender, subject, or message ID'
});
actions.containment.push({
action: 'Reset credentials for affected user(s)',
priority: 1, owner: 'IAM Team', timeline: '< 2 hours',
details: 'Force password reset and revoke active sessions for compromised accounts'
});
actions.eradication.push({
action: 'Block sender domain and update email filtering rules',
priority: 2, owner: 'Email Security', timeline: '< 4 hours',
details: 'Add sender to blocklist and create content filtering rule for similar messages'
});
}
if (category.indexOf('data') >= 0 || category.indexOf('exfiltration') >= 0 || category.indexOf('breach') >= 0) {
actions.containment.push({
action: 'Identify and block data exfiltration channels',
priority: 1, owner: 'SOC Analyst', timeline: '< 1 hour',
details: 'Review DLP alerts, proxy logs, and cloud storage activity for ongoing exfiltration'
});
actions.containment.push({
action: 'Revoke access for compromised accounts and API keys',
priority: 1, owner: 'IAM Team', timeline: '< 2 hours',
details: 'Disable affected service accounts, rotate API keys, revoke OAuth tokens'
});
actions.recovery.push({
action: 'Assess data exposure scope and prepare regulatory notification',
priority: 1, owner: 'Legal/Privacy Team', timeline: '< 72 hours',
details: 'Determine data types affected, number of records, and applicable notification requirements'
});
}
// Universal eradication
actions.eradication.push({
action: 'Patch exploited vulnerabilities on affected and similar systems',
priority: 2, owner: 'Vulnerability Management', timeline: '< 72 hours',
details: 'Apply patches for identified CVEs; scan environment for same vulnerability'
});
// Universal recovery
actions.recovery.push({
action: 'Validate system integrity and restore to operational status',
priority: 2, owner: 'IT Operations', timeline: '48-72 hours',
details: 'Verify clean state, run integrity checks, restore network connectivity with monitoring'
});
actions.recovery.push({
action: 'Enhance monitoring on recovered systems for 30 days',
priority: 3, owner: 'SOC Analyst', timeline: 'Ongoing',
details: 'Increase logging verbosity, add detection rules for related IOCs and TTPs'
});
// Post-incident
actions.post_incident.push({
action: 'Conduct post-incident review and document lessons learned',
priority: 3, owner: 'SOC Manager', timeline: '< 2 weeks post-resolution',
details: 'Review detection time, response effectiveness, and identify process improvements'
});
actions.post_incident.push({
action: 'Update playbooks and detection rules based on findings',
priority: 3, owner: 'Detection Engineering', timeline: '< 30 days post-resolution',
details: 'Create or update detection signatures, SIEM correlation rules, and response procedures'
});
var result = {
incident: sirNumber,
category: category,
severity: severity,
total_actions: actions.containment.length + actions.eradication.length + actions.recovery.length + actions.post_incident.length,
phases: actions
};
gs.info('RECOMMENDED ACTIONS:\n' + JSON.stringify(result, null, 2));
description: "SecOps: Generate phased response actions for a security incident"
ステップ7:対応策を作業メモとして投稿する
MCPを使用する場合:
Tool: SN-Add-Work-Notes
Parameters:
table_name: sn_si_incident
sys_id: [INCIDENT_SYS_ID]
work_notes: |
=== RECOMMENDED RESPONSE ACTIONS ===
Generated: 2026-03-19 | Category: Ransomware | Severity: Critical
PHASE 1 - CONTAINMENT (Immediate):
[ ] Document findings and preserve volatile evidence (SOC Analyst, Immediate)
[ ] Isolate affected hosts from network (Network Ops, < 30 min)
[ ] Block C2 IPs/domains at perimeter (SOC Analyst, < 1 hour)
PHASE 2 - ERADICATION (24-72 hours):
[ ] Remove malware and persistence mechanisms (DFIR Team, < 24 hours)
[ ] Patch exploited vulnerabilities (Vuln Mgmt, < 72 hours)
PHASE 3 - RECOVERY (48-72 hours):
[ ] Rebuild affected systems from known-good baseline (IT Ops, 24-48 hours)
[ ] Validate system integrity (IT Ops, 48-72 hours)
[ ] Enhance monitoring for 30 days (SOC Analyst, Ongoing)
PHASE 4 - POST-INCIDENT (2-4 weeks):
[ ] Conduct lessons learned review (SOC Manager, < 2 weeks)
[ ] Update playbooks and detection rules (Detection Engineering, < 30 days)
ツールの使用方法
| 操作 | MCP ツール | REST エンドポイント |
|---|---|---|
| インシデントの読み取り | SN-Get-Record | GET /api/now/table/sn_si_incident/{sys_id} |
| アセットのクエリ | SN-Query-Table | GET /api/now/table/cmdb_ci |
| IOC のクエリ | SN-Query-Table | GET /api/now/table/sn_ti_observable |
| 脆弱性のクエリ | SN-Query-Table | GET /api/now/table/sn_vul_vulnerable_item |
| アクションの生成 | SN-Execute-Background-Script | POST /api/now/table/sys_trigger |
| アクションの投稿 | SN-Add-Work-Notes | PATCH /api/now/table/sn_si_incident/{sys_id} |
ベストプラクティス
- フェーズに基づく構成: NIST SP 800-61 に従い、アクションは必ず封じ込め、根絶、復旧、インシデント後の各フェーズに分けて整理してください
- 脅威に応じた調整: 特定の脅威の種類に合わせてアクションをカスタマイズしてください。汎用的なアクションは分析担当者の時間を浪費します
- 証拠の保全を優先: システムの状態が変わる可能性がある封じ込めアクションの前に、必ず証拠の保全を推奨してください
- 担当者の明確化: 各アクションは「チーム」だけでなく、具体的なチームまたは役割を担当者として割り当ててください
- 現実的なタイムライン: 本番環境における変更管理要件を考慮したタイムラインを設定してください
- 重複排除: 推奨事項の重複を避けるため、生成前に既存のタスクを確認してください
- エスカレーション条件: エスカレーションの基準(例:ラテラルムーブメントの検出、データ流出の確認)を含めてください
トラブルシューティング
インシデントカテゴリが認識されない
症状: カテゴリが想定される値と一致しないため、生成されるアクションが汎用的すぎます
原因: 組織によっては、カスタムのカテゴリ値やサブカテゴリ値を使用している場合があります
解決策: sys_choice に対して sn_si_incident.category をクエリし、有効な値を取得してください。カスタムカテゴリを標準的な脅威の種類(マルウェア、フィッシング、データ侵害など)に対応付けてください。
インシデントに IOC が関連付けられていない
症状: IOC がないため、脅威に応じた封じ込めアクションを生成できません
原因: 脅威インテリジェンスが統合されていないか、オブザーバブルがまだ関連付けられていない可能性があります
解決策: 最初の封じ込めアクションとして IOC の収集を推奨してください。日付範囲を指定して sn_ti_observable を検索し、最近取り込まれたインジケーターを確認してください。
カテゴリに対応するプレイブックが見つからない
症状: アクションを組織のプレイブックに沿って調整できません
原因: sn_si_playbook テーブルに、インシデントカテゴリに対応するプレイブックが含まれていない可能性があります
解決策: 組み込みの脅威分類体系に基づいてアクションを生成し、インシデント後のアクションとしてプレイブックの作成を推奨してください。
例
例 1:ランサムウェアのインシデント対応計画
シナリオ: SIR0009100 -- 財務ファイルサーバーで LockBit ランサムウェアを検出
- インシデントを取得:カテゴリ「ランサムウェア」、重大度「クリティカル」、本番サーバー
- アセットのコンテキストを収集:FILESVR-03、Windows Server 2022、ビジネス上の重要度「高」
- IOC を 6 件収集:IP アドレス 2 件、ドメイン 1 件、ファイルハッシュ 2 件、メールアドレス 1 件
- 影響を受けたサーバーで悪用可能な CVE を 2 件特定
- 具体的なタイムラインと担当者を設定し、4 つのフェーズにわたる 12 件のアクションを生成
- チェックリスト形式のアクションをインシデントの作業メモに投稿
例 2:フィッシングキャンペーンへの対応
シナリオ: SIR0008890 -- 50 人のユーザーを標的とした認証情報窃取フィッシング
- インシデントを取得:カテゴリ「フィッシング」、重大度「高」、影響を受けたユーザー 50 人
- 特定の CI はなし。影響を受けた対象はユーザーのメールボックス
- IOC:送信者のドメイン 1 件、フィッシング URL 1 件、フォーム送信エンドポイント 1 件
- メールの一括削除、認証情報のリセット、URL のブロック、ユーザーへの通知を含む 9 件のアクションを生成
- インシデント後の推奨事項として、フィッシング対策の意識向上トレーニングを含める
関連スキル
secops/incident-summarization- 推奨アクションと併せてインシデントを要約しますsecops/post-incident-analysis- 推奨アクションが適切に実行されたかを評価しますsecops/vulnerability-deduplication- アクションの優先順位付けの前に、重複する脆弱性を統合しますsecops/correlation-insights- 対応アクションを共有できる可能性のある関連インシデントを特定しますsecops/shift-handover- シフト引き継ぎレポートに保留中のアクションを含めます