0x00 前言
大家好, 我是来自银基Tiger-Team的KEVIN2600. 今天想跟大家分享下Tiger-Team在第28届DEFCON黑客大会上发表的Tesla NFC中继攻击的研究全过程. 希望抛砖引玉为中国车联网安全做出贡献. 同时借此机会向中国CTF战队A0E表示祝贺, 牛逼的后浪们首次获得了DEFCON CTF的总冠军.
Tesla 电动汽车已迅速成为新能源汽车的领导者. 公司创始人Elon Musk 自豪地称其为“A sophisticated computer on wheels”. 作为业界的翘楚, 自然会吸引很多黑客和安全研究人员的兴趣. 在过去一段时间里, 很多安全研究人员对特斯拉进行了有针对性的研究. 而成果也可谓收获颇丰. 其中特斯拉自己的漏洞英雄榜上, 可以看见很多中国研究团队的身影.
全球漏洞库中也有众多关于特斯拉的漏洞CVE编号. 而其中最值得智能钥匙安全研究人员深入的是编号为CVE-2018-16806的漏洞. 比利时一名安全研究人员通过逆向分析特斯拉Model S钥匙Pektorn PKE系统, 并找到DST40 Cipher的设计缺陷. 成功破解并完美复制了特斯拉钥匙
但是对Tesla新能源汽车感兴趣的, 可不仅仅是安全研究人员. 同时还有专业的盗贼们. 不过他们可没有那功夫去深入研究Tesla的安全缺陷. 对他们来说自然是简单粗暴有效便好. 而中继攻击便是其中最简单的方式之一. 相信大家可以从新闻中得知, 国内外经常有盗贼采用此类方式盗取车辆或车内的贵重物品.
0x01 NFC 101 科普
所以这让我们很好奇, 中继攻击是否真的就那么容易实现. 于是带着这个疑问开始了这段有趣的研究. 不过在进入主题之前, 我们还是简单了解些有关NFC的基础知识. NFC也被称为近场通信, 其工作模式以被动式为主, 工作频率为13.56Mhz. 其应用场景非常广泛, 我们常见的地铁一卡通; 门禁卡甚至是护照都有其身影.
当然通常我们提到NFC 攻击, 大家很容易会想到Mifare Classic 的破解. 这类文章在网上随处可见. 不过NFC的类型可不仅仅是Classic. 比如某公司的门禁卡采用的是iClass. 而某地铁的一次性车票则是Ultralight. 每种类型都曾经暴露过各自的问题, 感兴趣的朋友可以自行研究一番.
0x02 TESLA钥匙架构
随着科技的进步, 车联网的发展. 人们操控开启车门的方式也发生了变化. 最与众不同的一点是, 众多智能汽车已经开始抛弃传统的物理钥匙. 转而开始使用蓝牙或NFC. 其中Tesla Model 3便是首当其冲. 既然江湖大哥这么做了, 其他车厂自当紧跟其后. 国产品牌中的比亚迪; 小鹏以及蔚来都推出了使用NFC的车型. 有趣的IPhone在最新版的IOS中也推出了CarKey功能
那么我们来一起看看江湖大哥Tesla是如何设计智能钥匙系统的呢. 在最开始Tesla的Model 3是真的完全抛弃了物理钥匙, 仅使用了手机蓝牙, NFC以及4G远控. 但或许是因为有些用户十分怀旧, Tesla 最后还是推出了物理钥匙. 不过这把物理钥匙并没使用传统的RF技术. 仍是基于BLE蓝牙和NFC.
当我们把物理钥匙拆开, 可以看到一串标为FCC-ID的字符串. 例如 2AEIM-1133148, 通过到FCC官方查找发现关于TESLA物理钥匙, 甚至车端的内部信息. 这些信息对进一步逆向分析起到非常重要的作用.
接下来可以用研究RFID的瑞士军刀PM3来读取Tesla车卡或物理钥匙. 我们会发现Tesla车卡使用的是7字节UID 的Mifare DESFire EV1 (Java Card). 同时支ISO14443 Type-A and ISO 7816-4. 需要指出的是这2个标准在APDU应用层是一样的. 而在随后的分析当中, 我们还发现Tesla采用的认证方式为椭圆曲线ECDH secp256r1.
0x03 分析, 挑战与突破
在对Tesla 的钥匙系统有了一定了解之后. 我们就开始了真正的逆向之旅. 正所谓工欲善其事必先利其器, 我们调研后认为NFCGate与Proxmark3 符合我们的需求. 尤其是NFCGate这款APP是专门用来NFC中间人攻击与逆向的.
我们只需分别在2台手机上各自安好NFCGate, 同时设置一个无线设备作运行网关Server便可. 如下图我们成功通过中继攻击, 用同事的信用卡给自己买了一杯咖啡.
不过同样的配置在第一次Tesla钥匙系统测试中却失败了. 但这是正常的, 继续努力尝试吧. 这里我们请出RFID瑞士军刀PROXMARK3, 对Tesla钥匙端与NFC 卡之间的通讯进行抓包分析. 例如其中一个AID被标识为TeslaLogic.
阅读大量文档和数据分析后, 我们搞清楚了Tesla NFC钥匙的整个交互流程. 首先Tesla车端会对NFC卡上的特定AID 发出请求, 比如标号为F4和74的TeslaLogic.不过F4貌似是针对手机端的. 所以我们的NFC卡会返回一个6D00, 相当与告诉车端这个AID 不存在. 随后车端会在对74 的NFC卡AID发出请求.
在请求得到响应后, 车端便开始了挑战环节. 如果我们的NFC可以迅速返回正确的应答, 便完成了认证过程. 虽说看似整个过程很简单, 但因为信用卡POS机对应答时间的容忍度较高. 而Tesla对反应时间的要求却非常严格, 所以导致我们第一次的Tesla中继攻击尝试失败了. 那么我们是否有办法绕过这个时间限制呢?
这里我们来看一个移动支付卡的案例, 其中最关键的环节就是将特定的字节偷梁换柱. 逼迫其进入磁条卡模式, 从而绕过了PIN的检测机制. 那么我们是否也可以对Tesla的交互数据做同样的操作呢?
在经过大量尝试后, 我们终于发现只要在车端发起AID 请求初始阶段.将不存在的F4 drop 掉就可以为后面的中继攻击争取到足够的时间.
具体的攻击效果与分享, 欢迎大家移步到DEFCON 28的官方YOUTUBE频道围观.
0x04 TESLA一封回信
本着互责任披露的原则, 银基老虎队发现问题后立刻与Tesla安全部门取得了联系, 并附上了详细的漏洞细节. Tesla安全部门反应很快周末期间也立刻回信了, 不过很可惜他们认为NFC中继攻击是个系统已知且无解漏洞. 但是他们提供了一个变相的解决方案, 据Tesla建议对中继攻击感到担忧的用户, 可以启用PIN2Drive这个功能. 这是一个类似手机PIN密码的功能. 也就是说如果没有正确的PIN密码, 盗贼无法启动车辆.
有趣的是我们在Tesla的官网找到了一段关于PIN2Drive的描述. 这个PIN2Drive仅是一个4位纯数字密码. 且我们还发现其并没有密码输入防爆破功能. 所以完全可能被爆破.
因此分析了解PIN2Drive后, 我们向漏洞管理平台CVE申请了编号CVE-2020-15912并得出了以下结论供大家参考. 首先必须要强调的是PIN2Drive并不能防御中继攻击, 它只能防御车子不被启动. 所以被中继攻击后, 车门被打开的风险仍旧存在. 车内存放的贵重物品仍可能丢失, 甚至还有被放入GPS跟踪器等设备的隐患. 最后做个简单的总结100 % 的绝对安全并不存在, 新的趋势将会带来新的攻击点. 比如针对中继攻击有厂商已经采用了新的解决方案UWB. 但其是否真的如其所说的那样安全? 这就有待时间来检验了.
0x05 参考文献
https://github.com/nfcgate
https://www.youtube.com/watch?v=nn-_3AbtEkI
https://www.carhackingvillage.com/speaker-bios#htm3nrr
https://tches.iacr.org/index.php/TCHES/article/view/8289
https://gist.github.com/darconeous/tesla-key-card-protocol
https://salmg.net/2018/12/01/intro-to-nfc-payment-relay-attacks
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15912