Each language version is independently generated for its own context, not a direct translation.
这篇论文讲述了一个名为 Skadi 的操作系统和 Bredi 的硬件芯片设计,它们联手解决了一个嵌入式设备(比如智能手表、路由器、工业控制器)面临的大难题:如何在不信任任何软件、甚至不信任硬件外设的情况下,保证设备绝对安全?
为了让你更容易理解,我们可以把整个系统想象成一座高度戒备的“智能城市”。
1. 现状:混乱的旧城市(传统嵌入式设备)
想象一下现在的嵌入式设备就像一座没有围墙、没有警察、也没有身份证的城市。
- 应用程序是市民,操作系统内核是市政府,外设(如网卡、DMA 控制器)是进城的各种卡车。
- 问题:如果一个小偷(恶意软件)混进了市政府(内核漏洞),或者一辆卡车(外设)突然发疯(硬件被黑),整个城市就完了。因为市政府拥有所有钥匙,卡车可以直接冲进任何民宅(内存)偷东西。
- 现有的防御:以前的防御手段就像给市政府配了个保镖(MMU 内存管理单元)。但这有个致命弱点:你必须完全信任市政府。如果市政府自己疯了,或者保镖被收买了,城市就毫无防备。而且,现有的方案通常只能防住“市民”或“卡车”中的一类,很难同时防住所有。
2. 新方案:北境城(Northcape)与“令牌”系统
这篇论文提出了一种全新的理念,叫 Northcape(北境),并在硬件上实现了它(Bredi),在软件上构建了城市(Skadi)。
核心思想:不再信任任何人,只信任“令牌”(Capability)。
想象一下,在这个新城市里:
- 没有“市政府”这个特权阶级:所有的软件模块(调度器、内存分配器、驱动程序)都是平等的“小社区”。
- 没有万能钥匙:没有任何人拥有打开所有门的钥匙。
- 令牌(Capability Token):这是唯一的通行证。
- 如果你想进“图书馆”(内存区域),你必须手里拿着图书馆发给你的特定令牌。
- 这个令牌不仅告诉你“能进”,还告诉你“能进哪一层”、“能读不能写”、“只能给谁用”。
- 关键点:这个令牌是硬件生成和验证的。如果你手里没有令牌,或者令牌过期了,哪怕你是市长(内核),硬件也会直接把你挡在门外。
3. 三大创新点(如何构建这座城)
A. 硬件层(Bredi):智能安检门
作者设计了一种新的芯片架构(Bredi),就像在城市的所有路口安装了智能安检门。
- 自动验证:任何软件或硬件(包括网卡、DMA)想要访问内存,都必须把“令牌”交给安检门。
- 防伪造:令牌里包含了一个随机的“暗号”(Nonce),就像防伪水印。黑客很难猜出这个暗号,所以伪造令牌几乎不可能。
- 隔离外设:即使是网卡这种“卡车”,如果它没有合法的令牌,它连内存的大门都摸不到,更别提搞破坏了。
B. 软件层(Skadi):原子化社区
基于 Zephyr 操作系统,作者把它打散成了一个个互不信任的小社区(Subsystems)。
- 没有大内核:传统的操作系统有一个巨大的“核心”,一旦核心被攻破,全盘皆输。Skadi 把核心拆碎了,变成了一个个小模块(调度器、内存分配器、驱动等)。
- 互相猜忌:每个小模块只知道自己该做的事,并且只拥有完成这件事所需的最小令牌。
- 比如,“内存分配器”只能申请内存,它不能去读“网络驱动”的数据。
- 如果“网络驱动”被黑客攻破了,黑客只能控制网络,无法拿到“内存分配器”的令牌,因此无法破坏系统其他部分。
- 启动即销毁:系统启动时,有一个临时的“建筑队长”(Loader)负责把各个社区建好并分发令牌。一旦建好,建筑队长立刻自毁。这意味着系统运行时,没有任何软件是“受信任”的,所有模块都在互相监督。
C. 实时性:紧急通道
通常,为了安全,系统会变慢。但作者还考虑了“软实时”需求(比如工业控制不能卡顿)。
- 不可屏蔽的中断(NMI):就像城市里有一条绝对优先的紧急通道。即使系统被攻击者卡住了,或者某个模块在死循环,这条通道依然能保证紧急任务(如中断处理)被执行,防止系统彻底死机。
4. 生活中的比喻:餐厅的变革
为了更直观,我们可以把嵌入式设备比作一家餐厅:
传统模式:
- 主厨(内核):拥有所有权限,可以进厨房、仓库、收银台。如果主厨被收买或发疯,餐厅就完了。
- 服务员(应用):只能端菜,但如果主厨把钥匙给了服务员,服务员也能进仓库。
- 外卖员(外设):如果外卖员是坏人,他可能直接冲进厨房偷东西。
Skadi + Bredi 模式:
- 没有主厨:餐厅被分成了“切菜组”、“炒菜组”、“收银组”。
- 令牌门禁:
- “切菜组”手里只有切菜刀的令牌,进不去收银台。
- “收银组”手里只有收银机的令牌,进不去厨房。
- 外卖员:如果他没有“取餐窗口”的特定令牌,连厨房门都进不去,更别提偷东西。
- 互不信任:如果“切菜组”被黑客控制了,黑客只能切坏菜,无法偷走收银台的现金,因为切菜组没有收银台的令牌。
- 启动后消失:开业前,店长(Loader)把各组安排好,然后店长立刻辞职并销毁所有备用钥匙。从此以后,店里没有“老板”,只有互相制衡的“小组”。
5. 总结与意义
这篇论文的核心贡献在于:
- 打破了“必须信任内核”的魔咒:实现了真正的“无运行时可信软件基”(No Run-Time Software TCB)。
- 软硬结合:不仅改写了操作系统,还设计了专门的硬件(FPGA 实现)来强制执行这些规则。
- 安全与性能兼得:虽然为了安全牺牲了一点点性能(就像安检需要时间),但在大多数实际应用场景中,速度依然足够快,且安全性是质的飞跃。
一句话总结:
这就好比给未来的智能设备穿上了一层由硬件强制执行的“防弹衣”,即使里面的软件全是坏人,或者外面的设备全是间谍,只要他们手里没有合法的“令牌”,就绝对无法破坏系统的核心安全。这为未来高安全需求的物联网设备(如 5G 基站、自动驾驶汽车)奠定了一个坚实的基础。
Each language version is independently generated for its own context, not a direct translation.
这篇论文提出了一种名为 Skadi 的实时操作系统(RTOS)和 Bredi 片上系统(SoC)架构,旨在解决嵌入式设备面临的安全挑战。其核心目标是构建一个**在运行时没有可信软件计算基(Run-Time Software TCB)**的系统,同时能够抵御恶意应用程序、操作系统内核以及外围设备(特别是具有 DMA 功能的设备)的攻击,并保持软实时性能保证。
以下是对该论文的详细技术总结:
1. 问题背景 (Problem)
嵌入式设备的安全威胁主要来自三个向量:
- 应用程序软件漏洞:固件中普遍存在已知漏洞。
- 操作系统内核漏洞:在 RTOS(如 Zephyr)中,内核与用户空间的分离通常是可选的或不完善的;一旦内核被攻破,攻击者即可完全控制设备。即使在 Linux 中,内核漏洞依然频发。
- 外围设备威胁:具有直接内存访问(DMA)功能的设备(如网卡、WiFi 芯片)可能被利用作为硬件木马,绕过软件保护直接读写内存。
现有的防御方案通常只能同时解决上述三个威胁中的两个:
- 传统内核利用 MMU 保护应用和设备,但必须信任内核来配置 MMU。
- 基于能力的架构(Capability Architectures)可以消除对内核的信任,但通常假设设备是可信的,或者需要修改硬件外设来支持能力,这在实际中难以实现。
核心挑战:如何在不依赖运行时软件 TCB 的情况下,同时防御恶意应用、恶意内核和恶意设备,并保留软实时能力?
2. 方法论 (Methodology)
作者采用软硬件协同设计的方法,结合了新的硬件架构 Bredi 和基于能力系统的操作系统 Skadi。
A. 硬件架构:Bredi SoC
Bredi 是 Northcape 能力架构的首个硬件实现,基于 RISC-V 的 cva6 CPU 和未修改的以太网子系统。
- 系统总线级能力控制:Northcape 将能力强制执行从 CPU 移至系统总线(Northbridge)。这意味着无论是 CPU 还是 DMA 设备,所有内存访问都必须经过能力解析。
- 令牌能力系统 (Token Capability System):
- 使用 64 位指针,高位包含能力编号(Capability Number)和随机数(Nonce),低位包含偏移量(Offset)。
- CMT (Capability Metadata Table):内存中维护的元数据表,存储边界、权限和限制信息。
- 防伪造:通过 16 位随机 Nonce 和**子系统 ID 绑定(Subsystem-ID Bound)**限制,防止能力令牌被猜测或滥用。
- 关键硬件组件:
- AXI MMU:为 DMA 设备提供类似 IOMMU 的内存访问控制,将能力令牌解析为物理地址。
- 能力解析器 (Capability Resolver):递归解析间接能力,确保时空安全性。
- 两级 TLB (NTLB L1/L2):缓存能力元数据,减少解析延迟,满足实时性要求。
- 中断处理增强:引入寄存器堆叠 (Register Stacking)(中断和非中断模式使用不同的寄存器集)、中断向量化和不可屏蔽中断 (NMI),确保即使在中断服务程序(ISR)不可信的情况下,也能保护被中断系统的状态并保证关键服务的可用性。
B. 软件系统:Skadi RTOS
Skadi 是基于 Zephyr RTOS 修改而来的,其核心思想是将所有运行时组件(包括调度器、分配器、驱动、ISR)拆分为相互不信任的子系统 (Subsystems)。
- 无运行时 TCB:
- 唯一的可信组件是 Skadi Loader(加载器),它运行在子系统 ID 0,负责初始化并分配能力。
- 一旦所有子系统加载完毕,Loader 会销毁自身(通过
trapdoor 子系统销毁根能力),系统进入无运行时软件 TCB 状态。
- 子系统隔离:
- 所有组件(内核功能、驱动、应用)均作为独立的子系统运行。
- 通过 Subsystem Calls(子系统调用)进行通信。这是一种原子操作,同时切换控制流和受保护域(Sphere of Protection)。
- 调用约定使用跳板代码 (Trampolines) 来保存/恢复寄存器并清零,防止信息泄露。
- 内存管理:
- 内存分配器也是不可信的子系统。
- 利用
lock 操作实现独占访问,利用 revoke 操作在崩溃时安全回收内存(覆盖数据并无效化重叠能力)。
- 零拷贝网络:利用能力系统直接传递 DMA 缓冲区的能力令牌,消除了数据包在 DMA 缓冲区与应用缓冲区之间的复制。
3. 主要贡献 (Key Contributions)
- Bredi SoC 实现:首个 Northcape 架构的 FPGA 实现。它解决了原始 Northcape 概念中的两个关键缺陷:
- 消除了对可信中断处理程序的需求(通过寄存器堆叠和向量化)。
- 引入了子系统 ID 绑定限制,防止能力猜测攻击,并增强了独占访问的安全性。
- Skadi RTOS:首个在运行时没有软件 TCB 的 RTOS。
- 将 Zephyr 完全解耦为互不信任的子系统。
- 实现了无内核(No Kernel)架构,所有内核功能(调度、分配、驱动)均作为普通子系统运行。
- 提供了完整的子系统调用机制,支持 C 语言编程,无需修改编译器工具链(利用 RISC-V 大代码模型)。
- 全面的安全模型:
- 同时防御恶意应用、恶意内核和恶意 DMA 设备。
- 实现了空间隔离(字节级)和时间隔离(通过
lock 和 revoke)。
- 保证了软实时性,即使在存在攻击者的情况下,关键中断服务也能执行。
4. 实验结果 (Results)
作者在 Digilent Genesys 2 FPGA 板上进行了评估:
- 安全性:成功实现了无运行时 TCB,所有子系统、驱动和 ISR 均被隔离。DMA 设备仅能访问显式委托的能力。
- 性能开销:
- 计算密集型任务:Skadi 与不安全的 Zephyr 基准性能几乎无差异(Coremark 和 Stream 基准测试),因为 L1 NTLB 命中率极高,且基准测试中很少发生子系统调用。
- I/O 密集型任务:由于频繁的子系统调用,Skadi 在 Ping 延迟和 TCP 吞吐量上比 Zephyr 慢约 3-4 倍。但这在嵌入式设备的绝对数值上仍被认为是实用的。
- 代码大小:由于需要元数据(重定位表、符号表)和跳板代码,二进制文件体积有所增加,但在现代嵌入式设备的内存预算范围内。
- 实时性:中断响应时间比 Zephyr 慢 3-7 倍,但仍能在亚毫秒级(约 1/10 毫秒)内响应,满足软实时需求。
- 硬件面积:Northcape 组件(主要是 L2 NTLB 和解析器)增加了约 31% 的 FPGA 逻辑资源(LUTs),在可接受范围内。
5. 意义与影响 (Significance)
- 安全设计的范式转变:该工作证明了可以通过“设计即安全”(Security-by-Design)的理念,在硬件和软件栈层面同时消除运行时 TCB,而不仅仅依赖于形式化验证(如 seL4)或加密隔离(如 TEE)。
- 解决长期痛点:填补了现有能力架构无法同时处理不可信 OS 和不可信设备的空白。
- 实际可行性:通过基于现有开源硬件(cva6)和软件(Zephyr)的修改,展示了该架构在真实嵌入式场景(如网络基础设施、5G 基站)中的落地潜力。
- 未来方向:为构建高安全性的嵌入式系统提供了基础,未来可结合形式化验证进一步降低硬件 TCB 的复杂性,或优化性能以支持硬实时场景。
总结:Skadi 和 Bredi 通过创新的硬件能力架构和软件微内核化设计,成功构建了一个在运行时完全不可信(Untrusted)但依然安全、可靠的嵌入式系统,为未来关键基础设施的安全提供了强有力的技术基础。