查看原文
其他

硬核解析:如何在嵌入式 Linux 和物联网中建立信任根

安胜ANSCEN 2022-11-02


近年来,物联网、5G和嵌入式设备逐渐成为每个人日常生活的重要组成部分,安全性也开始成为人们关注的重点。在过去几年,嵌入式设备一直是黑客攻击的目标。黑客的泛滥和对基本基础设施的威胁导致了对关键软件安全性的监管,包含SBOM审核等。



物联网(loT)和嵌入式需要的不仅是SBOM



 

从研发人员和运营商的角度来看,确保嵌入式设备上的软件供应链(SSC)的安全,监管和SBOM(软件材料清单)只是其中的一小部分。更重要的是要知道:


1、正在运行和部署的内容是否来自可信来源,并保证攻击面最小化。


2、一旦出现恶意软件入侵,必须减轻、隔离并防止对网络造成任何进一步的损害。


什么是SBOM?

软件物料清单(Software Bill of Materials) 是由实体物品的物料清单(BOM)概念发展而来,罗列了软件组件、相关组件的信息以及它们之间的供应链关系,能够为软件生产人员、购买者和运营者提供软件开发过程中所采用的所有“原材料”相关信息及其供应链上下游依赖关系。


它的本质是一种数据文件,与漏洞管理系统联动,不仅能够帮助企业实现从核心供应商到分支供应商的任务分解,还能够及时发现产品中的安全漏洞以及攻击风险,在攻击发生时,快速发现问题并定位责任。


识别物理网(loT)设备中的安全漏洞





从用户角度


尽管物联网和嵌入式设备在日常生活中很常见,但用户对于大部分设备的了解仅停留在使用阶段。比如路由器的使用,用户可能只有在网络故障的时候才会想起,很多人甚至从未登录过路由器后台。


在这些设备上,除了未更改的默认登的安全问题之外,当系统报告严重漏洞时,用户可能都不知道该如何进行修补或更新设备。



从运营商角度


物联网安全的主要问题之一是,很多运营商急于将产品推向市场,而降低需要内置到更新过程和设备本身的安全措施的优先级。


对于物联网设备而言,快速响应和更新固件和软件的能力至关重要,但这也只是物联网设备安全解决方案的一部分,同时还需要确保更新的内容来自经过验证和信任的来源也很重要。



模块化与单片系统对比及部署更新




与云开发不同,嵌入式软件开发并没有采用很多新颖的高速策略,造成这种情况的主要原因之一是缺乏对不可变基础设施(如容器)的采用。虽然有一些解决方案可以运行 Docker 容器,但它们都需要大量的资源来运行和支持官方的 Docker 引擎容器管理器。 


就目前而言,物联网设备还是主要由低规格设备组成。智能灯泡,恒温器和其他此类物联网设备在极其有限的资源上运行,其中一些设备至少具有 32MB 的 NAND、NOR 或 EMMC 存储空间以及至少 64MB 的 RAM。


大多数嵌入式设备具有单片架构,这使得它们易于出错且更新耗时。要快速更新和修补设备,需要模块化架构。容器提供了这种能力,但设备上的容器管理器或引擎必须足够小且高效,才能在低规格环境中运行。

▲ 嵌入式 Linux 系统:单片与模块化



容器化主机操作系统自动更新




嵌入式第一容器管理器的另一个优势是它能够将主机操作系统容器化,并在用户空间中与任何应用程序一起运行容器。基于容器的模块化架构意味着可以单独部署更新,并在必要时使用DevOps世界中采用的最新自动化部署管道和其他敏捷策略。 

▲ Docker 引擎与最小容器运行时



嵌入式系统中的信任根




物联网设备需要不断满足消费者的需求,也就需要让软件和固件持续部署或者更新,同时不损害最终用户和提供商之间的安全和隐私。虽然能够更新设备本身很重要,但更重要的是有一个信任框架。


签名和验证技术目前已经应用于单片嵌入式固件,但通过模块化软件交付推动嵌入式体系结构现代化意味着还需要将经过验证的签名验证概念提升到更高的复杂度。



信任的根源从哪里开始




信任的基础从ROM代码和硬件上的引导加载程序开始,由制造商提供。引导加载程序公钥的存储位置取决于板的实现,但通常实现某种片上系统(SOC)安全性,例如一次性可编程存储器 (OTP) 或可信平台模块 (TPM) 硬件。一旦ROM确认了引导加载程序签名,引导加载程序就会启动。然后,通过签名验证每个进程,并在该点信任该进程在系统中运行。这是在大多数 Linux 系统(桌面或嵌入式系统)上实现的标准信任根。 


▲ 嵌入式 Linux 堆栈中的安全启动过程



嵌入式状态修订和信任




嵌入式系统不仅会启动和验证从ROM到Linux堆栈的构建以及在用户区运行的应用程序,而且在更新失败的情况下,系统还必须能够回滚到良好状态进行修订并在启动时进行验证。除了此基本功能外,任何嵌入式签名和验证系统还必须足够轻巧,以便在低规格嵌入式环境中顺利运行。


在信任链中,在 init 命名空间中运行的容器运行时管理器首先由引导加载程序进行验证。任何状态修订都内置到容器中,然后在设备上运行之前进行签名、部署和验证。部署前的额外步骤还可能包括在自动管道中对容器本身进行漏洞扫描。

▲ 用于签名和验证容器化更新的开发人员工作流



用于验证嵌入式更新和修订的JWT标准




JWT(Json Web Token)是为了在网络应用环境间传递声明而执行的一种基于 Json 的开放标准。JWT 的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。


容器将在可信环境中运行之前由设备根据设备上的任意数量的工件(取决于完整性设置)进行签名、部署和验证。在出现部署问题的情况下,还可以通过选择之前验证的“良好配置”远程回滚系统,该配置将被部署以代替不良部署。


▲ 验证嵌入式 Linux 中的容器化应用


验证和信任是减少恶意软件和其他外部不良行为者攻击面的一种重要方法,从而找到一种方法来关闭设备队列,保证物联网(LoT)和嵌入式设备安全。



END


资料来源:https://securityboulevard.com/2022/04/establishing-a-root-of-trust-in-embedded-linux-and-iot/




往期精彩回顾
01

账号密码靠不住?该如何给身份认证安全上好“锁”?

02物联网安全 | 警惕!企业易忽略的安全漏洞之一03数据安全 | 大数据时代,如何有效预防数据泄露?04数据安全 | 躲在暗处的黑客如何窃取你的信用卡



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

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