在英特尔SGX中禁用系统调用意味着什么

时间:2015-01-23 16:50:52

标签: kernel intel system-calls

我最近正在研究Intel Software Guard Extensions (SGX)设施的编程。 SGX的想法是创建一个安全敏感代码加载和执行的安全区。最重要的是,对该飞地的存储器访问(以及许多其他限制)由硬件强制执行。

manual中,我发现syscall指令在飞地内是非法的(见表3-1),许多其他指令可能会改变权限级别。我想知道这意味着什么。由于像open这样的内核服务,socket最终会引发系统调用,这是否意味着禁止syscall指令实际上禁止来自任何内核服务(如文件和套接字)的安全区内的代码?这对我来说听起来很难说,因为这样一个飞地可以做的事情会受到严重限制。所以我认为我误解了或者有一些解决方法。

2 个答案:

答案 0 :(得分:7)

当你说你不能使用内核服务或任何系统调用时,你是对的,因为在飞地内部禁止使用Syscall指令。 操作系统不是SGX中可信计算基础(TCB)的一部分。 假设在安全区内启用了系统调用,并在汇编中编写指令以执行系统调用指令(假设打开系统调用sys_open的参数)。当您进行系统调用时,您会在启动期间跳转到内核设置的预定义位置,以开始执行内核代码。这意味着你是从你编写的代码(可信的)跳转到你不编写的代码(操作系统,它是不可信的,不是你的TCB的一部分)。如果你能够做到这一点,它将失去SGX提供的安全保障。由于内核/操作系统/您未编写的任何其他软件不受信任,您可能会有一个恶意内核,其开放系统调用会读取您飞地内的数据并窃取您的秘密。

正如您所说的那样,这是非常有限的,因为您无法直接从您的飞地代码中使用套接字或任何东西。但是如果你想在飞地内部使用这些服务,你必须信任不是你编写的代码,这违反了SGX的安全模型。

我不认为SGX的用途与您的想法相似。这里有一些英特尔所示的预期用例,应该解释如何在不使用系统调用的情况下实现这些应用程序。

https://software.intel.com/en-us/articles/using-innovative-instructions-to-create-trustworthy-software-solutions

答案 1 :(得分:2)

右。请参阅英特尔在新加坡证券交易所发布的三篇论文之一的本地证明。希望证明它在英特尔CPU上的飞地内运行的飞地在飞地内创建了一个报告(EREPORT)。该报告中没有任何秘密,但它是MAC使用报告密钥,可以在飞地内部访问和生成。报告通过不受信任的通道(即OS提供的IPC)发送到另一个飞地,然后在另一个飞地内部验证报告,该飞地可以访问飞地内的相同报告密钥(共享密钥)并且可以验证使用MAC和报告密钥(安全区之间的共享秘密)的结构完整性。如果报告中的所有信息都匹配,则两个安全区可以信任它们在同一个SGX平台上运行。然后,他们可以执行密钥交换,如DH密钥交换或任何其他方式来建立安全通道,他们可以安全地相互通信。