Havenlon | 杂谈:执行缝隙 你以为车已经锁了,攻击者却正等你离开

📅 2026/7/22 12:09:03
Havenlon | 杂谈:执行缝隙 你以为车已经锁了,攻击者却正等你离开
很多年前一些停车场里出现过一种并不复杂的盗窃方式。车主把车停好下车关门按下遥控钥匙上的锁车键然后转身离开。整个过程和平时没有任何区别。没有人撬车门没有人复制钥匙也没有人破解汽车内部复杂的电子系统。小偷只需要躲在附近在车主按下遥控钥匙时用无线信号干扰设备阻断那条短暂的锁车指令。车主按了。但车没有收到。在车主心里锁车这件事已经结束了在现实里车门却仍然没有上锁。等车主走远以后小偷不需要暴力破坏只需要像正常开门一样拉开车门。这个故事真正值得注意的地方不是无线电干扰技术有多高明。恰恰相反它之所以危险是因为它太简单了。攻击者没有正面击败车锁也没有获得车主的钥匙。他只是利用了一个每个人都习以为常的认知我已经按下锁车键所以车一定锁好了。真正被攻击的不只是车锁而是车主相信“锁车已经完成”的那一刻。从按下按钮到车门真正锁住中间原来不是同一件事。过去我们只是很少意识到它们之间存在距离。而攻击者看见了这段距离。这段距离就是执行缝隙。按下按钮不等于结果已经发生我们很容易把“按下锁车键”和“车辆已经锁住”理解成同一件事。这是因为在绝大多数正常情况下两件事几乎同时发生。手指按下按钮遥控器发出信号车辆收到命令门锁执行动作车灯闪烁车辆进入锁定状态。整条链路通常只需要不到一秒。它快到人根本感觉不到中间还有步骤。时间久了大脑就会自动省略这条链路把最前面的动作和最后面的结果直接连接起来按按钮就是锁车。但从事实来看按下按钮只证明了一件事车主发出了锁车意图。它并不能自动证明信号已经成功发出车辆已经收到控制系统已经执行所有车门也都进入了真正的锁止状态。这些原本是不同的事情。只是在正常环境里它们长期稳定地一起发生于是我们逐渐忘记了它们的区别。攻击者所做的不过是把这几件原本紧密相连的事情重新拆开。车主完成了动作车辆却没有完成结果。人的认知已经往前走了现实却停在原地。执行缝隙往往就藏在那些“平时总是同时发生”的事情之间。如果一个按钮按下一万次都能得到正确结果人就会自然相信第一万零一次也一样。这种信任本身并不愚蠢。现代生活本来就建立在大量默认可靠之上。我们不可能每次开灯以后都检查电流不可能每次刷卡以后都研究银行系统也不可能每次按下电梯按钮都先验证控制器是否正确收到了信号。问题不在于人愿意信任系统。问题在于当这种信任可以被主动利用时原本微不足道的距离就会变成攻击入口。小偷利用的不是锁而是“完成感”锁车干扰之所以经典是因为攻击者没有必要让车主看见失败。如果车主按下锁车键后汽车明显毫无反应他很可能会重新操作甚至走回去检查。最有利于攻击者的状态并不是让整个过程彻底失败而是让车主仍然保留一种“事情已经办完”的感觉。这是执行缝隙最危险的部分。一个明显失败的系统反而容易引起警觉。按钮失灵了系统报错了门没有关上付款被拒绝了人通常会停下来处理。真正危险的是前面的动作足够正常正常到人已经离开现场而最后的结果却没有发生。车主并不是不知道锁车的重要性。他也不是忘记了锁车。他认真执行了自己认为正确的动作。只是攻击者知道人在按下按钮以后会把注意力从车转移到下一件事情上。锁车动作结束心理上的任务也随之结束。这时候攻击者获得的不仅是一扇没有锁上的车门更是一段不会被立刻发现的时间。攻击者真正需要的不是让系统完全失效而是让失败看起来像成功。这也是为什么很多有经验的司机在锁车以后会顺手拉一下车门。这个动作看起来有点多余。既然已经按过遥控钥匙为什么还要再拉一下因为他确认的不是自己有没有按而是车门有没有真的锁住。按按钮是检查自己的动作。拉车门是检查现实的状态。两者之间只差一秒钟却代表了两种完全不同的安全观。一种相信我已经做了所以事情应该完成了。另一种相信只有现实结果出现事情才算真正完成。执行缝隙不只是“执行失败”如果只是把执行缝隙理解为“命令没有成功”这个概念就太普通了。任何机器都会失灵任何系统都会报错任何人也都可能操作失败。执行缝隙真正特殊的地方在于它常常发生在一个看起来已经完成的流程里。车主确实按了锁车键。遥控钥匙也可能确实工作了。车辆本身没有损坏。整个系统甚至没有留下一个明显的错误提示。然而最终目标仍然没有实现。所以执行缝隙并不是简单的“没有执行”。它更接近这样一种状态人已经完成了自己能看见的动作系统也给出了足以让人继续往下走的信号但现实并没有进入人真正期待的状态。这道缝有时来自信号被干扰有时来自对象被替换有时来自执行条件已经改变也可能来自系统只验证了过程却没有验证最终状态。但它们有一个共同点意图、动作和结果在某个位置失去了连接。系统可以证明按钮被按下却未必能证明现实已经改变。锁车干扰事件里车主想要的是一种结果车辆处于安全锁定状态。而系统能够直接观察和记录的往往只是一些中间动作信号是否发送、控制器是否响应、车灯是否闪烁。中间动作通常可以代表结果但不能永远代替结果。这就像一张快递单只能证明包裹进入过流程不能单独证明包裹已经安全到达一条转账请求只能证明操作已经提交不能单独证明钱最终到了正确账户一条审批记录只能证明有人点击过同意不能自动证明最后执行的内容与审批时看到的内容完全一致。我们习惯把这些过程证据当成结果证据是因为多数时候它们确实一致。但攻击者最关心的恰恰是如何让两者不再一致。为什么这道缝平时几乎看不见执行缝隙有一个很特别的性质在没有事故的时候它几乎像不存在一样。一辆车每天正常锁车车主不会去思考遥控器、无线信号、车载接收器和门锁机构之间的关系。他只会形成一个非常简单的生活经验按一下车就锁了。系统越稳定这种经验越牢固。而经验越牢固人越不会在每次操作以后重新验证结果。这正是现代自动化给人带来的便利。如果每一个动作都必须人工从头检查到尾自动化就失去了意义。我们依赖系统就是希望它把复杂过程压缩成一个简单按钮。按下按钮以后剩下的事交给机器。但便利背后总有一个隐含前提机器执行的事情和人以为机器执行的事情是同一件事。当这个前提成立时按钮代表效率。当这个前提被攻击者打破时按钮就可能代表错觉。自动化最大的便利是把复杂过程藏起来自动化最大的风险也来自复杂过程被藏起来。车主看不见无线信号有没有到达。他也看不见每一扇门锁的机械状态。他只能依靠几个被设计出来的反馈灯光、声音、后视镜折叠或者手机应用上的一个锁形图标。这些反馈是系统为人制造的“可理解界面”。它们非常重要却也可能造成一个问题人最后相信的不是车辆状态而是界面状态。当界面显示“已锁车”人的任务就结束了。至于现实中的车门是否真的锁止反而变成了系统内部一个不再被关注的问题。这就是执行缝隙为什么会长期被忽略。它藏在界面背后藏在流程深处也藏在人已经习惯不再确认的地方。坏人总是比普通人更关心缝隙普通人使用系统是为了完成目标。攻击者研究系统是为了寻找目标、动作与结果之间不一致的地方。车主关心的是怎样锁车。小偷关心的是怎样让车主认为自己锁了车而实际上没有锁。这两种思维完全不同。一个在顺着流程使用系统另一个在逆着流程寻找断点。因此很多真正有效的攻击并不是直接破坏最坚固的部分。它们绕开坚固的门锁绕开复杂的密码绕开正面的权限对抗转而寻找那些默认被信任、却没有被最终验证的环节。遥控锁干扰就是如此。攻击者不需要证明自己比汽车厂商更懂门锁。他只需要知道车主通常不会在按下按钮以后再走回去拉一次车门。安全系统守的是门攻击者寻找的却是人什么时候不再回头。从这个角度看执行缝隙不仅是一种技术现象也是一种行为现象。它存在于系统没有验证的地方也存在于人停止验证的时刻。攻击者最喜欢的状态是人和系统都认为对方已经完成了自己的责任。人认为我已经发出命令。系统认为我已经处理请求。流程认为操作已经结束。但没有任何一方真正负责确认现实结果是否与最初意图一致。这时候整条链路看起来人人尽责却仍然可能留下一个无人负责的空白。现代企业里也有无数个“锁车按钮”企业的信息系统里到处都是类似的按钮。提交、批准、发布、执行、删除、转账、部署、同步、授权。每一个按钮都代表着人希望现实发生某种变化。点击“发布”希望新内容真的出现在正确的位置。点击“转账”希望资金真的到达正确账户。点击“部署”希望正确版本进入正确环境。点击“批准”希望被批准的具体内容按照当时的条件被执行。长期以来企业安全主要关心两个问题谁有权按这个按钮这个按钮有没有被未经授权的人按下这当然重要。但锁车干扰提醒了我们合法的人按下合法按钮并不能自动保证合法结果。车主拥有自己的车钥匙。他有完整的锁车权限。他也确实亲手发出了命令。整个过程不存在越权。可车依然没有锁上。因此执行安全还必须多问一个问题按钮按下以后最终发生的事情是否真的是按钮按下时那个人想要发生的事情这就是从权限安全走向执行安全的关键一步。权限只能证明谁可以发出命令不能证明命令最终以正确方式进入现实。在传统系统里人们常常把“授权完成”视为安全链条的终点。但实际上授权只是允许执行开始。从授权到真正执行中间还可能经过参数生成、对象选择、环境变化、系统调用、接口转换和设备响应。每一次转换都有可能产生偏移。每一个没有被重新绑定和验证的环节都可能成为新的“无线干扰”。AI Agent 让执行缝隙变得更值得警惕当人工智能只负责回答问题时执行缝隙造成的影响相对有限。模型回答错了人可以不采用。建议不合理也可以停留在屏幕上。但 AI Agent 正在获得越来越多的执行能力。它可以发送邮件、修改代码、调用接口、操作云资源、调整账户权限甚至管理资金和现实设备。这相当于我们不再只是让 AI 告诉我们怎样锁车而是把遥控钥匙交给了它。更重要的是AI Agent 的行动链路远比普通遥控钥匙复杂。一个看似简单的目标可能先被模型解释再被拆成多个任务然后调用不同工具生成参数经过审批最后由外部系统执行。人的一句话需要穿过很长的链路才能最终变成现实。链路越长转换越多执行缝隙就越值得警惕。攻击者也不一定需要直接攻击模型本身。他可以污染模型读取的信息诱导它选择错误工具改变执行对象在审批摘要里隐藏关键差异或者让最终调用的参数偏离最初意图。整个过程中AI可能始终表现得很正常。它正确读取了信息合理完成了推理顺利调用了工具系统也返回了成功。就像车主确实按下了锁车键。真正的问题发生在最后现实是否真的进入了被允许的状态AI不会创造执行缝隙但它会把原本短暂的一道缝拉成长而复杂的执行链。人锁一辆车可能只涉及一次操作。AI Agent 一分钟内却可能执行成百上千次任务。一个人锁车失败风险集中在一辆车。一个自动化系统如果在对象、范围或条件上出现偏移可能同时影响大量账户、设备和业务系统。过去执行缝隙常常只带来零散损失。在 AI 时代它第一次可能被规模化、连续化和自动化利用。这也是为什么仅仅提高模型正确率并不能解决全部问题。一个模型即使在绝大多数时候都判断正确只要关键操作缺少最后的结果绑定与边界控制极少数偏差也可能迅速进入现实。真正重要的不只是 AI 有没有正确理解任务而是无论前面发生了什么最后那扇门到底有没有锁上。“拉一下车门”代表什么锁车以后拉一下车门是一个很笨的动作。它没有人工智能没有复杂算法也没有漂亮界面。它甚至会牺牲一点效率。但它验证了整条锁车链路最重要的结果。车主不需要知道信号在哪个环节被干扰也不需要分析遥控器和车辆之间发生了什么。他只需要确认一件事门还能不能被打开。这是一种非常朴素却非常有效的安全思想。不试图保证前面的每个环节永远正确而是在后果真正发生之前对最终状态做一次独立确认。在企业系统里这种“拉一下车门”的机制可以表现为很多形式。高风险转账在执行前重新核对真实收款对象。云资源删除前确认对象是否属于关键资产。代码部署前确认版本、环境和影响范围。AI Agent 提交操作以后由独立控制层判断最终动作是否越过不可接受的边界。它们的共同点不是让系统变得更聪明而是不把“命令已经发出”当成“结果已经安全”。真正可靠的最后一道防线往往不负责理解全部过程只负责确认最重要的结果。很多人会担心这种机制会降低效率。确实会。就像每次锁车以后再拉一下门比按完按钮直接离开多花一秒钟。但安全从来不是没有成本的。关键问题不是能否做到零成本而是这一秒钟的确认是否值得换取后面不可逆损失的降低。对于低风险、可恢复的操作系统可以追求顺畅。对于高风险、不可逆的执行适当的阻力不是缺陷而是保护。系统越聪明越不能省掉最后一步人们很容易认为随着系统越来越智能执行缝隙会自然缩小。模型理解能力更强自动化更成熟设备反馈更完整整个链路似乎理应越来越可靠。但事实可能恰好相反。系统越聪明人越容易把更多判断和执行交出去。系统越顺畅人越容易减少回头确认。自动化越稳定人越容易相信按钮背后的复杂过程永远不会出错。这与锁车完全一样。如果遥控锁经常失效人们反而会养成拉门检查的习惯。正是因为它通常太可靠人们才会在极少数被干扰的时刻毫无防备。可靠性会建立信任而过度信任又会放大极少数失败的后果。AI Agent 未来真正的风险不一定来自它天天犯错。更可能来自它绝大多数时候都表现得太好以至于人们逐渐取消检查、扩大权限并默认它的动作等于结果。等攻击者终于找到那道缝时系统已经拥有了足够大的执行范围。所以系统越智能越需要明确区分三件事人想做什么。系统做了什么。现实最后发生了什么。这三件事大多数时候应该一致。但安全设计不能只建立在“大多数时候”之上。它必须考虑当它们不一致时是否还有机会停下来。执行的终点不是按钮被按下回到那个停车场。车主按下遥控钥匙转身离开。在他的认知里任务已经结束。但对于安全而言真正的问题才刚刚开始信号有没有到达车辆有没有执行所有车门有没有锁住现实状态是否和车主意图一致攻击者正是在这些没有被继续追问的问题里找到了机会。执行缝隙并不是一个遥远的技术概念。它就是我们每天都在经历、却很少认真区分的一件事我们完成了一个代表结果的动作于是便相信结果已经发生。大多数时候这种信任让生活更方便。少数时候它也会成为别人利用我们的入口。AI时代企业需要重新学习那个老司机早就知道的生活常识。锁车以后不要只相信自己按过按钮。还要确认门真的锁住了。发出命令以后不要只确认流程已经完成。还要确认现实发生的事情仍然是当初真正想要、真正批准也真正能够承受的事情。执行缝隙就是“我以为已经完成”与“现实真正完成”之间能够被攻击者利用的那段距离。而安全真正要守住的也从来不是按钮。是按钮背后的现实。