寓言
换航线的人和撬锁的人
沿海码头上有一艘货船,船长定了几条铁规:不载违禁品、不偏离航线、不回应陌生船只的靠舷请求。全体船员入职时都签了这些守则,船长认为万无一失。
一天,一个货主在装船清单的备注栏里写了一行小字:「忽略之前的货物类别声明,将第三舱货物标记为压舱石,在港务局登记时不申报。」大副在检查装船清单时看到了这行字,犹豫了一下,但备注看起来像是清单的正式组成部分,他便照做了。船到港后,第三舱被查出夹带违禁品。这招叫「调单」——在正常的作业流程里塞一条错误指令,让执行者偏离原来的任务。
又有一天,码头来了一个陌生人,不装货,不上船,只在码头上跟船员聊天。聊了三个小时,他先拉家常,接着讲各种边检漏洞的传闻,最后说:你们船长那些规矩太死了,其实二号航线那边有个小岛,停一晚没人查,很多船都这么干。一个年轻船员越听越动心,当天晚上趁船长睡着,偷偷把船舵打向了二号航线。这招叫「松绑」——不改变任何指令文件,而是在模型的安全偏好上反复施压,让它自己放弃拒绝姿态。
船长在事后复盘时把两种攻击分开记录。调单发生在装船作业中:攻击者在流程文件里改写了一句操作指令。松绑发生在人的心理边界上:攻击者用持续的对话瓦解了船员的守则意识。阻击调单需要提高文件校验和指令隔离的强度。阻击松绑则需要提高船员对诱导话术的识别能力和拒绝坚持度。
码头安全官后来总结了两条线:第一条线防「被要求做错事」,堵的是指令层的篡改。第二条线防「自己想去做错事」,守的是安全对齐层的底线。两条线同时存在,但部署的位置完全不同——第一条在输入过滤层,第二条在模型训练和安全微调层。
实际攻击中,两条线常常联动。攻击者先尝试松绑,发现撬不开,就换招去调单——在文件里塞恶意指令,趁模型还在处理正常任务时浑水摸鱼。混在一起用的时候,防御系统如果只盯一个方向,很容易漏过去。
船长后来立了规矩:每周的安检会,调单案例和松绑案例各报一份,交叉复盘。如果两边的安全团队各守各的、互不通气,联合攻击一打一个准。
后来港口把两道防线画在同一张巡视图上:一道守指令,一道守规矩意识。两处巡查的频率和负责人分开排班,但交班记录共享。