SGX的内部组件概述

article/2025/9/21 21:48:16

导语:SGX是Intel开发的新的处理器技术,可以在计算平台上提供一个可信的空间,保障用户关键代码和数据的机密性和完整性。SGX全称Intel Software Guard Extensions,顾名思义,其是对因特尔体系(IA)的一个扩展,用于增强软件的安全性。

SGX介绍

SGX是Intel开发的新的处理器技术,可以在计算平台上提供一个可信的空间,保障用户关键代码和数据的机密性和完整性。SGX全称Intel Software Guard Extensions,顾名思义,其是对因特尔体系(IA)的一个扩展,用于增强软件的安全性。

SGX是在2015年推出的第六代英特尔酷睿处理器,基于Skylake微架构。可以通过执行带有结构化扩展功能叶(Structured Extended Feature Leaf)标志的CPUID指令来检查SGX支持,并检查EBX寄存器的第二位是否已设置。为了能够使用SGX,它必须由BIOS启动,并且目前,只有少数BIOS支持该技术,这是它没有被广泛使用的原因之一。

SGX的保护方式并不是识别和隔离平台上的所有恶意软件,而是将合法软件的安全操作封装在一个enclave中,保护其不受恶意软件的攻击。而且执行SGX的权限非常高,特权或者非特权的软件都无法访问enclave,也就是说,一旦软件和数据位于enclave中,即便操作系统管理员和VMM(Hypervisor)也无法影响enclave里面的代码和数据。Enclave的安全边界只包含CPU和它自身。SGX创建的enclave也可以理解为一个可信执行环境TEE(Trusted Execution Environment)。不过其与ARM TrustZone(TZ)还是有一点小区别的,TZ中通过CPU划分为两个隔离环境(安全的环境和正常的环境),两者之间通过SMC指令通信;而SGX中一个CPU可以运行多个安全enclaves,并发执行亦可。当然,在TZ的安全的环境内部实现多个相互隔离的安全服务亦可达到同样的效果。另外,SGX是针对桌面和服务器平台的。

总结来说,Intel SGX的安全性能有以下3点:

1.把应用程序分为两部分:安全应用程序和非安全应用程序;

2.将合法软件的安全操作封装在一个enclave中;

3.当调用enclave函数时,只有enclave内部的代码才能查看其数据,并始终拒绝外部访问;当调用结束时,enclave的数据会留在受保护的内存中。

安全执行环境是主机进程的一部分,这意味着:

1.应用程序包含自己的代码,数据和enclave;

2.enclave也包含自己的代码和自己的数据;

3.SGX保护enclave代码和数据的机密性和完整性;

4. Enclave接入点是在编译期间预先定义的;

5.支持多线程(但不能轻易实现);

6.enclave可以访问其应用程序的内存,但应用程序的内存则无法访问enclave。

指令介绍

· Intel SGX定义了18条新指令,其中13条由管理者使用,5条由用户使用。所有这些指令都以微代码实现,以便可以修改指令的具体行为。以下是18条新指令的完整说明:

· EADD:添加页面;

· EENTER:进入enclave;

· EBLOCK:阻止EPC页面;

· EEXIT:退出enclave;

· ECREATE:创建安全区;

· EGETKEY:创建加密密钥;

· EDBGRD:通过调试器读取数据;

· EREPORT:创建加密报告;

· EBDGWR:通过调试器写入数据;

· ERESUME:重新进入安全区;

· EINIT:初始化enclave;

· ELDB:加载EPC页面为已阻止;

· ELDU:加载EPC页面为未阻止;

· EPA:添加版本数组(version array);

· EREMOVE:从EPC中删除页面;

· ETRACE:激活EBLOCK检查;

· EWB:回写或是让EPC页面无效;

其中EENTER, EEXIT, EGETKEY, EREPORT,ERESUME为用户使用的指令。

数据结构

另外,Intel SGX还定义了13种新的数据结构,其中8种用于enclave管理,3种用于内存页面管理,2种用于资源管理。以下是13种新的数据结构的完整说明:

· SGX Enclave控制结构(SECS);

· 线程控制结构(TCS);

· 存储状态区(SSA);

· 页面信息(PAGEINFO);

· 安全信息(SECINFO);

· 分页加密元数据(PCMD);

· 版本数组(VA);

· Enclave页面缓存映射(EPCM);

· Enclave签名结构(SIGSTRUCT);

· EINIT令牌结构(EINITTOKEN);

· 报告(REPORT);

· 报告目标信息(TARGETINFO)

· 密钥请求(KEYREQUEST)

我会在以下详细介绍相关的这写指令和数据结构,然后对它们如何实现哪种安全功能进行详细解释。

内存保护过程

enclave页面缓存(EPC)

Enclave代码和数据放置在被称为Enclave Page Cache(EPC)的特殊内存区域中,该内存区域使用内存加密引擎(MEE)进行加密,该内存区域只存在于一种专用的芯片上。内存总线上的外部读取只能观察到加密数据。而页面只会在处理器内核中才能被解密,这个密钥只会在enclave页面缓存启动时生成并存储在CPU中。

此时传统页面检查已被扩展,以防止外部访问EPC页面。

Enclave页面缓存映射(EPCM)

Enclave页面缓存映射(EPCM)结构用于存储页面状态,它位于受保护的内存中,其大小限制了EPC的大小(由BIOS设置,最大128MB)。EPCM包含了每个页面的配置、权限和类型。

内存管理

数据结构

页面信息(PAGEINFO):

EPC管理指令会用以PAGEINFO结构的参数来引用页面。这些参数包含页面的线性和虚拟地址,以及指向SECINFO和SECS结构的指针。

安全信息(SECINFO):

SECINFO结构用于存储页面元数据,包括访问权限(读/写/执行)和类型(SECS,TCS,REG或VA)。

分页加密元数据(PCMD):

PCMD结构用于跟踪那些从EPC中被清除的页面的相关联的元数据,它包含页面所属的enclave标识,指向SECINFO结构和MAC的指针。

版本数组(VA):

VA结构用于存储从EPC中被清除的页面的版本号,它是一种特殊的页面类型,包含512个8字节的插槽来存储版本号。

相关指令

EPA:该指令分配一个4KB的内存页面,其中包含页面版本号数组(VA)以防止重播。每个元素长64位。

EBLOCK:该指令会阻止被那些正准备从EPC中清除的页面的所有访问,将来对这些页面的所有访问都将导致页面错误。

ETRACK:该指令负责从EPC中删除页面,不过前提是页面必须被阻止访问,并且不能被TLB引用。在将其写入外部内存之前,要先对页面进行加密,生成版本号和元数据,并执行最终的MAC。

ELDB/ELDU:该指令会将先前被清除的页面加载到内存中,以检测是它们否处于禁止访问状态。它会检查元数据的MAC、版本号(来自相应的VA条目)和页面加密内容。如果先前被清除的页面处于禁止访问状态,则页面内容被解密并放置在所选的EPC页面内,并且相应的VA条目被删除。

安全功能如何实现的过程

EPC内存由BIOS定义,大小有限。 不过SGX有一种方法可以从EPC中删除页面,将其放在不受保护的内存中,并稍后恢复它。由于EPC页面管理指令允许加密页面并生成其他元数据,因此页面保持相同的安全属性。在引用此页面的所有缓存条目都已从所有处理器逻辑内核中删除之前,不能删除该页面,且以页面的粒度大小(4KB)导出或导入内容。

存储内容

SGX Enclave控制结构(SECS):

每个enclave都与SECS结构相关联,该结构将包含其元数据(例如其哈希值和大小)。任何安全或非安全代码都无法访问它,只能由处理器本身可以访问。

线程控制结构(TCS):

每个enclave至少与一个TCS结构相关联,该结构是进入enclave的执行点。由于SGX支持多线程,因此enclave可以使用与TCS一样多的活动线程。与SECS结构一样,它只能由处理器访问。

存储状态区(SSA):

每个TCS至少与一个SSA结构相关联,该结构可以在异常和中断处理期间保存处理器的状态。它在退出时写入,在恢复时读取。

栈和堆:

每个enclave都可以使用它的栈和堆,当进入和退出时,RBP和RSP寄存器会被保存,但它们的值不会被改变。堆不在内存内部进行处理,enclave有自己的分配器。

处理器保护过程

Enclave的创建和检查过程

Enclave检查(Enclave Measure):

每个enclave都由其属性以及页面的位置、内容和保护的哈希值表示。具有相同哈希的两个enclave是相同的,该方法被称为MRENCLAVE,用于检查enclave的完整性。

签名检查(Signer Measure):

每个enclave也由其管理者进行签名, MRSIGNER包含管理者公钥的哈希值,MRENCLAVE和MRSIGNER使用SHA-256哈希函数生成。

数据结构

EINIT令牌结构(EINITTOKEN):

EINIT指令使用EINITTOKEN结构来检查是否允许执行enclave。它包含enclave的属性,哈希和签名者身份,它使用启动密钥执行的HMAC进行身份验证。

enclave签名结构(SIGSTRUCT):

每个enclave都与一个SIGSTRUCT结构相关联,该结构由管理者签名并包含enclave方法,签名者公钥,版本号(ISV,反映安全级别)和产品标识符(ISVPRODID,以区分同一管理者的enclave) 。它负责确保enclave未被修改,然后使用其他密钥重新签名。

指令说明

ECREATE:该指令负责实例化一个新的enclave,定义其地址空间和信任root ,这些信息存储在新分配的SECS中。

EADD:该指令允许向enclave添加新页面,此时操作系统只负责选择页面及其内容。 EPCM的初始条目表示页面类型及其保护。

EEXTEND:该指令允许通过256字节的代码块将页面内容添加到enclave检查中,必须调用16次才能将完整页面添加到enclave检查中。

EINIT:该指令在初始化之前会检查enclave是否与其EINITTOKEN(相同的检查属性)相对应,它还会检查令牌是否已使用启动密钥签名。

EREMOVE:该指令负责彻底从enclave中删除页面。

保护过程

1.应用程序会请求将其enclave加载到内存中;

2.ECREATE指令负责创建并填充SECS结构;

3.使用EADD指令将每个页面加载到受保护的内存中;

4.使用EEXTEND指令将每个页面添加到enclave检查中;

5.EINIT指令最终完成对enclave的创建;


http://chatgpt.dhexx.cn/article/NrJyObSP.shtml

相关文章

SGX入门

如何设计SGX程序: SGX分为可信部分和不可信部分,可信部分由enclave组成(一个应用程序可以拥有一个或多个enclave),enclave存储在加密的内存中,受SGX保护,enclave一旦被建立就不能更改,所以通常…

SGX Enable

根据INTEl的官方建议, 目前的电脑主板在BIOS设置上只保留了Disabled和Software Controlled来开启和关闭SGX扩展 使用Software Controlled开关的原因官方文档有阐述,如下: 开启SGX扩展,首先需要满足以下要求: CPU具有…

Intel SGX技术详细解释(非常棒)

http://www.jos.org.cn/html/2018/9/5594.htm#b18 随着信息技术的迅速发展与广泛应用, 人类社会已经进入了一个崭新的互联网时代.一方面, 人们享受着互联网科技带来的便利; 另一方面, 由网络和信息系统构成的网络空间也面临着日益严峻的安全问题.信任是网络空间中安全交互的基…

SGX问答

0 前言 有些问题比较常见,在这里直接将问答内容贴出来,方便大家搜索。有空再重新组织文字。 (我会避免泄露私人信息) 1 内存地址翻译全部交给os,那中间经过cache也是全部交给os是嘛?这个cache这部分&…

小谈Intel SGX

目录 Intel SGX简介 背景 为什么要Intel SGX? Intel SGX尚处于学术讨论 Intel SGX和可信启动什么关系? 开发者眼中SGX长什么样子? SGX访问控制是什么? MEE与SGX EPC内存加密 CPU里面SGX长什么样子? 有Enclav…

SGX技术与SGX攻击

2013年, Intel推出SGX(software guard extensions)指令集扩展, 旨在以硬件安全为强制性保障, 不依赖于固件和软件的安全状态, 提供用户空间的可信执行环境, 通过一组新的指令集扩展与访问控制机制, 实现不同程序间的隔离运行, 保障用户关键代码和数据的机密性与完整性不受恶意软…

Intel SGX初步学习理解笔记(持续更新)

一些概念 SGX(Software Guard eXtensions)软件保护扩展:是一组CPU指令扩展,能够创造出一个可信执行环境来保护代码和数据,即使使用root 权限也无法访问。通过这个硬件设施,应用程序可以隔离代码和数据来达…

Intel 的 SGX 技术小知识

1.SGX 概述 Intel SGX (Software Guard Extensions) 是一种针对特定应用程序的安全增强技术。它允许应用程序在处理机上创建受保护的执行环境,这个执行环境被称为“enclave”。这个 enclave 是一个被硬件隔离的内存区域,只有在安全条件下才可以访问。这…

新手学编程必会的100个代码

前言 我记得刚开始接触编程的时候,觉得太难了。 也很好奇,写代码的那些人也太厉害了吧?全是英文的,他们的英文水平一定很好吧? 他们是怎么记住这么多代码格式的?而且错了一个标点符号,整个程…

适用于编程开发自学的学习网站

今天为大家分享几个编程开发自学的学习网站 1.C语言网 该网站有很多C语言相关的教程、资源、博客和练手习题,同时也有很多题库和比赛,比较实用。 网址:https://www.dotcpp.com/ 2.cppreference cppreference是一个免费网站,上面…

初学者必会的100个编程代码

这是本文的目录 前言1、for循环中的else条件2、数字求和3、随机数生成4、将列表中的所有元素作为参数传递给函数5、获取列表的所有中间元素6、使用一行代码赋值多个变量7、Python清空列表8、通过Enum枚举同一标签或一系列常量的集合9、重复字符串10、计算每个月天数11、输出指定…

程序员初学者应该如何自学编程

在你要进入学习殿堂之前,先问你自己100遍:“我能坚持多久?”不要认为这样做很无聊,你要是真的试了,你会有不同的一番感受的,不信你试试看。如果你越问越没信心的话,那说明你心理上还没有准备好&#xff1b…

编程在哪学,可以免费自学编程的10个网站

编程学习 很多人包括一些企业家,和市场营销人员都认为学习编程对一个人走向成功十分有帮助。在过去的一年里,我一直在学习编程。它有助我成为一个更好的创业者,我甚至可以提供一些帮助,当我的团队需要解决一些bug的时候。 现在&a…

编程入门: 自学编程从哪里开始? [初学参考]

自学编程,先学python、java还是C/C? ——大四学生对于初学者的一点建议 摘要: 自学编程,先学什么语言呢?实际上,编程能做的事太多了,首先明确自己想要用代码做什么,再明确自己的学…

想自学编程?这么多编程自学网站,总有一个适合你吧!

小伙伴们周末快乐。 今天分享一波适用于编程开发学习的自学网站,主要涉及编程学习和练手 、 提问交流 、 计算机公开课 、 在线刷题 、以及 问题搜索 等几个方面,希望能有帮助。 C语言网 该网站有很多C语言相关的教程、资源、博客和练手习题&#xff0c…

Proxyee-down – 百度网盘全平台满速下载神器,还带有IDM的全网嗅探功能!(替代PanDownload)

百度云网盘是目前最流行的在线文件分享途径,但它对免费用户的限速实在是严苛,即便是100M的宽带,常常也会遇到仅有几十KB/秒的速度,一个大文件要下载到天荒地老。 知道君曾分享过一些百度云网盘限速的解决办法,比如使用…

http proxy 代理

配合webpack 和 webpack-dev-server处理 安装 // 安装 cnpm html-webpack-plugin --save -D cnpm install webpack webpack-cli webpack-dev-server --save -D新建src文件夹 新建文件 index.html 和 index.js在index.js 发送一个请求 import axios from axiosaxios.get(htt…

Proxyee-down 3.x的下载与安装

本篇博客将持续更新 因为软件的作者MonkeyWei在3.x版本的软件更新中,并未发布3.x版本的exe文件只在github中发布了jar包(需要java环境)笔者本来是想将源代码生成exe文件,方便大家的下载与安装。奈何笔者水平有限,找了…

JS Proxy (代理)

Proxy 对象用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。 语法: const p new Proxy(target, handler) 参数: target : 要使用 Proxy 包装的目标对象&…

Vue proxy代理

proxy代理是解决开发环境中的跨域问题,正式环境的跨域需要使用nginx反向代理或者是后端解决 在vue中实现proxy代理的步骤 在vue中使用proxy进行跨域的原理是:将域名发送给本地的服务器(启动vue项目的服务,比如loclahost:8080)&a…