鉴源实验室 | 汽车网络安全攻击实例解析(三)

作者 | 张璇 上海控安可信软件创新研究院工控网络安全组

来源 | 鉴源实验室

社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区”

引言:随着现代汽车技术的迅速发展,车辆的进入和启动方式经历了显著的演变。传统的物理钥匙逐渐被无钥匙进入和启动系统(Passive Keyless Entry and Start,PKES)所取代,这一系统允许车主在保持车钥匙在口袋中的情况下,轻松地进入并启动车辆。PKES系统通过使用射频识别技术和先进的通信协议,为用户提供了极大的便利性,然而,随着PKES系统的普及,其安全性也逐渐受到关注,这不仅仅关系到财产安全,更涉及到驾驶者和乘客的生命安全。在这一背景下,对PKES系统的安全性进行深入的研究变得至关重要。

01

PKES系统安全研究

2018年,比利时鲁汶大学安全团队揭示了特斯拉PKES系统中的CVE-2018-16806漏洞,成功破解了DST40加密算法,仅用数秒就复制了特斯拉Model S钥匙,并最终成功盗走了车辆。

2019年,该团队在亚特兰大的Cryptographic Hardware and Embedded Systems conference(CHES)上宣布,在特斯拉修复了漏洞后,他们仍能够再次复制车钥匙。尽管这次破解工作需要更近的距离和更长的时间,但特斯拉Model S被盗事件引发了对Passive Keyless Entry系统安全性的广泛关注。

2020年,一名黑客成功为特斯拉汽车开发了一种新的密钥克隆“中继攻击”,并在特斯拉Model X电动汽车上进行了演示。特斯拉得知了这一新的攻击,并计划推出新的补丁。在北美,特斯拉汽车被盗相当罕见。但在欧洲,一些老练的窃贼通过“中继攻击”盗窃了不少特斯拉汽车,其中大多数都没有被找回。

2022年,安全研究人员通过中继攻击成功黑客攻击了特斯拉Model 3和Y,可以有效地解锁并启动这些车辆。

近年来,安全人员一直专注于特斯拉的PKES系统的安全研究,揭示了该系统存在许多安全漏洞[1,2,3,4]。

02

攻击案例分析

2.1 攻击案例介绍

2019年发生的特斯拉Model S被盗事件引发了对PKES系统安全性的广泛关注(图1)。在英国的博勒姆伍德地区,两名小偷在没有钥匙的情况下,使用中继攻击设备成功盗取了特斯拉Model S,整个过程仅用时30秒。盗窃者使用的中继攻击工具并不昂贵,且便于携带。值得注意的是,这一过程并未涉及破解钥匙与车辆认证算法等机制。中继设备的作用仅限于采集车钥匙发送的信号,而非篡改信号内容,也未涉及解密和破坏通信协议的过程。

图1 特斯拉被盗事件题

2.2 案例分析

2.2.1 研究对象

首次提出PKES的设想可追溯到[5]。在这项研究中,作者提出了一种系统,当携带钥匙的用户靠近车辆时,系统会自动解锁车辆,并在用户远离车辆时将其锁定。该系统之所以被称为“被动”,是因为它无需用户采取任何主动措施。钥匙与车辆之间的通信特点是通过磁耦合的射频信号完成的。在这一系统中,车辆通过判断钥匙是否在汽车的通信范围内来确定其是否在近距离内。

PKES汽车钥匙采用低频射频识别技术(LF RFID,Low-Frequency Radio-Frequency Identification)进行短距离通信(在主动模式下为1-2米,在被动模式下为几厘米),并使用全功能超高频(UHF,Ultra High Frequency)收发器进行较长距离通信(在10到100米的范围内)。LF信道用于检测钥匙是否在汽车内外的区域内。图2显示了必须检测以确保PKES系统安全和方便使用的汽车附近区域。这些区域包括:

1)与汽车外部较远距离(通常高达100米),只允许通过按下钥匙上的按钮来开启/关闭汽车。

2)在汽车外部,但距离车门把手约1-2米,允许通过使用车门把手来开启/关闭汽车。

3)在汽车内部,允许启动引擎。

图2 PKES系统LF覆盖范围

图3显示了正常模式下汽车开锁的两个示例实现。汽车通过LF信道定期发送信标,或者在操作车门把手时发送信标。这些信标可以是简短的唤醒消息,也可以是包含汽车标识的较长的挑战消息。当钥匙检测到LF信道上的信号时,它唤醒微控制器,解调信号。在计算出对挑战的响应后,钥匙通过UHF信道回复。该响应被汽车接收并验证。在有效响应的情况下,汽车解锁车门。随后,为了启动汽车引擎,钥匙必须位于汽车内(图2中的Inside区域)。在这个区域,钥匙接收到不同类型的消息,当回复这些消息时,将通知汽车正确的钥匙就在车内,汽车然后才被允许启动引擎。

图3 PKES系统两种实现方式

2.2.2 PKES中继攻击分析

在上述的PKES安全案例中,主要采用了中继攻击的手段,该方式广泛应用于通信系统的渗透攻击[6]。中继存在两种方式,一种是基于电缆的中继攻击,另一种是空中中继攻击。

1)电缆中继攻击

为了执行这种攻击,可以使用一种中继设备(如图4),该设备由两个环形天线连接在一起的电缆组成,该电缆在这两个天线之间中继LF信号。中间可以放置一个放大器以提高信号功率。当环形天线靠近车门把手时,它捕获汽车信标信号作为局部磁场。这个场激发了中继的第一个天线,它通过感应在天线的输出处产生了交替信号。然后,这个电信号通过同轴电缆传输,通过一个可选的放大器传达到第二个天线。是否需要放大器取决于诸多参数,如天线的质量,电缆的长度,原始信号的强度以及中继天线距离汽车天线的距离。当中继信号达到电缆的第二个天线时,它在天线中产生电流,进而在第二个天线的附近产生磁场。最后,这个磁场激发了钥匙的天线,后者解调了这个信号并从汽车中恢复了原始消息。汽车将从外部天线向钥匙发送开启命令,从内部天线发送启动命令。因此,攻击者首先需要将中继天线放置在车门把手前,以便钥匙发送开启信号。一旦车门解锁,攻击者将中继天线带入汽车内,并在踩刹车踏板或按下启动引擎按钮后,汽车将向钥匙发送启动消息。在这两种情况下,钥匙都会通过UHF回应。

图4 PKES系统两种实现方式

2)空中中继攻击

通过电缆进行中继可能会不方便或引起怀疑。例如,墙壁或门的存在可能会阻止它。因此,可以实现一个在空中进行的物理层中继攻击,通过专门构建的RF链路中继LF信号(如图5)。该链路由发射机和接收机两部分组成。发射机捕获LF信号并将其升频到2.5 GHz。获得的2.5 GHz信号然后被放大并通过空气传输。链路的接收器部分接收此信号并将其降频以获得原始的LF信号。然后再次放大此LF信号并发送到一个环形LF天线,该天线复制了汽车发射的信号。打开和启动汽车引擎的过程与上述讨论相同。

另外,由于模拟处理信号通常比数字处理更为迅速,使用模拟实现的中继攻击使攻击者能够在保持攻击的大小、功耗和价格非常低的同时,达到更大的传输/接收中继距离。

图5 通过升频和降频在空中中继LF(130KHz)信号的简化视图

2.2.3 攻击步骤分析

在上述的案例中,偷窃者通过中继攻击设备,在不拥有实际钥匙的情况下,成功实施了对特斯拉Model S的盗窃。攻击过程包括以下几个关键步骤:

1)寻找信号:小偷利用中继设备在目标房屋周围寻找和靠近特斯拉的钥匙信号。

2)信号放大:采用上述的方法,通过中继设备识别并放大车钥匙和特斯拉之间的通信信号。

3)误导特斯拉Model S:通过中继LF信号欺骗特斯拉,使其误以为钥匙就在附近,从而解锁车门、启动车辆。

整个攻击过程并不牵涉到破解钥匙与车辆认证算法等机制。中继设备的作用仅在于收集车钥匙发送的信号,而不是篡改信号内容,也没有解密或破坏通信协议。偷窃者使用的工具并不昂贵,同时发动这类攻击并不需要较高的专业知识。

03

总结

本文研究了汽车PKES系统的安全性,通过实际的案例,研究了PKES中继攻击的原理和方法。该方法不需要解码信号,也不需要修改信号内容,仅引入了模拟的RF组件的典型延迟,该攻击强调了物理层安全的重要性,与针对身份验证或消息机密性的安全协议的攻击相互独立,为加强和理解PKES系统安全性提供了新的视角。中继攻击只是PKES系统攻击方法中常用的一种,随着PKES系统在汽车领域的广泛应用,安全研究人员需要不断关注新的攻击方式和漏洞,并提出更多创新性的解决方案,以满足不断演变的安全挑战,以确保这一关键技术的可靠性和稳定性。

参考文献:

[1] S. Indesteege, N. Keller, O. Dunkelman, E. Biham, and B. Preneel. A practical attack on KeeLoq. In Proc. of the 27th Annual Eurocrypt Conference, pages 1–18, Berlin, Heidelberg, 2008. Springer-Verlag.

[2] C. Paar, T. Eisenbarth, M. Kasper, T. Kasper, and A. Moradi. KeeLoq and side-channel analysis-evolution of an attack. Fault Diagnosis and Tolerance in Cryptography, Workshop on, 0:65–69, 2009.

[3] N. T. Courtois, G. V. Bard, and D. Wagner. Algebraic and slide attacks on KeeLoq. In Fast Software Encryption: 15th International Workshop, FSE 2008, Lausanne, Switzerland,

February 10-13, 2008, Revised Selected Papers, pages 97–115, Berlin, Heidelberg, 2008. Springer-Verlag.

[4] S. C. Bono, M. Green, A. Stubblefield, A. Juels, A. D. Rubin, and M. Szydlo. Security analysis of a cryptographically enabled RFID device. In Proc. of the 14th USENIX Security Symposium, Berkeley, USA, 2005. USENIX Association.

[5]T. Waraksa, K. Fraley, R. Kiefer, D. Douglas, and L. Gilbert. Passive keyless entry system. US patent 4942393, 1990.

[6] G. P. Hancke, K. Mayes, and K. Markantonakis. Confidence in smart token proximity: Relay attacks revisited. Computers & Security, 28(7):615–627, 2009.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/209194.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Seaborn图形可视化基础_Python数据分析与可视化

Seaborn图形可视化基础 Seaborn可视化Seaborn与Matplotlib Seaborn可视化 即使matplotlib已经如此强大了,但是不得不承认它不支持的功能还有很多。 例如: 2.0之前的版本的默认配置样式绝对不是用户的最佳选择; matplotlib的API比较底层。虽…

第十节HarmonyOS 常用基础组件-Image

一、组件介绍 组件(Component)是界面搭建与显示的最小单位,HarmonyOS ArkUI声名式为开发者提供了丰富多样的UI组件,我们可以使用这些组件轻松的编写出更加丰富、漂亮的界面。 组件根据功能可以分为以下五大类:基础组件…

Selenium+Python自动化测试之验证码处理

两种方式: 验证码识别技术 (很难达到100%) 添加Cookie (*****五星推荐) 方式一:验证码识别技术 逻辑方式: 1:打开验证码所在页面,截图。获取验证码元素坐标,剪切出验证码图片&…

Pandas进阶:文本处理

引言 文本的主要两个类型是string和object。如果不特殊指定类型为string,文本类型一般为object。 文本的操作主要是通过访问器str 来实现的,功能十分强大,但使用前需要注意以下几点。 访问器只能对Series数据结构使用。 除了常规列变量df.c…

对el-select封装成组件使用

效果与直接使用el-select一样&#xff0c;多处用el-select显得代码冗余就进行了封装 效果图&#xff1a; el-select封装&#xff1a; <template><div class"my-select"><el-selectv-model"person.modelValue":placeholder"placehold…

H5 Canvas 打飞机青春版

没事儿写写练习一下&#xff0c;说不准哪天就用到今天所用到的知识点了呢。 在线链接 https://linyisonger.github.io/H5.Examples/?name./053.%E9%A3%9E%E6%9C%BA%E5%A4%A7%E6%88%98.html 功能清单 循环滚动背景 矩形碰撞 随机生成敌人 飞机左右移动 苹果屏蔽长按 移动端屏…

京东数据运营-京东数据开放平台-鲸参谋10月粮油调味市场品牌店铺销售数据分析

鲸参谋监测的京东平台10月份料油调味市场销售数据已出炉&#xff01; 根据鲸参谋数据显示&#xff0c;今年10月份&#xff0c;京东平台粮油调味市场的销量将近4600万&#xff0c;环比增长约10%&#xff0c;同比降低约20%&#xff1b;销售额将近19亿&#xff0c;环比增长约4%&am…

(C++)三数之和--双指针法

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 算法原理 双指针法&#xff0c;不一定是说就要使用指针&#xff0c;只是一种形象的说法&#xff0c;在数组中&#xff0c;我们一般将数组下标当做指针。我们首先对数组进行排序&#xff0c;从左向右标定一个下标i&#xff0…

LED屏幕信息安全如何预防?

随着科技的不断进步&#xff0c;LED屏幕在我们生活和工作中扮演着越来越重要的角色&#xff0c;然而&#xff0c;随之而来的是信息安全面临的挑战。为了有效预防LED屏幕信息的泄露和被盗取&#xff0c;我们需要采取一系列的安全措施。以下是一些建议&#xff1a; 物理安全措施&…

中国毫米波雷达产业分析6——毫米波雷达行业发展展望

一、行业发展驱动力分析 &#xff08;一&#xff09;需求带动 当前&#xff0c;全球智能化变革浪潮正在汽车、交通、安防、工业、家居、健康监护等诸多产业蓬勃发展&#xff0c;创造了巨大的感知产品增量需求。 在汽车领域&#xff0c;毫米波雷达传感器作为一种非接触…

【无标题】mmocr在云服务器上

这里写目录标题 1、创建虚拟环境2、切换和退出conda虚拟环境3. 显示、复制&#xff08;克隆&#xff09;、删除虚拟环境4、删除环境安装指示中 cd进项目文件夹开始训练模型&#xff08;python XXX.py | tee record.txt 记录训练结果&#xff09;如何在Linux服务器上安装Anacond…

leetcode刷题详解—— 环形子数组的最大和

1. 题目链接&#xff1a;918. 环形子数组的最大和 2. 题目描述&#xff1a; 给定一个长度为 n 的环形整数数组 nums &#xff0c;返回 nums 的非空 子数组 的最大可能和 。 环形数组 意味着数组的末端将会与开头相连呈环状。形式上&#xff0c; nums[i] 的下一个元素是 nums[(…

SAP 如何检查已安装的SAP UI5 版本

第一个方法是直接从FLP中查看 但是部分高版本的FLP中没有这个about&#xff0c; 那么在当前界面可以使用&#xff1a;CTRL ALT SHIFT S 查看当前版本 根据此版本&#xff0c;去进行你的UI5的开发吧

NodeJS(二):npm包管理工具、yarn、npx、pnpm工具等

目录 (一)npm包管理工具 1.了解npm 2.npm的配置文件 常见的配置属性 scripts属性*** 依赖的版本管理 3.npm安装包的细节 4.package-lock文件 5.npm install原理** 6.npm的其他命令 (二) 其他包管理工具 1.yarn工具 基本指令 2.cnpm工具 3.npx工具 (1)执行本地…

C++可表示的数(数组前面2个数的和)

void 可表示的数&#xff08;数组前面2个数的和&#xff09;() {int aa[]{1,2,3,4,5,6,7,8,9}, j 0, z 1, jj z, n 9, ge 0;string a "";while (j < n)//缘由https://bbs.csdn.net/topics/396063706?page1#post-410898529{if (jj < n)if (aa[j] aa[z] …

Android--Jetpack--Lifecycle详解

富贵本无根&#xff0c;尽从勤里得 一&#xff0c;定义 Lifecycle 是一个具备宿主生命周期感知能力的组件。它持有组件&#xff08;Activity/Fragment&#xff09;生命周期状态信息&#xff0c;并且允许其观察者监听宿主生命周期状态变化。 顾名思义&#xff0c;Lifecycle的主…

数据治理的具体应用

数据治理架构 图 13 描述的是公安数据治理框架&#xff0c;平台架构主要包括数据存储、数据计算、数据管理、数据应用这 4 个部分。 (1) 数据存储&#xff1a; 基于分布式的大数据存储平台&#xff0c;具有很强的存储能力和扩张能力&#xff1b; (2) 数据计算&#xff1a; …

目标检测——Faster R-CNN算法解读

论文&#xff1a;Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 作者&#xff1a;Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun 链接&#xff1a;https://arxiv.org/abs/1506.01497 代码&#xff1a;https://github.com/rbgirsh…

golang Pool实战与底层实现

使用的go版本为 go1.21.2 首先我们写一个简单的Pool的使用代码 package mainimport "sync"var bytePool sync.Pool{New: func() interface{} {b : make([]byte, 1024)return &b}, }func main() {for j : 0; j < 10; j {obj : bytePool.Get().(*[]byte) // …

Python 重要数据类型

目录 列表 序列操作 列表内置方法 列表推到式 字典 声明字典 字典基本操作 列表内置方法 字典进阶使用 字典生成式 附录 列表 在实际开发中&#xff0c;经常需要将一组&#xff08;不只一个&#xff09;数据存储起来&#xff0c;以便后边的代码使用。列表就是这样的…