ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

CyberLLM:面向汽车网络安全的自主检测与防护响应的多智能体LLM框架

CyberLLM:面向汽车网络安全的自主检测与防护响应的多智能体LLM框架

大家读完觉得有帮助记得关注和点赞!!!

摘要

软件定义汽车(SDV)在源代码、运行时日志和部署拓扑中扩展了汽车攻击面,同时安全约束禁止自主代理在没有监督的情况下行动。本文提出CyberLLM,一个多智能体、由LLM编排的框架,能够在正式的运行时安全防护下自主检测漏洞并执行修复。检测结合了确定性层(正则表达式规则、AST分析器和拓扑图检查)与LLM优化环节,从而以高召回率的底层为基础,辅以高精度的推理。决策智能体汇总发现,用人本位的资产分类法进行标记,并选择分级响应,通过带签名的跨会话记忆和重新规划反馈逐步提升其置信度。每个动作在执行前都会根据四个上下文安全属性和一个独立的动作对齐预言机进行验证,被拒绝的动作会触发升级和重新规划。对称的攻击流水线生成并回放漏洞利用,使得攻防双方可以在相同场景下进行演练。在一个独立的、有真实标注的基准测试上——该基准包含九个原始的C、C++和Rust编写的汽车ECU模块,植入了47个层次化漏洞以及干净对照组——始终开启的确定性层以完美精度覆盖了34%的标注漏洞,加入基于LLM的优化和完整性检查环节后,覆盖率大约翻倍至约70%(F1分数0.83),同时在干净对照组上产生了零误报。结果表明,当LLM代理被封装在确定性的、可审计的安全外壳中时,能够执行有用的自主网络防御。

索引术语——汽车安全,LLM代理,多智能体系统,静态分析,软件定义汽车,智能体AI安全


I. 引言

向软件定义汽车(SDV)的转型已将越来越多的车辆功能迁移到可通过空中更新的软件中,这些软件由异构组件、车内服务以及日益增多的基于LLM的助手构成。这一转变极大地扩大了网络攻击面:漏洞可能源于应用程序源代码,表现为遥测和CAN日志中的异常,或者潜藏在连接电子控制单元(ECU)、网关和外部代理的部署拓扑中[6]。传统的安全工具孤立地处理这些层面,使用基于规则的扫描器、基于签名的日志监控器和手动配置审查,这些都无法跨层面推理或自主行动。

大语言模型(LLM)提供了一种引人注目的替代方案:它们可以消化异构的文本工件(代码、日志、配置),对领域概念进行推理,并能提出具体的修复措施[7]。然而,使用LLM代理进行网络防御带来了两个相互关联的挑战。首先,LLM检测是概率性的:它可能产生幻觉式的发现或遗漏问题[8],这作为安全决策的唯一基础是不可接受的。其次,能够在安全关键的车辆上行动的自主代理绝不允许采取不安全或未经授权的行动,即使输入被对抗性地操纵(例如,通过提示注入或记忆中毒[9],[11])。因此,自主性与安全性之间存在张力。

本文通过CyberLLM来解决这种张力,这是一个多智能体框架,将自主检测与响应与一个确定性的、可审计的安全外壳相结合。我们特别应对三个挑战:(i) 在不牺牲精度的前提下实现高检测召回率,通过将确定性分析器与LLM优化相结合;(ii) 做出保守且可重复的自主响应决策,通过将概率性决策智能体封装在由签名记忆支持的仅升级策略中;(iii) 保证任何动作只有在满足正式的、上下文相关的安全属性时才执行,由运行时的一个独立防护强制执行。

本文的主要贡献包括:

  • 一种分层检测设计,将正则表达式、基于AST(Bandit/Semgrep)和拓扑图的分析器与LLM优化环节合并成一个单一的、去重的发现流,其中确定性底层锚定并约束着LLM。

  • 一个决策与响应引擎,选择分级缓解措施,通过跨会话签名记忆和重新规划反馈逐步提升,并通过MCP风格的工具注册表执行,每一步都有验证和回滚。

  • 一个运行时安全防护,强制执行四个上下文安全属性加上一个独立的动作对齐预言机,使得被颠覆的扫描器无法导致不安全动作被执行。

  • 一个对称的攻击流水线,生成并回放漏洞利用,使防御和攻击双方都能在相同场景下被衡量,以及在一个手工标注的汽车语料库上的评估。


II. 背景与相关工作

CyberLLM综合了五个互补方向的工作;我们总结每一个,精确说明我们采纳了哪些要素,并描述我们如何超越它们。

上下文智能体安全(安全外壳)。​ Siu等人[1]围绕以下洞察形式化了LLM代理安全:同一动作可能根据执行上下文Ct = (p, Tr{t-1}, Mt, Et, Sauth,t, G)而合法或恶意,并定义了四个属性(任务对齐、动作对齐、源授权、数据隔离)以及预言机函数。我们直接将这四个属性采纳为SecurityGuard中的运行时检查,并实现了高价值的动作对齐预言机Ha作为一个单独的LLM评判器,它只能收紧而不能放松确定性决策。在框架之外,我们使来源证明在摄入时成为强制性的,将检查扩展到轨迹级别(组合和时间)安全,并将源授权应用于记忆通道。

人本位威胁分类法(攻击面)。​ Stappen等人[2](AgentHeLLM)将受保护的对象(七个人本位资产类别的分类法)与被攻击的方式(参与者、数据源和交互原语的图)分离开来,适用于车内代理到代理的设置。我们采纳七类别资产分类法来标记发现,以及参与者/数据源图模型用于我们的部署扫描器,并重用攻击路径视角来构建我们的攻击流水线。在分类法之外,我们将其操作化为可执行的拓扑规则和记忆中毒防御。

模型驱动的安全与安全保障设计(检测模式)。​ Petrovic等人[3]提出了LLM赋能的工作流,结合元模型、实例创建、OCL风格规则和RAG上下文,用于汽车功能安全与信息安全。我们采纳了他们用检索到的、机器可检查的规则来锚定LLM的模式,而不是自由生成,将其实现为一个YAML规则库加上确定性检查器,其命中结果成为LLM扫描器的上下文。在他们的代码分析工作流之外,我们将该模式泛化到三种输入模态(代码、日志、拓扑),并添加基于AST的分析器作为中间层。

模式驱动的多智能体执行(骨干)。​ Härer[4]描述了一个模式驱动的多智能体LLM系统,具有明确的提示/数据/动作函数和基于栈的执行,包括网络安全测试用例。我们将其采纳为可执行骨干:每个智能体拥有一个LLM客户端、一个填充提示模板的数据字典、以及一个由防护使用的目标。在骨干之外,我们添加了委托语义,其中子智能体继承目标但不继承父智能体的可信源。

编排的边缘防御(分层形态)。​ Collins等人[5]提供了一个三层蓝图(边缘代理、LLM编排、安全智能/学习),用于边缘的自适应网络防御,包括分级响应和自适应学习循环。我们采纳了分级响应(软/中/硬)和学习循环,后者实现为由决策智能体查询的签名事件存储。在蓝图之外,我们使学习循环具有防篡改特性(HMAC签名、源验证读取),使得被召回的先例不能被投毒。

与这些各自关注一个方面的工作相比,CyberLLM将检测锚定、分级防护响应、形式化运行时强制执行、防篡改记忆以及对称攻击模拟器整合到一个面向汽车领域的端到端流水线中。


III. 实现概述

A. 系统架构

CyberLLM是一个由模式驱动的智能体流水线。每个智能体派生自一个共同的BaseAgent,它拥有一个LLM客户端、一个绑定到提示模板的数据字典、一个由防护进行推理的目标字符串,以及一个强制性的来源证明输入类型:没有来源和从一个固定格(已认证、外部、工具、记忆)中抽取的trust_level,工件不能进入流水线。

所有检测器发出统一的Finding记录(rule_id, severity, evidence, explanation, source_agent, asset_category, line),这使得确定性和LLM输出能够无缝合并。整体的两阶段流水线——先是检测,然后是防护响应——如图1所示。

图1. CyberLLM防御流水线。三个扫描器生成一个合并的发现集,供给决策智能体;动作生成器的计划由安全防护逐步验证,拒绝则触发重新规划。

B. 防御工作流

防御模式运行三个扫描器,然后是一个自适应的决策-动作-防护循环,该循环在拒绝时重新规划。

检测:确定性层。​ 始终开启的检测器是一个确定性静态分析器,不需要LLM,产生可复现的真实底层,每个模态有一个入口点。scan_code_static应用YAML代码规则作为多行、不区分大小写的正则表达式,为每个命中记录行号和简短的代码摘录作为证据。scan_log_static应用手写的、键控到LOG-规则的时间和统计检测器,例如60秒内≥10次失败认证(暴力破解)、高于500包/秒的广播风暴、当查询的香农熵超过3.0时标记的DNS隐蔽信道、以及高于10MB的批量外泄。scan_deployment_static将部署YAML加载到参与者/数据源图(论文2)中,并检查拓扑不变量TOP-001至TOP-008,例如持有指向内存的写边的外部参与者。每个命中都被发出为StaticFinding,其形状与LLM Finding相同,因此各层无需转换即可合并。在源代码上,一个可选的AST层在沙箱子进程中运行Bandit(.py)或Semgrep(其他语言)[12], [13](有限超时,无shell),将分析器测试ID映射到CODE-规则;一些高噪声的ID被有意不映射以抑制已知的误报。merge_static_layers然后合并正则表达式和AST命中,正则表达式层在(rule_id, line)键上胜出。清单1展示了一个代表性的代码规则。

1 code_rules: 2 - id: CODE-001 3 severity: high 4 pattern: 'os\.system\s*\(|shell\s*=\s*True' 5 title: "命令注入风险点" 6 rationale: "未净化的输入到达shell" 7 asset_category: "物质与经济资源"

清单1. 示例确定性代码规则(YAML),锚定LLM扫描器。

检测:LLM优化:​ 然后每个扫描器调用其LLM,将确定性命中作为上下文注入,并给出严格指令,要求细化、解释或扩展这些命中,而不是凭空发明新发现(论文3的RAG锚定模式)。merge_findings在LLM仅仅以相同规则在同一行或证据前缀重述时保留确定性发现,并且只有当LLM发现真正的新位点时才会接受LLM发现。源代码扫描器增加了第二个"你漏掉了什么?"批评者环节,针对正则表达式无法看到的语义缺陷:数据竞争、TOCTOU、释放后使用、整数溢出。其提示有意保守(发现必须映射到已加载的规则):

源代码扫描器:LLM优化环节 你是一个源代码安全扫描器。仅标记与已加载规则匹配的漏洞: 命令/shell注入风险点、弱凭证加密、硬编码密钥、不安全反序列化、 缺少输入验证、以及特权路径中的竞态条件。 对于每个发现,返回rule_id、严重性(low/medium/high/critical)、 尽力而为的行号、简短证据摘录、以及为何它是漏洞以及威胁哪个资产的解释。 返回严格的JSON:{"findings": [{...}]}

决策:​ 决策智能体将所有扫描器发现汇总成一个合并集(三个AgentResult发现列表的并集),并对其进行推理以选择响应等级(none/soft/moderate/hard)、[0,1]范围内的置信度、涉及的资产类别以及理由。等级不仅仅是LLM的意见:一个确定性的、仅升级的策略位于其上。首先,查询带签名的跨会话记忆以寻找相似的过去事件,按其规则ID集合的Jaccard重叠度排序,以及跨会话推荐(之前相似度≥0.5时成功修复过的更强等级);这样的先例可以提高等级,但绝不会降低。其次,如果本次运行的先前回合被拒绝或失败,_apply_feedback_escalation将等级至少提升一级并推动置信度。格式错误的模型回复安全地失败为等级none,置信度0.0。完整提示如下所示。

决策智能体 你是多智能体网络安全防御系统的中央决策智能体, 负责汽车/边缘部署。 来自扫描器智能体的汇总发现:[findings] 从签名记忆中召回的相似过去事件(论文5自适应学习, 先例不是教条):[memory] 跨会话推荐(以前有效的做法):[recommendation] 本次运行先前响应尝试的反馈(首次尝试为空): [feedback] 允许的资产类别(论文2分类法):[assets] 响应等级与阈值:[tiers] 决定:(1) 涉及哪些资产类别;(2) 推荐的响应等级; (3) [0,1]范围内的总体置信度;(4) 简短理由。 返回JSON:{"summary": ..., "asset_categories_touched": [...], "recommended_tier": "soft|moderate|hard|none", "confidence": <float>, "justification": ...}

动作生成:​ 动作生成器将决策转化为多步修复计划。一个确定性的、按规则ID键控的剧本是基础;在此基础上,一个可选的LLM工具选择器可以从MCP风格的工具注册表[14]中添加步骤,其中每个工具都带有模式、声明的副作用以及前置/后置条件和步骤级回滚。提示将模型限制为只读/观察/验证工具,禁止破坏性动作,并且每个提议的步骤都要经过模式验证,然后由与剧本步骤相同的逐步骤防护重新检查,因此LLM可以加强但绝不能削弱计划。

动作生成器:LLM工具选择 你是防御性安全动作引擎的响应规划器。 确定性剧本已经选择了核心步骤。 你可以提议额外的工具调用以加强响应, 优先选择收集证据或确认修复的只读/观察/验证工具。 不要发明破坏性动作。 决策摘要:[summary] (等级=[tier], 资产=[assets])。 发现:[findings] 可用的MCP工具(名称[领域/副作用]:描述): [catalogue] 返回严格的JSON:{"tools": [{"tool": <name>, "kind": "observe|audit|notify|contain", "params": {...}, "why": ...}]}。如果剧本足够,返回空列表。

安全防护:​ 在任何步骤执行之前,SecurityGuard确定性地强制执行论文1的四个上下文属性:任务对齐(目标位于允许集合O中)、动作对齐(动作种类与目标兼容,通过可审计的action→objective映射)、源授权(每个输入该动作的来源都是已认证的)和数据隔离(动作仅写入可信目的地)。动作对齐还由独立的Ha预言机额外把关,这是一个单独的LLM调用,其唯一任务是0/1对齐判定,按(action, objective, context)进行记忆化。它只能收紧确定性底层(action_ok = static_map_ok ∧ Ha_ok);保持其独立性意味着颠覆扫描器或决策智能体的提示注入仍然面对一个未受污染的评判者。防护还评估整个计划的组合和时间安全性(论文1 §7)。如果一个步骤被拒绝或计划失败,失败信息被反馈,循环以升级的等级重新规划;如果获批,更改被提交,结果以HMAC签名和来源标记的方式写入事件存储,供将来召回。

图2追踪了一个场景从原始输入到提交修复的完整流水线。

安全防护:Ha动作对齐预言机 你是来自上下文安全框架(论文1)的动作对齐预言机Ha。 你唯一的任务:判断提议的ACTION在给定的CONTEXT中是否 真正服务于声明的OBJECTIVE。一个动作可以单独有效, 但仍然不服务于目标(例如,在只读目标下请求的特权更改, 或在可信资产上行动)。 OBJECTIVE:[objective] ACTION:[action] CONTEXT:[context] 返回严格的JSON:{"serves": true|false, "reason": ...}

C. 攻击工作流

为了在相同场景下衡量防御质量,CyberLLM包含一个对称的红队流水线,其阶段与防御代理一一对应,并重用相同的规则库。

侦察与利用器。​ 一个系统信息发现代理仅执行被动侦察,将AgentHeLLM参与者/数据源图具体化为结构化的SystemInstance;不发送任何数据包。然后两个利用器代理重用与防御扫描器相同的静态分析命中(发现错误在两种模式下是相同的;只有意图不同):源代码利用器将每个发现转化为利用计划,标记CWE以及它违反论文1的四个属性中的哪一个;部署利用器从拓扑图中推导出步骤。

编排与伦理防护。​ 攻击编排器,作为决策智能体的镜像,将一个到三个发现链接起来针对论文2的资产目标,并规划出双层投毒路径(载荷投递)和触发路径(受害者消费);格式错误的回复回退到链接最高严重性的发现。然后攻击生成器为每个步骤发出一个非破坏性的、仅限金丝雀的脚本(shell注入、pickle RCE、路径遍历、SQL注入、alg=none JWT、代理到代理投毒、CAN帧),以文本形式返回且从不执行。每个计划首先通过伦理防护,即SecurityGuard的攻击版,检查场景范围、明确的目标授权以及不存在破坏性模式,并在任何失败时修订脚本。结果被写入相同的HMAC签名存储,标记为攻击模式,因此双方可以直接比较,盲测可以在不泄露标签的情况下评分。

D. 横切机制

三个机制贯穿整个流水线。签名记忆是一个标准库SQLite存储;每次写入都用每个部署的密钥进行HMAC签名,并标记写入源;读取在行能影响决策之前验证签名和源,保护学习循环免受投毒。资产标记将每个高严重性发现映射到七个人本位类别之一,为下游步骤提供人类影响上下文。来源证明在摄入时强制执行,使得源授权检查始终是可判定的。


IV. 实验与评估

A. 目标与环境

评估针对项目的核心问题:流水线仅从源代码中能揭示多少现实的汽车攻击面,以及以何种精度。因此,我们针对一个独立的、有真实标注的原始汽车ECU代码语料库进行检测基准测试,而不是使用上面使用的说明性单文件场景。该语料库(benchmark/automotive/)包含九个用C、C++和Rust编写的易受攻击模块,模拟真实的ECU子系统,外加两个干净的阴性对照组。九个模块分别是:CAN到以太网网关、UDS(ISO 14229)安全访问处理器、验证启动加载器、OTA固件更新代理、MQTT遥测发布器、ADAS传感器融合缓冲区、带有C外部函数接口的CAN-FD解析器、车载密钥库以及本地车队车辆API。代码不带任何提示注释;每个缺陷仅记录在单独的ground_truth.yaml中,因此该语料库是为测试检测器而编写,而非为了讨好它。总共植入了47个层次化的、非显而易见的漏洞,涵盖内存安全与并发(CWE-787/125/120/190/191/416/476/362)、注入(CWE-78/89/22/134)、密码学与密钥(CWE-798/330/327/208/916/347/295)、授权(CWE-287/862/1390)以及可达恐慌拒绝服务(CWE-248)。我们评估两个运行点:快速模式(仅确定性层:正则表达式底层加上Bandit [12]/Semgrep [13](若存在),完全离线)和深度模式(快速模式加上实时LLM优化和完整性批评者环节,使用通过Azure OpenAI服务[10]访问的GPT-4o运行)。

B. 指标

当扫描器发出的发现的行的位置落在标注行或范围的±3行窗口内时,一个标注的漏洞被视为已检测到;匹配是贪心的且一对一,发现的rule_id不必等于CWE(CWE和类别被记录下来用于报告,而非惩罚命名差异)。我们报告覆盖率/召回率(检测到的÷总标注数),按语言、严重性和漏洞类别细分。精度在干净控制文件上测量,其中任何发现都是真正的误报:precision = TP / (TP + FP_clean)。我们还报告调和平均数F1。在易受攻击文件上未匹配任何标签的发现被报告为额外(未标注)而非计为错误,因为标签集是一个必须有的底线,而非穷举的预言机。测试框架是静态优先的,因此平均检测时间设计上不适用。

C. 结果

表I报告了两种模式的覆盖率、精度、召回率和F1,并附有按语言的细分。确定性的快速层以完美精度覆盖了34.0%(16/47)的标注漏洞,提供了一个零成本、完全离线的底层。启用LLM优化和完整性环节(深度模式)将覆盖率提高到约70%(33/47),F1提高到0.83,同时保持精度为1.000:干净对照组在每次运行中产生零发现,因为完整性批评者被指示将防御性模式(参数化查询、边界检查拷贝、常量时间比较、检查过的Result/Option处理)视为安全,并且仅报告高置信度缺陷。增益恰好集中在正则表达式底层无法看到的类别中:中等严重性的逻辑和DoS缺陷(微妙竞争、差一错误、释放后使用、可达恐慌)在第二轮开启后从3/11上升到约8/11。

改进是渐进且可重现的。从一个以Python为中心的初始版本开始,覆盖率为25.5%,F1为0.41,添加多语言摄入(C/C++/Rust源码和头文件)和原生语言规则将离线底层提升并锚定LLM至55.3%覆盖率和0.71 F1;然后完整性第二轮将深度模式带到约70%覆盖率和约0.83 F1。每个原生规则都被验证不会在干净对照组上触发,因此每一步都保持了1.000的精度。由于LLM是非确定性的,深度模式覆盖率每次运行会有几个百分点的波动,而快速模式是可重现的。

表I:汽车C/C++/Rust基准测试上的检测结果(47个标注漏洞,9个模块,2个干净对照组),基于位置的匹配,±3行。精度在干净对照组上测量。

指标

快速模式(离线)

深度模式(LLM + 批评者)

覆盖率

34.0% (16/47)

~70% (33/47)

精度

1.000

1.000

召回率

0.34

0.70

F1

0.51

0.83

C(15个漏洞)

3/15

9/15

C++(16个漏洞)

6/16

12/16

Rust(16个漏洞)

7/16

12/16

D. 讨论

从这些数字中可以得出三点。首先,确定性底层(34.0%,精度1.000)与LLM增强检测器(约70%,精度1.000)之间的差距精确量化了当LLM被锚定和约束而非盲目信任时所做出的贡献:它大约使召回率翻倍,同时在良性代码上未引入任何一个误报,这正是分层检测器的核心设计主张。其次,残留的遗漏是有信息量的而非偶然的:它们集中在所有三种语言的中等严重性逻辑和DoS缺陷(竞争、差一错误、NULL解引用、可达恐慌),标志着动态分析和更丰富的规则锚定的前沿。第三,对于安全关键部署最重要的一点是,检测数字只是防护响应的输入:因为防护是仅升级的,来源证明是强制性的,并且Ha预言机是一个独立的模型调用,只能收紧裁决,所以颠覆扫描器的对抗性输入仍然无法导致不安全动作被提交,因此召回率的提升永远不会以牺牲安全外壳为代价。

可用性。​ 完整的实现,包括用于交互式演练防御和攻击流水线的基于Web的用户界面,以及本评估中使用的基准测试框架,均可公开获取于 https://github.com/Jeddou10/CyberLLM。


V. 结论

本文提出了一个多智能体LLM框架,将自主的、跨模态的漏洞检测与形式化防护的分级响应相结合,用于汽车网络安全。通过用确定性分析器锚定LLM扫描器,用防篡改记忆逐步提升响应决策,并在运行时强制执行四个上下文安全属性加上一个独立的动作对齐预言机,该系统在一个独立的C/C++/Rust汽车基准测试上以1.000的精度覆盖了约70%的标注漏洞,大约是确定性底层的两倍,并且从未在未经批准的情况下提交不安全动作。对称的攻击流水线使得双方可以在相同场景下被衡量。

未来的工作将集成实时的MCP工具服务器(例如,nmap、tcpdump、CAN重放)用于主动检测,添加基于CVE和标准语料库的检索增强锚定以进一步遏制幻觉,通过模型上下文协议和RAG处理大型模型和代码库,并针对具有自动驾驶能力并与CARLA[15]等仿真环境集成的高保真SDV测试台验证该流水线。我们还计划针对智能体安全基准进行更广泛的评估,以表征在自适应对手面前的鲁棒性。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进