找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

871

积分

0

好友

113

主题
发表于 昨天 05:35 | 查看: 0| 回复: 0

免责声明:  本文仅用于技术交流与安全研究,文中涉及的漏洞复现均在授权环境下进行。请勿利用文中技术进行非法活动,否则后果自负。

上个月,我参与了一款尚未上市车型的车联网安全评估项目。测试期间,我们成功利用中继攻击(Relay Attack)实现了对车辆的远程解锁。虽然当时复现了漏洞,但对底层的NFC通信细节,特别是APDU数据交换的逻辑理解尚浅。为了真正吃透其原理,本文将结合那次实战经验,对车联网数字钥匙场景下的NFC通信逻辑与中继攻击进行一次系统性复盘。

了解NFC:不仅仅是支付

提起NFC(近场通信),大家首先想到的可能是公交卡、手机支付。但事实上,它也是当前车联网数字钥匙的主流实现技术之一。目前,主流车企(如特斯拉、比亚迪)的车机方案大多遵循 CCC(Car Connectivity Consortium) 规范。与简单的门禁卡不同,车规级NFC钥匙绝非仅靠匹配UID(唯一标识符)来工作,其内部包含了一套完整的双向权限验证流程。

NFC是一种基于13.56MHz RFID技术发展而来的近场通信技术,典型通信距离小于10厘米(实际有效距离通常在4厘米左右)。它主要有三种工作模式:

  1. 卡模拟模式(Tag/Card Emulation):设备模拟成一张NFC卡片,例如手机中的数字钥匙或实体NFC卡。
  2. 读卡器模式(Reader/Writer):设备主动发射射频场(RF Field),为附近的卡片供电,并发送指令、接收响应。车辆端的NFC模块通常工作在此模式。
  3. 点对点模式(P2P):两个NFC设备之间直接交换数据。

NFC通信的交互逻辑

车与钥匙(手机或卡片)之间的NFC通信并非简单的“碰一下”,而是一个分阶段的协议握手过程。

NFC通信交互流程示意图

上图清晰地展示了一次完整的NFC交互流程:

  1. 激活:卡片靠近车辆NFC感应区,车辆产生的射频场激活卡片,为其供电。
  2. 选择与防冲突:车辆(读卡器)发出轮询指令,通过 REQAATQASELECTSAK 等一系列命令,在多个可能存在的卡片中选中目标UID,并建立独占通信。
  3. 协议激活:双方协商通信参数,例如传输速率、缓冲区大小(通过 RATS/ATS 命令)。
  4. APDU数据交换:这是核心的安全认证阶段。读卡器发出指令(C-APDU),卡片进行处理(通常涉及密钥运算)后返回响应(R-APDU)。只有响应验证通过,车辆才会执行开锁动作。

什么是NFC中继攻击?

理解了标准交互流程,中继攻击的概念就很好理解了。简单说,就是“接力”并延长本应超短距离的通信信号。

正常情况下,通信链路是:合法钥匙(Tag1) <-> 车辆读卡器(Reader1),距离极近。

中继攻击则通过额外设备,将这条链路“拉长”:合法钥匙(Tag1) <-> 攻击设备A(Reader2) <-> [中继服务器] <-> 攻击设备B(Tag2) <-> 车辆读卡器(Reader1)

NFC中继攻击架构图

攻击者需要两部手机:一部(手机1)模拟读卡器(Reader2)靠近合法钥匙;另一部(手机2)模拟卡片(Tag2)靠近车辆。两者通过网络(服务器)实时转发所有NFC通信数据。这样一来,即使钥匙和车辆相隔很远,系统也会认为钥匙就在车旁。

设想一个高危场景:车主在餐厅就餐,手机放在桌上,车辆停在门外停车场。两名攻击者协同作案,一人靠近车辆,另一人靠近手机,通过中继攻击在几秒内即可解锁并启动车辆,威胁极大。

NFC中继攻击实践复现

为了深入研究,我们可以搭建环境进行授权测试。你需要准备:两台支持NFC并已安装特定框架(如Xposed)的安卓手机、一台作为服务器的电脑。

所需工具:

  • 手机App: NFCGate (GitHub: nfcgate/nfcgate)
  • 服务端: NFCGate Server (GitHub: nfcgate/server)

复现步骤:

  1. 搭建服务器:在电脑上启动热点,让两台手机连接。运行下载的 server.py 脚本,服务端会开始监听特定端口。

    NFCGate服务器启动日志

  2. 配置客户端:在两台手机的NFCGate应用设置中,填入电脑(服务器)的IP地址和端口号(默认为5566)。

    设置服务器IP地址
    设置服务器端口号

  3. 启动中继:在NFCGate主界面选择“Relay Mode”功能。一台手机设置为 Tag(卡模拟) 模式,另一台设置为 Reader(读卡器) 模式。两者成功连接到服务器后,界面会显示连接状态。

    中继模式连接成功界面

  4. 实施攻击:将设置为 Reader 模式的手机靠近合法钥匙(如车主手机),将设置为 Tag 模式的手机靠近车辆NFC感应区。此时,中继链路建立,通信数据开始转发。如果车辆被成功解锁,则证明中继攻击复现成功。

  5. 分析数据:攻击过程中,应用会记录所有交互的APDU数据包,这是学习通信逻辑的关键。通过对这些数据进行逆向分析,可以理解认证流程。

    APDU数据交互记录

关键APDU数据解析:

从日志中,我们可以看到诸如 90 006A 82 这样的状态码。它们是理解通信结果的关键:

C-APDU (读卡器发出的指令):
00 A4 04 00 ...  <-- Select File (标准指令,选择应用)
80 / 84 开头: 行业标准或私有指令 (Proprietary / GlobalPlatform)

R-APDU (卡片回复):
6A 82           <-- File Not Found (文件未找到)
90 00           <-- Success (成功)

90 00 这个状态字(SW1 SW2)代表成功,通常在认证通过的最后一条响应中出现。了解APDU的结构有助于我们更深入地分析:

C-APDU 结构(读卡器 -> 卡片):

必须部分 (Header) 可选部分 (Body)
CLA INS P1 P2 Lc Data Le
指令类别 指令码 参数1 参数2 后续数据长度 数据域 期望响应长度

R-APDU 结构(卡片 -> 读卡器):

可选部分 (Body) 必须部分 (Trailer)
Data SW1 SW2
响应数据 状态字

如何防御NFC中继攻击?

中继攻击的本质是破坏了“近场”通信的距离前提。因此,防御的核心思路是引入距离或时延验证

  1. UWB(超宽带)技术:这是目前最有效的解决方案之一。UWB能够进行厘米级精度的测距,通过计算信号的飞行时间(ToF)来判断设备与车的真实距离。中继攻击引入的网络延迟会远大于真实物理传输时间,从而被系统识别并拒绝。
  2. 严格的时序限制:在NFC通信协议层进行加固。
    • 设定极短的帧等待时间(FWT),例如要求卡片必须在20毫秒内响应。
    • 禁用等待时间扩展(WTX)指令,防止攻击者通过请求加时来掩盖网络延迟。
  3. 多因素认证(MFA):结合生物特征(如指纹、人脸识别)或车内蓝牙/PKE(被动无钥匙进入)的二次确认。即使信号被中继,攻击者也无法提供第二重认证因子。
  4. 运动传感器检测:在智能钥匙或手机钥匙应用中集成行为检测。例如,钥匙在静止一段时间后自动进入休眠状态,只有当加速度计检测到被拿起或移动时,才唤醒NFC功能。这让放置在桌上的手机难以被远距离利用。

对于汽车安全研发人员和相关领域的安全研究者而言,理解NFC中继攻击的原理与实现,是构建更坚固车联网安全防护的起点。希望本文的分享,能为大家在云栈社区的技术交流中提供一些有价值的参考。




上一篇:BOM编程核心指南:JavaScript控制浏览器交互的实战详解
下一篇:Coze平台Skill制作指南:手把手教你将智能体转技能
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-1 00:20 , Processed in 0.281287 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表