热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

can总线rollingcounter_[翻译]识别CAN总线上的攻击

现存的汽车ControllerAreaNetwork(CAN)非常容易受到攻击。缺少对发送者的验证,意味着攻击者可以伪装成作为网络上的一个合法节点,进行

现存的汽车Controller Area Network(CAN)非常容易受到攻击。缺少对发送者的验证,意味着攻击者可以伪装成作为网络上的一个合法节点,进行发送和接收消息。这篇论文提出了一个可以使用CAN识别合法和不合法消息的系统。此外,重防攻击可以阻塞注重安全的实时网络,这一系统还提供了防御重防攻击的功能。

关键词:Controller Area Network(CAN),汽车安全,安全机制,网络安全

1. 介绍

在过去的20年里,Controller Area Network(CAN)以其在车载式通信中优越的鲁棒性,容错率和高效而出名。除了它的一些安全特征,CAN在设计时并没有考虑到安全性,因为汽车被假定处于一个孤立的系统中。然后,现今的车载网络正在受到威胁,因为攻击者试图盗取,篡改或伪造信息,这可能会使得汽车的购买者和他们所处的环境变得不安全。

我们提出了一个系统,使用这个系统,CAN可以检测外部威胁,并区分消息是来源于合法的ECUs(电子控制单元)还是未被授权的源。我们也能试图创造一个能够防御重放攻击的系统,以此降低实时网络资源的消耗。

2. 背景

2.1 CAN行为

CAN在现代汽车通信协议中被大量的使用。它在1980年代中期由BOSCH设计出来,并运行在广播网络中。某一节点创建的包会被发送给网络中所有的节点,接收节点自己决定是接收还是抛弃这个包。这一行为的原理是为了保持网络中信息的一致性(Texas Instrments-2008)。标准CAN包的结构如图1所示:

图1标准CAN包(Texas Instrments-2008)

除了标准长度,还有一个拥有一个29-bit的标志域的扩展版本,这个标志域使包中柷包含更多种类的优先顺序。

个体节点决定是否使用能够标志消息类型的标志符(CAN ID)来处理包。

2.2 CAN漏洞

几个潜在的漏洞存在于CAN的实现中。接收节点决定是否根据CAN ID来处理包,网络中其他的节点也可以这样做。因此,个体节点不能识别某一个包是不是专门发送给它的,也不知道这个包来自于哪个节点。这就导致另一种漏洞,也就是CAN不能识别节点是否是合法的。CAN没有任何的对节点授权的方式。因此,攻击者可以轻易地在中继节点上伪造消息。这些方面导致了CAN不仅不安全,还不能对威胁进行识别。

2.3 CAN攻击概况

攻击者如果要渗透汽车的网络有非常多的方法。最直接的就是通过On-Board Diagnostics (OBD-II)端口。它提供了对CAN总线的直接访问,并被用于对包进行诊断(Checkoway-2011)。然而,如果攻击者连接到了这个端口,他们就会被当作这个网络中的一个节点。这使得他们可以收集和传输消息。一种替代方法是在端口上安装某些远程设备,远程对汽车进行攻击。

最近汽车生产的趋势转向了汽车的无线通信。像GM’OnStar, Toyota’s SafetyConnect, 和BMW’s BMW Assist (Checkoway-2011)这些系统让车辆能够通过宽带服务进行通信。这些系统提供了新的路径供攻击者与车辆进行交互。

3. 目标

我们研究的目的是针对CAN安全机制的缺乏,生成一些功能性的解决方案。CAN漏洞的关键点是协议不能识别消息的来源。

为了研究解决方案,我们提出了一个能够兼容现在CAN模型的方法。我们设计了一种机制,使CAN能识别ECUs是本地车辆硬件的一部分(合法的ECUs)还是外部攻击者的(恶意的ECUs)。此外,我们打算创造一个系统,这个系统通过创建一个能够区分某一帧和下一帧,以此使CAN能够防御重放攻击。

为了实现这一目标,我们创建了一个系统,通过在现有的CAN帧后面添加一个域,使CAN能够识别入侵者,并防御重放攻击。这一机制会在这一域中产生新的值。这些值中的其中一个就是根据帧中数据以及一个秘密值产生的hash值。这个hash值可以作为一个授权值,用来识别消息是来源于,在车辆生产过程中的哪些组件。另一个值作为一个时间戳,使系统能够识别重放攻击。

目前使用的CAN帧不能兼容我们提出的额外的域。因此,我们决定使用新CAN FD (CAN with Flexible Data-Rate)。这一协议对CAN协议进行了一系列改进,包括更灵活的数据传输率和一个扩展数据域。鉴于传统的CAN格式只允许8字节的最大数据长度,CAN FD协议可以支持长达64字节的消息(Hartwich-2012)。此外,CAN FD协议有更灵活的数据传输率(从CAN的1 mbps到高达15 mbps),这使得这个系统可以兼容增长的消息长度。

4.系统描述

这一系统的核心概念就是使用一个小的加密哈希函数。加密哈希函数是一种单向散列的函数,因为它不能根据hash值还原出原始的数据。此外,加密哈希函数还可以避免冲突,也就是说,两个不同的消息不可能产生相同的hash值。

hash函数在消息的保护授权和发送者的验证方面都有应用。因为从hash值还原出原文是非常困难的,用于产生hash值的原文内容不会受到修改,因为随后它们就会被验证。

4.1 CAN标识号

这一系统的第一步源于车辆的生产。在汽车的生产过程中,每辆车都会有一个指定的值。这个值是唯一的,并被用于车辆的识别(与车辆识别码(VIN)相似)。汽车中的每一个ECU将会有一个CAN标识号(CIN),这个CIN会被硬编码进他们的系统中。这个值作为一个索引用于对ECU进行访问。在维修的时候,通过从生产商那获取原始CIN,这个CIN可以被改变。

4.2 受保护的帧的结构

这一机制会产生一个被称之为CAN消息认证器(CAN Message Authenticator (CMA))新的域,它包含hash值和用于产生哈希值的时间信息。在一个合法的ECU收到一个帧的时候,CMA将被用于验证消息的合法性。这一新的帧位于当前数据帧的末尾。

4.3 准备消息帧

在车辆运行的时候,ECU在发送消息的时候会执行一个hash算法。我们设计了两种不同的方法来获取这一hash值,如图2所示,随着最后一帧被发送,这一hash值会被包含在新域中。

使用通用时钟

第一个版本的运行是基于这一假设,CAN系统访问了通用时钟,这一通用时钟可以被系统中的所有元素监控。这一时钟机制本身就像一个单调递增的计数值一样简单,并且可以被所有ECU访问。起始消息( initial message (IM))会和时间值(timing value (TV))以及CIN连接(II)在一起,然后被传给hash函数(H),这一hash函数会根据这三个元素生成一个值。然后将这一值与TV连接产生CMA。通过在消息发送时将当前时间包含进去,接收ECU能够访问CIN的前提下,能够重新产生hash值(验证授权)。加密哈希函数中的可以避免冲突,保证只有拥有CIN访问权的ECU能够产生这一哈希值。

图2 哈希模型

使用hash分割

第二个版本假设在没有通用时钟的前提下,每个ECU维持一个计数值(counter value (CV)),用于hash块的选择。消息和CIN首先被连接(II)到一块,并产生一个hash值(H)。然后将产生的hash值划分为更小的部分,根据CV选中这块小块中的一个。接着将简化的哈值和计数值连接到一起产生CMA。这个方法让我们能使用更小的值进行授权,提高空间利用率。

这两种方法中,帧都被广播到网络中的每个ECU中。为了避免不必要的hash值检查,ECU会首先检查CAN ID来决定这个消息是否与自己相关。如果一个ECU能够处理帧,它会首先从受保护的域中提取身份验证信息。通过使用消息,时间值,和车辆生产时硬编码进去的CIN,消息能够被验证。如果hash值匹配上了,消息就被认为是合法的,并处理消息。如果没匹配上,就抛弃这个消息。

5. 系统的优点

正如前面所提及的,目前的CAN系统没有提供机制来保障通信的安全。在分析完CAN的弱点后,我们总结认为系统最基本的弱点是不能识别入侵者。新系统提供的保护是最重要的目的,但不是这个系统唯一的优点。

5.1 防御入侵

在这个系统中,通过单向hash函数和每辆车唯一的CIN的使用,CAN可以识别入侵者。为了使消息被接收,传过去的hash值必须和接收时验证的hash值相同。因为hash函数强大的雪崩效应,在没有CIN的前提下,难以通过计算产生这个hash值。此外,CIN不能被轻易地从产生的hash值中提取出来。这使得恶意ECU难以伪装成一个合法ECU。

5.2 防御重放攻击

在两个版本的hash函数中,发送的单个帧包含一个值代表那个帧的时间戳。这个值也被包含在hash值中,也就意味着,帧的身份验证直接依赖于这个值。除此之外,这个值也可以被临时的保留起来,用于验证对应ID下一个到达的包。如果多次收到相同的哈希值,也就表示相同的时间值被多次的发送,也就表示这有可能是一个重放攻击。

6. 局限/要求

尽管这一方法能够实现使得不安全的CAN协议变得安全,但它也不是没有局限。为了使这一方案可行,需要在当前的系统中添加额外的部分。当然,它的使用也会给这个系统施加一些限制,可能使其难以在实时系统中应用。使系统使用的第一个附加要求是CIN。当前车辆的生产过程中没有添加这一个值。因为太多的安全机制都要使用到这个值,需要保证它的唯一性。这一值的唯一性也需要由生产商来保证。除了CIN的产生之外,ECU也需要在没有额外的资源的前提下执行hash函数。

也许最本质的额外要求是两个版本中的hash函数都需要的时间戳的值。版本1中的hash函数要求ECU能够访问一些通用时间结构。目前CAN中没有通用的同步时钟值。因此,要采用版本1需要把这个硬件添加进车辆中。此外,当前时间也需要能被所有ECU在任意时间访问。依靠实现这一任务的方法,因为额外的通信量,网络总线的负担也许会过重。

如果采用版本2,ECU会需要有一个方法来维持计算值,同时也要保证与之相关的最近的hash值能被收到(比较到来的帧以识别重放攻击)。这一附加功能也会进一步加重当前有限的ECU硬件的资源负担,致使这一方法不可行。

7. 总结

考虑到将CAN作为注重安全的实时系统来使用,利用CAN的漏洞来入侵和攻击是不可接受的。我们论文中提出的这个系统是专为改善这一不安全的系统的安全性而设计的。这一方法使CAN能够区分帧是来自于自己的系统中还是入侵者。它也包含时间方面的机制使它能防御重放攻击。

我们相信这个系统将会是当前的CAN模型之外一个可行方案。它使得系统可以识别威胁,消息是来自内部还是外部,防御攻击。我们希望这样一个系统会在将来的车辆中实现,以使漏洞最终被修补。

致谢

这篇论文是在Grant No. DUE-1241675下国家自然科学基金的一部分。

参考文献

略(译者注:请参看原论文)

原文链接:http://ewic.bcs.org/upload/pdf/ewic_icscsr2015_paper15.pdf

本文由 看雪翻译小组 梦野间 翻译



推荐阅读
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 在2022年,随着信息化时代的发展,手机市场上出现了越来越多的机型选择。如何挑选一部适合自己的手机成为了许多人的困扰。本文提供了一些配置及性价比较高的手机推荐,并总结了选择手机时需要考虑的因素,如性能、屏幕素质、拍照水平、充电续航、颜值质感等。不同人的需求不同,因此在预算范围内找到适合自己的手机才是最重要的。通过本文的指南和技巧,希望能够帮助读者节省选购手机的时间。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 网卡工作原理及网络知识分享
    本文介绍了网卡的工作原理,包括CSMA/CD、ARP欺骗等网络知识。网卡是负责整台计算机的网络通信,没有它,计算机将成为信息孤岛。文章通过一个对话的形式,生动形象地讲述了网卡的工作原理,并介绍了集线器Hub时代的网络构成。对于想学习网络知识的读者来说,本文是一篇不错的参考资料。 ... [详细]
author-avatar
真个田_707
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有