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

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

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

image.png
(图片来自 Wikipedia 词条 Caerlaverock Castle : https://en.wikipedia.org/wiki...\_Castle)

  在前面的文章中,我们介绍了中文中同为"安全"的两个概念 Security 和  Safety 在嵌入式系统中的区别——Safety 通常可以理解为“功能安全”而 Security 则可以理解为“信息安全”——为了和大家耳熟能详的“网络信息安全”加以区别,在后面的讨论中除非做了特殊说明,“信息安全”就特指“嵌入式信息安全”。

  那么,嵌入式信息安全的本质是什么呢?

嵌入式信息安全(Security)的本质是隔离(Isolation)

值得强调的是,这里的隔离并不区分软件(Software Security)、硬件(Hardware Security)和团队相关的各类流程(Team / Design Flow Security)。换句话说,用“隔离(Isolation)”的方式去实现“信息安全(Security)”,在嵌入式系统中无论放到任何语境都是成立的——或者说是放之四海而皆准的公理。

提到隔离,我们立即就面临以下几个问题:

  • 把谁从谁那里隔离开来?(防谁)
  • 要隔离的东西是什么?(保护什么)
  • 用什么办法进行隔离?(怎么隔离)

别小看这三个问题,他们可是信息安全系统设计的关键。正确回答了这三个问题,是防止博士卖驴下笔千言离题万里的最有效方法。

“等下,等下……”,有人坐不住了:“隔离什么的我不管,信息安全不应该是加密解密,握手鉴权这一类的东西么?”

“对啊,对啊,什么DES,3DES,什么AES128已经不安全应该用AES256之类的话题么?”又有人附和道:“MD5啊,RSA啊之类的算法和 Isolation 有什么关系呢?难道是把所有内容都加密了来实现隔离么?”

所以说,你们有些同志,图样图森破,就知道些个加密解密的算法,以为所谓的信息安全就是加个密,保护个密钥,让人看不懂就行了。这都是非常片面的。打个比方,加解密算法、密钥管理、鉴权之类的东西相对信息安全就是砖头和房子的关系——造房子要有需求(房屋的用途是什么,给谁住,有什么需求,预算是多少?设计寿命是多少?房屋所在地又怎样的自然和地质灾害?需要抗击到什么成都?)、目标规划(多少预算,多久造出来,找谁来造,如何施工?如何验收?验收标准是什么)、还要有理论指导——最终通过工程实践,使用各类建筑材料造出符合要求的房子来。你看看,要不是你们打岔,浪费这么多口舌,结果什么有用的东西都没有说。要完整的搞清楚这里面的关系,我会在随后的文章中详细介绍,这里我们先从更本质的东西开始理解信息安全。

  • 防谁和保护什么

这两个问题通常是一起考虑的,具体讲究太多,三言两语讲不完,我就讲个大家身边的故事:

小李是个硬件工程师,自学软件开发小有所成,经常接一些私活赚点烧烤钱。这次,他从相熟的私人小老板那里接了一个开发的活,具体什么硬件,什么功能并不重要,但值得说明的是,小李很自豪里面的一个软件算法,这个算法可以极大的提高产品的参数,用较小的硬件成本实现那些“昂贵高级”货才能做到的参数。为了保护这个算法,小李又额外花了大量心思对产品进行了加密,什么“对固件升级的通信尽心加密啦”,“用状态机混淆算法逻辑啦”,什么“固件完整性检测啦”,“多重密钥保护啦”……总之,网上能找到的算法他都用了,虽然花了不少时间,私人小老板一分钱也不多给,但是他还是很满意的。

然而……产品推出不到两周,市场上就出现了一模一样的克隆产品。对方通过暴力开盖的方法复制出来固件,然后用同样的固件进行了批量的生产。小老板很不满,找到了小李,责问他是不是嫌钱给的不够,又把设计卖给了别人。小李很委屈,他一再强调,自己已经对产品做了加密,别人绝对没法获得自己的算法——听到这里,小老板冷冷一笑,“没人感兴趣你的算法,人家感兴趣的只是如何克隆整个产品,然后量产就行了!——你浪费那么多时间精力,却没有对关键的UID做绑定,真不知道怎么说你才好。”

真是老话说得好:长得再屌,一砖撂倒。加密再好,克隆拉倒。

这个故事告诉我们,很多时候,如果你实现的隔离手段本质上只是关起门来防贼,但如果别人连你房子一起挖走了……所以,针对不同的攻击手段,要设计不同的隔离方式,不能只想到空间上的隔离,时间上的隔离也不能放过。

  • 怎么隔离

有位电影里的长者说过,你看那世间纷争,不过“名、利”二字,看透了……看透了就会明白,两手抓两手都要硬才是真正的人生赢家。有位象牙塔里的长者说过,你看那时间纷繁,不过“时、空”二字,看透了——就会明白,做信息安全,时间隔离(Temporal Isolation)和空间隔离(Spatial Isolation)两手抓两手都要硬!

 空间隔离

空间隔离好理解,比如一个32bit的4G地址空间,你通过硬件把它分成一小段一小段的(大小任意),然后每一段都可以拥有不同的访问权限(No-Access / Read-Only / Full Access)。这就是空间隔离。但时间隔离怎么理解呢?难道是一对穿越时空的恋人,都到达过同一个空间,却一直错过?你真这么理解,其实也不错,不过你确信你是程序猿,而不是程序媛?要想正确的理解这个问题,我们首先从两类不同资源的空间隔离谈起。

非共享资源的隔离

非共享资源,是指在多任务系统中,由某一个任务“独享”的资源。对于这类资源,非常简单,在任务切换时将当前任务的资源配置写入到专用的存储器隔离外设(例如Cortex-M中的Memory Protection Unit,简称MPU)就可以了。这样,每个任务都可以将自己独享的资源与其它任务隔离开。

共享资源的隔离

共享资源,顾名思义,就是在多个任务间共享的资源,比如,共享的各类外设(UART,SPI之类)。对共享资源来说,要想实现隔离,单纯从静态空间角度出发是做不到的,因为隔离本质上就是一种“排他”——我的东西别人都不准用——那么又如何做到多任务之间进行“共享”呢?很自然的,“分时复用”的概念就被引入进来。简单说就是在时间轴上,把时间像地址空间那样分段,然后把不同的段落划分给不同的任务,这样,对每个任务来说,在自己的时间片内,这个资源就是独享的。

分时复用的概念并不是什么新鲜玩意,那么它跟隔离有什么关系呢?严格来说,一毛钱关系都没有。单纯的分时复用并没有起到任何隔离的作用——在分时复用的情况下,所谓的隔离,应该体现在,前后彼此相邻的两个任务在切换资源使用权后,后来者应该无法获取前者的残留信息——否则就是任务的信息泄露了。要实现这个功能,我们需要引入现场的概念:

  • 当一个任务获得资源的使用权时,要回复自己的现场,以继续之前的工作
  • 当一个任务被迫要放弃使用权时,不光要保护自己的现场,以便下次能继续,还要毁掉现在的现场,以防止泄露信息给资源的其它使用者

这一过程并不难理解,但值得强调的是,对共享资源来说,每个任务都有了一个针对该资源的“现场”。现场保存在哪里?还不是属于任务的某段存储器里?所以说,容易推导出:

共享资源的隔离,就是每个任务对资源专属现场(context)的空间隔离。

更进一步的,上述这种给每个任务都配备一个“现场”,从而将一个公共资源在多个任务之间共享的方式叫“虚拟化(Virtualisation)”——也就是

用一个物理的资源,用分时复用的方式给每个任务都虚拟一个资源出来。

虚拟化,就是实现“时间隔离”的核心方式。

好吧,饶了半天,终于绕回来了。我们来简单总结下:

  • 非共享的资源——我们使用存储器管理外设,简单的用空间隔离就行了
  • 共享资源——我们使用虚拟化技术,通过空间隔离“现场”的方式,实现资源在时间上的隔离(防止信息在任务切换时发生泄露)
说了这么多,我们来解释一个有趣的事情:

流水线(pipeline)其实是一个共享资源——多个任务共享同一个流水线,通过分时复用的方式来执行任务代码。针对流水线的“现场”,我们习惯上叫任务上下文。从这个意义上说,OS不过是对流水线进行了虚拟化,使得每个任务执行时都能暂时的独占流水线。那么问题来了,你注意到没有,如果说前后台系统是简单的多任务,那么普通MCU在进行中断处理时,虽然有出入栈操作,但并没有“抹掉”前一个任务留下的“现场残骸”!——也就是说,任务信息在中断处理的过程中是会泄露的!!在原理上,普通MCU就是无法可靠实现“时间隔离”!

ARMv8-M TrustZone架构做了一件什么事情呢?就是,当程序在Secure模式下运行,突然来了Non-Secure的中断,除了普通现场保护,硬件还会帮你把Secure运行的现象抹掉!——也就是在架构上彻底通过硬件的方法实现了可靠的“时间隔离”,这是老的ARMv7-M和ARMv-6M架构无法通过硬件做到的——这就是为啥从原理上ARMv8-M的TrustZone比老的架构更安全。

在理解了隔离(Isolation)的基本概念后,时值ARM发布了PSA架构(Platform Security Architecture),下一篇文章,我们将介绍实践中,PSA是如何玩转隔离的。

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

专栏推荐文章

大白话说嵌入式安全(1)
什么是嵌入式系统(上)
什么是嵌入式系统(中)
什么是嵌入式(下)—— “重力”和“沉淀”

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