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

作者 | 田铮 上海控安可信软件创新研究院项目经理

来源 | 鉴源实验室

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

引言:汽车信息安全事件频发使得汽车行业安全态势愈发紧张。这些汽车网络安全攻击事件,轻则给企业产品发布及产品口碑造成影响,重则导致大范围的汽车召回或股价受损,造成的经济损失和安全代价不可估量。本文则选取典型的智能网联汽车网络安全攻击实例展开详细介绍。

01

汽车信息安全威胁

随着汽车不断向智能化、网联化、电动化、自动化的发展,软件定义汽车的趋势日益显著。目前智能网联汽车关键代码规模提升了10-100倍,代码漏洞呈指数级增长,同时汽车电子控制单元(ECU)的数量和车内连通性不断增长,导致汽车受到信息安全攻击的风险大大增加。

近年来频发的汽车信息安全事件加剧了社会各界对于智能汽车发展前景的担忧。比如2015年美国黑帽大会,研究人员通过车载娱乐系统发动伪装攻击,成功入侵Jeep Cherokee远程获取汽车的关键功能操作权限 [1]。这次事件直接导致克莱斯勒公司在全球召回140万辆汽车,也促使汽车工业界更加严肃看待智能汽车面临的信息安全风险。

在此之后,汽车行业积极应对信息安全挑战,但搭载了先进信息通信技术的新款智能网联汽车同样无法完全回避网络攻击的威胁。例如,腾讯科恩实验室分别在2016年[2]、2017年[3]两次攻击特斯拉实现对车辆的无物理接触远程攻击,利用内核、浏览器、MCU固件、UDS协议及OTA更新过程中的多个高危安全漏洞,攻入到特斯拉汽车的CID、IC、网关以及自动驾驶模块,随后将其发现的安全漏洞交与特斯拉。2019年[4-5],腾讯科恩实验室在多款宝马自动驾驶汽车上展示了利用车载信息娱乐系统和车载信息通信终端的漏洞远程无线入侵汽车,并进一步利用中央网关的安全缺陷实现向内部核心CAN总线注入恶意消息,获取了底层安全关键车内网络的控制权。2020年[6],360 Sky-Go团队针对梅赛德斯奔驰的车载娱乐主机、车载通讯模块、车联网通信协议及后端服务等联网模块,发现19个安全漏洞并利用漏洞形成攻击链路,预计影响200余万辆梅赛德斯奔驰汽车。类似这样的“白帽黑客”式策略一直在汽车安全业内上演,以寻找、提交汽车的安全漏洞甚至修复漏洞。

02

攻击案例分析

2.1 攻击安利介绍

2016 年[2],科恩实验室成功利用多个高危安全漏洞对特斯拉实施了无物理接触远程攻击,实现了对特斯拉驻车状态下汽车天窗、转向灯、座椅、显示器、门锁系统的远程控制,以及行驶状态下对雨刷、后备箱、刹车系统的远程控制。科恩实验室是通过无线(Wi-Fi/蜂窝)进入,破坏许多车载系统,如 CID(Center Information Display,中控显示系统)、IC(Instrument Cluster,仪表组) 、Parrot(无线及蓝牙模块)和网关等,然后将恶意 CAN 消息注入 CAN 总线。这是全球范围内第一次通过安全漏洞成功无物理接触远程攻入特斯拉并实现任意车身和行车控制。

2.2 案例分析

2.2.1 研究对象

科恩实验室成功在特斯拉Model S P85 和 P75 上完成了测试,对应的车型及版本信息如下图1和表1所示。

8421.png

图1 研究对象—Tesla Model S

8422.png

表1 测试车辆版本信息

2.2.2 攻击步骤解析

1)攻击浏览器

在攻击开始前,首先需要确定攻击面。每辆特斯拉汽车中都有车辆提供的Wi-Fi热点,很多用户会将SSID的信息保存在车上以便用于自动连接。如果伪造这个Wi-Fi热点,并将QtCarBrowser的流量重定向到攻击者的域名,即可实现远程攻击特斯拉汽车。此外,当在蜂窝模式下,通过建立精心设计的域名,网络钓鱼和用户输入错误也会导致远程触发浏览器漏洞,实现在没有物理访问的情况下远程交付漏洞利用。

通过特斯拉浏览器的用户代理可推断出QtWebkit的版本在2.2.x,该版本的QtWebkit存在许多漏洞。研究者获取特斯拉CID的QtCarBrowser二进制文件后,通过利用浏览器的这两个漏洞来获得特斯拉CID的shell,从而实现任意代码执行。

第一个漏洞存在于函数JSArray::sort()中。这个函数将在JavaScript代码中调用数组的sort()方法函数时被调用。存在漏洞的函数代码片段如图2所示,如果compareFunction为JSArray::shiftCount(),则m_vector的长度将被改变,并且整个m_vector结构将被转移到另一个地方。然而,局部变量指针存储仍然指向旧位置,导致内存损坏。当非移位数组调用 sort() 触发此问题时,本地指针存储引用的变量映射始终与新存储结构的变量 m_length 重叠,导致崩溃。通过利用JSArray::sort()中的漏洞,可获取JSCell地址。

8423.png

图2 易受攻击的函数代码片段

第二个漏洞则是由科恩实验室发现的CVE-2011-3928,可用于内存泄漏。如图3所示,若分配多个 Element 结构,在static_cast后,HTMLInputElement的成员m_data将与Element的指针m_next重叠。此外,将第二个和第三个Element结构作为子元素插入到同一标签中,m_next和m_data都指向第三个Element结构。由于m_data指向StringImpl结构,且该StringImpl结构与 Element结构重叠。StringImpl结构体的成员m_data始终是固定值1,StringImpl结构体的m_length始终是一个足够大的指针,足以读取整个内存。

8424.png

图3 CVE-2011-3928中的漏洞

2)本地权限升级

在基于浏览器攻击获得远程shell后,仍无法获得任意权限,这就需要另一个漏洞来从AppArmor中逃脱,并获得比浏览器进程上下文更高的权限。研究者发现,特斯拉上仍存在著名的ARM Linux漏洞CVE-2013-6282(即:内核API中缺少访问检查)。研究者利用该漏洞,首先修补了setresuid()系统调用以获得root权限,然后调用reset_security_ops()来禁用AppArmor,实现了在内核上下文中获得任意读/写权限。

3)未经授权访问嵌入式系统

在特斯拉Model S上除了CID还有三个更重要的独立嵌入式系统,即IC, Parrot和Gateway,如图4所示。由于网络设计上的缺陷和缺乏强大的密码保护,研究者可通过远程攻击获得这三个系统的root访问权限。

8425.png

图4 车载网络的重要设备

· IC

在 CID 中获得 root 权限后,研究者可在没有任何密码的情况下通过“ssh root@ic”的命令获取 IC 上的 root 访问权限,并通过SSH登录IC。

此外可实现 CID 和 IC 间的相互访问。CID包含一个密钥轮换方案,每24小时从母舰接收用户的随机新令牌。CID 会以明文形式在 IC 的文件系统中设置密钥,这意味着即使只能访问 IC,也可以SSH到CID 并获得root权限。

· Parrot

Parrot模块是一个第三方模块,型号是FC6050W,它集成了无线及蓝牙功能,可通过USB协议与CID相连。通过扫描Parrot上的开放端口,研究者发现端口23为Telnet打开。一个重要漏洞在于Telnet是匿名的,研究者可通过“nc parrot 23”的简单命令来访问和控制Parrot模块。

· Gateway

Gateway看起来比IC和Parot安全得多。研究者首先利用二进制文件gw-diag在端口23上唤醒Gateway的后门,找到Gateway的shell 入口。然后,研究者通过逆向固件来获得其中的token,获得Gateway的访问权限。

4)ECU编程

通过拆卸CID单元,研究者发现了与网关ECU 相连的SD卡中存在一些调试和升级相关的日志文件。这些文件中描述了整个升级的详细过程,包括将十六进制文件发送到ECU,配置继电器开关和其他重要步骤,可通过拆解文件查看到重要的内部信息。

对于更新软件来说,整个更新由在内存地址0x40006AE4位置的函数控制。它将首先对文件进行安全检查并设置其工作模式,以确保整个汽车在更新过程中保持物理安全。然后绕过完整性检查,并将固件刷写到网关,成功将定制的代码编程到ECU中,具体操作步骤如下:

①  解压缩release.tgz文件,确保校验和值满足要求。

②  检查压缩文件中是否存在manifest文件,并从中获得该固件包中的版本信息。

③  处理程序中每个“.Hex”文件。将十六进制文件转换为二进制流,并使用UDS协议发送固件。目标芯片上的引导加载程序需要将十六进制文件写入flash,并在每次启动时检查应用程序是否有效。最后检查固件是否已发送并编程到目标ECU。

  处理完所有这些文件后,创建一个日志,并重新启动。

5)网关逆向工程和攻击

在网关上运行的许多重要任务存在漏洞,这些任务几乎可与CAN总线上的ECU进行任何类型的通信。研究者可随时注入任何 CAN 消息,并使用补丁来阻止一些必要的 CAN 信号,实现车辆的车身控制,具体攻击过程包括:

①  网关将20100和20101端口的UDP广播传输到CAN总线上,研究者可通过伪造UDP信号来实现门锁系统的控制。

②  研究者可通过将诊断功能0x01替换为诊断功能0x04,并注入CAN消息,将其发送到ID为0x45的PT-CAN总线,实现在汽车运行或停止时打开灯的操作。

③  研究者定位到固件中存储的结构体后,通过更改固件中的目标ID来阻止一些重要消息(例如BDY CAN上0x218的ID),实现在汽车行驶状态时打开后备箱或禁用自动锁定功能。

6)攻击UDS/CAN总线

统一诊断服务 (UDS) 已编入 ISO-14229 中,并允许诊断控制车载电子控制单元 (ECU) 上的功能。研究者通过将电子稳定程序(ESP)设置为低速诊断编程会话,利用Bash shell 脚本通过网关注入 UDS 数据帧并低速禁用 ESP ECU,最终导致CAN-CH 总线上没有任何车速相关的CAN消息,并且汽车高速行驶时IC的实时速度值无法更新。此外,车辆会显示有关防抱死制动系统 (ABS) 的警报信息,引发转向和制动失灵的安全问题。

8426.png

图5 科恩实验室制作的CAN控制器

03

总 结

本文介绍了科恩实验室在实现特斯拉Model S远程控制的研究中所涉及的漏洞和相关技术细节。此次安全攻击事件,是首例利用CAN总线进行远程攻击,从而对特斯拉汽车停车和驾驶模式下进行远程控制的典型案例。最终,科恩实验室将研究报告及漏洞交予特斯拉,特斯拉在10天内做出回应,并利用其OTA 机制进行了浏览器、内核和ECU固件等方面的漏洞修复和安全更新,将代码签名保护引入了特斯拉汽车以保护车载系统。

参考文献:

[1] Charlie Miller,Chris Valasek.Remote exploitation of an unaltered passenger vehicle[C]. Black Hat USA,2015.

[2] Keen Security Lab of Tencent. Free-fall:hacking Tesla from wireless to CAN bus [C]. Black Hat USA,2016.

[3] Keen Security Lab of Tencent. Over-the-air: how we remotely compromised the gateway,BCM,and autopilot ECUs of Tesla cars[C]. Black Hat USA,2017.

[4]Cai Zhiqiang , Wang Aohui , Zhang Wenkai , Gruffke M ,Schweppe H . 0-days & Mitigations: Roadways to Exploit and Secure Connected BMW Cars[C]. Black Hat USA,2019.

[5] Keen Security Lab of Tencent. Experimental Security Assessment of BMW Cars: A Summary Report[EB/OL]. https://keenlab.tencent.com/en/whitepapers/Experimental_Security_Assessment_of_BMW_Cars_by_KeenLab.pdf,2018.

[6] 360 Sky-Go group. Security Research Report on Mercedes-Benz Cars [EB/OL]. https://skygo.360.net/archive/Security-Research-Report-on-Mercedes-Benz-Cars-en.pdf,2020.

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

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

相关文章

spring-自定义AOP面向切面注解--统一切面处理-登陆信息采集

2023华为OD统一考试(AB卷)题库清单-带答案(持续更新)or2023年华为OD真题机考题库大全-带答案(持续更新) 1. 先写一个登陆记录注解(//记录:XXX时间,XXX姓名,XX…

【人工智能前沿弄潮】——生成式AI系列:Diffusers应用 (1) 了解Pipeline 、模型和scheduler

Diffusers旨在成为一个用户友好且灵活的工具箱,用于构建针对您的用例量身定制的扩散系统。工具箱的核心是模型和scheduler。虽然DiffusionPipeline为了方便起见将这些组件捆绑在一起,但您也可以拆分管道并单独使用模型和scheduler来创建新的扩散系统。 …

使用AI工具Lama Cleaner一键去除水印、人物、背景等图片里的内容

使用AI工具Lama Cleaner一键去除水印、人物、背景等图片里的内容 前言前提条件相关介绍Lama Cleaner环境要求安装Lama Cleaner启动Lama CleanerCPU方式启动GPU方式启动 使用Lama Cleaner测试结果NO.1 检测框NO.2 水印NO.3 广州塔NO.4 人物背景 参考 前言 由于本人水平有限&…

Faker库详解 - Python中的随机数据生成器

文章目录 Faker介绍Faker安装Faker使用基本使用方法随机生成人物相关的基础信息随机生成地理相关的信息随机生成网络相关的信息随机生成日期相关的信息随机生成数字/字符串/文本随机生成列表/元组/字典/集合/迭代器/json随机生成文件相关的信息随机生成颜色/表情每次请求获取相…

2023“钉耙编程”中国大学生算法设计超级联赛(5)

Typhoon 计算几何,点到线段距离 String Magic (Easy Version) Manacher可持久化线段树 Touhou Red Red Blue DP 模拟 Expectation (Easy Version) 签到,组合数学 Tree 树形DP Cactus Circuit 仙人掌图,tarjan找简单环 Counting Stars 暴力…

Mac安装nvm教程及使用

nvm 是 node 版本管理器,也就是说一个 nvm 可以管理多个 node 版本(包含 npm 与 npx),可以方便快捷的安装、切换 不同版本的 node。 1、直接通过brew安装 执行命令:brew install nvm PS: 如果没有安装br…

机器学习笔记:李宏毅diffusion model

1 概念原理 首先sample 一个都是噪声的vector然后经过denoise network 过滤一些杂质接着继续不断denoise,直到最后出来一张清晰图片 【类似于做雕塑,一开始只是一块石头(噪声很杂的雕塑),慢慢雕刻出想要的花纹】 同一个…

MySQL修改编码

插入中文乱码,我电脑上没有出现,我只是来记录一下 MySQL版本: 8.0.34Windows 查看编码 mysql中输入下面的命令 show variables like ‘character_%’; 乱码的一般是图片中划红线的部分不是utf8 character_set_database是设置数据库的默认编码的 character_set_ser…

ETLCloud+MaxCompute实现云数据仓库的高效实时同步

MaxCompute介绍 MaxCompute是适用于数据分析场景的企业级SaaS(Software as a Service)模式云数据仓库,以Serverless架构提供快速、全托管的在线数据仓库服务,消除了传统数据平台在资源扩展性和弹性方面的限制,最小化用…

基于grpc从零开始搭建一个准生产分布式应用(3) - GRPC实现

本章开始会进入GRPC子专题,先实现前面章节中提到的例子。然后就使用的知识点展开全面的描述。本章代码任务:1、实现一个简单的GRPC服务;2、实现GRPC拦截器。 本章的代码承接上一章的代码进行迭代。因模块间存在相互依赖关系,读者一…

【数据结构】二叉树篇| 纲领思路02+刷题

博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: 是瑶瑶子啦每日一言🌼: 所谓自由,不是随心所欲,而是自我主宰。——康德 目录 一、前言二、刷题1、翻转二叉树 2、二叉树的层序遍历✨3、 二…

2023国赛数学建模D题思路分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 建模常见问题类型3.1 分类问题3.2 优化问题3.3 预测问题3.4 评价问题 4 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 竞赛信息 全国大学生数学建模…

【Java】一只小菜坤的编程题之旅【3】

文章目录 1丶判定是否互为字符重排2、杨辉三角3丶某公司的1个面试题(字符串包含问题) 1丶判定是否互为字符重排 这个题我们用一个非常简单的思想就能实现,我们先将字符串转换为字符数组,然后对字符数组进行排序,然后再…

安卓如何卸载应用

卸载系统应用 首先需要打开手机的开发者选项,启动usb调试。 第二步需要在电脑上安装adb命令,喜欢的话还可以将它加入系统path。如果不知道怎么安装,可以从这里下载免安装版本。 第三步将手机与电脑用数据线连接,注意是数据线&a…

阿里云服务器部署Drupal网站教程基于CentOS系统

阿里云百科分享如何在CentOS 7操作系统的ECS实例上搭建Drupal电子商务网站。Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成。它用于…

安装Jenkins

一、什么是Jenkins Jenkins是一个开源软件项目,是基于Java开发的。我们可以利用Jenkins来实现持续集成的功能。 因为Jenkins是基于Java开发的,所以在安装Jenkins之前首先需要安装Java的JDK。 二、安装Jenkins 在Windows平台上面安装Jenkins共有两种方式…

gSpan算法执行步骤详解示例

目录 1. 问题描述2. gSpan算法步骤2.1 数据预处理2.2 深度递归挖掘频繁子图2.2.1 获取所有的频繁边2.2.2 深度递归挖掘频繁子图 参考文献 1. 问题描述 gSpan 是一款图规则挖掘算法,目标是从现有的图集中挖掘频繁子图。如下图中包含三个图: 其中圆圈为顶…

13-把矩阵看作是对系统的描述

探索矩阵乘法:更深刻的理解与应用视角 🧩🔍 引言 📖 在我们进一步探讨矩阵乘法之前,让我们从不同的角度来理解什么是矩阵,以及如何将矩阵视为一个系统。我们之前已经介绍了矩阵的基本概念和运算&#xff…

SpringBoot案例-部门管理-新增

根据页面原型,明确需求 页面原型 需求 阅读接口文档 接口文档链接如下: 【腾讯文档】SpringBoot案例所需文档 https://docs.qq.com/doc/DUkRiTWVaUmFVck9N 思路分析 前端在输入要新增的部门名称后,会以JSON格式将数据传入至后端&#xf…

idea如何开启远程调试

一:打包需要部署的jar包上传到服务器 二:服务器(开启远程调试接口) nohup java -jar -Xdebug -Xrunjdwp:transportdt_socket,servery,suspendn,address8453 xxx.jar > xxx.log 2>&1 & 三: idea配置rem…