网络安全 (cyber security) - 数据安全
扫描二维码
随时随地手机看文章
相信在德国工作和学习的小伙伴对于买卖二手车一点都不陌生,不管是买车还是卖车,甚至是修车,土耳其兄弟的身影都无处不在。为了对土耳其兄弟的表示我崇高的敬意,以下简称土耳兄。
土耳兄可以变腐朽为神奇,明明一台快报废的车,整吧整吧就能卖个好价钱。
修改里程表是土耳兄众多技能包中最简单的一个,也是各大主机厂深恶痛绝的眼中钉,每年因为里程问题的保养纠纷不计其数。很多按公里数leasing的汽车,也时常在被归还4S店以后发现曾经修改过里程数。因此,汽车如何保护自身数据不被篡改,在新的车联网大潮下,是对皮糙肉厚主机厂新的考验,更是对我土耳兄的傲慢挑衅。
汽车数据保护,当然不止为了保护里程数,往高了讲,也是对专利技术,用户隐私的保护。今天我们就从嵌入式底层好好的扒一扒,到底数据保护是怎么搞得。
首先需要基础知识铺垫一下:
数据储存在汽车控制器里,最基本要求是掉电(熄火)的时候不会丢失,通常的两种储存方式是单片机内部的Flash和外接的EEPROM芯片。
EEPROM的历史比较悠久,利用范围也广,上一个世纪的汽车控制器,基本上都会在板子上通过SPI通讯协议挂一个EEPROM的外接芯片。由于外接芯片耗钱又费力,新一代的处理器在单片机内部集成了Flash模块。Flash相比EEPROM的主要缺点是同一个地址读写次数有限,导致生命周期变短,所以要通过软件来实现用Flash模拟EEPROM。也就是我们常说的模拟EEPROM技术。此处不展开了,对储存技术感兴趣的小伙伴可以自行谷歌或者留言找我要代码。简单来说,对当代汽车数据的保护就是对控制器Flash储存结构的保护和对读写Flash操作的保护。
这篇主要讲储存数据的几种保护方式吧(Data flash),还是拿我土耳哥最关心的里程表数据举例。
首先第一层防护,对flash读写操作设置密码,就好像你登录银行账号一样,输对了密码才让你读和写。这是一层简单的防护。需要注意的是,密码要放好,不要写手上。
第二层可以通过加密对读写内容进行保护:把当前的里程数加密,以密文的形式储存到flash里,例如汽车领域常用的通过AES128 ECB加密,显示的时候再反加密。比如:
在现在市场上的单片机里,基本都有一个HSM的模块,这个外设就是为了security 而生的。不仅可以用硬件单元帮你快速进行加密算法的运算,还可以帮你储存好你的密钥等其他功能。可以理解为单片机的保险柜。
下面先简单的说一下保险柜HSM关于密钥的储存
用户可以把自己的密钥存到保险箱里,这个保险箱还有一个或者多个自己的私钥,是在单片机生产时随机自动分配的。用户看不到,单片机厂商说他们也看不到。在用户储存自己密钥的时候,保险柜会自动用自己的密钥再加一层锁。另外私钥的储存根据单片机厂商自己的设置还可以有不同的属性。比如,私钥更新的计数器,读写私钥的权限设置,私钥用途的设置,阻止debugger读写等操作。
通过对主单片机不同功能模块代码的权限设置以及debugger访问权限的设置,想要从HSM拿到密钥的可能性是非常低的。
当然了,当土耳哥认识到困难重重之后,发现HSM如此神奇,决定亲自提刀上阵,不用软件的办法了,直接来硬的,通过酸蚀,刻蚀等化学方法,找到存储结构接口,上电,外接控制器发fetch指令....等一系列操作,最终还是把密钥找到了,自此过上了无忧无虑多儿多女的生活。硬件手段就不在本文的讨论范畴之中了。如果你对暴力硬件感兴趣,可以参考
https://duo.com/labs/research/microcontroller-firmware-recovery-using-invasive-analysis#section12
PS: 当然了,市面上广泛流行修改里程表的方法可能跟上述保护措施无关,有可能只是违规利用了汽车通讯和诊断协议UDS的某些服务。比如:
0x3D | 0x7D | Write Memory By Address |