1. 项目概述:当安全警报遇上智能体
每天,安全运营中心(SOC)的屏幕上都会滚动着成千上万条安全警报。从防火墙的端口扫描告警,到入侵检测系统(如Suricata)标记的可疑网络流量,再到服务器日志里的异常登录尝试。传统的处理流程高度依赖分析师的经验:他们需要像侦探一样,将这些零散的“线索”(警报)串联起来,判断这是一次误报、一次低风险的扫描,还是一次真实攻击的前奏。这个过程我们称之为“安全警报调查”。它耗时、费力,且对人员技能要求极高,在警报洪流中,真正的威胁很容易被淹没或响应迟缓。
“Towards Agentic Investigation of Security Alerts”这个标题,指向的正是解决这一痛点的前沿方向:智能体驱动的安全警报调查。这里的“智能体”(Agent)不是某个单一工具,而是一个具备自主感知、决策和执行能力的软件实体。结合当前最热的技术——大语言模型(LLM),我们可以构建一个能够理解安全上下文、自动执行调查动作、并给出研判结论的AI助手。
简单来说,这个项目的核心目标是:将LLM作为“大脑”,赋予其调用各种安全工具(如查询日志数据库、执行分析脚本)的“手脚”,使其能够模仿资深安全分析师的工作流,自动化地完成从单条警报深度分析到关联事件研判的复杂任务。这不仅仅是简单的自动化脚本,而是一个能理解“为什么这么做”以及“接下来该查什么”的智能系统。
想象一个场景:Suricata发出了一条“ET SCAN Potential SSH Scan”的警报。传统自动化可能只是提取IP并拉黑。而一个LLM驱动的智能体会怎么做?它会自动连接SIEM平台,用SQL查询该源IP在过去一小时内所有的连接尝试、目标端口、以及是否伴有其他协议(如HTTP)的扫描;它会检查该IP的威胁情报信誉;它可能还会联动终端检测响应(EDR)工具,查看内部是否有主机向该IP发起过异常连接。最后,它综合所有信息,生成一份包含证据链、置信度和处置建议(如“确认为扫描,建议观察”或“发现横向移动迹象,建议立即隔离相关主机”)的报告。这一切,都无需人工介入初始分析。
这适合谁?对于安全团队负责人,这是提升运营效率、缓解人员疲劳的利器;对于安全工程师,这是将重复性调查工作标准化、模块化的框架;对于所有关注AI落地安全领域的研究者和开发者,这是一个充满挑战和机遇的典型场景。接下来,我将深入拆解如何一步步构建这样一个系统。
2. 核心架构设计:构建一个会“破案”的智能体
构建一个能调查安全警报的智能体,绝非将LLM API和几个脚本简单拼接。它需要一个深思熟虑的架构,来协调意图理解、工具调用、状态管理和知识积累。这里我们设计一个分层架构,它由四个核心层构成,共同协作完成“侦探”工作。
2.1 智能体大脑:LLM的角色与提示工程
LLM是整个系统的决策核心,但它不是一个全知全能的神。我们的目标不是让它凭空生成答案,而是引导它成为一个优秀的“安全调查调度员”。因此,提示工程是成败的关键。
首先,我们需要为LLM定义一个清晰、具体的角色。系统提示词(System Prompt)应该这样构建:
你是一个资深网络安全事件调查员,擅长分析各类安全警报(如Suricata IDS/IPS警报、防火墙阻断日志、Windows安全事件等)。你的任务是针对给定的单条初始警报,规划并执行一系列调查步骤,以确定其真实性和威胁等级,并找到相关证据。 **你的能力:** 1. 你可以通过调用我提供的工具(函数)来获取信息,例如查询日志数据库、检索威胁情报、检查资产信息等。 2. 你擅长逻辑推理,能将碎片化信息关联成证据链。 3. 你遵循“纵深调查”原则,从网络层、主机层、用户层等多个维度收集信息。 **你的工作流程:** 1. **理解警报**:解析初始警报的详细信息(源IP、目标IP、端口、协议、签名/规则ID、时间戳等)。 2. **制定计划**:基于警报类型和你的经验,列出3-5个关键的调查步骤。例如:“第一步,查询源IP在过去24小时内的所有活动;第二步,检查目标资产的关键性;第三步,寻找同一源IP的其他可疑行为。” 3. **执行与迭代**:依次调用工具执行计划,并根据上一步的结果动态调整后续步骤。例如,若发现源IP是已知恶意IP,则深入调查其接触过的所有内部主机。 4. **形成结论**:汇总所有调查结果,评估事件是误报、低风险扫描、高威胁攻击还是正在进行中的入侵,并给出置信度(高、中、低)和具体的处置建议(如无需处理、加入监控列表、立即阻断并隔离)。 **输出格式:** 请始终以JSON格式输出你的“思考过程”和“工具调用请求”。格式如下: { “thought”: “你的分析推理过程,例如:这是一个SSH扫描警报,我需要先了解扫描的规模...”, “action”: { “name”: “你要调用的工具函数名,如 ‘query_suricata_logs’”, “args”: {“参数1”: “值1”, “参数2”: “值2”} } }这个提示词明确了角色、流程和输出规范,将LLM的“自由发挥”约束在一个可控的框架内。关键在于让LLM输出结构化的“动作指令”,而非自然语言描述,这样后端才能准确解析并执行。
2.2 工具层:赋予智能体“手脚”
智能体的大脑(LLM)想好了要查什么,就需要工具层去执行。工具本质上是封装好的函数,可以被智能体调用。根据安全调查的常见需求,我们可以设计以下几类工具:
日志查询工具:这是最核心的工具。通常我们需要查询SIEM或日志平台的数据,这里SQL能力至关重要。我们可以创建一个名为
query_logs的通用工具。- 输入:SQL查询语句(由LLM生成)、时间范围、数据源标识。
- 实现:后端接收SQL,通过安全的数据库连接池执行,防止SQL注入(需对LLM生成的SQL进行严格的语法和权限校验)。
- 示例场景:LLM为了调查一个可疑IP,可能会生成如下SQL:
SELECT src_ip, dest_ip, dest_port, proto, event_name FROM suricata_alerts WHERE src_ip = ‘192.168.1.100’ AND timestamp > NOW() – INTERVAL ‘1 HOUR’ ORDER BY timestamp DESC LIMIT 50;这个工具执行后,将结果以结构化数据(JSON)返回给LLM。
威胁情报查询工具:名为
query_threat_intel。- 输入:IP地址、域名或文件哈希。
- 实现:调用VirusTotal、AlienVault OTX、微步在线等TI平台的API,或查询本地威胁情报库。
- 返回:信誉评分、关联的恶意家族、历史活动记录等。
资产信息查询工具:名为
query_asset_info。- 输入:IP地址或主机名。
- 实现:查询CMDB(配置管理数据库)或资产清单。
- 返回:资产所有者、部门、重要性等级(如核心服务器、普通办公终端)、安装的软件列表等。这能帮助评估事件影响范围。
主动探测工具:名为
conduct_scan。- 输入:目标IP、端口列表、扫描类型(如TCP SYN, ICMP)。
- 实现:封装Nmap或Masscan等扫描器,在授权和策略允许范围内进行轻量级扫描,验证端口开放状态或服务指纹。
- 注意:此工具需谨慎使用,必须有明确的审批逻辑和速率限制,避免对生产环境造成干扰或触发对方警报。
结论生成与报告工具:名为
generate_report。- 输入:调查过程中收集的所有证据链(结构化数据)。
- 实现:可以再次调用LLM(或使用模板),将证据链整合成一份面向人类分析师的可读报告,包括时间线、关联图、研判结论和建议。
注意:工具的设计必须遵循“最小权限原则”和“安全边界”。LLM生成的任何命令或查询,在执行前都必须经过一层严格的校验和清洗,特别是防止工具被滥用(如执行
rm -rf)或SQL注入攻击。一种常见做法是使用参数化查询,不让LLM直接拼接SQL字符串,而是让LLM提供参数值,由后端组装安全查询。
2.3 工作流引擎与状态管理
单个LLM调用是有“记忆”长度限制的。一个复杂的调查可能需要几十个步骤,跨越很长时间。因此,我们需要一个工作流引擎来管理整个调查的“会话状态”。
状态保持:系统需要维护一个“调查会话”,记录初始警报、已执行的所有步骤、每个步骤的输入(工具调用)和输出(工具结果)、以及当前的调查结论。这个状态通常保存在数据库或内存缓存中。
循环控制:这是一个经典的“规划-执行-观察”循环(Plan-Act-Observe)。
- 规划:LLM根据当前状态(初始警报或上一步结果)决定下一步行动。
- 执行:系统调用LLM指定的工具,并传入参数。
- 观察:系统将工具执行的结果,连同历史状态,一起作为新的上下文输入给LLM。
- 这个循环持续进行,直到LLM决定不再需要新的信息,并调用
generate_report工具,或者达到预设的最大步骤数(防止无限循环)。
上下文管理:由于LLM的上下文窗口有限,我们不能把整个历史对话都塞进去。需要实现智能上下文窗口策略:只保留最关键的信息,如初始警报、最近几步的操作和结果、以及一个不断更新的“调查摘要”。这个摘要可以由LLM在每一步后自行提炼更新。
2.4 知识库与反馈学习
要让智能体越用越聪明,必须引入学习和反馈机制。
调查剧本库:将成功的调查过程固化下来,形成“剧本”(Playbook)。例如,针对“暴力破解攻击”警报,一个成熟的剧本可能是:1) 查询该账户近期登录日志;2) 检查源IP的地理位置和威胁情报;3) 查看目标服务器同一时间段的异常进程。当类似警报再次触发时,可以直接推荐或部分复用该剧本,提高效率。
结果反馈闭环:每次智能体完成调查后,应将其报告和证据链提交给人类分析师进行最终审核。分析师的确认(“是真正威胁”)或纠正(“这是误报,原因是…”)应被记录。这些反馈数据可以用于两方面:
- 微调LLM:用纠正后的数据对基础LLM进行微调,使其未来的决策更准确。
- 优化工具和提示词:如果发现LLM频繁错误地调用某个工具或忽略某个关键步骤,可以调整工具的描述或提示词的引导。
这个四层架构(大脑、手脚、引擎、知识)共同构成了一个可持续演进、不断学习的智能体系统。它不是一个静态程序,而是一个具备初级认知和成长能力的数字调查员。
3. 关键技术实现细节与踩坑实录
有了架构蓝图,接下来就是动手搭建。这一部分将深入几个最核心也最容易出问题的技术实现细节,分享我从零构建这类系统时积累的实战经验。
3.1 让LLM生成可靠SQL:从Text2JSON到Text2SQL的管道
安全日志数据通常存储在Elasticsearch、Splunk或关系型数据库中。让LLM直接生成SQL去查询,是最高效的方式,但也最危险。一个语法错误或DROP TABLE语句就会导致灾难。因此,绝不能让LLM生成的SQL直接执行。
我的解决方案是设计一个两层转换管道:Text2JSON+JSON2SQL。
第一层:Text2JSON(约束用户意图)我们不让LLM直接想SQL,而是让它根据用户问题(或它自己的推理)和数据库的模式描述,生成一个结构化的查询请求。这个请求使用我们预先定义好的JSON Schema。
- Schema示例:
{ “type”: “object”, “properties”: { “intent”: {“type”: “string”, “description”: “查询意图,如‘查找源IP的所有活动’”}, “filters”: { “type”: “array”, “items”: { “type”: “object”, “properties”: { “field”: {“type”: “string”, “enum”: [“src_ip”, “dest_ip”, “dest_port”, “timestamp”, “alert.signature”]}, “operator”: {“type”: “string”, “enum”: [“=”, “!=”, “>”, “<”, “LIKE”, “IN”]}, “value”: {“type”: “string”} } } }, “time_range”: {“type”: “string”, “description”: “相对时间,如‘past 1 hour’”}, “limit”: {“type”: “integer”} } } - LLM的任务:给定问题“查看源IP 10.0.0.5在过去一小时内触发了哪些Suricata警报”,LLM应输出:
{ “intent”: “查询指定源IP的近期警报”, “filters”: [ {“field”: “src_ip”, “operator”: “=”, “value”: “10.0.0.5”}, {“field”: “timestamp”, “operator”: “>”, “value”: “now-1h”} ], “limit”: 100 }
这样做的好处是,我们将LLM的“创造力”约束在有限的、安全的枚举值内。
field只能是我们预先声明的字段,operator只能是允许的操作符,从根本上杜绝了注入。- Schema示例:
第二层:JSON2SQL(安全组装)这一层是一个确定性的、没有AI参与的纯代码函数。它接收上一步的JSON对象,根据当前连接的实际数据库类型(如PostgreSQL、MySQL),将其安全地组装成参数化查询语句。
- 实现伪代码:
def json_to_sql(query_json, db_type=“postgresql”): base_sql = “SELECT * FROM suricata_alerts WHERE 1=1” params = [] for filter in query_json.get(“filters”, []): field = filter[“field”] op = filter[“operator”] val = filter[“value”] # 字段名白名单校验 if field not in ALLOWED_FIELDS: raise ValueError(f“Disallowed field: {field}”) # 根据操作符和数据库类型组装 if op == “=”: base_sql += f“ AND {field} = %s” elif op == “>” and field == “timestamp”: base_sql += f“ AND {field} > NOW() – INTERVAL %s” val = f“{val}” # 将‘1 hour’转换为数据库理解的格式 # ... 处理其他操作符 params.append(val) base_sql += “ ORDER BY timestamp DESC” if “limit” in query_json: base_sql += f“ LIMIT {query_json[‘limit’]}” return base_sql, params # 返回SQL和参数列表 - 执行:使用数据库驱动(如
psycopg2)的execute(sql, params)方法执行,确保参数化,彻底免疫注入。
- 实现伪代码:
实操心得:这个管道是系统的“安全阀”。初期我尝试让LLM直接输出SQL,即使加了“你只能生成SELECT语句”的提示,它偶尔也会产生奇怪的语法或引用不存在的表。引入JSON中间层后,问题率下降了90%以上。另外,为
time_range这类相对时间提供明确的转换逻辑至关重要,因为LLM对“过去一小时”的理解可能和数据库函数不一致。
3.2 Suricata日志的解析与上下文增强
Suricata是网络威胁检测的基石,其eve.json日志格式丰富但复杂。智能体要有效调查Suricata警报,必须能深刻理解这些日志字段。
关键字段深度解析:
src_ip/dest_ip:不仅是IP,要关联内网资产库判断方向(外攻内、内连外、横向移动)。dest_port:端口号直接关联服务。22(SSH), 3389(RDP), 5985(WinRM)等端口的警报权重通常更高。proto:TCP/UDP。例如,UDP上的可疑DNS流量和TCP上的HTTP攻击调查路径不同。alert.signature:警报签名ID和名称。这是调查的起点。例如,ET SCAN SYN Fin Scan和ET EXPLOIT CVE-2021-44228 Log4j RCE的紧急性和调查深度天差地别。需要为常见签名预先编写调查重点提示,注入到LLM的上下文中。flow对象:包含bytes_toclient,bytes_toserver,packets等。一次成功的攻击(如漏洞利用)和数据渗出,流量模式(少量请求,大量回传)与端口扫描(大量SYN包,极少流量)截然不同。http/dns/tls对象:应用层元数据宝库。http.hostname,dns.rrname,tls.sni可以提取出域名,用于威胁情报查询;http.http_user_agent可能暴露攻击工具指纹。
上下文增强实践: 仅仅把原始日志扔给LLM是不够的。我们需要在查询到日志后,实时进行信息增强,再喂给LLM。
- IP情报增强:查询到的日志列表,在返回给LLM前,可以批量调用威胁情报工具,为每个出现的IP附加标签,如
“threat_intel”: {“reputation”: “malicious”, “tags”: [“C2 Server”, “Botnet”]}。 - 资产关键性增强:对于
dest_ip,查询CMDB,附加“asset_criticality”: “high”, “owner”: “Finance Dept”。 - 时间序列聚合:对于扫描类警报,单独的一条记录意义不大。可以在工具层先做一次聚合计算,将“源IP在短时间内对多个目标端口发起连接”这样的统计信息作为上下文的一部分提供给LLM,帮助它快速判断行为模式。
这样,LLM接收到的不是冰冷的日志行,而是已经过初步加工、富含上下文的“情报卡片”,其推理质量和速度会大幅提升。
- IP情报增强:查询到的日志列表,在返回给LLM前,可以批量调用威胁情报工具,为每个出现的IP附加标签,如
3.3 智能体工作流的稳定性保障
让LLM自主循环执行,最大的风险是“跑偏”或“卡住”。必须设计稳健的机制来保障工作流稳定。
最大步数限制与超时控制: 这是最基本的防护。每个调查会话必须设置一个最大步骤数(如20步)和总超时时间(如300秒)。达到任一限制,工作流强制终止,并尝试基于已有信息生成一份“未完成”的报告,提示人工介入。
异常检测与自我修复:
- 工具调用失败:如果工具返回错误(如网络超时、数据库连接失败),不应简单地把错误信息扔回给LLM。系统应捕获错误,并尝试以更友好的方式提示LLM,例如:“查询数据库失败(可能因网络问题),请重试或跳过此步骤。” 甚至可以准备备用方案,如从缓存中获取近似数据。
- 循环检测:智能体可能会陷入“死循环”,比如反复查询同一IP的相同信息。可以在状态管理中记录每一步的“动作指纹”(如
工具名+关键参数的哈希),当检测到重复循环时,中断并提示LLM:“你已重复查询此IP的威胁情报三次,结果未变化,请考虑调整调查方向。”
置信度评估与人工交接点: 不是所有调查都需要完全自动化到底。系统应具备置信度评估能力,在关键节点设置“人工交接点”。
- 规则触发:当调查触及到高风险操作(如建议隔离核心服务器)或置信度较低(证据矛盾)时,自动暂停工作流,生成一份待审报告,发送给值班分析师。
- LLM自我评估:可以在提示词中要求LLM在每一步后,评估当前对事件性质的判断置信度(0-100%)。当置信度低于某个阈值(如70%)或长时间无法提升时,自动转人工。
踩坑实录:在早期版本中,我曾遇到智能体因为一个模糊的警报签名,执着于调查一个无关的IP,连续执行了十几次威胁情报查询,直到步数用尽。后来引入了“动作指纹”去重和“调查焦点偏离检测”(例如,连续三步都未涉及初始警报的目标资产),才解决了这个问题。另一个坑是LLM有时会“发明”不存在的工具来调用。必须在工具调用层做严格的名称校验,对于不存在的工具请求,直接返回“工具不存在,请从以下列表中选择:[列出所有可用工具]”,并将其作为系统消息重新输入给LLM,引导它回到正轨。
4. 从概念到落地:一个端到端的实现案例
让我们通过一个完整的模拟案例,将上述所有理论串联起来,看看一个LLM驱动的安全调查智能体是如何实际工作的。假设我们收到一条Suricata警报。
初始警报(模拟):
{ “timestamp”: “2023-10-27T14:32:01.123456Z”, “src_ip”: “203.0.113.45”, “dest_ip”: “10.10.1.20”, “dest_port”: 445, “proto”: “TCP”, “alert”: { “signature_id”: 2025365, “signature”: “ET EXPLOIT SMB EternalBlue Echo Request (CVE-2017-0144)”, “category”: “Attempted Administrator Privilege Gain” } }这是一条关于永恒之蓝漏洞利用尝试的高危警报。
4.1 会话初始化与第一步规划
系统创建新的调查会话,将初始警报和系统提示词一起发送给LLM。
LLM的第一次响应:
{ “thought”: “收到一条高危警报,涉及永恒之蓝漏洞利用尝试。目标端口445是SMB服务。我需要立即评估威胁。第一步,应确认攻击源IP的威胁背景和历史行为。第二步,需要确认目标主机是否存在真实风险,比如它是否运行了易受攻击的Windows系统、是否打了补丁。我将从调查源IP开始。”, “action”: { “name”: “query_threat_intel”, “args”: { “ioc”: “203.0.113.45”, “ioc_type”: “ip” } } }系统解析这个JSON,调用query_threat_intel工具,查询该IP的情报。
工具返回结果:
{ “reputation_score”: 85, “tags”: [“Known Malware C2”, “Exploit Kit Host”, “Scanning Source”], “last_seen”: “2023-10-26”, “geo”: “Country A” }4.2 多步骤迭代调查
系统将威胁情报结果和历史对话上下文,再次发送给LLM。
LLM的第二次响应:
{ “thought”: “源IP被标记为已知恶意C2服务器,信誉分很高,威胁确凿。现在需要聚焦内部目标主机10.10.1.20。我需要知道这台主机的详细信息:它是服务器还是终端?属于哪个部门?是否安装了补丁?这需要查询资产数据库和漏洞扫描结果。同时,为了评估攻击范围,我需要查看同一源IP是否还攻击了其他内部主机。”, “action”: { “name”: “parallel_tool_call”, “args”: { “tools”: [ { “name”: “query_asset_info”, “args”: {“ip”: “10.10.1.20”} }, { “name”: “query_logs”, “args”: { “intent”: “查询同一源IP的其他攻击尝试”, “filters”: [ {“field”: “src_ip”, “operator”: “=”, “value”: “203.0.113.45”}, {“field”: “timestamp”, “operator”: “>”, “value”: “now-6h”} ], “limit”: 200 } } ] } } }这里LLM提出了一个“并行工具调用”的高级动作(我们需要在工具层实现或模拟这个功能)。系统并行执行两个查询。
并行工具返回结果:
- 资产信息:
{“hostname”: “FS-01”, “type”: “File Server”, “department”: “Finance”, “criticality”: “high”, “os”: “Windows Server 2012 R2”, “last_patch_date”: “2022-11-15”} - 关联日志:查询发现,在过去6小时,该恶意IP还尝试对内部网段其他3台主机的445端口进行了连接,但均被防火墙阻止,只有FS-01这一条进入了检测警报。
系统将这两组结果整合进上下文,再次发送给LLM。
LLM的第三次响应:
{ “thought”: “情况严重。目标是一台高关键性的财务部门文件服务器,运行的是未打补丁的Windows Server 2012 R2(永恒之蓝影响该系统)。攻击源是已知恶意IP,并且有横向移动的试探迹象(扫描了其他主机)。虽然目前只有一次针对FS-01的尝试记录,但结合资产关键性和系统漏洞,此事件为高风险。我需要立即确认FS-01主机当前是否已失陷,建议调用终端检测工具进行检查,并准备生成报告,建议立即隔离该主机并进行取证。”, “action”: { “name”: “generate_report”, “args”: { “event_summary”: “高可信度的永恒之蓝漏洞利用尝试,针对未打补丁的关键财务服务器。”, “confidence”: 90, “evidence_chain”: [“初始警报详情”, “源IP恶意情报”, “目标资产脆弱性信息”, “关联扫描行为”], “recommended_actions”: [“立即网络隔离主机10.10.1.20”, “启动终端取证调查,检查是否存在后门或横向移动”, “对内部网段进行漏洞扫描,修补所有未打补丁的Windows SMB服务”] } } }LLM判断证据已充分,调用报告生成工具。系统根据其输入,格式化生成最终的安全事件报告,并可以自动触发工单系统或SOAR平台,执行“隔离主机”等预定义动作。
4.3 效果评估与优化方向
通过这个案例,我们可以看到智能体如何将单点警报,通过自动化的信息搜集和逻辑推理,扩展成一个包含威胁源、脆弱资产、攻击意图和响应建议的完整事件故事线。其价值体现在:
- 效率提升:将分析师需要手动进行的多次查询、切换工具、关联分析的耗时过程,压缩到几十秒内完成。
- 一致性保障:无论何时何地触发警报,智能体都遵循相同的调查逻辑和深度,避免了因人员疲劳或经验差异导致的疏漏。
- 知识沉淀:成功的调查流程可以保存为“剧本”,用于培训新人或直接自动化处理同类警报。
然而,这远非终点。在实际部署中,还需要持续优化:
- 误报处理:智能体也需要学习识别误报。例如,针对某些频繁误报的扫描规则,可以在剧本中预设步骤,先检查源IP是否为公司的漏洞扫描器IP或授权的渗透测试IP,如果是则直接标记为“误报-授权扫描”。
- 多模态输入:未来的智能体不应只处理文本日志。它可以集成图像识别(分析截图中的异常图形界面)、音频处理(分析可疑的语音通话记录),甚至理解网络流量包(pcap)的元数据。
- 对抗性适应:攻击者可能会尝试“毒化”或“欺骗”智能体。需要研究针对AI系统的安全防护,例如检测提示词注入、对LLM的输入输出进行鲁棒性校验等。
构建这样一个系统,最大的体会是:它不是一个替代人类的“黑盒”AI,而是一个将人类专家经验编码化、执行自动化的“力量倍增器”。它的核心价值不在于做出最终决策(这仍需要人类分析师负责),而在于将分析师从繁琐的信息筛选中解放出来,让他们能够专注于更高层次的战略研判和响应决策。从一条简单的Suricata警报开始,到生成一份 actionable 的报告,这条“Agentic Investigation”之路,正在重新定义安全运营的效率和深度。