根据马斯洛需求理论,当满足了温饱之后,人们就会开始谋求更高层次的需求,物联网发展到现在,很多公司也摆脱了低层次的“出货量”的需求,开始寻求更高层次的溢价。
安全,作为下一个层次的重要支撑点,开始成为物联网新宠。相应的,芯片商开始适应这种需求,推出了适应性产品 ,Arm Cortex-M23 和 M33 内核就是代表。
安全芯片可能并不“安全”
彼时,很多文章着重介绍以上两款内核的安全性。例如:支持 Trustzone-M,安全启动等等。去年刚刚推出的时候,笔者由于忙于毕业设计,也就是简单看了看,没有过多关注,直到前几天发现了一篇博文” Nuvoton M2351 MKROM (ArmV8-M TrustZone)” 。
图源 | chipsecurity.org
作者通过错误注入攻击,成功攻破新唐 M23 核心的 AES(Advanced Encryption Standard,高级加密标准)加密。在笔者印象中,这是 CC EAL 评级认证体系中定义的安全芯片绝对不允许出现的情况。
在另一篇论文” On-Device Power Analysis Across Hardware Security Domains” 中,作者攻击了 MICROCHIP 的 SAM L11(首款量产的 M23 核芯片),作者不但使用侧信道攻击攻破了 AES。
此外,作者还玩了一个“骚操作”:用芯片自带的模数转换器获得功耗数据,之后做侧信道攻击,攻破了芯片的 AES,这也和我头脑中的安全芯片的概念大相径庭。
因此,对于 M23 和 M33 介绍文章中铺天盖地的“安全”,并不是笔者心里的安全。当然,这也有可能给应用工程师带来困惑,并不是应用工程师心里所定义的安全,于是有了这篇文章。
工程师眼里的安全“三把斧”
这里先简单介绍一下应用工程师眼里的安全的概念,相信大家之后会更好的区分三种安全的概念。
先说一下软件安全(由于防御的攻击主要来自于软件威胁,就姑且以此称之)。虽说是软件安全,但是还是要硬件支持一部分的,比如 TrustZone 对总线的调整和安全启动的硬件根签名。他们的目的是针对软件上的一些攻击进行防御,比如保护指纹信息(TrustZone)或者只让芯片加载受信任的系统(安全启动)。
如果说软件攻击还比较温柔,硬件攻击就显得暴力和玄学了许多。硬件攻击要么是通过使用示波器监视芯片的功耗波动来获取秘钥(侧信道攻击);要么是干扰芯片的运行使得芯片跳过一些指令,以达到越权的攻击效果,比如电源错误注入绕过芯片的固件保护;
要么是去除芯片的封装,用微探针或激光直接针对 die(去除外壳封装的硅片)进行操作,修改芯片的逻辑,读取数据。对于这种“旁门”攻击,防御手段一般是对电源噪音加一些干扰,或者直接进行特殊的版图设计,增减物理防御的功能。
物理攻击可以攻破软件安全的一些防御,除了上文中攻破 AES 秘钥之外,著名硬件安全公司 riscure 也在他们的官网公开了很多实用硬件攻击攻破安全启动的文章和文件 。
另外不得不提的是功能安全,功能安全在英语中是”safety“,区别于信息安全类的“security”。一般指的是在苛刻环境中,例如车辆甚至宇宙轨道中,芯片可以正常工作,不会跑飞。比如说你买了一辆互联网汽车,汽车的气囊和主动刹车就属于功能安全,而保证你的汽车不会被网络攻击者控制属于信息安全。
做一个不太恰当懂得比喻,功能安全是淬火钢化玻璃,破了之后小的碎片没有尖锐棱角,不易伤人;软件安全是防弹玻璃,特别结实;硬件安全是超级防炮弹玻璃,可以拿炮轰。当然,功能安全有时候可能更贵,比如宇航标准的验证费用就比硬件安全的 CC 认证贵多了。
相对与绝对的迷思
硬件安全是软件安全的升级版本,TrustZone 技术也可以说是为了降低 inSE(片内硬件安全单元)的成本而出现的。
当然,笔者也不认为例如 stm32 一类的非安全芯片无法抵御物理攻击是一种漏洞,毕竟物理攻击的成本和对攻击者水平的要求都很高,安全溢价应该让有安全需求的人去承担,正如我们都知道防弹玻璃结实但是我们不可能把所有的玻璃都换成防弹的。
综上所述,开发应用的时候,芯片所提供的安全防护级别,以及您能接受多大的成本上升,这需要您仔细的评估。
如果需要固件不受篡改,芯片仅仅需要支持安全启动,如果固件中的算法是您公司安身立命的根本,绝对不允许泄漏,就请使用 CC EAL4+甚至 5+认证的产品并正确开发安全组件。笔者也希望厂商的宣传中,可以明确产品对安全的定义,减少应用工程师选型的难度。
最后说一句,没有绝对的安全,即便是超级防炮弹玻璃,也可能有缝隙,也有可能被轰开,TrustZon 和硬件安全芯片也出现过漏洞,一些产品的安全组件软硬件协调也出现过问题。安全从来不是硬件或软件单独的事情,整体的安全才是真正的安全。