智能汽车网络与数据安全新媒体
以往偷车很多是用假冒遥控无线车钥的方法,此前报导过一种破车接入假冒CAN节点的方法解除汽车防盗器与开门的方法。中国汽车正在走出国门,这也不得不防,所以本文介绍窃贼的手段与防御方法。这也是想搞车用芯片厂商的机会。
2022年4月研究汽车加密的专家IAN的丰田RAV4混动车夜间保险杠和头灯被损,电缆拉脱,车还在,2022年7月,车被偷走,隔不多久,邻居的车被偷走。IAN查了4月丰田的云上记录,有Hybrid system告警,Sonar告警等DTC记录,怀疑并非设备异常而是CAN通信出了问题,然后在暗网中查到有各种黑客设备的卖家,其中有可攻击RAV4的设备,然后他买了设备并邀请朋友CAN专家Tindell一起作研究。
现在车的头灯功能很多,有一个CAN接口。所以最简单的接入CAN总线的方法是通过破拆把假冒节点接入这个地方的CAN总线。从而假冒遥控钥匙节点,发送“钥匙有效”信息,禁用防盗器,打开车门。
这个黑客设备是外形为JBL的蓝牙播放器,内部喇叭拆了,加了一个树脂封装的组件。进一步拆开后辨识出是由PIC18F芯片,CAN收发器和一些电路元件构成的CAN节点。由于PIC18F的软件逆向工程需要更多资源而无法进行,只能从引线外特性作示波器观察,然后加以分析。
根据观察,JBL上按钮按下时会有TX=0读回RX=1(D2R)新的干扰CAN总线的方法。用这种方法可以对抗原来用报错帧(6个D)破坏假冒帧的信息安全设计,例如NXP的带黑白名单的收发器遇到黑名单上的ID时可发报错帧,现在报错帧也失效了。
他们把它称为CAN injection 攻击。偷车贼在头灯处接入假冒节点后,先等待系统唤醒,然后设备以约每秒20次发帧,按下按钮会使发送节点出错报错,报错又出错,循环后进入BUS OFF状态退出,接收节点循环出错只会进入error pasive状态,仍可接收。最后黑客设备的假冒帧成功被门节点接收,网桥成功转发到引擎控制器停止防盗器功能,然后贼拆掉工具接回头灯把车开走。
从原理上讲,这种攻击方法对所有车型都有效,虽然黑客工具价格很高(€5000),比起车来乃是“投资”,贼用起来十分方便,无需任何知识,所以这是十分紧急的事件。
所幸的是,帧加密是对抗这类攻击的有效办法,使黑客工具无法提攻有效的数据。
黑客攻击的目标有各种各样,通过信息干预恶化车的性能达到直接伤害(谋杀)或隐性伤害(例如勒索),另一种是窃密,现在又加了防盗。
窃密的初级目的是获得报文的物理意义,为进一步实施攻击打基础。长远目标有车控制系统信号因果关系的逆向工程获取知识产权;获取车故障信号;获得车的统计可靠性商业情报;对个人用车信息的非法收集,如行车加速、转向等以获得路径地理位置等跟踪信息。因此明文传送的CAN帧太容易被识别出数据,需要加密。
本文的加密设计目的仅用于对抗窃密、握手,不是为了实现完整性、真实性、不可否认性的证据的目的。
现有的加密方法研究在密钥分配、传送上过于复杂,要增加信息安全的通信带宽,直接与CAN的功能安全要求的带宽相竞争,须知CAN的带宽已经用到接近饱和,例如一般保证CAN通信收发正常的总线负载在40%左右,而在 TESLA MODEL 3 中破解的结果表明已达50%,所以常规的加密方法很难推广。
有些加密设计采用了不同节点有不同的密钥对话方法,这使同一信息只能以点到点方式传送,对共享信息在带宽和时间同步、信号完整性都是不利的。
另一方面,加密、解密占用太多MCU资源与时间,可能不得不用更高性能的MCU,从而提高了ECU制造成本。
到目前为止,我读到的唯一声称加密不占CAN带宽的设计来自以色列的公司KARAMBA:”SafeCAN 是汽车行业的首个网络安全解决方案,能够在不增加网络开销的情况下实现车内网络认证,它可以在不给汽车内部通信带来过重负担的情况下实现对CAN总线通信的保护和认证。”但是没有其它的细节介绍。
用启动前对节点程序部分作校验和检查,所有修改程序为基础的攻击可以被阻挡,以下专门讨论只读窃密攻击的解决方案。
CAN加密不是一家要做的事,在OEM与Supplier合作过程中,加密算法使用总有授权的关系,是不能保证不泄露到与其中一方有私下关系的黑客的,重点是密钥防暴力破解的保护而不是具体的加密算法。这为设计高效的加密方法创造了条件。
在有程序加密保护的系统中,源节点的报文在所有合法接收节点中都会解码为明文。对Tbox或OBD来的OTA文件会在传送过程各阶段以不同方法加密-解密,最后送达目标节点,系统内的节点信息在合法的Tbox、网关、或OBD接收节点接收后变为明文送到车外。其中一段是CAN传送的加密、解密。非法的Tbox、网关、或OBD接收节点必须无法解码,防止窃密。
本文的加密方法是全系统信息安全纵深防御的一部分,对经过各个通信通道(TELNET、GPS、WIFI、USB)连到CAN总线的ECU,都需要OEM的组装过程,依靠程序不被修改有前端防御:即无密钥不能随意修改程序,不能读到明文,也不能修改加密方法。
对接在OBD端口的偷听节点,以及非法的Tbox、网关、偷听接收时,它们是只读,无法检验密文,本文的方案是针对这种场合的。它们每个节点有CAN防火墙(另有设计,不同于已有各种方案),试图暴力破解密钥时,会产生过多的报错帧,它将被防火墙作为DOS攻击而阻断。
对于CAN INJECTION类攻击,虽然不能阻断bus off造成的DOS,但是密文不被破解便可阻断内容假冒,从而阻断盗车。
这种方法在不增加CAN总线全系统负载、每帧一码的条件下实现加/解密。需要在原CAN控制器中添加一些环节,扩充了CRC检验功能,因此是不兼容的,实施时可定义为原CAN IP新增的选项:信息安全Option,等待全系统ECU的CAN IP都升级到带信息安全Option后,通过OTA完成全系统信息安全赋能。
1、原理
CAN的CRC多项式为15阶BCH多项式,它的Code Word 长为127位,除去CRC域15位,头部39位,数据域64位,还有9位可以传达密码的信息,密钥由OEM设置,可每车不同。当数据为56位或更少时,可以有17位以上传达密码信息,这里仅考虑极限工况所以取9位。密钥信息用于正常节点休眠-启动,或BUS OFF-ACTIVE 状态改变时密钥的同步,本来无错时可以不传送的。
这9位可加在SOF之前或DATAfield 之后,或者把这9位对应为SOF开始计算时的CRC种子,或专门设计逻辑电路在DATAfield后插入这9位的CRC计算。无论何种实现方法,均可保证CRC检错的理论上的HD=6的能力。添加这9位之后,只要密钥错和信道错的个数小于5就会被发现。正常情况下密钥没有错,不会影响CAN的功能安全要求。
黑客暴力破解时,密钥值的错超过5个可能产生CRC漏检,此时黑客的节点会收下密文,也不能猜出加密的规则(第18节);不正确的密钥仍然不能持续地收下后来的帧;
2、本文以SOF头部加9位密码,这9位可对应为CRC域中表达加密信息的方法加以解释,发送帧以尾字T表示,接收帧以尾字R表示。
将CRCT分为2部分,CRC1T代表发送的(帧头部+数据)(即DT)在CRC seed=0时生成的校验码,即原来CAN CRC信道校验计算的结果;2)CRC2T代表发送方SOF前9位(KeyT)在DT全为0及CRC seed=0时产生的校验码;二部分叠加后CRCT=CRC1T+CRC2T在DT后传送。
接收方要在收到接收的帧头部+数据的DR后计算出CRC1R,即原来CAN CRC信道校验计算的结果,叠加自己的KeyR+DT=0后生成CRC2R,有CRCR=CRC1R+CRC2R,比较收到的CRCT和生成的CRCR可以同时检查2种错:信道有错时计算出的CRC1T<>CRC1R;密钥错时CRC1T<>CRC2R。有错就报错,不再送到接收缓冲器,不能再读出。
3、密钥Key分为2部分 key=key1+key2
1)Key1为设置的与单独车号相关的密码,所以黑客的攻击效果只限于当前被攻击的车,它由OEM设置,保存在只写的安全区。例如输入密钥区为64位,这64位中由CAN控制使用的实际Key1为9-15位,64位输入区中哪几位实际被使用为Key1可以由OEM自己定义(OEM设置区对外不公开,程序不公开,黑客看不到),多余部分只是增加黑客暴力破解的难度;
2)Key2为伪随机滚动码,9位输出,每帧改变一次,以掩护Key1(key=key1+key2,相当于文献中的session key);一条总线或全车的CAN节点同一时间收发都用同一个key;
4、在CAN具体实施时,SOF后得到9位(key1+新的key2),(这代表CAN最长8字节数据域时增加9位,使CRC到极限的127bit的codeword),它可以由专设CRC输入控置电路内以Tq时钟产生出15位的CRCseed, 然后按正常位时间对全帧计算CRC,送出为CRCT,接收为CRCR。CRCR=CRCT时加密和信道都对,不等时有错。
5、接收节点检验通不过时发送CAN报错帧,这有可能导致DOS攻击;对经过各个通信通道(TELNET、GPS、WIFI、USB)连到CAN总线的ECU,由于有前道防御,黑客无法成功修改Key1,所以检验通不过是信道错误;对物理上直接接触到CAN总线,例如OBD接口的黑客可以修改Key1实施攻击,可以形成DOS,但是添加在OBD口的CAN防火墙阻止了DOS的持续;(这是一个系统性的防御窃密攻击的策略);
6、在OBD接口加自己的偷听ECU的黑客可以修改该ECU的Key1作暴力破解,此时防火墙阻断DOS攻击,会阻断OBD口若干时间,例如第1次发现DOS等待1秒后恢复通信,第2次等3秒后恢复通信……连续暴力破解时这个时间以指数方式大为增大,从而使暴力破解无法执行;
7、发送方A在准备写CAN发送寄存器前已用Key1把数据转为密文(这个程序有MCU内的安全保护),然后写入CAN发送缓冲器。加密只做一次,与通信无关,它不受是否本次立即能送出影响;
8、CAN IP核要作修改,预留CRC seed接口,而后再添加本模块。算出与当前Key1+Key2对应的CRC seed;
9、CAN初始化时由OEM的数据区将Key1被写入只写寄存器,运行时由CAN IP读取Key1调用,即使物理上直接接触到CAN总线的OBD接口的ECU为黑客掌控,他已知道应用CAN的所有知识,它也只能暴力破解。含Key1的输入长度取得较长(64位),使暴力破解困难(参见3,6);
10、总线上每次传送(见到SOF)后,无论成败,滚动码Key2修改一次,以每帧不同Key2的方式增加破解难度;因为同一内容密文可见到不同CRC域值(即Key的效果);
11、ECU上电时Key2的初值为系统预定的值,为保证一致性,应在节点启动先后顺序有专门考虑;
12、合法的ECU从休眠到唤醒,CAN从BUS OFF到BUS active时,Key2需要同步;在ECU投运前本节点停止报错功能,忽略本节点的接收错误状态,见到帧结束的连续11位(或6-10位)R,认为总线无报错时,它知道信道和密码是正确的,它假设自己也没有信道错,CRCR=CRCT,(此处省略xx字)可知道当时的Key2,即随机滚动码的当时状态,由此修改本节点的key2初值;这里前提是假设该节点此时没有信道错,为了排除有信道错的情况,可以在下一次接收时作一次检验性的接收,如果无错,就认可该随机码当前值,可以投运,允许报错。如果出错,仍停止报错功能而重启同步操作;
13、对于信道出错而报错的场合,因为key1不变,key2是同步的,所以总线系统可以不受干扰地继续收发;注意:key2仅在SOF出现后滚动一次,一帧内连续多次的报错key2不滚动;
14、对于物理上直接接触到CAN总线,例如OBD接口的黑客可以同样按12的推理方法知道CRC1T,但是它不知道当时的Key2,无法推出Key1;他必须同时破解key1和key2的规律;
15、ECU所有的加/解密程序放在受保护的ECU的Trust zone;
16、在本设计中因为密钥Key1保护较好,ECU的加密方法结构可以很简单,自定义的方法可能使黑客不能用现存的软硬件加密算法简化破解过程。简化加密算法的实现是降低芯片成本的因素之一。
现在已有芯片能提供各种加密组件,方便了使用,但是如果可以用更简单的软件算法(这需要技巧,类似MC3172多线程支持硬件,程序的保护)成本更低,货源选择的余地更大,产业链更牢固。
17、理论上讲明文与密文的差异越多越好,但从黑客利用明文的价值而言,只要有多个bit的变化,例如每8位有2次明文-密文的差异可能已足够。在CAN这类短消息应用中,未破解的密文代替明文没有什么价值。
18、OEM甚至可以定义自己的非传统加密理论的方法来代替Supplier的算法。例如密文分段局部倒序,局部不倒序等等。我想这种非线性变换要识别出模型是困难的。关于此观点,我的知识积累不够,需要专家来决定。
在CAN帧加密的算法要求上,9位密钥的算法组织可以有很多变化,例如2位a用于字节处理,3位b用于1字节内加密的bit位置(16字节表格),2位c用于加密的规则,d用于待定义:
a=0时按原字节先后加密
a=1时循环全部字节1次后加密
a=2时交换首尾2字节后加密
a=3时循环1次并交换1次后加密
b=0时加密bit0~7,8位
b=1时加密bit1~6,6位
b=2时加密bit2~5,4位
b=3时加密bit3~4,2位
b=4时加密bit0~6,7位
b=5时加密bit1~5,6位
b=6时加密bit2~6,5位
b=7时加密bit3~5,3位
c=0时对b区内位值取反
c=1时对b区内连续加密位取循环移1位
c=2时对b区内连续加密位取反后循环移1位
c=3时对b区内连续加密位首尾取倒序交换
d=0 加密执行
d=1 加密执行
D=2,3待定
19、对CAN INJECTION攻击工具,它可以不启动D2R干扰而读取被假冒帧,但它无法自己生成有效的加密后的假冒帧,它可以启动D2R干扰,跳过了CAN 防火墙直接形成发送节点BUS OFF,也就无法得到它要假冒的节点的的密文帧,但是它可以不启动D2R干扰读取有效的被假冒帧,然后启动D2R干扰,重放这个帧,即实施Replay攻击。这在一些简单的加密方案中,replay攻击会成功,而在本方案中,每送一帧便改变key2的实施将使replay攻击失效;
这是不增加总线负载的CAN帧加密方法,部份公开供参考。
对照TINDELL的公司的加密方法:
可以对硬件安全模块(HSM)进行软件仿真,Canis Labs 已经为 SHE HSM 实现了这一点:它需要大约 3K 字节的代码和 200 字节的 RAM,使用软件对受保护的 CAN 消息进行编码或解码大约需要 40 微秒的 CPU 时间,ECU 固件通常会有一些剩余内存,并且可能需要大约 0.05% 的总 CPU 时间。换句话说,将其集成到新固件中应该是直接的(实际上,Canis Labs 已经成功地与美国军方签订了一项研发合同,为军用车辆的 ECU 重新设计一个用于 CAN 的加密方案)。
- THE END -
专业社群
部分入群专家来自:
新势力车企:
特斯拉、合众新能源-哪吒、理想、极氪、小米、宾理汽车、极越、零跑汽车、阿维塔汽车、智己汽车、小鹏、岚图汽车蔚来、吉祥汽车、赛力斯......
外资传统主流车企代表:
大众中国、大众酷翼、奥迪汽车、宝马、福特、戴姆勒-奔驰、通用、保时捷、沃尔沃、现代汽车、日产汽车、捷豹路虎、斯堪尼亚......
内资传统主流车企:
吉利汽车、上汽乘用车、长城汽车、上汽大众、长安汽车、北京汽车、东风汽车、广汽、比亚迪、一汽集团、一汽解放、东风商用、上汽商用......
全球领先一级供应商:
博世、大陆集团、联合汽车电子、安波福、采埃孚、科世达、舍弗勒、霍尼韦尔、大疆、日立、哈曼、华为、百度、联想、联发科、普瑞均胜、德赛西威、蜂巢转向、均联智行、武汉光庭、星纪魅族、中车集团、赢彻科技、潍柴集团、地平线、紫光同芯、字节跳动、......
二级供应商(500+以上):
Upstream、ETAS、Synopsys、NXP、TUV、上海软件中心、Deloitte、奇安信、为辰信安、云驰未来、信大捷安、信长城、泽鹿安全、纽创信安、复旦微电子、天融信、奇虎360、中汽中心、中国汽研、上海汽检、软安科技、浙江大学......
人员占比
公司类型占比
精品活动推荐
因文章部分文字及图片涉及到引用,如有侵权,请及时联系17316577586,我们将删除内容以保证您的权益。