查看原文
其他

大白话说嵌入式安全(1)

GorgonMeducer 傻孩子 裸机思维 2022-10-14

  在一个PPT满天飞的世界里,有些现象还是蛮有趣的。比如也许你的女朋友没有听说过什么叫做嵌入式系统,但她一定知道什么是物联网;就算她并不知道“互联网无隐私”,也一定知道“物联网最关键的是安全”——正所谓故事听得多了,爱因斯坦的司机都可以讲相对论了。那么问题来了:


作为专业人士的你,物联网的安全是什么,你能说的清楚么?


好了,好了,别装逼了,知道你啥都不懂,如果不服,请掠过这篇文章。下面,我们首先从几个常见的误区开始,慢慢为你展开:


误区一:安全和安全

  英文里面有两个词语都可以对应中文的“安全”,分别是Security和Safety。首先,我要明确的强调一下:


Security 和 Safety 不是同义词,他们在很多领域有着完全不同的定义。


别说普通人了,很多工程专家也未必能讲得清楚他们的区别——原因很简单,不同的工业标准对 Security 和 Safety(其实主要是Safety)有着完全不同的定义——手中捧着的教科书不同,你自然不能责怪工程师们对安全做出不同的理解。

这是不是说,离开具体的领域,Security 和 Safety 对我们普通人来说就是一个糊涂账了呢?也不是。脱离具体领域的教条,Security 和 Safety 有一些精神值得我们去领会下:


  • Security 基本上等效于 “信息安全”,Safety 基本上等效于 “功能/设施安全”

  • Security 主要讨论的是 如何保证信息不被别人窃取。


生活中的 Security 就是如何防隔壁老王。


  • Safety 主要讨论的是 在极端的情况下 如何保证 设备或者设施 不会出乱子、不会造成损伤或者损害;甚至仍然能提供最低限度的功能。举几个例子:

    • 有人触电时,家里自动断路器会切断电源(过流保护)

    • 温度过低时,为了保护锂电池的寿命,某些负责任的电子设备会禁止你充电或者放电。比如,某phone冬天冷了没法充电,要被子里捂热了才行(低温保护)

    • 某些工业级芯片,如果系统电压过低,会自动将复位信号拉低以防止系统跑飞(BOD)

  • Security 防止不怀好意的人为攻击;Safety 防止极端环境变量导致的损害

  • 有时候,Safety和Security 是同时需要满足的,以汽车为例,传统的汽车强调Safety——如何避免交通事故,如何减小人员伤亡,所谓的Security估计也就和车钥匙有关,顶多防止二手车商改里程表;到了“PPT”时代,汽车已然能够上网,如果不重视 Security,那么一旦黑客控制了汽车,交通事故,人员伤亡都很难避免——Safety也无从谈起。

  • 有时候,在 Safety 面前,Security 是可以有所妥协的。


这就好比,你已经被匪徒绑在老虎凳上了,还有什么保险柜密码不可以说的?


在一个嵌入式系统中(或者说在物联网系统中)Security 和 Safety 分别是什么呢?他们之间的关系是怎样的呢?


  • 在嵌入式系统中,Security 涉及面那可不是今天这篇文章可以说的完的。


  • 通信有通信的信息安全,也就是大家熟悉的 1)各种通信内容的加密解密、以及2)通信双方的握手和鉴权(类似,证明你妈是你妈,你是你妈的孩子)。


  • 软件有软件的信息安全,比如,你写的代码如何保证不被别人读取出去;你通讯用的密钥如何安全的保存,你与人合作写的库如何保证不被别人未经授权的使用等等。


  • 系统有系统的安全,比如,如何保证FLASH的内容不被别人直接开盖读取出去,如何保证某个硬件IP的算法逻辑(时序)被黑客获取,如何保证不同的任务之间相互无法未经授权的读取彼此的内容等等。



这些内容我们后面会慢慢讲。


  • Safety 在单纯的嵌入式系统中,可以被理解为 基础设施功能安全。什么意思呢?就是,对于极端的温度、电压、电流、充满噪音的时钟,系统都不应该跑飞,甚至还要提供一个最小限度的功能。

  • Security 无论如何本质上说都只是一个功能逻辑。功能逻辑作用的正常发挥建立在硬件能够正常工作的基础之上。黑客的思路往往是,既然一个正常工作的 Security 逻辑我不好攻破,那我们就攻击实现 Security 逻辑的硬件基础设施——如果基础设施的Safety不够强壮,容易受到破坏,俗语说,皮之不存毛将焉附,构建在其之上的 Security 也就无法正常工作,从而暴露出更多可攻击的机会。正因为如此,我们说:

  • 嵌入式系统中,Security 是构建在 Safety 基础之上的。离开基础设施的Safety,Security 就是纸老虎——就是因为这个原因,我们容易看到,很多攻击 Security 的方法,实际上是首先攻击 Safety。讨论Security的很多文章也在所难免地会讨论很多Safety的内容。这就容易让读者产生错觉,仿佛Safety 和 Security 在嵌入式系统中是一回事。现在你知道了,其实并不是这样,这就好比“釜底抽薪并不说明柴火和“煮东西” 是一回事”。


攻击复位电路,曾经让某知名厂商的Cortex-M3单片机的破解“立等可取”——这是典型的通过攻击硬件基础设施来攻击上层Security的案例。其实,你是否知道,软件也有基础设施,攻击软件基础设施也是黑客的常见手法。

栈是C语言的基础设施,无论是函数调用,参数传递,还是局部变量分配都离不开栈,因此就有各类针对栈的攻击,比如经典的stack smash,code injection等等;与之类似,堆、C标准库也都是软件的基础设施。

原理上,很多Security的攻防其实都是针对软硬件基础设施的攻防展开的——釜底抽薪,简单有效——然而,这只是 Security 冰山一角。


如果你想知道 Security 具体是怎么回事?在理论模型和工程实践上,Security 究竟是怎么玩的?欢迎关注我的公众号,我们下次再聊。


—————以上正文结束—————


如果你喜欢我的思维,欢迎订阅 裸机思维


版权归 裸机思维(傻孩子图书工作室旗下公众号)所有,

所有内容原创,严禁任何形式的转载,欢迎分享/转发

(转载和分享的区别是:转载将文章内容提取出来,在别的媒体上发布出来;分享的仍然是以 裸机思维 公众号为主体,将文章传播出去)


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存