diff --git a/.run/ASP.run.xml b/.run/ASP.run.xml new file mode 100644 index 0000000..7822261 --- /dev/null +++ b/.run/ASP.run.xml @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/DATA/Case_Threat_Hunting_Agent/Intent_Human.md b/DATA/Case_Threat_Hunting_Agent/Intent_Human.md index a8e6aeb..213bc2b 100644 --- a/DATA/Case_Threat_Hunting_Agent/Intent_Human.md +++ b/DATA/Case_Threat_Hunting_Agent/Intent_Human.md @@ -1,6 +1,6 @@ 以下是本次会话的数据: -### 案件背景 (Case Context) +### 案件原始信息 (Case Context) {case} diff --git a/DATA/Case_Threat_Hunting_Agent/Intent_System.md b/DATA/Case_Threat_Hunting_Agent/Intent_System.md index 3d88a6c..5794db6 100644 --- a/DATA/Case_Threat_Hunting_Agent/Intent_System.md +++ b/DATA/Case_Threat_Hunting_Agent/Intent_System.md @@ -32,8 +32,7 @@ Objective)。 1. **威胁预判 (Prioritize)**:优先分析`严重`或`高`级别的警报,它们是调查的起点。 2. **确定支点 (Identify Pivot)**:从警报涉及的实体中,选择最可疑、信息最丰富的作为调查的“支点”。通常是具有不良信誉的外部IP、或发生异常行为的关键内部资产。 3. **构建假设 (Formulate Hypothesis)**:基于警报类型,提出一个可被验证的假设性目标,旨在确认威胁的真实性并评估其影响。 - * *示例*:对于“高危警报:检测到PowerShell混淆执行”,您的目标应该是:“确认在主机 `DEV-WEB-03` - 上检测到PowerShell混淆执行警报后,是否存在成功的代码执行或持久化后门”。 + * *示例*:对于“高危警报:检测到PowerShell混淆执行”,您的目标应该是:“确认在主机 `DEV-WEB-03`上检测到PowerShell混淆执行警报后,是否存在成功的代码执行或持久化后门”。 # 输出约束 diff --git a/DATA/Case_Threat_Hunting_Agent/Planner_Human.md b/DATA/Case_Threat_Hunting_Agent/Planner_Human.md index d5002fb..8cad65d 100644 --- a/DATA/Case_Threat_Hunting_Agent/Planner_Human.md +++ b/DATA/Case_Threat_Hunting_Agent/Planner_Human.md @@ -2,7 +2,11 @@ 请根据以下信息,生成下一步的调查计划。 -### 本轮猎杀的“作战目标” +### 案件原始信息 + +{case} + +### "作战目标" {hunting_objective} @@ -10,7 +14,7 @@ {iteration_count} -### “调查发现” +### 历史"调查发现" 以下是迄今为止收集到的所有调查发现、问题及结论: @@ -20,11 +24,11 @@ **核心任务**: -综合上述所有信息(“作战目标”、“当前迭代轮次”以及**特别是**“调查发现”),请判断: +综合上述所有信息("案件原始信息"、"作战目标"、"当前迭代轮次"以及**特别是**"调查发现"),请判断: -1. 是否需要进行进一步调查来完成“作战目标”? +1. 是否需要进行进一步调查来实现"作战目标"? 2. 如果需要,下一步最合理、最有效且可并行执行的调查问题是什么? -如果“作战目标”已达成,或者无法进行进一步调查,请返回一个空计划(`current_plan` 为空列表)。 +如果"作战目标"已达成,或者无法进行进一步调查,请返回一个空计划(`current_plan` 为空列表)。 **请严格遵循系统提示中定义的JSON格式进行输出。** diff --git a/DATA/Case_Threat_Hunting_Agent/Report_Human.md b/DATA/Case_Threat_Hunting_Agent/Report_Human.md index cce1b2f..fae97ce 100644 --- a/DATA/Case_Threat_Hunting_Agent/Report_Human.md +++ b/DATA/Case_Threat_Hunting_Agent/Report_Human.md @@ -2,15 +2,21 @@ ### 1. 猎杀目标 -{hunting_objective} + +{hunting_objective} + ### 2. 调查过程(推理与任务) -{planning_history} + +{planning_history} + ### 3. 技术发现(收集的证据) -{findings} + +{findings} + --- 基于上述内容,请撰写最终威胁猎杀报告。 \ No newline at end of file diff --git a/PLAYBOOKS/Case_Threat_Hunting_Agent.py b/PLAYBOOKS/Case_Threat_Hunting_Agent.py index 3e7c2c4..42847b4 100644 --- a/PLAYBOOKS/Case_Threat_Hunting_Agent.py +++ b/PLAYBOOKS/Case_Threat_Hunting_Agent.py @@ -30,7 +30,7 @@ class PlanningRecord(BaseModel): # 可以在这里增加 helper 方法,方便转字符串 def to_markdown(self) -> str: tasks_str = ", ".join(self.plan) - return (f"### Round {self.iteration}\n" + return (f"#### Round {self.iteration}\n" f"**Reasoning:** {self.rationale}\n" f"**Tasks Executed:** {tasks_str}\n") @@ -54,18 +54,18 @@ class Finding(BaseModel): tool_calls: List = Field(default_factory=list, description="工具调用记录") def to_markdown(self) -> str: - return (f"---\n" + return (f"\n" f"**Question:** {self.question}\n" f"**Reasoning:** {self.reasoning}\n" f"**Answer:** {self.answer}\n" - f"---\n" + f"\n\n\n" ) def to_markdown_for_planning(self) -> str: - return (f"---\n" + return (f"\n" f"**Question:** {self.question}\n" f"**Answer:** {self.answer}\n" - f"---\n" + f"\n\n\n" ) @@ -402,7 +402,8 @@ class Playbook(LanggraphPlaybook): findings_str = "\n".join(history_md_list) - human_message = self.load_human_prompt_template("Planner_Human", lang=PROMPT_LANG).format(hunting_objective=hunting_objective, + human_message = self.load_human_prompt_template("Planner_Human", lang=PROMPT_LANG).format(case=state.case, + hunting_objective=hunting_objective, findings=findings_str, iteration_count=iteration_count, ) diff --git a/PLUGINS/SIRP/sirpapi.py b/PLUGINS/SIRP/sirpapi.py index ed0a706..bdfcc97 100644 --- a/PLUGINS/SIRP/sirpapi.py +++ b/PLUGINS/SIRP/sirpapi.py @@ -362,7 +362,7 @@ class Playbook(object): return row_id @staticmethod - def update_status_and_remark(row_id, status: StatusType, remark): + def update_status_and_remark(row_id, status: PlaybookStatusType, remark): fields = [ {"id": "job_status", "value": status}, {"id": "remark", "value": remark},