尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

基于LLM与智能体架构的自动化安全警报调查系统设计与实践

基于LLM与智能体架构的自动化安全警报调查系统设计与实践 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可能会生成如下SQLSELECT 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直接执行。我的解决方案是设计一个两层转换管道Text2JSONJSON2SQL。第一层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只能是允许的操作符从根本上杜绝了注入。第二层JSON2SQL安全组装这一层是一个确定性的、没有AI参与的纯代码函数。它接收上一步的JSON对象根据当前连接的实际数据库类型如PostgreSQL、MySQL将其安全地组装成参数化查询语句。实现伪代码def json_to_sql(query_json, db_type“postgresql”): base_sql “SELECT * FROM suricata_alerts WHERE 11” 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)等端口的警报权重通常更高。protoTCP/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接收到的不是冰冷的日志行而是已经过初步加工、富含上下文的“情报卡片”其推理质量和速度会大幅提升。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”之路正在重新定义安全运营的效率和深度。
返回列表