你以为车锁了,其实没有。一个介于用户操作与系统执行之间的微小时间差,正成为汽车攻击的新突破口。

一、什么是“执行缝隙”?

执行缝隙(Execution Gap)指的是用户或系统发出指令后,到该指令被完整执行完毕之间,存在的一个微小时间窗口。在这个窗口期内,系统状态处于“已接收指令但尚未完成执行”的过渡状态——而攻击者可以利用这个瞬间发起攻击。

以锁车为例:用户按下遥控钥匙的锁车键,车身控制模块收到信号后需要完成一系列操作——验证钥匙身份、向各车门模块发送锁止指令、等待门锁电机动作、接收各模块的确认反馈、最后点亮转向灯或发出提示音告知用户“车已锁好”。

整个过程大约需要几百毫秒到一两秒。攻击者可以在这段时间内通过信号干扰、重放攻击或中间人劫持,使锁车指令被阻断或篡改,导致车门并未真正锁止。

当车辆“以为”自己锁好了并向用户发出了确认信号时,车门实际上仍处于解锁状态。

二、真实的攻击场景

钥匙信号干扰(Rolling-PWN变种) :攻击者在用户锁车时发射同频干扰信号,使车身控制模块无法收到完整的锁车指令,但干扰信号中同时包含伪造的确认包,车辆仍会向用户发出“已锁车”的提示音。用户安心离开后,攻击者拉开车门。

CAN总线指令注入:攻击者通过物理接触或远程漏洞接入车辆CAN总线网络,在锁车指令执行的过程中注入一条“解锁”指令,利用执行缝隙覆盖锁车状态。因为指令发生在锁车流程的执行窗口期内,诊断系统可能不会将其记录为异常——系统在同一时间段内既执行了锁车又执行了解锁,最终状态取决于最后到达的指令。

中间人劫持:攻击者利用信号放大器建立一套完整的信号劫持通道,截获用户钥匙发出的锁车信号,阻止其到达车辆,同时将信号转发至一台位于远处的信号中继设备,使车辆误以为钥匙在附近,完成无钥匙进入。

这类攻击的共同点是:用户在操作那一刻完全确信自己完成了锁车动作,但系统最终状态与用户感知状态之间存在一个透明的“缝隙”。

三、更危险的场景:OTA升级中的执行缝隙

执行缝隙的破坏力在智能汽车OTA升级场景中会被进一步放大。

当车辆OTA升级时,系统需要经历“下载→验证→安装→重启”多个阶段。如果攻击者在“安装完成”与“系统重启”的缝隙中注入恶意代码,或篡改启动引导程序,就可能使升级后的系统处于“已升级但被植入后门”的状态。由于升级流程本身已通过完整性校验,事后日志可能无法揭示攻击痕迹。

对于不具备完整SBOM(软件物料清单)和二进制级审计能力的厂商,这种攻击几乎无法在运行时被检测。

四、如何填补执行缝隙?

填补执行缝隙需要从架构层面重新审视“状态转换”的安全设计:

1. 双重状态确认。 系统必须有能力区分“指令已被接收”和“指令已被执行”两个状态,并在两者不一致时向用户发出警报而非成功提示。

2. 不可中断的原子操作。 锁车操作应设计为不可分割的原子事务——要么全部完成,要么全部回滚,不允许“部分完成”的状态存在。

3. 执行结果独立回传。 系统应在实际操作完成后发送独立的确认信号,而不是依靠预期执行的反馈。

4. 升级过程冗余校验。 OTA升级应在系统重启后由独立的看门狗模块进行二次完整性校验,确保执行结果与预期一致。

五、结语

执行缝隙本质上不是漏洞——它是一个设计假设:假设“指令发出”等于“状态改变”。在大多数场景下这个假设成立,但在对抗性环境中它成了一个可被利用的“时间差”。

填补这个缝隙,不仅是加一条提示或一次重试的问题,而是需要把“状态转换的原子性”重新纳入功能安全与信息安全的共同考量范围。当汽车成为软件定义的移动终端,执行缝隙也会演变为更系统性的设计缺陷。