
Intel SGX
文章平均质量分 65
小气球归来
https://leonechen.github.io
展开
-
SGXFuzz软件栈
SGXFuzz软件栈原创 2022-12-20 16:17:19 · 542 阅读 · 4 评论 -
OCaml实用工具
Ocaml入门原创 2022-09-25 00:17:51 · 1179 阅读 · 0 评论 -
使用Intel Vtune分析SGX应用性能
使用Intel Vtune分析SGX应用性能原创 2022-06-24 11:41:11 · 375 阅读 · 0 评论 -
Gramine(原graphene-sgx)软件栈
Gramine(原graphene-sgx)软件栈原创 2022-06-05 19:02:30 · 1261 阅读 · 2 评论 -
《SmashEx: Smashing SGX Enclaves Using Exceptions(CCS 2021)》阅读笔记
《SmashEx: Smashing SGX Enclaves Using Exceptions(CCS 2021)》阅读笔记原创 2022-04-13 12:36:02 · 550 阅读 · 0 评论 -
【SGX】Ocall Proxy处调用Ocall出现异常的解决办法
【SGX】Ocall Proxy处调用Ocall出现异常的解决办法原创 2021-12-18 17:13:46 · 335 阅读 · 0 评论 -
SGX Enclave TLS (Thread Local Storage)
TLS支持情况Enclave目前部分支持Thread Local Storage,即支持__thread限定符,但不支持thread_lcoal限定符。__thread相比thread_lcoal,只支持将变量在TLS区域分配内存,不能进行初始化等操作。为什么不能支持thread_lcoal?Enclave TLS的配置编译时,TLS的变量的常量表达式结果(如果有,若没有,用0填充)按照指定的偏移存储到.tbss Section(在ELF文件的08 Segment中)。$ readelf encl原创 2021-12-03 23:29:23 · 1169 阅读 · 0 评论 -
SGX问答
前言有些问题比较常见,在这里直接将问答内容贴出来,方便大家搜索。有空再重新组织文字。(我会避免泄露私人信息)内存地址翻译全部交给os,那中间经过cache也是全部交给os是嘛?这个cache这部分,enclave中是怎么处理的呢?page walk依旧是os来做,但是SGX特有的EPCM会确保这个page walk的结果是正确未被篡改的。cache属于cpu内的微架构,cpu内的数据流都是明文的。将要流向epc的数据流在离开cpu时,进入总线前,被mee加密。当epc evict时,会由指令里的原创 2021-11-21 19:00:05 · 5130 阅读 · 13 评论 -
SGX_SQLite【源码分析】
SGX_SQLite【源码分析】原创 2021-11-04 21:30:46 · 722 阅读 · 12 评论 -
《Graphene-SGX: A Practical Library OS for UnmodifiedApplications on SGX (ATC‘17)》笔记
2.2 SGX Software Design SpaceSGX应用及Graphene-SGX等Shielding Framework的开发过程中面临的一个问题是把多少功能给塞进Enclave中。两个重要的考量是:由于Enclave切换环境开销大,如何尽量减少进出Enclave?由于Enclave物理内存(EPC)有限,如何避免使用内存过大导致EPC出现Swap并影响性能的情况?Shielding complexity 应用放到Enclave中有时候必须要一些内核功能,对此需要开放接口使用不可信原创 2021-10-03 15:46:06 · 867 阅读 · 4 评论 -
《SGXBOUNDS: Memory Safety for Shielded Execution(EuroSys‘17)》笔记
简介在检查Enclave的内存安全问题时基于Intel MPX的方案会额外造成100倍的虚拟内存开销,当原始工作集消耗内存60M时,Enclave会因为没有空闲虚拟内存而崩溃。基于ASAN的方案会额外造成3.1倍的性能开销和3.1倍的虚拟内存开销,当原始工作集消耗700-800M时,Enclave会因为没有空闲虚拟内存而崩溃。SGXBounds利用SGX Enclave内指针高32位空闲的特点,将Tag放置其中表示内存对象的Upper Bound值(内存对象后紧跟其Lower Bound值,万一M原创 2021-08-19 20:56:01 · 474 阅读 · 0 评论 -
SGXRay笔记
百度XLab的SGXRay在BlackHat2021上演讲了,目前还没有相关YouTube视频。相关链接如BlackHat官网链接、Github和“百度安全实验室”公众号SGXRay提到了针对Enclave内存建模,关注跨越Enclave边界的数据流,基于SMACK进行程序验证。应该可以将其归为静态方法,在此之前有COIN Attack和TeeRex两篇使用符号执行技术进行SGX漏洞自动化挖掘的工作,TeeRex关注了Enclave输入产生的危害。...原创 2021-08-06 00:48:51 · 302 阅读 · 0 评论 -
《COIN Attack (ASPLOS‘20)》笔记
《COIN Attack (ASPLOS‘20)》笔记原创 2021-07-19 22:45:44 · 332 阅读 · 0 评论 -
COIN Attacks【源码分析】
COIN Attacks【源码分析】原创 2021-07-16 17:32:13 · 343 阅读 · 0 评论 -
0xbadc0de备忘录
0xbadc0de包含针对SGX软件栈的若干漏洞利用POC。SGX-LKLSignal HandlerSample OutSample output../../build/sgx-lkl-run sgxlkl-disk.img app/helloworldsgx.c: ubase = 0x7feed8000000, size = 5d7f -> end = 0x7feed8005d7eubase = 0x7feed8000000enclave: super secret string原创 2021-06-22 18:21:58 · 295 阅读 · 9 评论 -
Ubuntu20.04安装Qemu-SGX
基本参考Here.安装kvm-sgx安装kvm-sgx,也就是安装包含了支持SGX特性的KVM的内核。但内核编译过程中会遇到关于debian/canonical-certs.pem的错误,对此可以参考Here创建一对密钥,并将公钥注册到机器上。安装qemu-sgx安装qemu-sgx前,为了支持usb-redir,需要安装一些apt包sudo apt-get install libusb-dev libusbredirparser-dev和pip包sudo pip3 install meson n原创 2021-06-19 22:53:33 · 1792 阅读 · 5 评论 -
《A Tale of Two Worlds (CCS‘19)》笔记
介绍Jo Van Bulck针对接口消毒代码( Sanitization)从ABI、API层面寻找漏洞,即 Enclave Interface Sanitization Vulnerabilities。漏洞涉及Intel SGX-SDK(Edger8r)、Microsoft OpenEnclave(Deep Copy Marshalling)、Google Asylo和Rust Compiler等项目。DarkROP、Guard‘s Dilemma更关注在Enclave利用传统内存安全漏洞,而A Tal原创 2021-06-08 00:15:50 · 613 阅读 · 0 评论 -
OpenEnclave简单分析
简介OpenEnclave(缩写为OE)是微软开发的TEE软件栈,它支持Intel SGX和OP-TEE OS on ARM TrustZone,【OpenEnclave提供的SGX软件栈有别于Intel SGX软件栈(如linux-sgx),两者互为替代关系】。OpenEnclave支持C/C++运行时。OpenEnclave主要的一个用途是在微软Azure云上保护目标安全。架构OpenEnclave和linux-sgx在SGX软件栈方面架构上非常相近,但实现细节有些区别。OpenEnclave原创 2021-06-07 15:46:27 · 1658 阅读 · 0 评论 -
《TeeRex (Sec‘20)》笔记
Introduce《TeeRex: Discovery and Exploitation of Memory Corruption Vulnerabilities in SGX Enclaves》是Tobias Cloosters、Michael Rodler、Lucas Davi发表在USENIX Security 2020的论文。主要讨论了使用符号执行技术挖掘SGX软件层内存破坏(Memory Corruption)漏洞,这一类漏洞的特征包括跨越Host-to-Enclave Boundary(这是内原创 2021-06-06 18:03:05 · 1000 阅读 · 6 评论 -
Google Asylo简单分析
简单分析了一下Google Asylo介绍Asylo 是一个开源框架,助力Enclave应用程序开发。Asylo 能够帮助Enclave开发者使用一系列新兴的可信执行环境 (TEE),包括采用软件和硬件隔离技术实现的TEE,更具体来说包括如Intel SGX、ARM TrustZone提供的Enclave。⋆ Google Asylo大量运用了ABSL库。Google Asylo与Intel SGX PSW&SDK的关系Google Asylo和linux-sgx(linux平原创 2021-06-02 23:33:58 · 854 阅读 · 0 评论 -
修改linux-sgx软件栈时节省无关模块编译时间
在修改linux-sgx之后往往需要重新linux-sgx来验证所修改代码的效果,但是重新编译会耗费大量时间,所以可以考虑手动地单独地将所修改代码重新编译成库并拷贝到SGX安装时的路径。举例来说,如果修改了linux-sgx/sdk/trts目录下的源文件的代码,那么可以简单地对trts目录里的内容重新编译,然后将生成的库文件拷贝到${SGX安装目录}(如/opt/intel/sgxsdk)/lib中,如果是修改了linux-sgx/common/inc/里的向外暴露的头文件,可以将修改后的头文件直接拷原创 2021-04-22 17:18:05 · 225 阅读 · 0 评论 -
Intel® Speed Select Technology
2019年CascadeLake架构的部分CPU引入Intel SST(Intel® Speed Select Technology),方面用户手动调整每个核(Core)的频率。https://en.wikichip.org/wiki/intel/speed_select_technologyhttps://www.intel.cn/content/www/cn/zh/architecture-and-technology/speed-select-technology-article.html原创 2021-02-09 20:55:55 · 1206 阅读 · 1 评论 -
SGX AEX流程图
AEX流程图原创 2021-02-05 14:14:34 · 556 阅读 · 0 评论 -
Intel MEE《A Memory Encryption Engine Suitable for General Purpose Processors》笔记
《A Memory Encryption Engine Suitable for General Purpose Processors》一篇技术性的文章,讲述了SGX中Intel MEE的设计的初衷、目标、实现细节等等。Intel MEE最为关键的是保护了CPU-DRAM(DRAM中的EPC) Traffic上的信息安全(机密性、保证性、新鲜度)。总的来说,机密性是通过加密进行保护的,既MEE对离开CPU的信息进行加密,比如存放到EPC的信息都是加密过的,这个加密密钥是每次开机加电时(?)CPU原创 2021-01-04 22:55:08 · 793 阅读 · 0 评论 -
sgx-gdb调试SGX Enclave
sgx-gdb及SGX Enclave调试原创 2020-12-28 11:37:47 · 1929 阅读 · 0 评论 -
IceLake支持SGX2,EPC内存最高达1TB
已有至强和酷睿CPU支持IceLake架构。SGX2新增EDMM(Enclave Dynamic Memory Management)特性,支持动态调整Enclave所用物理内存。SGX2还支持EPC大内存,最高达1TB。SGX1中用于加密内存的Intel MEE被改为Intel TME。但TME不再维护哈希树,即不提供完整性保护。其他消息原创 2020-10-21 00:13:01 · 2207 阅读 · 5 评论 -
Game of Threads POC【源码分析】
设置SIGTERM信号句柄使用【sigaction】来注册SIGTERM的处理句柄【handler】,该句柄会将当前线程给(作者自定义的)终止,通过设置【kill_thread】数组项(每一项是对应一个线程是否需要Kill的标志位)。将【sealed_buf】指针的地址按照4KB对齐...原创 2020-11-10 16:20:09 · 1230 阅读 · 2 评论 -
OCALL Switchless模式
以SampleCode/Switchless为例。从Enclave内部以Swtichless模式调用OCALL// SampleCode/Switchless/Enclave/Enclave.cppvoid ecall_repeat_ocalls(unsigned long nrepeats, int use_switchless) { sgx_status_t(*ocall_fn)(void) = use_switchless ? ocall_empty_switchless : oc原创 2020-10-10 16:55:05 · 465 阅读 · 0 评论 -
SGX EDGER8R
这个sgx_edger8r是用OCAML写的。《OCaml教程》生成ECALL表【gen_ecall_table】,位于【sdk/edger8r/linux/CodeGen.ml】(* `gen_ecall_table' is used to generate ECALL table with the following form: SGX_EXTERNC const struct { size_t nr_ecall; /* number of ECALLs */原创 2020-09-28 12:04:58 · 637 阅读 · 0 评论 -
《SGX ECALL》汇总
目录ECALL Ordinary(Switch)和Switchless的入门介绍请看《ECALL的Swtich和Switchless简介》想要深究ECALL Ordinary(Switch)调用的细节,请看《ECALL Switch/Ordinary模式》对于ECALLSwitchless模式,需要在SGX初始化时候完成uRTS端的SGX Switchless初始化。简介请看《SGX TCS构建及Switchless初始化简介》想要知道uRTS端的SGX Switchle...原创 2020-09-19 18:23:13 · 1421 阅读 · 0 评论 -
ECALL Swtichless调用及tRTS端Swtichless初始化
以SampleCode/Switchless为例讲解ECALLSwitchless的代码流程void ecall_empty_switchless(void) {}【ecall_empty_switchless】是这个例子中用到的典型的Swtichless ECALL,函数里面啥也不执行。那编译的时候怎么能够知道这个函数是使用ECALL Swtichless模式呢?总不能函数符号名里面加一个Swtichless就说明它是Switchless模式的ECALL吧。这可能是个方法,但是无形地会限制.原创 2020-09-17 16:42:40 · 586 阅读 · 0 评论 -
SGXv2.8起Enclave内新增pthread库
SGX v2.8开始Enclave内部开始新增pthread库。在这之前,Enclave内部只能维护互斥量同步机制、读写锁同步机制、条件变量同步机制。如下图所示SGX内部一开始不支持创建pthread线程的原因是因为线程的管理涉及到系统调用,这并不是用户态的Enclave能够完成的。而现在SGXv2.8之后,为什么能支持SGX内部创建pthread线程呢?简单来说tRTS pthread最终需要通过OCALL切换到uRTS进行线程管理,只是说tRTS内提供了一些API让SGX内部能够..原创 2020-09-16 20:51:48 · 795 阅读 · 0 评论 -
ECALL Switch/Ordinary模式
SGX初始化中,我们就碰到过切换上下文进入Enclave的场景在SGX初始化过程中,我们其实就碰到了需要切换上下文进入Enclave完成【ECMD_INIT_ENCLAVE】任务,这个任务主要是为了在tRTS内完成一些必要的SGX初始化工作。在《再回顾SGX初始化(三)》中我们提到过。又比如在支持EDMM时,我们可能需要动态生成TCS,那么也需要切换上下文进入Enclave完成【ECMD_MKTCS】任务,用于动态生成TCS。在《再回顾SGX初始化(四)》、《构建动态TCS页》中我们提到过。以【原创 2020-09-15 17:01:47 · 1049 阅读 · 6 评论 -
SGX初始化中,uRTS端的Switchless模式的初始化
由于各种需求的不断增加,SGX现在新增了PCL、KSS、Switchless这三种扩展功能。其中Switchless是为了尽可能避免传统ECALL切换上下文的开销而提出的,简单说,就是预先在Enclave内部安置一些工人线程在Enclave外部调用ECALL时由Enclave内部工人线程代理执行,这里讲的是ECALL的Switchless模式调用,OCALL类似。SGX初始化的最后一步就是对Switchless模式的初始化。掉用【CEnclave::init_uswitchless】。概念性的简原创 2020-09-15 11:35:04 · 715 阅读 · 0 评论 -
构建动态TCS页
目录进入Enclave来构建动态TCS确保当前线程是通用线程(Utility Thread)Enclave内部记录下TCS地址开始构建TCS退出Enclave,让SGX驱动构建TCS页回到Enclave,接受SGX驱动对TCS页的构建操作如果支持EDMM,我们就可以动态生产TCS,因此一开始我们可能只给一部分TCS分配好空间,还有一部分动态TCS并未分配空间,这些动态TCS按需生成。那么下面就要介绍如何动态生成这些动态TCS。进入Enclave的目的编号是【ECMD_MKTC原创 2020-09-12 18:59:13 · 350 阅读 · 0 评论 -
Enclave OCALL或退出
目录正常退出Enclave执行OCALLsgx_ocall(tRTS)do_ocall(tRTS)__morestack(tRTS, AS)do_ocall(tRTS,AS)__morestack(uRTS, AS)stack_sticker(uRTS, AS)sgx_ocall(uRTS)CEnclave::ocall(uRTS)do_ocall(uRTS)OCALL执行完毕SGX OCALL的流程如下,通过EEXIT来退出Enclave。正常退出E原创 2020-09-12 18:47:07 · 499 阅读 · 0 评论 -
再回顾SGX初始化(四)——收尾及Switchless初始化
继《再回顾SGX初始化(三)——uRTS维护Enclave、tRTS完成Enclave构建收尾确认工作》之后,我们又回到了uRTS的__create_enclave函数。此时uRTS、tRTS两边都已经完成了Enclave初始化工作,也就是说Enclave内外两边都已经搞定了Enclave初始化所需要的工作。那么就继续__create_enclave函数的漫漫长征路。裁剪页放到Trimmed列表if (SGX_SUCCESS != (ret = loader.post_init_action_原创 2020-09-11 13:38:20 · 470 阅读 · 0 评论 -
ELF文件与Enclave.so
ELF文件格式左图是链接试图、右图是执行视图。链接视图强调链接器对目标文件及其Section的拼接过程,比如ELF文件、ELF文件映射都是链接视图。执行视图强调在实际执行中的ELF组织形式。《SGX初始化中ELF文件解析》注意这两者是有变化的,这是两套类似的副本,但前者是ELF文件,后者是实际执行的ELF副本,后者由前者提取组成。简单描述一下ELF程序加载的例子,我们首先将各种目标文件(包括可重定位文件、可执行文件、共享目标文件)拼接成ELF文件,由链接器完成。之后我们试图将ELF文件给跑起来(原创 2020-09-06 22:29:28 · 572 阅读 · 0 评论 -
Enclave文件布局信息
https://github.com/intel/linux-sgx/tree/master/SampleCode/SwitchlessHardware Debug Mode编译enclave.signed.so的sections如下所示$ readelf -S enclave.signed.soThere are 34 section headers, starting at offset 0x184d8:节头: [号] 名称 类型 ...原创 2020-09-06 12:38:03 · 2521 阅读 · 0 评论 -
SGX的ELF文件映射配置重定位项
SGX初始化末期通过调用relocate_enclave完成对对ELF文件映射的重定位项进行配置。API如下/* By default all symbol is linked as global symbol by link editor. When call global symbol, * we first call .plt entry. It should have problems if the call goloal symbol when relocation * is not原创 2020-09-04 18:01:39 · 249 阅读 · 0 评论