玄铁VirtualZone:基于RISC-V架构的安全扩展

简介: 本文是RISC-V知识图谱系列中有关安全拓展的内容,主要介绍了RISC-V架构在实现TEE可信执行环境上所有具备的安全能力,并描述了基于RISC-V架构的玄铁C系列处理器实现的安全扩展。

本文作者:玄翦

本文源自:芯片开放社区(OCC)


导语

随着互联网和物联网的快速发展,全球联网设备数量高速增长,万物互联成为全球网络未来发展的重要方向。但移动平台业务繁荣的同时也催生了多样化的安全问题,目前应用普遍存在被破解、数据被窃取篡改等安全风险,对金融数据安全、个人隐私数据保护、业务数据完整性等造成极大的威胁。 


为了解决智能设备、物联网设备所面临的安全威胁,终端芯片通常需要提供可信执行环境(Trusted Execution EnvironmentTEE),确保芯片内的系统程序、终端参数、安全数据和用户数据不被篡改或非法获取。可信执行环境目前在移动、支付、DRM、汽车、无人机、物联网等应用领域已基本经成为标配。目前较为成熟的处理器可信执行环境技术主要有ARMTrustZoneIntelSGX以及AMDSEV等。


本文主要描述基于RISC-V架构的玄铁C系列处理器的安全扩展,该扩展主要基于RISC-V架构提供的PMP保护机制和多层特权模型,虚拟出多个相互隔离的可执行域(Zone),从而实现了RISC-V架构上的可信执行环境(TEE),并保护Zone内的软硬件信息,包括软件、内存、外设、I/O等免受其他Zone的非法访问。处理器资源包括Cache、中断、内存、代码执行等经过隔离之后,处理器将分时地运行在不同的Zone内,配合SoC其他的保护机制如IOPMP,共同构建一个基于软硬件协同工作的安全系统。

RISC-V架构的安全拓展能力    

目前传统的RISC-V处理器并没有提供类似ARM TrustZone的隔离技术。RISC-V处理器整体运行在REE(Rich Execution Environment)环境,如Figure 1所示。


1.jpg

但实际上,RISC-V技术提供了有两种具备安全扩展能力的属性:物理内存保护(PMP)和机器特权模式(M-mode)。PMP物理地址保护技术可以把处理器的访问空间划分出任意大小的物理内存区域,不同的区域可以授予不同的访问权限,PMP功能可以将多个S模式的环境相互分离,我们将在下面的章节详细阐述。ARM也定义了仅支持Cortex-M体系结中的PMPARM称之为MPU)。第二种功能是机器模式,作为超级用户特权模式的安全监视层(类似ARM上的Monitor模式)。M模式可用于管理多个S模式环境的执行,并能拦截来自任何S/U模式环境的中断和异常。有了PMPM-mode, 这就意味着:S-mode模式环境可以相互隔离以及S-Mode模式环境可以通过更高层的特权来管理。

玄铁C系列处理器的安全拓展

虽然RISC-V架构的处理器具备物理内存保护、多层权限模型、内存管理单元等技术来支持可信执行环境功能的实现,但处理器仍然需要支持其他安全规范才能创建完全可用的安全执行环境。为了满足TEE(Trusted Execution Environment)的隔离要求,玄铁C系列处理器在RISC-V架构基础上进行了安全扩展。 该系列处理器在软件的协调下可以虚拟出多个执行域(Zone),每个Zone增加了域标识,也就是Zone ID,整体架构如Figure 2所示。每个Zone可以独立地运行各自的操作系统以及基于该操作系统的应用程序。操作系统运行在超级用户特权模式,应用程序运行在普通用户特权模式。处理器根据需要在不同的Zone里切换运行。当处理器切换到某一Zone运行时,他将实时占用整个物理核,并且处理器的域标识也将同时被更新成相应执行域的标识。Zone的切换由运行在最高模式(机器模式)下的可信固件(TF)来完成。


2.jpg


Zone之间访问隔离通过PMP(Physical Memory Protection)实时切换来实现,PMPRISC-V特权ISA的一部分,用于隔离机器模式和超级用户模式/普通用户模式之间的物理地址访问,玄铁处理器的L1/L2 Cache同时也受PMP保护。

Physical Memory Protection (PMP)

RISC-V架构提供了一种PMP物理内存保护机制,用于隔离M模式与S/U模式下的内存访问。只有M模式才有权限配置PMPPMP包含几组(通常是816)地址寄存器以及相应的配置寄存器,这些配置寄存器可以授予或拒绝S/U模式的读、写和执行权限。PMP同时也能保护内存映射I/O (MMIO)M模式可信固件可以通过配置PMP来约束处理器对外设I/O的访问。


当硬件线程从一个Zone切换到另一个Zone时,PMP配置同时也需要切换。M模式可信固件需要先保存当前ZonePMP配置,然后载入下一个即将切换的ZonePMP配置,完成对内存和内存映射I/O (MMIO)访问权限的切换。


当多个Zone需要共享内存时,可以将需要共同访问的内存区域的访问权限同时授予给多个Zone,也就是将该块内存的允许访问权限写到每个ZonePMP配置表里,PMP表会在Zone切换时由可信固件进行更新。Figure 3是一个典型的多个ZonePMP配置图, SHM区域是Zone间允许共同访问的共享内存区域。


机器模式可以通过PMP的锁定功能将机器模式的访问限制在有限的区域内,比如只允许机器模式访问、执行划分给可信固件的内存区域,以减少受到对机器模式攻击的影响,也就是Supervisor Memory Access PreventionSMAP)和Supervisor Memory Execution PreventionSMEP),从而增加对关键信息的保护。


3.jpg


IOPMP

RISC-V架构提供了一种PMP物理内存保护机制,用于保护RISC-V处理器在不同特权模式下的对内存和MMIO的访问。


总线上的其他主设备同样需要对内存的访问进行保护,也就是外设需要增加IOPMPIOPMP可以像PMP一样定义访问权限,他会检查从总线或者主设备过来的读、写传输是否符合权限访问规则,只有合法的读、写请求才能进一步传输到目标设备上。通常有3种方法来连接IOPMP


  • 请求端连接IOPMP

在每个主设备和总线之间增加一个IOPMP,类似RISC-VPMP。不同的主设备需要分别新增一个IOPMPIOPMP之间互相独立。这种设计较为简单,也提供了灵活性,但IOPMP不能在主设备之间共享。如下图所示:


4.jpg


  • 目标端连接IOPMP

目标端的IOPMP需要对不同主设备发来的传输进行区分,这就需要每个主设备的访问请求都要附带额外的Master ID。如下图所示:


5.jpg


  • 请求端和目标端级联IOPMP

在复杂的SoC系统中,往往存在IOPMP级联的使用情况。典型的场景就是RISC-Cores自身带有PMP,处理器并不需要目标端的IOPMP再次对他的访问进行过滤。通用的处理方法是,在IOPMP的表项里取消对CPU访问的约束,但缺点是这会占用IOPMP表项,也会影响效率。为了提高IOPMP级联下的访问效率,IOPMP需要提供一种机制来直通部分主设备的访问,比如提供可配置的以直通模式访问的主设备列表。


下图是玄铁处理器采用PMPIOPMP来构建安全SoC的系统参考框图:


6.jpg


总结

本文详细介绍了RISC-V架构在实现TEE可信执行环境上所有具备的安全能力。平头哥玄铁处理器在RISC-V架构的物理内存保护、多层权限模型、内存管理单元等技术的基础上,对部分安全特性进行了扩展,实现了基于Zone管理的可信执行环境。该技术方案不需要虚拟化的支持,只需要在支持US M 三种特权模式的情况下,并在可信固件的管理下,实现了具备多个可信执行环境的能力。


当不同Zone之间需要切换时,运行在机器模式的可信固件需要对Zone的上下文进行保存和切换。虽然看起来这会带来开销,但像ARM TrustZone的虚拟化技术同样需要对世界进行切换,这部分切换的工作同样被隐藏在Monitor的可信固件中。不同的是,ARM TrustZone只虚拟出了2个世界,而玄铁RISC-V处理器在安全扩展之后,最多允许同时支持16Zone,这为以后的软件安全方案提供了更多的可能。

相关文章
|
2月前
|
监控 安全 Cloud Native
云原生开源沙龙北京站开启报名 | 微服务安全零信任架构
「微服务安全零信任架构」主题技术沙龙将于4月13日在北京阿里中心举行,欢迎报名!~
云原生开源沙龙北京站开启报名 | 微服务安全零信任架构
|
2月前
|
负载均衡 测试技术 持续交付
高效后端开发实践:构建可扩展的微服务架构
在当今快速发展的互联网时代,后端开发扮演着至关重要的角色。本文将重点探讨如何构建可扩展的微服务架构,以及在后端开发中提高效率的一些实践方法。通过合理的架构设计和技术选型,我们可以更好地应对日益复杂的业务需求,实现高效可靠的后端系统。
|
2月前
|
监控 持续交付 API
构建高效可扩展的微服务架构
在当今快速迭代和竞争激烈的软件市场中,构建一个高效、可扩展且易于维护的后端系统变得尤为重要。微服务架构作为一种流行的分布式系统设计方式,允许开发者将应用程序划分为一系列小型、自治的服务,每个服务负责执行特定的业务功能。本文将探讨如何利用现代技术栈搭建一个符合这些要求的微服务架构,并讨论其潜在的挑战与解决方案。我们将涵盖服务划分策略、容器化、服务发现、API网关、持续集成/持续部署(CI/CD)以及监控和日志管理等关键主题,以帮助读者构建出既可靠又灵活的后端系统。
|
2月前
|
监控 Kubernetes 持续交付
构建高效可扩展的微服务架构:后端开发实践指南
在数字化转型的浪潮中,企业对软件系统的要求日益提高,追求快速响应市场变化、持续交付价值成为核心竞争力。微服务架构以其灵活性、模块化和独立部署的特点,成为解决复杂系统问题的有效途径。本文将深入探讨如何构建一个高效且可扩展的微服务架构,涵盖关键设计原则、技术选型及实践案例,为后端开发者提供一条清晰的指导路线,帮助其在不断变化的技术环境中保持竞争力。
143 3
|
2月前
|
消息中间件 存储 监控
构建可扩展的微服务架构:实践与思考
本文探讨了构建可扩展的微服务架构的关键要素和实践方法。从服务拆分、通信机制、数据管理到监控与治理,分析了如何设计和实现一个稳健、高效的微服务系统,并提供了一些实际经验和思考。
|
15天前
|
设计模式 Java API
Java 可扩展 API 设计:打造灵活的应用架构
【4月更文挑战第27天】设计可扩展的 API 是构建灵活、易于维护的应用程序架构的关键。Java 提供了丰富的工具和技术来实现这一目标,使开发者能够构建具有高度可扩展性的应用程序。
37 4
|
1月前
|
存储 缓存 监控
构建高效可扩展的后端服务架构
在当今互联网时代,构建高效可扩展的后端服务架构对于企业的业务发展至关重要。本文将探讨如何通过合理设计和优化后端服务架构,实现系统的高性能、高可用性和易扩展性,从而满足不断增长的业务需求和用户规模。
24 0
|
2天前
|
Cloud Native 安全 云计算
什么是云原生架构,我们该如何做好云原生安全,引领云计算时代的应用程序革新
云原生架构,基于云计算设计理念,强调应用在云环境中设计、构建和运行,利用容器化、微服务、自动化管理和持续交付实现灵活、可扩展和高效。其优势包括高可扩展性、可伸缩性、高效性、灵活性、可靠性和成本效益。应用场景广泛,如电商、金融和物联网。构建关键要素包括容器化、微服务、自动化管理和持续交付。保障安全,需重视容器安全,采用如德迅蜂巢·云原生安全平台等解决方案。云原生正引领应用程序革新,成为现代应用构建首选。
|
12天前
|
监控 安全 Cloud Native
云计算架构设计与实施:构建高效、可扩展的云解决方案
【4月更文挑战第30天】本文探讨了云计算架构的关键要素,包括服务模型(IaaS, PaaS, SaaS)、部署模型(公有云、私有云、混合云)及可扩展性、安全性、可靠性和成本效益。实施策略涉及需求分析、选择云服务商、设计基础设施、自动化、监控和灾备计划。最佳实践推荐模块化设计、微服务、DevOps、CI/CD、多租户支持和云原生应用,以确保高效、安全且成本优化的云环境。
|
14天前
|
Kubernetes 监控 Docker