前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【学习】Intel芯片架构中TEE的实现技术之SGX初探(二)

【学习】Intel芯片架构中TEE的实现技术之SGX初探(二)

作者头像
安智客
发布2018-02-24 10:21:17
2.4K0
发布2018-02-24 10:21:17
举报
文章被收录于专栏:安智客

之前介绍过一篇intel芯片架构中SGX技术的文章:

Intel芯片架构中TEE的实现技术之SGX初探

今天我们再来详细了解下。

软件应用通常需涉及诸如密码、账号、财务信息、加密秘钥和健康档案等私人信息。 按英特尔 SGX 术语来讲,这些隐私信息被称为应用机密。

操作系统的任务之一是对计算机系统实施安全策略,以避免机密信息无意间暴露给其他用户和应用。

尽管这样,但大部分计算机系统仍然面临着一项重大安全隐患:虽然有很多安保措施可保护应用免受其它应用入侵,保护操作系统免受未授权用户访问,但是几乎没有一种措施可保护应用免受拥有更高权限的处理器的入侵,包括操作系统本身。 获取管理权限的恶意软件可不受限制地访问所有系统资源以及运行在系统上的所有应用。 复杂的恶意软件可以锁定应用的保护方案为目标进行攻击,提取加密秘钥,甚至直接从内存提取机密数据。

为对这些机密信息提供高级别的保护,同时抵御恶意软件的攻击,英特尔设计了英特尔 SGX。 英特尔 SGX 是一套 CPU 指令,可支持应用创建安全区: 应用地址空间中受保护的区域,它可确保数据的机密性和完整性——即便有获取权限的恶意软件存在。 安全区代码可通过专用指令启用,并被构建和加载成 Windows* 动态链接库 (DLL) 文件。

英特尔 SGX 可减少应用的攻击面。 图 1 显示了借助英特尔 SGX 安全区和不借助英特尔 SGX 安全区时,攻击面的显著差异。

图 1借不借助SGX 时的攻击面

英特尔 SGX 可针对已知的硬件和软件攻击提供以下保护措施:

  • 安全区内存不可从安全区外读写,无论当前的权限是何种级别,CPU 处于何种模式。
  • 产品安全区不能通过软件或硬件调试器来调试。 (可创建具有以下调试属性的安全区:该调试属性支持专用调试器,即英特尔 SGX 调试器像标准调试器那样对其内容进行查看。 此措施旨在为软件开发周期提供辅助)。
  • 安全区环境不能通过传统函数调用、转移、注册操作或堆栈操作进入。 调用安全区函数的唯一途径是完成可执行多道保护验证程序的新指令。
  • 安全区内存采用具有回滚保护功能的行业标准加密算法进行加密。 访问内存或将 DRAM 模块连接至另一系统只会产生加密数据(见图 2)。
  • 内存加密秘钥会随着电源周期(例如,启动时或者从睡眠和休眠状态进行恢复时)随机更改。 该秘钥存储在 CPU 中且不可访问。
  • 安全区中的隔离数据只能通过共享安全区的代码访问。

受保护的内存在大小上存在固定限值,该限值由系统 BIOS 设定,通常为 64 MB 和 128 MB。 有些系统提供商可能会将此限值制定成其 BIOS 设置内的可配置选项。 内存中可同时保留 5 到 20 个安全区,这取决于每个安全区的大小。

图 2SGX如何确保受保护应用中安全区数据的安全。

包含英特尔 SGX 技术的应用设计要求将应用分成两个部分(见图 3):

  • 可信部分。 它指的是安全区。 可信代码中的代码是访问应用机密的代码。 一款应用可以拥有一个以上可信部分/安全区。
  • 不可信部分。 它包括应用的剩余部分及其所有模块。 需要指出的是,从安全区的角度来看,操作系统和虚拟机显示器都被看做不可信部分。

可信部分应尽量保持最小,仅限于需要最高等级保护的数据以及必须直接作用于其上的操作。 具有复杂界面的大型安全区不仅仅会消耗更多受保护内存:还会产生更大攻击面。

安全区还应使可信-不可信部分交互程度保持最低。 虽然安全区可离开受保护内存区域,在不可信部分(通过专用指令)调用函数,但对依赖性进行限制将会针对攻击对安全区进行加固。

图 3SGX应用执行流程。

认证

在英特尔 SGX 架构中,认证指的是以下流程,即证明在平台上建立了特定安全区。 有两种认证机制:

  • 本地认证 适用于同一平台上两个安全区进行相互认证时。
  • 远程认证 适用于某一安全区获取远程提供商的信任时。
本地认证

当应用拥有一个以上需要相互协作才能完成任务的安全区时,或者两款应用必须在安全区之间进行数据通信时,本地认证非常有用。 每个安全区都须对另一安全区进行验证,以确认双方都是可信安全区。 一旦完成认证,它们就会建立受保护会话,采用 ECDH Key Exchange 共享会话秘钥。 该会话秘钥可用于对必须在这两个安全区之间进行共享的数据进行加密。

因为一个安全区不能对另一个安全区的受保护内存空间进行访问——即使它们运行在同一应用中,所以必须将所有指针解除引用至其值和副本,且必须将完整的数据集从一个安全区封送至另一安全区。

远程认证

借助远程认证,英特尔 SGX 软件和平台硬件的组合可用于生成评价,评价会被发送至第三方服务器以建立信任。 该软件包括应用安全区,以及评价安全区 (QE) 和配置安全区 (PvE),后两者皆由英特尔提供。 该认证硬件是英特尔 SGX 所支持的 CPU。 将该软件信息摘要与来自该硬件的平台唯一非对称秘钥相组合以生成评价,再通过已认证渠道将评价发送至远程服务器。 如果远程服务器确认安全区得到了正确实例化且运行在真正支持英特尔 SGX 的处理器上,远程服务器就会立即信任该安全区并选择通过已认证渠道向其提供机密信息。

密封数据

密封数据是对数据进行加密,以便可在不泄露其内容的前提下将数据写至不可信内存或对其进行存储。 稍后,该安全区可将该数据读回并进行解封(解密)。 加密秘钥由内部按需推导,不会暴露给安全区。

有两种数据密封方法:

  • 安全区标识。 本方法可生成一个所述安全区所独有的秘钥。
  • 密封标识。 本方法可生成一个基于安全区密封授权方标识的秘钥。 相同签名授权方的多个安全区可推导出相同秘钥。
密封至安全区标识

密封至安全区标识时,秘钥对于密封数据的具体安全区是独一无二的,该安全区会影响其签名的任何更改都会产生新秘钥。 借助该方法,使用一版安全区密封的数据不可由其他版本的安全区访问,因此该方法的一个副作用是,密封的数据不可迁移至较新版本的应用及其安全区中。 它专为密封的旧数据不应被新版应用使用的应用而设计。

密封至密封标识

密封至密封标识时,来自同一授权方的多个安全区可透明地对彼此的数据进行密封和解封。 这样,来自一版安全区的数据可迁移至另一版,或在同一软件厂商的多个应用中进行共享。

如果需要防止旧版软件和安全区访问较新应用版本密封的数据,授权方可在对安全区进行签名时写下软件版本编号 (SVN)。 比指定 SVN 更旧的安全区版本将不可推导出密封密钥,因此不可对数据进行解封。

是不是觉得很像TrustZone技术?如何使用英特尔 Software Guard Extensions 技术后面再介绍!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 安智客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 认证
    • 本地认证
      • 远程认证
      • 密封数据
        • 密封至安全区标识
          • 密封至密封标识
          • 是不是觉得很像TrustZone技术?如何使用英特尔 Software Guard Extensions 技术后面再介绍!
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档