学习笔记(一)"/>
Intel SGX Developer Reference 学习笔记(一)
在这之前,一直想学习关于SGX实操性的、应用相关的内容,我浏览了相关资料,总觉得跟不上那些作者的脚步,学到的都是些零零碎碎的知识,收获都不是很大,一边阅读还在一边质疑资料的可读性,所以我决定返朴归真,静下心来好好看一看官网的手册,并作一些笔记方便自己的日后学习,如果能帮助到别人,那就更好了。
手册下载地址: Intel® Software Guard Extensions (Intel® SGX) SDK for Linux* OS
后续sgx笔记: Intel® SGX 手册.
Intruduction
Intel为想要加强应用程序安全性的软件开发者提供了Intel Software Guard Extensions(Intel SGX)SDK的开发人员参考。
Intel SGX SDK是一个API、样例源代码、库以及工具的集合,使软件开发者能够使用C/C++语言去写与调试SGX应用程序。
Intel SGX技术仅适用于第6代Intel®Core™处理器或更新版本。
Overview
Intel SGX是一种Intel技术,他的目标是实现高级机密保护。它通过分配数据和代码所在的硬件保护内存来执行。受保护的内存区域称为enclave,enclave内存中的数据只能由也驻留在enclave内存空间的代码访问,Enclave代码可以通过特殊的指令调用。在Linux操作系统上,enclave可以作为共享对象被创建和加载。
Intel SGX技术在受保护的内存大小上有硬性限制,通常为64MB或128MB;因此,内存中active enclave的数量也被有所限制。依据每个enclave的内存占用,用例建立可以有5-20个enclave同时驻留在内存中;然而,Linux可以通过分页来增加受保护的内存大小。
Properties
SGX提供保护,以防软件攻击:
- 无论当前权限级别和CPU模式如何,enclave内存都不能被外部的enclave读写。在这种情况下,返回终止页;
- 使用debug属性创建的enclave允许调试器查看其内容,没有debug属性的enclave不能被软件和硬件调试器调试;
- enclave环境不能通过经典的函数调用、跳转、寄存器操作或栈操作进入。调用enclave函数的唯一方法是通过执行多个保护检查的新指令。enclave代码向enclave内的函数发起经典调用是被允许的;
- 执行enclave代码时,CPU模式只能为32或64位,不支持其他CPU模式,否则会发生异常。
SGX提供保护,以防已知的硬件攻击:
- enclave内存使用具有 重放 保护的行业标准加密算法进行加密;
- 如果打开内存 或将DRAM模块 连接到其他系统,也只能访问加密的数据;
原因:Enclave 中的代码、数据和 TCS 等在运行过程中始终被加密存储在内存中.处理器缓存(cache)中的数据在写到内存之前,处理器中的内存加密单元(memory encryption engine,简称 MEE)会对其进行加密,因此操作系统无法直接获取 EPC 中的内容。 - 内存加密密钥在每次重新启动随机改变(例如,boot开机/sleep休眠/hibernate休眠)。密钥存储在CPU中,无法访问。
- SGX不是为处理测信道攻击 ? 和反向工程 ? 而设计的,SGX开发者自行构建enclave,以抵抗这些类型的攻击。
Intel SGX使用了强大的工业标准算法签名enclave,一个enclave的签名表征了enclave在创建时的内容和布局,如果根据签名,enclave的内容和布局不正确,则enclave无法初始化、进而无法执行。如果一个enclave可以被初始化,那么enclave应该与初始时enclave相同,且在运行时不会被修改。
Application Design Considerations
Intel SGX应用程序设计与非Intel SGX应用程序不同,因为它需要将应用程序划分为两个逻辑组件:
- 可信组件。访问secret的代码位于此处,这个组件叫做enclave,一个应用程序可以存放多个enclave;
- 不可信组件。应用程序的其余部分,包括其所有模块;
为了减少的安全漏洞的产生,应使可信部分尽量小,建议enclave的功能只是对秘密数据进行操作。
enclave代码可以离开受保护的内存区域和在不可信任的区域调用函数(通过特别的命令),减少enclave对不可信区域的依赖性可以加强对抵御可能攻击的保护。 ?
采用上述设计考虑,将提高防护效果,因为我们将攻击面最小化。
作为一个开发者,治理Intel SGX项目的第一步就必须重新设计和重构应用程序以符合这些准则。通过隔离访问私密数据的数据模块,紧接着移动这些模块到一个单独的包/库。教程部分详细介绍了如何创建这样的enclave。
Terminology and Acronyms 术语和缩写词
key | interpretation1 | interpretation2 |
---|---|---|
AE | Architectural enclaves ? | |
Attestation | Prove authenticity | 证明真实性。在平台认证情况下,需要证明平台的身份。 |
CA | Certificate Authority | 证书颁发机构 |
ECALL | Enclave call | 一个进入enclave的函数调用 |
ECF | Enclave Configuration File | Enclave配置文件 |
EDL | Enclave Definition Language | Enclave定义语言 |
ISV | Independent Software Vendor | 独立软件供应商 |
OCALL | Outside call | 从enclave中调用不可信函数的函数调用 |
TCB | Trusted computing base | 被认为是安全且不受损害的部分硬件和软件 |
Intel® SGX SSL | Intel® SGX SSL cryptographic library based on the OpenSSL | 基于OpenSSL的Intel SGX SSL加密库,为SGX扩展包应用程序提供加密服务 |
此处举出最常见的一些术语,以后遇到其他的可以去手册上查找。 |
更多推荐
Intel SGX Developer Reference 学习笔记(一)
发布评论