当前位置: 首页 > news >正文

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

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

来源 | 鉴源实验室

社群 | 添加微信号“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.

相关文章:

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

作者 | 张璇 上海控安可信软件创新研究院工控网络安全组 来源 | 鉴源实验室 社群 | 添加微信号“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图像生成技术&#xff…...

令人疑惑的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简介 你可能已经注意到我们在例子视图中返回文本的方式有点特别。 也就是说&#xff0c;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文件的解决

报错如下&#xff1a; 我的Mapper文件夹在resourse目录下但是网页报错找不到productMapper.xml。 结构如下&#xff1a;代码如下&#xff1a;<mappers><mapper resource"com/dhu/mapper/productMapper.xml" /> </mappers> 这段代码是在mybatis-co…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

Linux 中如何提取压缩文件 ?

Linux 是一种流行的开源操作系统&#xff0c;它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间&#xff0c;使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的&#xff0c;要在 …...

【Linux】自动化构建-Make/Makefile

前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具&#xff1a;make/makfile 1.背景 在一个工程中源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c;mak…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...