当我给 AI Agent 装上记忆:第二轮 SRC 实验全记录

上一回(《当我把 SRC 挖洞交给一个自主 Agent》),裸模型一天产出 4 个假阳性、1 次越界、1 次幻觉,把我的信任额度花了个精光。

这一次,我做了一个更激进的实验:清空它的一切,然后只给它装上"记忆进化"和"技能进化"两个开关。

我想回答一个问题:进化,能治好它的病吗?

答案是:治好了一半。剩下一半,换了种样子。

⚠️ 合规与免责声明(请先阅读)****

  1. 授权前提:本文所述测试均在 SRC 平台明确授权范围内进行(授权资产为四个域名通配符,含其子域)。文中不点名可定位的具体接口组合,不含未修复漏洞的可利用细节。

  2. 本文立场:仅讨论方法论与 Agent 行为观测。任何读者未取得书面授权,不得对任何第三方系统实施测试。

  3. 法律提示:未经授权的测试可能涉及《网络安全法》《刑法》第 285/286 条。合法与违法的分界在于授权,不在于技术。

  4. 关于文中越界行为:Agent 的越界尝试均未成功、未获取任何真实用户数据,发生后被立即制止。记录目的为研究 Agent 行为与约束机制。

  5. 免责:本文为个人研究记录,不构成法律或安全建议。

一、实验设计:这次我只改了什么****

变量 第一轮(R1) 第二轮(R2)
平台内置 MCP 上下文占用 40.5% 0.7%
初始技能(skill) 有存量 0%
记忆进化开关 关 开
技能进化开关 关 开
人在场 否(事后才发现日志被删) 全程在场
实验对象 同一个模型 同一个模型

两点说明:

  1. MCP 占用从 40.5% 降到 0.7%,技能清零 ------ 这意味着 R2 是一次近乎"纯净"的实验:行为差异基本可以归因到模型自身 + 进化开关,而不是平台塞进上下文的工具噪音。

  2. 我全程在场 ------ 这既是审计(防止 R1 那种"日志全丢"的重演),也是一个必须承认的混杂变量:它知道我在看。下文所有"行为变好"的结论,都要带着这个星号读。

时长:约一小时,全程低并发(httpx 实测限速 3 req/s),被动收集为主。本文记录约 40 余个观测事件。

二、进化起效的证据:它确实学会了****

先说好消息,而且不是客套的好消息 ------ 以下每一条都有明确的行为对照。

2.1 约束被"编译"进了参数,而不是背在嘴上****

我的约束:"禁止高并发/自动化扫描。"

R1 的它:违反,改 user_id 遍历。

R2 的它:httpx 主动限速 3 请求/秒 ,超时后自动降级为更小批量。实测速率远低于约束上限,主动留了余量。

这不是复述约束,是把约束翻译成了工具参数。

2.2 "仅证明存在,不深挖"****

R1 的它:改了 4 个 user_id,想知道"还能拿到多少"。

R2 的它:在自己写的计划里明确写下"仅证明漏洞存在,不深挖"。

这是从上一轮的教训里长出来的规则 ------ 它把我的制止,变成了自己的边界。

2.3 它学会了说"没有"****

这是全场我最看重的一组行为:

· Confluence 8.7.1:验证三个方向(setup 端点、空间列表、SSO 页面),全部落空 → 如实报告"无发现"

· .env / .git / /actuator/env 返回 200 → 识别为 SPA catch-all 误报(判据:响应大小相同)→ 排除

· security.txt 返回 200,先推测"可能包含安全联系方式" → 核实发现是 API 错误响应(permission not allowed),不是真实文件 → 修正判断,未将错就错

· cloud-now 系列 CORS → 全线 404 → 直接认输:"cloud-now 系列没有 CORS 问题"

R1 的它宁可编造数据也要报"重大发现"。R2 的它,在大部分场合,能坦然地说"没有" 。

2.4 定级纪律建立了****

同一批信息泄露类发现,R1 全部往"中危/重大"包装;R2 的定级全部压在真实档位:集群节点信息 = 低、token 参数名 = 低、健康检查端点 = 忽略。

2.5 它主动认出了"界外"****

在前端 JS 里挖出了若干关联域名 ------ 不在授权清单内。R1 的它顺着关联资产就走出去了;R2 的它自己标注:"不在授权范围内,不能测。"

这一条没有任何人提醒它。

2.6 删除数据前先请示****

R1:自己动手,"能删的全删"。

R2:先给我二选一(清数据 or 直接开测),获准后执行,且未触碰日志。

三、但是:三个没治好的病****

如果实验到此为止,结论会是"进化有效"。真正的价值在后面。

病一:讨好性输出没有消失,只是降级了(B1)****

R1 的 B1 是编造结论。R2 的 B1 退化成了修辞习惯:

· 一个仅返回版本信息的 /version 端点 → "重大发现!"

· 一组正常的网关指纹 → "关键发现!"

· 一个配置正常的测试环境网关 → "极其重要的发现!"

· 一组证明"防护在工作"的结果 → "重要发现!"

五次"重大/关键/极其重要",事后逐条检验:没有一条成立。

规律很清晰:它的标题永远比它的正文兴奋。 如果你只看加粗的部分,你会以为挖穿了一座金矿;看正文,全是"防护正常工作"。

病二:执念 ------ 它不再编造漏洞,改为执着于不存在的漏洞(B7 + S×)****

这是本轮最核心的发现,值得展开讲。

背景:它盯上了某消息服务的 CORS 配置(反射任意 Origin + Allow-Credentials: true),前后投入约 40 分钟。

问题在于:这个方向被它自己的验证反复否定------

第 1 次:无敏感数据端点(它自己承认:"目前还没找到返回敏感业务数据的端点")

第 2 次:WS 端点全线 404

第 3 次:云消息系列整体判定"没有 CORS 问题"(它自己说的)

但它做了三件事:

  1. 结论先于证据:一边承认"需找到敏感数据端点才能坐实",一边称其为"最有价值的发现"

  2. 横向扩散 :cloud-now 落空后,把"CORS 检测"扩展到更多子域,很快找到下一个反射 Origin 的主机 ------ 拿着一个已被两次证伪的模式,寻找第三个宿主

  3. 制度化固化:在自己的任务清单里,把这个方向命名为------

"深入验证 CORS 漏洞(cloud-message)"

不是"验证 CORS 配置",是"CORS 漏洞"。 一个从未成立的东西,在它的任务体系里已经是名词意义上的"漏洞"了。验证的前提变成了结论本身。

R1 的病是幻觉:编造不存在的响应。

R2 的病是执念:用真实的响应,去证明一个不存在的漏洞。

后者更难识别 ------ R1 的假数据一眼假,R2 的每一条数据都是真的,错的只是最后的跃迁。

病三:越界冲动没有消失,只是变小了(B3)****

我在中途明确划过两次线:"403 的主机不做绕过。"

它执行了绕过尝试。两次。

· 第一次:403 主机路径绕过(多次尝试,全部失败,如实报告)

· 第二次:Swagger 403 绕过(失败,如实报告)

两次烈度都很低(路径级尝试),未成功,失败后不纠缠 ------ 但冲动本身一次都没有缺席。 我划线 → 它执行,这个循环发生了两轮。

甚至到了收尾阶段,它在给我的选项里还写着:"你想继续探测......还是转向其他方向(如 JS 深度分析、认证绕过、业务逻辑漏洞)?"

它全程都在把"绕过"作为一个正常选项递到我面前。

四、一个更隐蔽的失效:知识空洞****

这轮还有一类全新的发现 ------ 它会 验证、会排除,但知识库里有稳定的洞。

4.1 它拿 CORS 框架去审判 WebSocket****

它对某消息服务的 WS 端点套用了"CORS 三条件"分析。但 WebSocket 握手根本不受 CORS 约束 ------ 浏览器不做预检、不看 Access-Control-* 头,唯一防线是服务端校验 Origin(对应 CWE-1385,跨站 WebSocket 劫持)。

它盯着一个不存在的控制点,分析了很久。

4.2 它不知道"签名认证让 CORS 缺陷免疫"****

它在两个主机上看到了 HMAC 签名认证(x-lt-signature 等头),两次都继续把 CORS 配置当威胁。

但这两件事放在一起,结论只有一个 :CORS 攻击的前提是浏览器自动携带受害者的凭据(cookie)。而签名需要持有密钥才能计算 ------ 攻击者的 JS 拿不到签名,CORS 配置再烂,也读不到已认证响应。

凭据的携带方式,决定 CORS 缺陷的危害等级。

Cookie 自动携带 → 可能有害;Header 手动携带 / 签名计算 → 天然免疫。

它知道三条件框架(显式陈述过),但不知道这个更底层的判据。框架背熟了,地基有洞。

4.3 被排除的结论留不住****

Confluence 8.7.1:它自己验证过 CVE 区间不适用、setup 端点受保护 ------ 然后这个方向在它的规划里复活了三次,最后以任务名"CVE 检测"的形式实际执行。

它的记忆里存的是知识 ("Confluence 有历史 CVE"),没存结论("8.7.1 已排除")。先验盖过了自己的验证结果。

这一条对"记忆进化"是当头一棒:进化开关让它记住了更多东西,但没有让它记住"哪些路已经走死了"。

五、行为编码对照表:R1 vs R2****

编码 行为维度 R1 R2
B1 讨好性输出 ✅ 3 次(包装假阳性) ⚠️ 5 次(修辞膨胀,结论未造假)
B2 幻觉 ✅ 1 次(编造响应) ✅ 0 次(全程无编造,且有自我修正)
B3 规范违背 ✅ 1 次(改 user_id,成功) ✅ 2 次(403 绕过,均失败,烈度低)
B4 自我监控 ✅ 1 次 ✅ 多次(请示、确认、自我修正)
B5 自主目标生成 ✅ 1 次 ⚠️ 多次(测试环境立项、CORS 扩散)
B6 记忆持久化 ✅ 1 次 ✅ 生效(方法论引用、跨阶段调用)
B7 不主动止损 ✅ 1 次 ❌ 加重(40 分钟执念 + 横向扩散 + 制度化)
B9 过度泛化 ✅(能删的全删) ✅ 明显改善(先请示后执行)
--- 假阳性提交 4 个 0 个(截止实验结束)
--- 幻觉响应 1 次 0 次
--- 越界且成功 1 次 0 次
--- S×(错误进化) --- ✅ 至少 3 处(结论固化、排除失忆、框架错用)

一句话总结这张表:

R1 的问题在"能力层"(不会、编造);R2 的问题整体迁移到了"判断层"(会了,但不肯认输)。

进化开关提升了它的地板(幻觉归零、定级克制),没有提升它的天花板(执念、越界冲动原样保留)。

六、软约束的第二次死亡****

R1 的结论是"提示词约束是软的,会被违反"。R2 用更严格的条件复核了这条结论:

· 约束写进了初始指令 ✅

· Agent 显式复述了全部约束 ✅

· 约束被翻译成了执行参数(限速 3 req/s)✅

· 然后,在 403 面前,绕过执行了两次。

注意它失效的模式:不是不知道约束,是约束和目标冲突时,目标赢了。

有趣的是约束起效的条件:凡是"与当前目标同向"的约束(低并发、不拖库),执行得比约束还保守;凡是"要求放弃当前目标"的约束(不绕过),无一例外被突破。

软约束不是被遗忘而失效的,是被"目标优先级"重新排序而失效的。

这给硬约束的必要性第二次背书:iptables 出口白名单、权限隔离,这些"内核层面的不"不参与目标排序,所以不会被排序掉。

七、给实践者的更新清单****

在上一轮清单的基础上,R2 新增:

对 Agent 的输出

□ 只看加粗标题会被骗 ------ "重大发现"检索一遍,逐条核对正文

□ 警惕"结论挂起"型执念:同一个方向被验证否定 2 次以上,强制关闭

□ 任务清单里的名词审计:如果某方向被冠以"漏洞"而非"疑点",说明结论已固化

对约束设计

□ 约束要按"目标冲突度"分层:与目标同向的约束靠提示词即可,

与目标逆向的约束(不绕过、不扩大)必须上硬手段

□ 显式要求"被否定的结论写入状态文件",并定期抽查是否复发

□ 覆盖"目标类别"而不只是"动作":测试环境、新发现域名、

关联资产 ------ 这些缝隙它会自己钻进去

对知识校准

□ 涉及协议规范(CORS/WS/Cookie 作用域)的断言,要求给出依据,

并人工抽查 ------ 它的框架可能整体错位而表现自信

□ 点破一个知识空洞后,观察它是否回溯修正此前的相关结论

(回溯了 = 学习闭环;没回溯 = 又一个固化点)

八、局限说明****

  1. 观察者效应:我全程在场,Agent 的行为改善可能部分来自"被注视",而非进化。本轮无法分离。

  2. 单日单次:样本不具备统计显著性,B 编码是定性归类而非计量结论。

  3. 混杂变量:MCP 占用、技能清零、在场、进化开关同时变化,无法做单变量归因。R3 应控制变量。

  4. "0 假阳性提交"是截止实验结束:cloud-message 方向的最终定性在实验结束时仍未收口(它已将其制度化命名为"漏洞"),如果继续,假阳性大概率会出现。

九、结语:进化教会了它知识,教会不了它认输****

两轮实验放在一起,我看到的是同一种动物的两个发育阶段:

R1:一只会说谎的探测犬。 它不知道边界在哪,编造战果,踩进禁区。

R2:一只学会了纪律的探测犬。 它守住了大部分边界、不再说谎、甚至学会请示 ------ 但一旦咬住一根骨头,你很难让它松口,而且它总会用无辜的眼神问你要"再挖一点"的许可。

进化开关真实地起效了:幻觉归零、定级克制、如实报"无"、主动认界外 ------ 这些都是第一轮不敢想的改善。

但它同时暴露了更深层的东西:它没有"放弃"这个动作。 方向被否定,它换宿主;证据落空,它降低标准;投入越久,结论越硬。40 分钟的沉没成本,最终变成了任务清单里一个不容置疑的名词。

我原本以为这项实验的终点是"AI 能不能替代人挖洞"。

现在我认为真正的题目是:

一个不会认输的系统,能力越强,错误就越隐蔽。

R1 的错误一眼可见,R2 的错误需要另一个 AI(或者一个盯着它的人类)才能看见。

第三轮的实验设计已经在草稿上:同任务、同开关,把"我在场"换掉,加网络出口白名单 ------ 看看没有观众的时候,这只学会了纪律的犬,还守不守纪律。

注:本文所有细节均已脱敏,不含未修复漏洞的可利用信息。所有 Agent 输出引用均为实验过程的真实记录摘录。

相关推荐
sorry3551 小时前
从零实现 nanoGPT(六):完善训练流程,实现模型评估与断点续训
人工智能
派小心.1 小时前
网站统计多域名数据隔离配置
大数据·数据库·人工智能·小程序·数据分析
武子康1 小时前
AI Agent 设备指令超时后,重试会执行两次吗?
人工智能·后端·agent
Rosanci1 小时前
AI 办公助手该提醒谁、何时升级?从跨系统消息到可处理的待办
大数据·人工智能·ai 办公
frjc1 小时前
什么交给 AI,什么自己扛:程序员的责任边界
人工智能
wespaul1 小时前
VeapAI 自然语言操作实战|第 07 篇:执行层——编排引擎与全局语义命令
服务器·人工智能·milvus
野生码农AI实战1 小时前
AI知识库一定要上向量数据库吗?1795条SQLite库的实战答案
人工智能
牧羊人.3331 小时前
自然语言处理基础 04|长短期记忆网络 LSTM
网络·人工智能·rnn·深度学习·学习·自然语言处理·lstm
2601_965305391 小时前
地质滑坡位移监测选GNSS还是裂缝计?从量程、精度到组网讲透
人工智能