傻孩子(GorgonMeducer) · 2020年06月05日

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

作者:GorgonMeducer 傻孩子
首发:裸机思维  

在一个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 究竟是怎么玩的?欢迎关注我的公众号,我们下次再聊。

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

专栏推荐文章
什么是嵌入式系统(上)
什么是嵌入式系统(中)
什么是嵌入式(下)—— “重力”和“沉淀”

如果你喜欢我的思维,欢迎订阅裸机思维
版权归裸机思维(傻孩子图书工作室旗下公众号)所有,
所有内容原创,严禁任何形式的转载。
推荐阅读
关注数
1480
内容数
118
探讨嵌入式系统开发的相关思维、方法、技巧。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息