首页 > 其他分享 >保护OBD的方法

保护OBD的方法

时间:2024-04-15 18:13:47浏览次数:9  
标签:公钥 OEM OBD 保护 车辆 模块 方法 设备

背景

在SAE国际期刊看到了一篇关于保护OBD-II端口的方法,全名是A Balanced Approach for
Securing the OBD-II Port,故学习记录。
链接:https://go.sae.org/rs/525-RCG-129/images/CAV_Preview_Issue.pdf

OBD

最初OBD是用于维修店与发动机控制装置连接以执行诊断并收集排放相关信息。然而现在却成为了一种攻击者远程注入命令的手段,用于影响车辆制动、转向或者加速。SAE J1979 于 1991 年首次发布前,谁会想到将不安全的蜂窝调制解调器连接到车辆 OBD 端口来控制车辆操作呢?
本文和 SAE J2186 都讨论了 OBD 安全性的各个方面。然而,SAE J2186 的重点是保护单个电子控制单元(ECU)的完整性。即 J2186可用于防止设备更改特定 ECU 内的固件或校准参数,除非 OBD 端口处的设备可以向ECU验证为有权更改该ECU的设备。
一般来说 CAN 总线是不对 CAN 上的消息执行源验证的。因此,能够将消息注入 OBD 端口的攻击者就可以伪装成其他 ECU 发送消息,如图,如果OBD安全模块不存在,OBD 连接设备将能够将消息放置在 CAN 总线上,这些消息通常由 ECU_1.x 或 ECU_2.x 发送。因此,攻击者可以通过 OBD 完成这些 ECU 通常执行的操作,如:

  • 使车灯闪烁
  • 打开车门
  • 打开/关闭空调
  • 激活防抱死制动功能
  • 转动前轮
  • 更改仪表盘的速度显示
    image

OBD设备

低成本(低于 20 美元)无线 OBD 设备已上市销售。这些设备可以通过蜂窝、Wi-Fi 或蓝牙提供访问。一种型号的设备描述做出了这样的声明:
易于使用:将设备插入汽车的 OBD2 端口,打开汽车,在 Android 手机或平板电脑上启用蓝牙,搜索“OBDII”并与其配对(PIN 1234),通过简单的设置运行下载应用程序并等待直到成功连接您汽车的ECU,黑客现在知道该型号所有设备的配对代码。这些设备中可能还潜藏着哪些其他安全漏洞?

技术方案

可以结合公钥加密访问控制机制,为 OBD 端口提供经过身份验证的访问控制功能。

公钥加密

公钥加密使用两个数学上相关的密钥。必须保护私钥免遭未经授权的访问。它通常存储在某种形式的受保护硬件中,并且只能由硬件内的加密引擎访问。因此,密码引擎使用私钥来签名和加密/解密数据,但无法从密码引擎中提取密钥。
数字签名是创建者使用私钥对数据进行数字签名的操作。签名实际上是一串bits,只能由持有私钥的实体创建。然后,持有相应公钥的任何人都可以使用该公钥执行加密操作,并确认相关数据确实是由持有私钥的实体签名的。举例来说,如果 OEM 希望对固件文件进行签名,以便任何车辆都可以验证该固件是否来自 OEM,则 OEM 将:

  1. 创建包含固件的文件。
  2. 计算固件的哈希函数。
  3. 使用OEM私钥对哈希结果进行加密,从而创建数字签名。
  4. 将原始固件文件和加密的哈希结果一起发送到任何要使用该固件的设备

接收实体通过可信渠道获得 OEM 公钥(例如在制造时加载到车辆中),然后执行以下操作:

  1. 计算固件的哈希。
  2. 使用OEM公钥解密随固件分发的加密哈希结果。
  3. 将本地计算的哈希结果与步骤二中解密的哈希结果比较。

如果解密的哈希值与本地计算的哈希值匹配,则车辆知道固件来自 OEM。如果解密的散列与本地计算的散列不匹配,则车辆拒绝固件文件。在此处描述的 OBD 安全解决方案的上下文中,“固件文件”指的是安全策略数据,OBD安全模块将这些数据应用到连接到OBD端口的设备发送的消息中。稍后会详细介绍这一点。
公钥加密的第二个功能是在OBD安全模块和连接到OBD端口的设备之间 执行密钥交换。 密钥交换的目的是向 OBD 验证 OBD 设备,安全模块并建立安全会话以在它们之间交换数据。(浏览器与网上银行也是类似的数据交换),OBD设备中包含的公钥与私钥的使用方式如下:
OBD 设备(例如诊断工具)将其公钥传递给 OBD 安全模块。该交换使用 X.509 证书结构。该结构提供可用于携带识别 OBD 设备类型的数据的字段(例如 Acme Tool Company、OBD 扫描仪、型号 100)。 当X.509 证书与密钥交换结合使用时:

  1. 向车辆证明车辆已连接到经 OEM 认证的设备。
  2. 验证OBD设备的身份。
  3. 将 OBD 设备绑定到 OEM 分配的访问权限。

密钥交换

密钥交换(密钥协商)执行方式如图二所示:

  1. OBD 设备向车辆内的 OBD 安全模块发送 OBD 设备 X.509 证书和设备制造商的 X.509 证书。此设备制造商 X.509 证书已由 OEM 使用 OEM 私钥进行签名。 (认证将在下面的认证流程小节中讨论。)
  2. OBD 安全模块验证 X.509 证书上的数字签名,确认该证书是由 OEM 颁发的(可能是间接颁发的)。 OBD 安全模块“遍历证书链”以建立信任。首先,OBD安全模块使用OEM公钥(车辆被制造时就被嵌入到安全模块中)来验证设备制造商 X.509 证书上的数字签名。然后,OBD 安全模块从新验证的证书中提取设备制造商公钥。 OBD安全模块重复证书验证过程,这次使用设备制造商的公钥来验证绑定到OBD设备的证书。然后,车辆 OBD 安全模块从新验证的 OBD 设备 X.509 证书中提取 OBD 设备公钥。
  3. OBD 安全模块生成一个随机数,该随机数将用作对称加密算法(例如高级加密标准 (AES))的密钥。 OBD 安全模块保护该随机数的机密性。
  4. OBD安全模块使用OBD设备的公钥对随机数进行加密。公钥加密确保只有持有与从 X.509 证书中提取的公钥相对应的私钥的 OBD 设备才能解密消息并恢复原始随机数。然后,包含加密随机数的消息通过 OBD 端口发送到 OBD 设备。
  5. OBD设备使用其私钥解密随机数并恢复随机数的原始明文版本。现在OBD安全模块和OBD设备都具有共享的秘密随机数。没有其他实体拥有此号码,因为只有具有正确私钥的 OBD 设备才能执行解密。
  6. OBD 安全模块和 OBD 设备在密钥派生过程中使用共享密钥来创建共享对称密钥,该密钥将用于加密和验证通过 OBD 端口发送的消息。

image

基于角色的访问控制OBD安全模块

负责对流经 OBD 端口的流量实施访问控制策略。该策略可能会限制 OBD 设备被授权发送到车辆中的消息类型(如果有)。该策略还可以限制允许从车辆流向 OBD 设备的 CAN 消息。
一辆典型的车辆可能有 50 - 100 个 ECU,能够发送数千种类型的 CAN 消息。 OEM 可以通过逐步浏览整个消息列表并单独选择每种消息类型的访问权限来为每个 OBD 设备创建访问控制策略。

  • Null:设备无法读取或写入消息类型。
  • 只读:设备能够读取(侦听)消息类型,但不能写入消息类型。
  • 写入:允许设备将消息写入车辆。通常,写入将仅限于指定仲裁 ID 列表和相关消息内容的白名单,例如对于 ISO 15765 诊断消息,需要在访问控制列表中指定允许的服务标识符 (SID) 和参数标识符 (PID) 的白名单
    当针对OBD设备供应商制造的每个OBD设备类型的每个品牌、型号和年份重复该访问策略的规范时,该访问策略的规范成为一项繁重的任务。基于角色的访问控制 (RBAC) 允许 OEM 创建用于分配访问权限的结构化模型,可以有效地分配对 OBD 设备的访问权限。

系统级实体

  • OBD 安全模块:该模块位于 OBD 端口和车辆 CAN 总线之间(如图 1 所示),负责加强安全性。它可以嵌入到 OBD 端口中,也可以是 OBD 和 CAN 总线之间的内联模块,或者如果车辆使用网关桥接 CAN 总线,则可以在网关设备内实现。 OBD 安全模块对 OBD 连接设备进行身份验证,然后应用 OEM 指定的相应安全策略。
  • OEM:OEM 负责制定由 OBD 安全模块执行的策略。 OEM 提供给 ODB 设备制造商其设备的安全策略。 OEM 还充当其制造的车辆的公钥认证机构 (CA)。 OEM持有私钥并将相应的公钥加载到每个OBD安全模块中。 OEM 使用其私钥对 OBD 设备制造商的证书进行数字签名。
  • OBD设备制造商:设备制造商从 OEM 获得 X.509 证书,并充当其生产的设备的认证机构。他们还为制造的每个设备生成私钥/公钥对。他们使用私钥来签署与其产品绑定的证书。这些证书包含制造设备的公钥以及 OEM 批准的产品安全策略。
  • OBD设备和证书:将要使用的设备插入 OBD 端口的插头包含该设备独有的公钥/私钥对。公钥还包含在由设备制造商签名的设备证书中。该设备使用可信存储(例如安全微控制器)来保护其私钥。
  • 策略更改授权令牌:OEM 创建令牌并对其进行数字签名。该令牌从 OEM 流向 OBD 设备制造商,进入 OBD 设备,最后进入 OBD 安全模块。 OBD安全模块能够验证OEM应用的数字签名。

认证流程

OEM 控制将与 OEM 车辆交互的 OBD 设备的认证流程。 OEM 用于认证制造商及其设备的方法不属于本文的讨论范围。预计其中将包含制造商关于其设备执行其预期功能所需的访问权限的声明。 OEM 通常会执行风险评估,其中考虑 OBD 设备的可信度以及给车辆带来安全风险的可能性。在风险分析结束时,OEM 和 OBD 设备制造商就车辆将应用于设备的安全策略达成一致。本小节的其余部分描述将 OEM 指定的安全策略绑定到 OBD 设备的过程。
公钥材料和相应的公钥基础设施允许车辆验证 OEM 指定的应用于 OBD 设备的安全策略,概述如下,如图 3 所示。
image

  1. OEM 创建公钥/私钥对。私钥在硬件安全模块中受到保护,并由 OEM 进行备份。
  2. OBD 设备制造商创建公钥/私钥对,并使用证书签名请求协议(例如证书管理协议 (CMP))将公钥与制造商标识数据一起发送给 OEM。
  3. OEM 使用 OEM 认证机构私钥对包含 OBD 设备制造商身份和公钥的证书(例如 X.509v3)进行数字签名。
  4. OEM 创建策略更改授权令牌,其中包括对策略的更改以及与此授权令牌关联的设备组的制造商、品牌和型号。授权令牌使用 OEM 私钥进行签名并发送给 OBD 设备制造商。
  5. 为 OBD 设备创建公钥/私钥对。
  6. OBD 设备制造商使用 OBD 设备制造商私钥为 OBD 设备签署包含设备标识数据(制造商、品牌和型号)和设备公钥的证书。 OBD 设备制造商还将 OBD 设备制造商证书的副本加载到 OBD 设备中。
  7. 在上述过程结束时,OBD 设备包含:
  • 设备制造商证书 - 由 OEM 签署
  • 设备证书 - 由设备制造商签署
  • 特定于 OBD 设备类型(制造商、型号)的策略更改授权令牌 - 由 OEM 签名

在车辆制造过程中,OEM 将 OEM 公钥加载到 OBD 安全模块中。

案例

下面的示例策略说明了 OBD 安全模块中安全策略的应用。
Safety:假设 CAN 消息 ID 5,内容为 0000 0000 0000 1111,指示制动系统释放车轮缸内的压力(这通常是为了排出液压制动系统中的空气)。 OBD 安全模块的默认安全策略将阻止消息 ID = 5、内容 0000 0000 0000 1111 通过 OBD 端口注入(该策略可能会阻止其他的消息)。这将防止受篡改的 OBD 设备(例如带有调制解调器的加密狗)禁用车辆的刹车。经 OEM 认证的、供维修技术人员用来对制动器进行排气的工具将具有授权令牌,该令牌会关闭此策略,从而允许维修技术人员对制动器进行排气。如果在技术人员维修车辆后将另一个设备(例如受损的保险加密狗)插入 OBD 端口,则安全策略将阻止受损的加密狗向 OBD 发出放气制动命令。仅当连接到授权令牌的设备插入 OBD 端口并使用从 OBD 安全模块随机生成的加密密钥时,授权令牌才有效。
Security:车辆上的无钥匙进入系统能够发送 CAN 总线消息来解锁车门。然而,受篡改的 OBD 设备也可能会发送解锁命令,从而允许小偷进入车辆。因此,车辆安全模块中的安全策略将阻止通过 OBD 端口发送到车辆的“解锁车门”消息,除非 OBD 设备提供了由 OEM 签名的策略更改授权令牌。一般来说,OBD 安全模块策略应该阻止来自 OBD 设备的消息,除非该设备具有打开该策略的策略更改授权令牌。 OBD 设备可能请求的多种类型的策略更改中的一些包括:

  • 允许设备限制车辆的速度。这可以用于车队管理应用程序。
  • 允许设备在 ECU 上加载新固件。
  • 允许设备读取车辆的 GPS 坐标,以便 OBD 设备可以提供车辆跟踪
  • 允许设备远程启动车辆的发动机
  • 允许设备发送命令以更改车辆的排放控制设置

OEM 负责 OBD 安全模块中的策略规范以及策略更改授权令牌中使用的格式。授权令牌可以采用多种形式,具体取决于 OBD 安全模块内用于指定策略的结构。授权令牌中的典型数据字段包括:

  • 适用车辆:2016年以后生产的车辆可允许装置变更政策,但2016年之前生产的车辆不得变更。该设备只能获得 OEM 许可才能在某些型号上使用,因此授权令牌将识别许可车辆组。
  • 策略/规则标识符:根据 OEM 如何管理 OBD 安全模块中的策略/规则,令牌可以指定要修改或关闭的规则的编号,例如“关闭规则 3。”
  • 允许的消息 ID 列表:大多数防火墙和 OBD 安全模块使用“拒绝,除非明确允许”模型运行。因此,如果策略未明确允许某个消息 ID,则该消息 ID 将被阻止。 “允许的消息ID”字段可以指定允许通过OBD端口传递的ID。
  • 特定消息 ID/值对:一条消息中通常有多个参数。例如同一消息中的一个字节可以控制节气门位置,而同一消息中的另一个字节控制输送的燃油量。默认策略可以允许消息 ID x,但仅允许一组特定的参数。例如只允许字节指定 10 到 100 之间的燃料量。该策略可以允许授权设备更改这些参数限制。

获得特权认证

当经过认证的 OBD 设备插入车辆时,OBD 安全模块和 OBD 设备将执行上述公钥小节和图 2 中描述的协议交换。OBD 安全模块内的此协议交换和加密处理完成以下任务:

  • 允许 OBD 安全模块确认连接到OBD端口的设备的身份。
  • 允许 OBD 安全模块确认策略更改授权令牌已绑定到设备。
  • 允许 OBD 安全模块确认策略更改授权令牌已获得车辆 OEM 的授权。
  • 允许 OBD 安全模块和OBD设备建立加密保护的通信通道。

实施成本

认证机构

策略更改授权令牌无需与其他 OEM 或任何政府实体的车辆进行互操作。因此,每个 OEM 都可以自由地充当自己车辆的认证机构。这消除了与第三方认证机构相关的成本。

认证成本

认证成本预计大致对应于与设备相关的风险级别。这里,风险由授权 CAN 消息(命令)的范围以及导致 OBD 设备发送数据所需的访问类型驱动。
只读取 OBD 端口上可查看的数据但从不将数据写入该端口的设备本质上没有特权,因此不需要任何身份验证证明。 OBD 安全模块中实施的策略将阻止设备向车辆发送任何未经授权的消息。
仅请求诊断故障代码的设备将需要很少的认证或不需要认证。通常,OBD 安全模块中的 OEM 默认策略将允许任何设备发出良性请求。
仅执行有限功能的设备(例如使用一组明确定义的 CAN 消息限制车辆速度)但无权操纵安全关键系统(转向、制动),则需要最少的审查来进行认证。
执行安全相关诊断(操作 ABS)或触发与物理安全相关的事件(解锁车门)的设备需要更严格的认证工作,以确保该设备不会轻易被误用。如果此类设备没有外部访问权限(例如,该设备仅由技术人员按下按钮控制),则风险较低,并且需要最少的认证。相比之下,无线连接到维修店网络或蜂窝网络的类似 OBD 设备将需要更严格的认证工作。

密钥存储

一个问题是密钥材料的保护,此处要求 OEM 在硬件安全模块中保护其私钥材料。 OEM 所需的硬件安全模块数量很少,因此成本不是问题。
OBD 安全模块仅存储公钥材料,因此必须保护公钥的完整性。 OBD安全模块不需要硬件来存储私钥。因此,OEM 可以自由使用多个竞争对手提供的一系列微控制器。
连接到 OBD 端口的设备将需要存储私钥,因此必须具有可信存储。幸运的是,新的微控制器采用了可信存储技术,可以将加密密钥材料存储在低成本硬件中,以防止篡改,从而提高对整个公钥环境的信任。该可信存储中的密钥材料可由本地加密引擎使用,但无法提取密钥。
最重要的是,保护密钥的成本并不是一个重要问题。

OBD 安全模块

许多 OEM 已在其总线架构中包含某种类型的网关模块,以路由往返于 OBD 端口和 CAN 总线的流量。这里描述的安全功能可以在具有适度处理和存储储备的网关模块内实现。

不增加安全性的潜在成本

目前大约有 400 万辆车辆配备了包含蜂窝调制解调器的 OBD 设备(例如保险公司提供的用于监控驾驶行为的设备)。其中大多数都包含安全漏洞。假设目标 OEM 有 100,000 辆汽车使用不安全的蜂窝适配器。
攻击者能对车主做什么?

  • 通过阻止车辆操作来扣押车辆以勒索赎金。
  • 试图通过干扰加速、制动或转向来使车辆陷入事故。

企业面临的代价是什么?

  • 集体诉讼
  • 政府罚款
  • 强制召回
  • 品牌形象受损,车辆价值降低

技术选择

加密算法

公钥算法可以是RSA或椭圆曲线。

加密密钥长度

各种公钥对(OEM、OBD 设备和制造商)可以使用适合感知威胁的不同密钥长度。

证书结构

证书可以是 X.509 v3 证书、IEEE 1609.2 [4] 或专有格式。但是,有大量可用于 X.509 证书的成熟软件。

公钥基础设施 (PKI)

PKI 可以是一个简单的结构,其中 OEM 充当其自己的信任根。 (又名根证书颁发机构)。该系统可以使用更大、更完整的 PKI,其中信任根高于 OEM。这种类型的结构可以允许一个 OBD 设备被与多个 OEM 相关的 OBD 安全模块识别。

密钥交换协议

存在许多不同的协议来建立 OBD安全模块和OBD设备之间的安全通信, TLS 协议提供了一个示例

策略更改及授权令牌分发

可以通过将授权令牌嵌入到 OBD 设备中来分发授权令牌,使得 OBD 设备成为传输机制。授权令牌可以嵌入到 OBD 安全模块固件中,并在授权的 OBD 设备对自身进行身份验证时激活。授权令牌可以由车辆或 OBD 设备实时获取。

授权令牌结构

策略覆盖的结构可以完全替代默认的 OBD 安全模块策略。或者,该结构可以简单地识别对默认策略的更改。

总结

本文提出了一种方法,为业界提供了 OBD 端口一刀切安全策略的替代方案。
这种方法为原始设备制造商(OEMs)提供了灵活性,可以使用加密保护的授权令牌来在现场更改 OBD 安全模块的安全和/或安全策略,该令牌与 OBD 连接设备密切相关。
这种相同的策略变更概念可以应用于通过任何 TCU 接口(蜂窝网络、Wi-Fi、蓝牙甚至 USB)访问车辆的设备或服务。试图访问车辆的设备或服务将需要与车辆内的访问控制功能进行加密握手。请求访问的设备或服务将向车辆内的访问控制功能传递其包含识别数据和策略变更授权数据的 X.509 证书。然后,车辆可以强制执行 OEM 专为请求访问的设备或服务建立的访问权限。

标签:公钥,OEM,OBD,保护,车辆,模块,方法,设备
From: https://www.cnblogs.com/rookie-llj/p/18136568

相关文章

  • java中接口多个实现类,如何指定实现类,根据子类类型选择实现方法
    问题背景在Java代码中,经常会遇到一个接口有多个实现的情况。而这些实现类的参数又是不同的子类,这时候我们该如何选择正确的实现方法呢?解决方案我们可以通过判断参数的子类类型来选择正确的实现方法。具体实现可以使用Java中的instanceof关键字,它可以判断一个对象是否是某个类的......
  • codegen的使用方法及常见参数配置
    前言在进行API开发时,我们通常需要定义API的接口规范和文档,以方便其他开发者调用和使用。Swagger是一款非常流行的API文档生成工具,它可以帮助我们快速生成API接口文档,并提供了许多便捷的功能。本文将介绍如何使用swagger-codegen来生成API接口文档。简介swagger-codegen是Swagge......
  • vue:日期的相关方法
    1、获取当天日期,格式:yyyy-MM-ddgetCurrentDate(n){vardd=newDate();if(n){dd.setDate(dd.getDate()-n);}varyear=dd.getFullYear();varmonth=dd.getMonth()+1<10?"0"+(dd.getMonth......
  • 导入自定义板块的方法
         ......
  • C# 异或校验两种方法
    12publicbyteGetXor(byte[]data)3{4byteCheckCode=0;5intlen=data.Length;6for(inti=0;i<len;i++)7{8CheckCode^=data[i];9......
  • arm-linux-gcc 交叉编译工具链使用方法
    参考文献:[野火]嵌入式Linux基础与应用开发实战指南安装交叉编译工具链有如下三种方式:直接在Ubuntu下使用APT包管理工具下载安装。自行下载第三方制作好的工具链。使用crosstool-ng根据需要自己制作。在开发中比较多的开发者对所有程序都直接用arm-linux-gnueabihf-gc......
  • Kafka消息可视化工具:Offset Explorer(原名kafka Tool)的使用方法【转】
    OffsetExplorer(以前称为KafkaTool)是一个用于管理和使用ApacheKafka®集群的GUI应用程序。它提供了一个直观的界面,允许用户快速查看Kafka集群中的对象以及集群主题中存储的消息。它包含面向开发人员和管理员的功能。一些主要功能包括:快速查看所有Kafka集群,包括其代理,主题和......
  • 迅雷自动续费关闭方法2则
    没忍住,0.01元开了七天的svip。当然,开了之后的第一件事,就是把自动续费关掉。有以下两个方法:方法一:微信上取消(支付宝同理)1.找到【微信支付】中的这条消息,点进去;2.点进后,是类似这个界面,关闭自动扣费服务即可。3.关闭后,会收到如下提示 二、迅雷支付中心取消1.进入并登录迅......
  • 一种融合指代消解序列标注方法在中文人名识别上的应用(下)
    二、使用了BERT模型和指代消解算法:加入BERT语言预处理模型,获取到高质量动态词向量。融入指代消解算法,根据指代词找出符合要求的子串/短语。【2】融入指代消解算法,根据指代词找出符合要求的子串/短语指代消解算法如图2所示,简单来说,就是考虑文档中子串/短语以及学习子......
  • Mac允许安装任何来源软件方法
     热烈欢迎,请直接点击!!!进入博主AppStore主页,下载使用各个作品!!!注:博主将坚持每月上线一个新app!! 1、请到打开终端,输入命令行:sudospctl--master-disable输入命令后回车,系统会要求输入电脑的开机密码,输入密码(输入时密码不会显示出来)后回车。2、打开系统偏好设置,找到“安......