鉴源实验室 | 汽车网络安全攻击实例解析(三)
作者 | 张璇 上海控安可信软件创新研究院工控网络安全组
来源 | 鉴源实验室
社群 | 添加微信号“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秒。盗窃者使用的中继攻击工具并不昂贵,且便于携带。值得注意的是,这一过程并未涉及破解钥匙与车辆认证算法等机制。中继设备的作用仅限于采集车钥匙发送的信号,而非篡改信号内容,也未涉及解密和破坏通信协议的过程。
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)在汽车内部,允许启动引擎。
图3显示了正常模式下汽车开锁的两个示例实现。汽车通过LF信道定期发送信标,或者在操作车门把手时发送信标。这些信标可以是简短的唤醒消息,也可以是包含汽车标识的较长的挑战消息。当钥匙检测到LF信道上的信号时,它唤醒微控制器,解调信号。在计算出对挑战的响应后,钥匙通过UHF信道回复。该响应被汽车接收并验证。在有效响应的情况下,汽车解锁车门。随后,为了启动汽车引擎,钥匙必须位于汽车内(图2中的Inside区域)。在这个区域,钥匙接收到不同类型的消息,当回复这些消息时,将通知汽车正确的钥匙就在车内,汽车然后才被允许启动引擎。
2.2.2 PKES中继攻击分析
在上述的PKES安全案例中,主要采用了中继攻击的手段,该方式广泛应用于通信系统的渗透攻击[6]。中继存在两种方式,一种是基于电缆的中继攻击,另一种是空中中继攻击。
1)电缆中继攻击
为了执行这种攻击,可以使用一种中继设备(如图4),该设备由两个环形天线连接在一起的电缆组成,该电缆在这两个天线之间中继LF信号。中间可以放置一个放大器以提高信号功率。当环形天线靠近车门把手时,它捕获汽车信标信号作为局部磁场。这个场激发了中继的第一个天线,它通过感应在天线的输出处产生了交替信号。然后,这个电信号通过同轴电缆传输,通过一个可选的放大器传达到第二个天线。是否需要放大器取决于诸多参数,如天线的质量,电缆的长度,原始信号的强度以及中继天线距离汽车天线的距离。当中继信号达到电缆的第二个天线时,它在天线中产生电流,进而在第二个天线的附近产生磁场。最后,这个磁场激发了钥匙的天线,后者解调了这个信号并从汽车中恢复了原始消息。汽车将从外部天线向钥匙发送开启命令,从内部天线发送启动命令。因此,攻击者首先需要将中继天线放置在车门把手前,以便钥匙发送开启信号。一旦车门解锁,攻击者将中继天线带入汽车内,并在踩刹车踏板或按下启动引擎按钮后,汽车将向钥匙发送启动消息。在这两种情况下,钥匙都会通过UHF回应。
2)空中中继攻击
通过电缆进行中继可能会不方便或引起怀疑。例如,墙壁或门的存在可能会阻止它。因此,可以实现一个在空中进行的物理层中继攻击,通过专门构建的RF链路中继LF信号(如图5)。该链路由发射机和接收机两部分组成。发射机捕获LF信号并将其升频到2.5 GHz。获得的2.5 GHz信号然后被放大并通过空气传输。链路的接收器部分接收此信号并将其降频以获得原始的LF信号。然后再次放大此LF信号并发送到一个环形LF天线,该天线复制了汽车发射的信号。打开和启动汽车引擎的过程与上述讨论相同。
另外,由于模拟处理信号通常比数字处理更为迅速,使用模拟实现的中继攻击使攻击者能够在保持攻击的大小、功耗和价格非常低的同时,达到更大的传输/接收中继距离。
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.
相关文章:
鉴源实验室 | 汽车网络安全攻击实例解析(三)
作者 | 张璇 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 引言:随着现代汽车技术的迅速发展,车辆的进入和启动方式经历了显著的演变。传统的物理钥匙逐渐被无钥匙进…...
php 中生成订单号
字母日期。。。。。。。 function setOrderNo($year 2011) {$yCode array(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z);$orderSn $yCode[intval(date(Y)) - $year] . strtoupper(dechex(date(m))) . date(d) . substr(time(), -5) . s…...
Jmeter工具+ant+jenkins实现持续集成
jmeterantjenkins持续集成 一、下载并配置jmeter 首先下载jmeter工具,并配置好环境变量;参考: jmeter默认保存的是.jtl格式的文件,要设置一下bin/jmeter.properties,文件内容,保存jmeter.save.saveservice.output_f…...
基于SSM的经典电影推荐网站设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
JavaScript中使用JSON的基本操作示例
简介 JSON(JavaScript Object Notation)是一种数据交换格式,也是JavaScript中处理数据的常见方式之一。JSON是一种轻量级的数据交换格式,易于阅读和编写,同时也易于解析和生成。在JavaScript中,可以使用内…...
上拉、下拉电阻的作用
上拉、下拉电阻的作用 (1)一般作为单键触发使用,如果芯片本身没有内接电阻,为了使单键维持在不被触发的状态或触发后回到原状态,必须在芯片外部接一个电阻,即保持芯片引脚高电平(或低电平)输入,这样单击按键…...
docker部署elasticsearch+kibana+head
前言 最近,项目需要使用elasticsearch,所以就想快速安装一个使用,最开始是docker安装了7.10.1版本。 后面计划使用Java开发,发现有 RestHighLevelClient 和 Elasticsearch Java API Client两种客户端连接方式。 然后网上查阅了一…...
Linux:vim的简单使用
个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、vim的基本概念二、vim的基本操作三、vim正常模式命令集四、vim底行模式命令集五、.xxx.swp的解决总结 前言 本文是对Linux中vim使用的总结 一、vim的基本概念 …...
Python---文件和文件夹操作
os模块 在Python中文件和文件夹的操作要借助os模块里面的相关功能,具体步骤如下: 第一步:导入os模块 import os 第二步:调用os模块中的相关方法 os.函数名() 与文件操作相关方法 编号函数功能1os.rename(目标文件名称&…...
electron-vue运用及案例代码
前言 Electron是一个使用JavaScript, HTML和CSS构建跨平台桌面应用程序的开源库。它允许开发者使用纯web技术创建原生应用程序,这使得web开发者能够利用他们已经掌握的web技术来构建桌面应用。 以下是一个简单的Electron应用程序的代码示例: // 引入Electron的主模块 co…...
视频字幕处理+AI绘画,Runway 全功能超详细使用教程(4)
runway的视频字幕处理、AI绘图功能介绍,感觉完全就是为了做电影而布局,一整套功能都上线了!想系统学习的必收藏! 在深度研究Runway各个功能后,无论是AI视频生成及后期处理技术,还是AI图像生成技术ÿ…...
令人疑惑的Promise相关问题
令人疑惑的Promise相关问题 问题1 const promise new Promise((resolve, reject) > {reject(Error(Error occurred)); });promise.catch(error > console.log(error.message)); promise.catch(error > console.log(error.message));输出: Error occurr…...
Spring 多数据源搭建
目录 前言 正文 1.Druid 介绍和使用 2.其他多数据源解决方案 总结 前言 对于复杂的业务和项目,可能在一个单体项目中存在需要连接多个数据库的情况。这时,就会使用到多数据源,实际中遇到的可能性比较大。 正文 如果一个项目中需要连…...
【二分查找】LeetCode1970:你能穿过矩阵的最后一天
本文涉及的基础知识点 二分查找算法合集 作者推荐 动态规划LeetCode2552:优化了6版的1324模式 题目 给你一个下标从 1 开始的二进制矩阵,其中 0 表示陆地,1 表示水域。同时给你 row 和 col 分别表示矩阵中行和列的数目。 一开始在第 0 …...
利用python连接MySQL数据库并执行相关sql操作
一、新建MySQL数据库 1.启动MySQL服务 打开phpstudy,开启MySQL服务。如果开启失败的话,可以打开任务管理器,把正在运行的mysqld服务的进程进行关闭,再次打开MySQL服务即可启动。 2.新建MySQL数据库 选择数据库,点击…...
jenkins配置
branch: "dev" 切换分支 $WORKSPACE: /var/lib/jenkins/workspace/jenkins任务名 dest_passwd服务器密码 变量 sudo sshpass -p $dest_passwd ssh root192.168.211.319 -tt rm -rf /data/patent/*:删除文件/data/patent/* sudo sshpa…...
LeNet对MNIST 数据集中的图像进行分类--keras实现
我们将训练一个卷积神经网络来对 MNIST 数据库中的图像进行分类,可以与前面所提到的CNN实现对比CNN对 MNIST 数据库中的图像进行分类-CSDN博客 加载 MNIST 数据库 MNIST 是机器学习领域最著名的数据集之一。 它有 70,000 张手写数字图像 - 下载非常简单 - 图像尺…...
Django的回顾的第4天
1.模型层 1.1简介 你可能已经注意到我们在例子视图中返回文本的方式有点特别。 也就是说,HTML被直接硬编码在 Python代码之中。 def current_datetime(request):now datetime.datetime.now()html "<html><body>It is now %s.</body><…...
点云从入门到精通技术详解100篇-基于三维点云的工件曲面轮廓检测与机器人打磨轨迹规划(中)
目录 2.2.2 散乱点云滤波去噪 2.2.3 海量点云数据压缩 2.3 点云采集与预处理实验...
Mapper文件夹在resource目录下但是网页报错找不到productMapper.xml文件的解决
报错如下: 我的Mapper文件夹在resourse目录下但是网页报错找不到productMapper.xml。 结构如下:代码如下:<mappers><mapper resource"com/dhu/mapper/productMapper.xml" /> </mappers> 这段代码是在mybatis-co…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
