用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/dandye/adk_runbooks --skill basic-ioc-enrichment命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
| name | basic-ioc-enrichment |
| description | Use when conducting initial reputation and threat intelligence lookups on suspicious observables. |
| category | investigation |
| version | 1.0.0 |
| type | Skill |
| title | Skill: Basic IOC Enrichment Runbook |
| generated | {"by":"process:google-labs-jules","at":"2025-12-21T03:04:42.000Z"} |
Standardize the initial enrichment process for a single Indicator of Compromise (IOC) identified in an alert or case, suitable for Tier 1 SOC Analysts.
This runbook covers fundamental enrichment steps using readily available GTI and SIEM lookup tools, plus limited SIEM event searching. It aims to provide quick, actionable context to aid in the decision to close or escalate.
${IOC_VALUE}: The specific IOC value (e.g., "198.51.100.10", "evil-domain.com", "abcdef123456...", "http://bad.url/path").${IOC_TYPE}: The type of IOC (e.g., "IP Address", "Domain", "File Hash", "URL").${ALERT_GROUP_IDENTIFIERS}: Relevant alert group identifiers if needed for context in SOAR actions.${CASE_ID}: Relevant case ID if documentation is desired.${SIEM_SEARCH_HOURS}: Lookback period for SIEM event search (default: 24).${GTI_FINDINGS}: Summary of key findings from the relevant GTI report.${GTI_RELATIONSHIPS}: Summary of key related entities found via GTI pivoting.${SIEM_ENTITY_SUMMARY}: Summary from the SIEM entity lookup.${SIEM_IOC_MATCH_STATUS}: Boolean or indicator (Yes/No) if the IOC was found in recent SIEM IOC matches.${SIEM_RECENT_EVENTS}: Summary of recent SIEM events involving the IOC.${FOUND_CASES}: List of potentially related open SOAR cases.${ASSESSMENT}: Analyst's initial risk assessment (e.g., Low/Medium/High/Informational).${RECOMMENDATION}: Suggested next steps (e.g., Escalate, Monitor, Close FP, Trigger Containment).${DOCUMENTATION_STATUS}: Status of documentation attempt in SOAR.${REPORT_GENERATION_STATUS}: Status of optional report generation.gti-mcp: get_ip_address_report, get_domain_report, get_file_report, get_url_report, get_entities_related_to_a_file, get_entities_related_to_a_domain, get_entities_related_to_an_ip_address, get_entities_related_to_an_urlsecops-mcp: lookup_entity, get_ioc_matches, search_security_eventssecops-soar: list_cases, post_case_commentwrite_reportcommon_steps/enrich_ioc </run_books/common_steps/enrich_ioc>, {doc}common_steps/pivot_on_ioc_gti </run_books/common_steps/pivot_on_ioc_gti>, {doc}common_steps/find_relevant_soar_case </run_books/common_steps/find_relevant_soar_case>, {doc}common_steps/document_in_soar </run_books/common_steps/document_in_soar>, {doc}common_steps/generate_report_file </run_books/common_steps/generate_report_file>${IOC_VALUE}, ${IOC_TYPE}, and optional inputs like ${CASE_ID}, ${ALERT_GROUP_IDENTIFIERS}, ${SIEM_SEARCH_HOURS} (default 24).skills/common/enrich-ioc/SKILL.md with ${IOC_VALUE} and ${IOC_TYPE}. Obtain ${GTI_FINDINGS}, ${SIEM_ENTITY_SUMMARY}, ${SIEM_IOC_MATCH_STATUS}.${IOC_TYPE} (e.g., for File Hash: ["contacted_domains", "contacted_ips"]; for Domain: ["resolutions"]). Let this be REL_LIST.skills/common/pivot-on-ioc-gti/SKILL.md with ${IOC_VALUE}, ${IOC_TYPE}, and RELATIONSHIP_NAMES=REL_LIST. Obtain ${GTI_RELATIONSHIPS}.secops-mcp_search_security_events targeting ${IOC_VALUE} (e.g., text="${IOC_VALUE}").hours_back=${SIEM_SEARCH_HOURS}.${SIEM_RECENT_EVENTS}.skills/common/find-relevant-soar-case/SKILL.md with SEARCH_TERMS=["${IOC_VALUE}"] and CASE_STATUS_FILTER="Opened".${RELEVANT_CASE_IDS} and ${RELEVANT_CASE_SUMMARIES}. Let ${FOUND_CASES} = ${RELEVANT_CASE_SUMMARIES} (or ${RELEVANT_CASE_IDS} if summaries aren't needed/available).${GTI_FINDINGS}, ${GTI_RELATIONSHIPS}, ${SIEM_ENTITY_SUMMARY}, ${SIEM_IOC_MATCH_STATUS}, , .graph TD
START(["START"]) --> extract_ioc_node["1. extract_ioc_node<br/><i>(Extract & Normalize IOC)</i>"]
extract_ioc_node --> ioc_type_router{"2. ioc_type_router<br/><i>(Route by IOC_TYPE)</i>"}
ioc_type_router -- "IP_BRANCH" --> enrich_ip_branch["3a. enrich_ip_branch<br/><i>(GTI & SIEM IP Lookup)</i>"]
ioc_type_router -- "DOMAIN_BRANCH" --> enrich_domain_branch["3b. enrich_domain_branch<br/><i>(GTI Domain & Passive DNS)</i>"]
ioc_type_router -- "HASH_BRANCH" --> enrich_hash_branch["3c. enrich_hash_branch<br/><i>(GTI File & Behavior Summary)</i>"]
ioc_type_router -- "URL_BRANCH" --> enrich_url_branch["3d. enrich_url_branch<br/><i>(GTI URL Report & Domain Rep)</i>"]
enrich_ip_branch --> siem_search_node["4. siem_search_node<br/><i>(SIEM Event Search & Case Lookup)</i>"]
enrich_domain_branch --> siem_search_node
enrich_hash_branch --> siem_search_node
enrich_url_branch --> siem_search_node
siem_search_node --> ioc_risk_router{"5. ioc_risk_router<br/><i>(Event.actions.route)</i>"}
ioc_risk_router -- "HIGH_RISK_THREAT" --> handle_high_risk_ioc_branch["6a. handle_high_risk_ioc_branch<br/><i>(Recommend Containment)</i>"]
ioc_risk_router -- "LOW_RISK_BENIGN" --> handle_low_risk_ioc_branch["6b. handle_low_risk_ioc_branch<br/><i>(Recommend FP / Monitor)</i>"]
handle_high_risk_ioc_branch --> document_ioc_enrichment_node["7. document_ioc_enrichment_node<br/><i>(SOAR Comment & Report Summary)</i>"]
handle_low_risk_ioc_branch --> document_ioc_enrichment_node
sequenceDiagram
participant Analyst
participant AutomatedAgent as Automated Agent (MCP Client)
participant EnrichIOC as skills/common/enrich-ioc/SKILL.md
participant PivotGTI as skills/common/pivot-on-ioc-gti/SKILL.md
participant FindCase as skills/common/find-relevant-soar-case/SKILL.md
participant DocumentInSOAR as skills/common/document-in-soar/SKILL.md
participant GenerateReport as skills/common/generate-report-file/SKILL.md
participant SIEM as secops-mcp
participant GTI as gti-mcp
participant SOAR as secops-soar
participant User
Analyst->>AutomatedAgent: Start Basic IOC Enrichment v2\nInput: IOC_VALUE, IOC_TYPE, CASE_ID (opt), ...
%% Step 2: Enrich IOC (GTI Report + SIEM Lookup + SIEM Match)
AutomatedAgent->>EnrichIOC: Execute(Input: IOC_VALUE, IOC_TYPE)
EnrichIOC-->>AutomatedAgent: Results: GTI_FINDINGS, SIEM_ENTITY_SUMMARY, SIEM_IOC_MATCH_STATUS
%% Step 3: Fetch Key GTI Relationships
Note over AutomatedAgent: Determine relevant RELATIONSHIP_NAMES (REL_LIST)
AutomatedAgent->>PivotGTI: Execute(Input: IOC_VALUE, IOC_TYPE, RELATIONSHIP_NAMES=REL_LIST)
PivotGTI-->>AutomatedAgent: Results: GTI_RELATIONSHIPS
%% Step 4: Search Recent SIEM Events
AutomatedAgent->>SIEM: search_security_events(text=IOC_VALUE, hours_back=SIEM_SEARCH_HOURS)
SIEM-->>AutomatedAgent: Recent SIEM Events Summary (SIEM_RECENT_EVENTS)
%% Step 5: Search Relevant SOAR Cases
AutomatedAgent->>FindCase: Execute(Input: SEARCH_TERMS=[IOC_VALUE], CASE_STATUS_FILTER="Opened")
FindCase-->>AutomatedAgent: Results: RELEVANT_CASE_IDS, RELEVANT_CASE_SUMMARIES (FOUND_CASES)
%% Step 6: Synthesize Findings & Assess Risk
Note over AutomatedAgent: Combine all findings (incl. FOUND_CASES). Guide analyst assessment (ASSESSMENT) & recommendation (RECOMMENDATION).
%% Step 7: Conditional Documentation
alt CASE_ID provided
Note over AutomatedAgent: Prepare COMMENT_TEXT with all findings, assessment, recommendation
AutomatedAgent->>DocumentInSOAR: Execute(Input: CASE_ID, COMMENT_TEXT)
DocumentInSOAR-->>AutomatedAgent: Results: DOCUMENTATION_STATUS
else CASE_ID not provided
Note over AutomatedAgent: DOCUMENTATION_STATUS = "Skipped"
end
%% Step 8: Optional Report Generation
AutomatedAgent->>User: Confirm: "Generate markdown report? (Yes/No)"
User-->>AutomatedAgent: Report Choice (REPORT_CHOICE)
alt REPORT_CHOICE is "Yes"
Note over AutomatedAgent: Prepare REPORT_CONTENT
AutomatedAgent->>GenerateReport: Execute(Input: REPORT_CONTENT, REPORT_TYPE="ioc_enrichment", REPORT_NAME_SUFFIX=IOC_VALUE)
GenerateReport-->>AutomatedAgent: Results: REPORT_GENERATION_STATUS
else REPORT_CHOICE is "No"
Note over AutomatedAgent: REPORT_GENERATION_STATUS = "Skipped"
end
%% Step 9: Completion
AutomatedAgent->>Analyst: attempt_completion(result="Basic IOC enrichment v2 complete for IOC_VALUE. Assessment: ASSESSMENT. Recommendation: RECOMMENDATION. Documentation: DOCUMENTATION_STATUS. Report: REPORT_GENERATION_STATUS.")
## Rubrics
The following rubric is used to evaluate the execution of this **Triage/Response** runbook by an LLM agent.
### Grading Scale (0-100 Points)
| Criteria | Points | Description |
| :--- | :--- | :--- |
| **Context & Enrichment** | 25 | Correctly extracted entities and enriched them with relevant context (GTI, SIEM). |
| **Analysis & Decision** | 25 | Analyzed the enriched data to make a sound decision (FP/TP, Escalate/Close). |
| **Action Execution** | 20 | Performed the required response actions (e.g., isolation, containment) correctly. |
| **Documentation** | 15 | Clearly documented findings and actions in the case/ticket. |
| **Operational Artifacts** | 15 | Produced required artifacts: Sequence diagram, execution metadata (date/cost), and summary. |
### Evaluation Criteria Details
#### 1. Context & Enrichment (25 Points)
- **10 pts**: Accurately extracted key entities (IPs, users, hashes) from the input.
- **15 pts**: Performed necessary enrichment (e.g., `enrich_ioc`) to gather reputation and history.
#### 2. Analysis & Decision (25 Points)
- **15 pts**: Interpreted the context correctly to determine the nature of the alert.
- **10 pts**: Reached a logical conclusion or next step (e.g., "Escalate to Tier 2" or "Isolate Host").
#### 3. Action Execution (20 Points)
- **10 pts**: Called the correct tools to perform response actions (if applicable) or investigative steps.
- **10 pts**: Verified the success of actions or handled errors appropriately.
#### 4. Documentation (15 Points)
- **15 pts**: Posted a comprehensive comment or update to the SOAR case summarizing the triage.
#### 5. Operational Artifacts (15 Points)
- **5 pts**: **Sequence Diagram**: Produced a Mermaid sequence diagram visualizing the steps taken.
- **5 pts**: **Execution Metadata**: Recorded the date, duration, and estimated token cost.
- **5 pts**: **Summary Report**: Generated a concise summary of the actions and outcomes.
${SIEM_RECENT_EVENTS}${FOUND_CASES}${ASSESSMENT}) based on the combined data (e.g., GTI reputation, SIEM activity presence/volume, relation to existing cases).${RECOMMENDATION}) based on the assessment (e.g., Escalate, Monitor, Close FP, Trigger IOC Containment).${CASE_ID} was provided:
COMMENT_TEXT summarizing all findings, the assessment, and recommendation (e.g., "Basic IOC Enrichment for ${IOC_VALUE} (${IOC_TYPE}): GTI Rep: [...], GTI Relations: [...], SIEM Summary: [...], SIEM Match: [...], Recent Events: [...], Related Cases: [...]. Assessment: ${ASSESSMENT}. Recommendation: ${RECOMMENDATION}.").skills/common/document-in-soar/SKILL.md with CASE_ID=${CASE_ID} and COMMENT_TEXT. Obtain ${DOCUMENTATION_STATUS}.${CASE_ID} not provided): Set ${DOCUMENTATION_STATUS} = "Skipped (No Case ID)".${REPORT_CHOICE}.${REPORT_CHOICE} is "Yes":
REPORT_CONTENT similar to COMMENT_TEXT but formatted for a standalone report.skills/common/generate-report-file/SKILL.md with REPORT_CONTENT, REPORT_TYPE="ioc_enrichment", REPORT_NAME_SUFFIX=${IOC_VALUE}. Obtain ${REPORT_GENERATION_STATUS}.${REPORT_GENERATION_STATUS} = "Skipped".