secs 调试工具_窥探有方——调试Released SGX Enclave

9dea7fdca7204a3c983c7ea6eaec3f94.png

 作者: Suezi@360安全工程院冰刃实验室 Intel Software Guard Extensions (Intel SGX)是基于CPU扩展的一种革命性的安全技术,旨在提供具有最小攻击面的硬件辅助的可信执行环境。它允许应用程序或应用程序的一部分运行在一个称为Enclave的安全容器中,任何应用程序,包括OS、Hypervisor、BIOS均无法访问其内容。Enclave使用的页面和数据结构由CPU内部的MEE加密存储在EPC中,负责映射Enclave页面的页表由OS管理,但OS无法获取其内容,仅Enclave可访问。然而攻击者总是想方设法以直接或间接的方式来获取数据,比如隐私数据,加密密钥,或者篡改代码的执行流。分析SGX的工作模型,设法将Release版本的Enclave转换成Debug版本,再借助SGX开发套件中的sgx-gdb工具,可实现对SGX Enclave的动态调试,之后便可为所欲为。 1 引言 当程序运行在某个计算平台,特别是在公有云时,其依赖的运行环境可能存在着安全漏洞甚至系统已被攻破,代码和数据的安全性均无法得到保障。此时建立一个可信计算环境(TEE)是十分必要的安全手段和需求,如ARM平台的Trust Zone,Intel的SGX。SGX自Intel的第5代Xeon E3系列CPU开始可用,Intel在CPU内部提供一个具备最小攻击面的的执行环境——SGX,不管是应用程序还是具备root权限的操作系统还是VMM或者BIOS,都无法直接读取或修改Enclave的内容。 与普通的应用程序开发流程类似,Enclave程序在开发过程分为Debug version、PreRelease version、Release Version,不同的版本在构建时使用的密钥类型不一样,Debug版本可采用自生成的密钥,Release版本必须采用Intel签发的,其中Debug版本支持 sgx-gdb调试。sgx-gdb基于普通gdb添加针对SGX的ptrace,除了不支持少数的gdb指令(info sharedlibrary、charset、gcore)和受限支持next/step、call/print 外,使用和功能上与普通gdb无异。 本文以SGX的工作模型为切入点,主要研究如何将Release模式的Enclave转换成Debug,之后借助sgx-gdb工具完成对正常Enclave的窥探。本文提出并实现静态转换和动态转换的两种Released Enclave to Debug的方法。  2 SGX概述 根本上,SGX是Intel指令集架构(ISA)的扩展,设计了一套专用的指令集用于创建一个可信执行环境Enclave,可被应用程序用来保存/运行数据或代码。SGX利用CPU提供的指令在内存中划分一部分区域供Enclave使用,这部分内存称为EPC(Enclave Page Cache),并且限定每个EPC页面只能分配给一个Enclave,Enclave使用的页面和数据结构由CPU内部的MEE(Memory Encryption Engine)加密存储在EPC中。EPC的访问控制由跟CPU体系相关的硬件EPCM(Enclave Page Cache Map)负责,任何Non-Enclave都不能访问EPC的内容,任何软件均不可访问EPCM。SGX扩展出一个新的CPU模式,叫做Enclave模式,当CPU要访问Enclave中的数据时,需要切换到Enclave模式。Enclave和Non-Enclave通过EENTER和EEXIT指令进行切换,当Enclave运行过程被中断或异常打断时,Enclave通过AEX(Asynchronous Enclave Exit)机制退出到Non-Enclave模式。在模式切换时,其运行状态会保存到SSA(State Save Area)中,并清除TLB。 相比其他TEE,SGX的TCB(Trust Computing Base)更小,仅局限于Enclave 软件本身和CPU及其固件。从攻击面上对比,普通应用程序和SGX应用程序分别如图1和图2[1]所示。 9f10cdd6b6322a42b829afebb2781726.png 图1 普通应用程序攻击面 d506e82b74f925b6b365d4434dd20987.png 图2 SGX应用程序的攻击面  3 SGX 详述

3.1 SGX术语

Enclave:不同的语境下有不同的含义,可以指SGX可信执行环境,也可以指应用程序里将要在可信执行环境里运行的那部分代码。 EPC:Enclave Page Cache,一个加密的内存区域。实现上可以通过BIOS预留计算机中DRAM的一部分做专用内存,再利用CPU的MEE对专用内存进行高效加解密。可有效防止内存嗅探攻击。 MEE:Memory Encryption Engine, CPU中的加密引擎。 EPCM: Enclave Page Cache Map,为了对每个EPC页进行访问控制,在CPU特定的数据结构中维持EPC entry的有效性和Enclave的访问权限(R/W/X)以及EPC页的类型(PT_SECS/PT_TCS/PT_REG/PT_VA/PT_TRIM)。 SSA:State Save Area, 当Enclave切换到Non-Enclave模式时,如Enclave运行中遇到CPU中断,会发生上下文切换,保存Enclave的上下文到EPC中保留区域,这部分区域叫做状态保留区域,在resume时再恢复。 SECS:SGX Enclave Control Structure,每个Enclave都对应着一个SECS,它是用于表示Enclave属性的数据结构,存储在EPC内存页,包含了Enclave所需的元数据信息,如存储Enclave构建时的度量值MRENCLAVE,是硬件保护Enclave的关键要素。文中探究的Enclave Debug属性也是包含在该数据结构中的ATTRIBUTES域里。整个数据结构不可被Non-Enclave 软件访问。 TCS:Thread Control Structure,每个运行着的Enclave拥有一个或者多个TCS。TCS是硬件进入/退出Enclave时用来存储/恢复线程相关信息的数据结构,保存在EPC内存页。TCS的FLAGS域可被Non-Enclave软件访问,TCS.FLAGS.DBGOPTIN 用于使能Enclave的debug属性(如TF, breakpoints),Debug模式的Enclave可通过调试器修改该位。 MRSIGNER:对Enclave签名密钥对中公钥的SHA-256 值。 SIGSTRUCT:Enclave Signature Structure,用于表示Enclave签名相关信息的数据结构。同时也保存着含有Debug 属性的Enclave ATTRIBUTES 域。 EINITTOKEN:EINT Token Structure,Enclave EINIT 时用来检验是否允许该Enclave初始化的令牌。也称为Launch token。令牌数据结构中同时也保存着含有Debug 属性的Enclave ATTRIBUTES 域。 MRENCLAVE:Enclave的唯一识别码,用于记录Enclave从创建到初始化完成整个过程的256 bit的摘要,代表着Enclave本身的TCB。在ECREATE时初始化,EADD/EEXTEND时更新,EINIT后锁定。 AEX:Asynchronous Enclave Exits,Enclave运行时遇到CPU中断等异常事件,退出执行。

3.2 SGX 指令

SGX指令包括特权指令(ENCLS)和用户指令(ENCLU)两大部分,通过在EAX寄存器指定输入值来和ENCLS/ENCLC编码形成不同功能的子函数(指令),其输入/输出参数通过RBX/RCX/RDX寄存器进行指定。ENCLS相关的指令助记符如表1所示。ENCLU相关的指令助记符如表2所示。 表1 ENCLS 指令

3a08d54f73edac93573139ce92fd55bb.png

表2 ENCLU指令

554ef577cd63a9edd77a55cdb8953fc7.png

3.3 SGX 技术实现 SGX技术实现如图3所示,可总结成如下几点: 574aa0415a296ed1b612482968088372.png 图3 SGX 技术实现 SGX应用程序切分成Untrusted和Trusted两部分,Trust部分运行在Enclave中; 由Untrusted部分的应用程序通过ioctl系统调用的方式调用ENCLS指令创建出Enclave,并把Trust部分的代码加载到Enclave里执行; Untrusted部分的应用通过特殊的调用接口Ecalls调用Enclave里函数的执行; 当Enclave里的函数被调用后,仅仅Enclave里的代码可访问其数据,外部的程序——不管是普通的应用程序,还是具备特权的OS、VMM、Bios都无法访问。当Enclave里的函数返回后,其数据仍保留在内存保护区; Enclave拥有自己的代码和数据区,SGX保证代码和数据的完整和保密性。Enclave的入口点是在编译阶段预定义好,支持多线程,可访问整个Application的内存空间。下一小节详述Enclave. EPC是SGX的内存管理核心,属于Enclave的相关数据结构和代码以及数据的存放处,是经过MEE加密存储,外部程序无法获取其实际内容,逻辑上如图4所示。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值