Tesla 电动汽车已迅速成为新能源汽车的领导者,公司创始人Elon Musk 自豪地称其为“A sophisticated computer on wheels”。作为业界的翘楚, 自然会吸引很多黑客和安全研究人员的兴趣。在过去一段时间里, 很多安全研究人员对特斯拉进行了有针对性的研究,而成果也可谓收获颇丰,其中特斯拉自己的漏洞英雄榜上, 可以看见很多中国研究团队的身影。
全球漏洞库中也有众多关于特斯拉的漏洞CVE编号,而其中最值得智能钥匙安全研究人员深入的是编号为CVE-2018-16806的漏洞。比利时一名安全研究人员通过逆向分析特斯拉Model S钥匙Pektorn PKE系统, 并找到DST40 Cipher的设计缺陷,成功破解并完美复制了特斯拉钥匙。
但是对Tesla新能源汽车感兴趣的, 可不仅仅是安全研究人员,同时还有专业的盗贼们,不过他们可没有那功夫去深入研究Tesla的安全缺陷。对他们来说,自然是简单粗暴有效便好,而中继攻击便是其中最简单的方式之一。相信大家可以从新闻中得知, 国内外经常有盗贼采用此类方式盗取车辆或车内的贵重物品。
所以,这让我们很好奇, 中继攻击是否真的就那么容易实现?带着这个疑问,开始了这段有趣的研究。不过,在进入主题之前, 我们还是简单了解些有关NFC的基础知识。
NFC也被称为近场通信, 其工作模式以被动式为主, 工作频率为13.56Mhz。其应用场景非常广泛, 我们常见的地铁一卡通; 门禁卡甚至是护照都有其身影。
当然通常我们提到NFC 攻击, 大家很容易会想到Mifare Classic 的破解。这类文章在网上随处可见,不过NFC的类型可不仅仅是Classic。比如某公司的门禁卡采用的是iClass,而某地铁的一次性车票则是Ultralight。每种类型都曾经暴露过各自的问题, 感兴趣的朋友可以自行研究一番。
随着科技的进步、车联网的发展,人们操控开启车门的方式也发生了变化。最与众不同的一点是, 众多智能汽车已经开始抛弃传统的物理钥匙,转而开始使用蓝牙或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。
在对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频道围观。
本着互责任披露的原则, 银基老虎队发现问题后立刻与Tesla安全部门取得了联系, 并附上了详细的漏洞细节。Tesla安全部门反应很快周末期间也立刻回信了, 不过很可惜他们认为NFC中继攻击是个系统已知且无解漏洞。但是他们提供了一个变相的解决方案, 据Tesla建议对中继攻击感到担忧的用户, 可以启用PIN2Drive这个功能。这是一个类似手机PIN密码的功能,也就是说如果没有正确的PIN密码, 盗贼无法启动车辆。
有趣的是,我们在Tesla的官网找到了一段关于PIN2Drive的描述,这个PIN2Drive仅是一个4位纯数字密码。且我们还发现其并没有密码输入防爆破功能,所以完全可能被爆破。
因此,在分析了解PIN2Drive后, 我们向漏洞管理平台CVE申请了编号CVE-2020-15912并得出了以下结论供大家参考。首先,必须要强调的是PIN2Drive并不能防御中继攻击, 它只能防御车子不被启动。所以被中继攻击后, 车门被打开的风险仍旧存在。车内存放的贵重物品仍可能丢失, 甚至还有被放入GPS跟踪器等设备的隐患。最后做个简单的总结,100%的绝对安全并不存在, 新的趋势将会带来新的攻击点,比如针对中继攻击有厂商已经采用了新的解决方案UWB。但其是否真的如其所说的那样安全? 这就有待时间来检验了。
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
原文始发于微信公众号(银基安全):车联网安全系列 | 特斯拉NFC中继攻击 (CVE-2020-15912)