@Intel SGX 读书笔记…
Intel SGX 引言
Intel SGX SDK是提供给想要对应用做安全保护的开发者使用的。
Intel SGX SDK是API、举例的源代码、库和工具的集合,这个集合是用来给开发者编写和调试C/C++应用程序用的~~
Intel SGX 技术只在第六代Intel内核及以上的处理器上可以用哦,具体哪些处理器,可以去Intel网站自己查看自己的CPU型号是否支持SGX。
Intel SGX技术概述
Intel SGX一种高等级的秘密保护技术,它在硬件的受保护内存区域存储代码和数据,这个受保护的内存区域叫做Enclave。Enclave的内存区域只能被Enclave内存区域内的代码访问。一个Enclave作为一个Microsoft* Windows* DLL给构建和下载。
Intel SGX技术有一个有限的内存大小,典型的是64MB或128MB。所以活跃的Enclave是有限的,所以大概有5-20个Enclave可以同时在内存中运行。
Intel SGX安全特性
一.Intel SGX技术防止软件攻击:
- 尽管当前的权限等级和CPU的模式(ring3/用户模式,ring0/内核模式,SMM,VMM,或者其他Enclave),都不能读写当前的Enclave内存区域内的内容。如果访问,则会返回中止页。
- 使用Debug属性创建Enclave,该属性允许Intel Software Guard Extensions debugger调试器像标准调试器一样查看其内容。Enclave(non-debugger)不能由软件或硬件调试器进行调试。
- 传统的调用、跳转、寄存器操作或堆栈操作不能进入Enclave环境。 调用Enclave内函数的唯一的方法是通过几个保护检查的新指令。允许由Enclave内代码发起的对Enclave内的函数的调用。
- 执行Enclave代码时,CPU模式只能是32位或64位的。
二.Intel SGX技术防止已知的的硬件攻击:
- Enclave内存使用具有重放保护的行业标准加密算法进行加密。
- 内存或将DRAM模块链接到另一个系统只允许访问加密的数据。
- 内存加密密钥随机改变每个电源周期(如boot/sleep/hibernate)。加密密钥是存储在CPU中的,且不可访问。
- Intel SGX不能够解决侧信道攻击和反向工程。这些是取决于开发人员如何构建受保护的Enclave以防止收到这些类型的攻击。
Intel SGX用很强的行业标准的算法签名Enclave。在Enclave构建的时候,一个Enclave的签名就描述了它的内容和布局。如果根据签名,Enclave的内容和布局有误,那么Enclave不能初始化更不能执行。如果一个Enclave初始化了,不能在运行过程中修改它,它应该与原始的Enclave是相同的。
应用程序设计注意事项
一个Intel SGX应用程序的设计跟平常的应用程序设计是不同的,因为它需要把SGX应用程序分成两个逻辑上的组件。
- 可信组件。这些代码能够访问秘密内存。这个组件也能够调用一个Enclave,一个应用程序可以包含多个Enclave。
- 不可信组件。这部分包含了应用程序所有的模块。
应用程序开发人员需要将可信部分做得尽可能地小,建议将Enclave功能限制为仅对敏感数据。一个大的Enclave会有更多的bug和更多的安全漏洞。
Enclave的代码可以离开受保护的内存区域,也可以调用不可信区域的函数(通过一个特殊的命令)。减少Enclave对不可信代码的依赖性,也能够加强防御可能的收到的攻击。
当拥有以上设计的注意事项后会将攻击面最小化,同时就可以提高其保护性。
应用程序的开发者在应用程序中利用SGX SDK的第一步,必须重新设计或重构应用程序以符合这些注意事项。这一步是通过隔离可信任模块来实现的,然后将这些模块移动到一个单独的包/库中。(具体怎么实现会在后面写的。)
名称 | 具体意思 |
---|---|
ECALL | Enclave Call.进入Enclave的函数调用 |
OCALL | Outside Call.从Enclave调用不受信任的函数的函数调用 |
EDL | Enclave Definition Language |
SP | 服务提供者 |
Inter SGX SSL | Intel SGX SSL加密库是基于OpenSSL的,它给SGX Enclave提供加密服务 |
TCS | 线程控制结构 |
uRTS | 不可信任的运行时系统 |
如有误,请指正!感激!