用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/dandye/adk_runbooks --skill case-event-timeline-analysis命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
| name | case-event-timeline-analysis |
| description | Use when reconstructing sequential chronological timelines and process execution trees. |
| category | investigation |
| version | 1.0.0 |
| type | Skill |
| title | Skill: Case Event Timeline & Process Analysis Workflow |
| generated | {"by":"process:google-labs-jules","at":"2026-08-20T02:00:00Z"} |
Objective: Generate a detailed timeline of events for a specific SOAR case (${CASE_ID}), including the full process execution chain leading to the alerted activity. Classify relevant processes as legitimate, LOLBIN, or malicious using GTI enrichment. Optionally enrich with MITRE TACTICs and generate a markdown report summarizing the findings. Optionally convert the report to PDF and attempt to attach it to the SOAR case.
Uses Tools:
soar-mcp_get_case_full_details (Provides initial context and alerts)soar-mcp_list_events_by_alertsecops-mcp_search_security_events (Crucial for finding parent process launch events)soar-mcp_google_chronicle_list_events (To get broader asset context)soar-mcp_google_chronicle_get_rule_details (Optional, for specific rule context)soar-mcp_google_chronicle_get_detection_details (Optional, for specific detection context)gti-mcp_get_file_report (for process hash classification)secops-mcp_get_threat_intel (for MITRE TACTIC mapping/general enrichment)siemplify_create_gemini_case_summary (Optional, for AI-generated summary)write_report (for report generation)soar-mcp_post_case_comment (to note report location/attach if possible)attempt_completionsiemplify_case_tag, siemplify_change_priority, siemplify_add_general_insight, siemplify_update_case_description, siemplify_assign_case, siemplify_raise_incident, siemplify_create_gemini_case_summaryWorkflow Steps & Diagram:
${CASE_ID} using get_case_full_details.list_events_by_alert.google_chronicle_get_rule_details or google_chronicle_get_detection_details for more context.PROCESS_LAUNCH events to trace the parent process chain backward from the initial alert events.
productSpecificProcessId) from the initial alert events (Step 2). Let this be Current_Parent_PID. Identify the timestamp of the child process launch (Child_Timestamp).secops-mcp_search_security_events) for PROCESS_LAUNCH events where the target process PID matches Current_Parent_PID.Child_Timestamp (e.g., +/- 15 minutes or +/- 1 hour).Current_Parent_PID is found, store its details (parent PID, command line, timestamp, etc.) in the process chain data. Update Current_Parent_PID to the newly found parent's PID and update Child_Timestamp to the timestamp of the event just found. Repeat the search.explorer.exe, services.exe) is reached, the parent PID is null/invalid, or the search yields no results within a reasonable timeframe.search_security_events fails, times out, or returns no results:
graph TD
START(["START"]) --> extract_timeline_payload_node["1. extract_timeline_payload_node<br/><i>(Extract Case Payload)</i>"]
extract_timeline_payload_node --> reconstruct_process_tree_node["2. reconstruct_process_tree_node<br/><i>(Reconstruct Timeline & Process Tree)</i>"]
reconstruct_process_tree_node --> timeline_process_router{"3. timeline_process_router<br/><i>(Event.actions.route)</i>"}
timeline_process_router -- "MALICIOUS_PROCESS_TREE" --> handle_malicious_tree_branch["4a. handle_malicious_tree_branch<br/><i>(Document Malicious Process Tree)</i>"]
timeline_process_router -- "NORMAL_PROCESS_EXECUTION" --> handle_normal_execution_branch["4b. handle_normal_execution_branch<br/><i>(Document Normal Execution)</i>"]
handle_malicious_tree_branch --> document_timeline_report_node["5. document_timeline_report_node<br/><i>(SOAR Comment & Report Summary)</i>"]
handle_normal_execution_branch --> document_timeline_report_node
sequenceDiagram
participant User
participant AutomatedAgent as Automated Agent (MCP Client)
participant SOAR as secops-soar
participant SIEM as secops-mcp
participant GTI as gti-mcp
User->>AutomatedAgent: Generate timeline for Case `${CASE_ID}` with full process tree
%% Step 1: Get Initial Case Details & Alerts
AutomatedAgent->>SOAR: get_case_full_details(case_id=`${CASE_ID}`)
SOAR-->>AutomatedAgent: Case Details, List of Alerts (A1, A2...), Comments
Note over AutomatedAgent: Initialize timeline_data = [], process_chain = {}, assets = set()
Note over AutomatedAgent: Use Alerts (A1, A2...) from get_case_full_details response
%% Step 2 & 3: Get Events & Optional Rule/Detection Details
loop For each Alert Ai
AutomatedAgent->>SOAR: list_events_by_alert(case_id=`${CASE_ID}`, alert_id=Ai)
SOAR-->>AutomatedAgent: Events for Alert Ai (E1, E2...)
Note over AutomatedAgent: Extract Process Info (PID P1, Parent PID PP1, Hash H1...), Assets (Host H, IP I...) & store in timeline_data, process_chain, assets
Note over AutomatedAgent: Extract Rule ID Ri, Detection ID Di if available
opt Rule ID Ri available
AutomatedAgent->>SOAR: google_chronicle_get_rule_details(rule_id=Ri, ...)
SOAR-->>AutomatedAgent: Rule Details
end
opt Detection ID Di available
AutomatedAgent->>SOAR: google_chronicle_get_detection_details(detection_id=Di, ...)
SOAR-->>AutomatedAgent: Detection Details
end
alt Process Hash H1 available
AutomatedAgent->>GTI: get_file_report(hash=H1)
GTI-->>AutomatedAgent: GTI Report for Hash H1 -> Classify P1
end
end
%% Step 5: Find Parent Processes
Note over AutomatedAgent: **CRITICAL: Find Parent Processes**
Note over AutomatedAgent: Current PID = PP1 (from initial events)
loop While Current PID is valid & not root
AutomatedAgent->>SIEM: search_security_events(text="PROCESS_LAUNCH for target PID Current PID")
SIEM-->>AutomatedAgent: Launch Event (Parent PID PP_Next, CmdLine...)
Note over AutomatedAgent: Store launch event in timeline_data
Note over AutomatedAgent: Add Current PID, PP_Next to process_chain
Note over AutomatedAgent: Current PID = PP_Next
end
%% Step 6: Optional Asset Event Search
opt Assets identified
loop For each Asset As in assets
AutomatedAgent->>SOAR: google_chronicle_list_events(target_entities=[{Identifier: As, ...}], time_frame=...)
SOAR-->>AutomatedAgent: Broader events for Asset As
Note over AutomatedAgent: Add relevant asset events to timeline_data
end
end
Note over AutomatedAgent: Sort timeline_data by time
%% Step 8: Optional MITRE Enrichment
Note over AutomatedAgent: (Optional) Enrich with MITRE TACTICs
loop For each relevant entry in timeline_data
AutomatedAgent->>SIEM: get_threat_intel(query="MITRE TACTIC for [activity description]")
SIEM-->>AutomatedAgent: Potential TACTIC(s)
end
%% Step 10: Optional Gemini Summary
opt Generate Gemini Summary
AutomatedAgent->>SOAR: siemplify_create_gemini_case_summary(case_id=`${CASE_ID}`, ...)
SOAR-->>AutomatedAgent: Gemini Summary Text
end
%% Step 12: Confirm Report Generation
AutomatedAgent->>User: Confirm: "Generate MD report (incl. Process Trees)? Include delta/Gemini? (Yes, include delta/Yes, exclude delta/Yes, include Gemini/Yes, include All/No Report)"
User->>AutomatedAgent: Confirmation (e.g., "Yes, exclude delta")
alt Report Confirmed ("Yes...")
%% Step 13: Write MD Report
Note over AutomatedAgent: Format report content (MUST include Trees & Table, optionally Gemini Summary)
AutomatedAgent->>AutomatedAgent: write_report(path="./reports/case_${CASE_ID}_timeline_${timestamp}.md", content=...)
Note over AutomatedAgent: MD Report file created.
%% Step 14 & 15: Confirm PDF/Attach
AutomatedAgent->>User: Confirm: "Convert report to PDF and attach/comment in SOAR? (Yes/No)"
User->>AutomatedAgent: Confirmation (e.g., "Yes")
alt PDF & Attach/Comment Confirmed
Note over AutomatedAgent: Attempt SOAR attachment (Tool dependent)
AutomatedAgent->>SOAR: post_case_comment(case_id=`${CASE_ID}`, comment="Generated report. PDF available at: PDF_PATH") %% Fallback if attach fails
SOAR-->>AutomatedAgent: Comment Confirmation
%% Step 16 & 17: Optional SOAR Actions
AutomatedAgent->>User: Confirm: "Perform additional SOAR actions? (Tag Case/Change Priority/Add Insight/Update Description/Assign Case/Raise Incident/None)"
User->>AutomatedAgent: SOAR Action Choice (e.g., "Tag Case")
alt SOAR Action Chosen != "None"
%% Execute chosen SOAR action(s)
AutomatedAgent->>SOAR: [Chosen SOAR Tool](case_id=`${CASE_ID}`, ...)
SOAR-->>AutomatedAgent: Action Confirmation
end
AutomatedAgent->>AutomatedAgent: attempt_completion(result="Timeline analysis complete. Report generated (MD/PDF). SOAR case updated. Optional actions performed.")
else PDF & Attach/Comment Not Confirmed
%% Step 16 & 17: Optional SOAR Actions (No PDF/Attach)
AutomatedAgent->>User: Confirm: "Perform additional SOAR actions? (Tag Case/Change Priority/Add Insight/Update Description/Assign Case/Raise Incident/None)"
User->>AutomatedAgent: SOAR Action Choice (e.g., "None")
alt SOAR Action Chosen != "None"
%% Execute chosen SOAR action(s)
AutomatedAgent->>SOAR: [Chosen SOAR Tool](case_id=`${CASE_ID}`, ...)
SOAR-->>AutomatedAgent: Action Confirmation
end
AutomatedAgent->>AutomatedAgent: attempt_completion(result="Timeline analysis complete. MD Report generated. Optional actions performed.")
end
else Report Not Confirmed ("No Report")
AutomatedAgent->>AutomatedAgent: attempt_completion(result="Timeline analysis complete. No report generated.")
end
The following rubric is used to evaluate the execution of this Threat Hunt/Analysis runbook by an LLM agent.
| Criteria | Points | Description |
|---|---|---|
| Scope & Query | 25 | Defined a clear scope and executed effective queries (UDM, search). |
| Data Analysis | 30 | Analyzed results to identify patterns, anomalies, or malicious behavior. |
| Findings | 15 | Accurately identified and filtered findings (True Positives vs. False Positives). |
| Documentation | 15 | Documented the hunt methodology and results clearly. |
| Operational Artifacts | 15 | Produced required artifacts: Sequence diagram, execution metadata (date/cost), and summary. |
soar-mcp_google_chronicle_list_events filtered for metadata.event_type = "PROCESS_LAUNCH" on the specific asset around the expected time as an alternative.google_chronicle_list_events to get broader event context for those assets around the alert time.get_file_report) to classify processes (Legitimate, LOLBIN, Malicious).get_threat_intel.siemplify_create_gemini_case_summary.[PID ???]).graph LR), similarly reflecting the extent of the traced chain../reports/case_${CASE_ID}_timeline_${timestamp}.md).pandoc via execute_command.attempt_completion.