抛弃大模型幻觉:我是如何用“神经符号架构”重构自动化渗透 Agent 的?
“在 AI 安全领域,最廉价的是生成,最昂贵的是证明。”
在目前的 AI 圈,只要提到“Agent(智能体)”,大家的脑海立刻会浮现出:大模型 + Prompt + 挂载几个工具。只要你接入了 GPT-4,能像人一样在对话框里思考,你就是一个智能体。
但在网络安全(渗透测试)这个极其特殊的垂直领域,大模型带来的“幻觉”是致命的。
今天,我想分享一个近期落地的项目:PCVL-Agent。它没有使用任何 LLM 作为决策大脑,而是采用了一套极端的“神经符号架构(Neuro-symbolic AI)”,实现了一个 0 误报的自主安全测试智能体。
一、 为什么纯 LLM Agent 在安全领域走不通?
让 LLM 去测漏洞,就像让一个熟读《本草纲目》但没拿过手术刀的人去做手术。
当你给 LLM 返回一段 HTTP 响应时,它通常会这样思考:“我看到页面报错了,这大概率是一个 SQL 注入,建议你尝试使用 UNION SELECT 测试。”
痛点暴露:
- 幻觉极强:页面报错可能只是业务异常,LLM 会强行脑补成漏洞,导致假阳率(False Positive)高达 15%-30%。
- 无法闭环:LLM 只能“说”,不能“做”。要证明漏洞,它必须去发包验证(因果消融、良性对照),而这恰恰超出了 Prompt 的能力范围。
二、 我们的解法:神经符号系统 + 快慢双系统
在卡尼曼的《思考,快与慢》中,人类大脑分为系统 1(直觉)和系统 2(理性)。我们将这一理念落地为了底层代码。
1. 主流程 0 模型调用(极端的符号主义)
在我们的核心链路(感知 -> 判定 -> 决策)中,我们彻底踢出了神经网络模型。
渗透测试的本质是严格的逻辑推导。我们的核心判定由 62 类检测器和严密的“四重验真(存在性、因果性、差异性、稳健性)”代码写成。每一行判定逻辑都是确定性的,这意味着:只要系统报出 Confirmed,它就是 100% 的铁证。
2. 快慢双系统的拦截
- 快系统(毫秒级过滤):依托启发式规则和轻量级分类器,对海量请求进行路由,过滤掉 80% 的无效噪音。
- 慢系统(逻辑仲裁):一旦快系统认为某个点可疑,直接扔进慢系统,进行反事实消融(删除特定 Token)和良性孪生对照(发送正常参数),只有同时通过四重验证,才算实锤。
三、 真正的智能:把模型放在边缘,把规则留在核心
虽然主流程 0 模型,但我们并不排斥 AI。我们内部训练了一个轻量级的 n-gram 模型,但在实测中,我们主动把它从主流程切断了(因为它的判断力不如规则)。
那大模型去哪了? 在 PCVL-Agent 的 8 段流水线中,大模型被降级成了“感知层的翻译官”。当系统遇到极其复杂的混淆 JS 代码,或者无法解析的罕见报错时,系统会调用一次 LLM,让它提取隐藏的 API 端点。至于打不打、有没有漏洞,LLM 没有发言权。
四、 核心黑科技:图状态机与元认知
如果只有规则,那它只是脚本。真正的 Agent 必须具备动态适应能力。
1. 攻击状态树(图记忆)
系统不使用上下文(Context),而是使用图数据库(Graph)来维护记忆。资产、物理前提(如 SQL 汇点)、证据事实(Fact)被做成节点。一次否证打掉一个叶子节点,极大地节省了发包成本(实测节省 31% 的请求数)。
2. 元认知(Meta-cognition)
这是该系统最让我骄傲的模块。当系统遭遇无法突破的防御时,它不会像 LLM 那样瞎编。它会触发 metacog.py 逻辑:
- 派生求援:发现当前权限不足以访问接口,自动将任务挂起,并上报请求人工介入。
- 封顶声明:发现被一套极其严密的 WAF 拦截了 50 次,系统会明确判定“当前策略封顶”,并切断该路径,不再浪费算力。
五、 结语:不要为了 AI 而 AI
目前的 AI 创业圈太浮躁了,大家都想用一套 Prompt 包打天下。 但在严苛的工程领域,确定性和可解释性永远排在“像人一样说话”之前。
如果你也对这种“冷酷无情、只讲证据”的底层 Agent 架构感兴趣,或者想交流图状态机在安全领域的落地,欢迎在评论区探讨!