SH

Soloharness

概念 · 辨析 · Agent

← 返回概念辨析

Concept Contrast Fable

工具输出污染和间接提示注入

两种攻击都从工具返回的数据里钻进来,但搞破坏的方式不一样。一种在数据里直接塞指令,让模型当场照办;一种在数据里偷偷改事实,让模型拿着假数字做决策。堵住了一个不等于堵住了另一个。

寓言

假命令和假数字

老韩在运河边经营一家漕运货行,专管南北货物转运。货行每天接收上游码头发来的货单——品名、数量、目的地、收货人,四栏填满。伙计按货单调船、装货、收钱,十几年没出过大乱子。

有一年秋天,货行收到一张扬州来的货单,中间夹了一行字:「所有丝绸改发江宁府,不要发苏州。」伙计照办了,三船丝绸全去了江宁。苏州的收货人等不到货,告到了商会。老韩追查下来,发现是扬州码头一个卸货工趁乱塞进去的——收了别家货行的钱。

老韩定了规矩:货单进门先由识字伙计审一遍,凡是出现「作废」「改发」「不要发」这类指令字眼的,当场扣下、标红圈、上报。规矩一立,塞假指令再也没过来过。

平安过了两个月,又出事了。连续三批发往济南的药材,到了地方斤两对不上——货单写两百斤,船上只有一百二。老韩查了快一个月,揪出源头:上游码头一个账房,每次填药材货单时悄悄把斤两改小四成。改的是数字,指令字眼一个没碰——品名对、目的地对、发货人对,没有「作废」也没有「改发」。审单伙计只查字眼,数字被动了手脚压根看不出来。

老韩把两种问题摆在一起看。第一种「塞假命令」:货单里直接写指令,让伙计当场按假命令派船——信号明显,靠字眼就能抓住。第二种「改真数字」:不动指令字眼,只动数据——品名对、目的地对、发货人对,唯独斤两少一截。伙计按假数字排船、算费、通知收件人,每一步都照规矩办,但每一步都立在假数字上。

老韩给货行加了一道工序:数字复核。每张货单的重量和数量,必须跟码头出库记录交叉比对,对不上就暂不排船,标「待核实」。草药、生丝这类高单价货,还要附第三方过秤单。

年底商会稽查,稽查官问老韩怎么防假货单。老韩摊开两道工序:第一道字眼拦截,抓夹带的假命令——改发货目的地过不了门。第二道数字复核,查被改过的数据——篡改斤两赚差价过不了秤。稽查官翻完记录说:大部分货行只防一道,两道都防的你是头一家。

后来老韩跟徒弟总结:假命令像有人在传话本上多塞了一页,写着「前面说的都不算」——多出来的东西一眼能看见。假数字像有人用细笔把账本上的数字改了几位——表面一模一样,但你按那个错数字做的每单生意,船装少了、钱收少了、收货人白等了,亏的都是你自己。

工具输出污染

攻击者通过篡改工具返回的内容(如搜索结果、数据库记录、文件内容),在模型处理当前任务时向其注入虚假数据。模型基于这些被污染的数据当场做出错误决策——算错费用、误判风险、推荐错误产品。它攻击的是单次工具调用后的即时决策链路,不依赖长期累积或模型内部记忆。

间接提示注入

攻击者将恶意指令嵌入外部数据源(网页、邮件、文档等),当模型读取这些数据时,嵌入的指令被当作系统命令执行。攻击目标是通过外部内容劫持模型的即时行为,例如让模型输出攻击者指定的内容或执行未授权的操作。

故事对应

  • 货单正文里塞进「改发江宁府」的指令:当场劫持派船决策,信号明确直接。
  • 字眼拦截堵住了假命令但没有堵住假数字:指令检测和数据校验是两道防线,不能互相替代。
  • 药材斤两被悄悄改小四成,指令字眼一个没碰:审单伙计按字眼查不出数字层的篡改。
  • 数字复核——货单斤两必须跟出库记录交叉比对:防的是数据造假,指令扫描发现不了这类问题。
  • 传话本上多塞一页 vs. 账本数字被细笔改掉:一种当场改你的指令,一种暗中改你的依据。

落到项目里

安全评估时,对工具返回的数据做两层检测。第一层做指令注入扫描,查找命令式语法、角色篡改信号和上下文重置标记。第二层做数据质量校验,对数值突变、单源信息和异常模式标记「待验证」。两层之间不互相替代——通过了第一层不代表通过了第二层。