Repurposing Segmentation as a Practical LVI-NULL Mitigation in SGX【USENIX`22】

news2024/11/25 2:04:42

目录

  • 摘要
  • 引言
    • 贡献
  • 背景
    • 瞬态执行攻击
    • 负载值注入
      • LVI-NULL
    • Intel SGX
    • 虚拟内存与分段
    • 对象重新定位
  • 威胁模型
    • 硬件
    • 软件

摘要

负载值注入(LVI)在类似Spectre的混乱代理攻击中使用Meltdown类型的数据流。LVI已经在对英特尔SGX飞地的实际攻击中得到了证明,因此,部署的缓解措施会产生2到19倍的巨大开销。然而,正如我们所发现的,在固定硬件上,LVI-NULL泄漏仍然存在。因此,为了减轻LVI固定CPU上SGX包围区中的LVI-NULL,仍然需要昂贵的缓解措施。

在本文中,我们提出了一种针对SGX中LVI-NULL的轻量级缓解,LVI-NULLify。我们系统地分析和分类LVI-NULL变体。我们的分析表明,以前提出的针对LVI-NULL的缓解措施是无效的。我们的新缓解措施通过重新调整分段的用途来解决这个问题,分段是x86已经用于每个内存操作的快速遗留硬件机制。LVINULify由一个修改后的SGX-SDK和一个编译器扩展组成,该扩展将包围区置于LVI-NULL可利用内存位置的控制之下。我们在LVI固定的Comet Lake CPU上评估了LVI NULLify,并观察到在最坏情况下性能开销低于10%,这大大低于以前的防御,在最坏的情况下开销高达1220%。我们得出的结论是,LVI-NULLify是目前保护SGX飞地免受LVI-NULL攻击的实用解决方案。

引言

瞬态执行攻击,即Meltdown[41]、Spectre[34]或ZombieLoad[52],是用于泄露敏感数据的强大微体系结构攻击。这些攻击通常分为Spectre型和Meltdown型攻击[8]。Spectretype攻击[18,33,34,36,42]利用错误预测分支后的瞬态指令未提交,但仍在微体系结构状态下留下痕迹。

在负载值注入(LVI)方面,Van Bulk等人[60]提出了一种与Meltdown型攻击相关的新型瞬态执行攻击。Meltdown型攻击触发攻击者域中的错误负载暂时消耗其值,从而绕过权限检查。LVI导致受害者域中的故障,使受害者暂时消耗攻击者的值,即LVI暂时将数据注入受害者。

最近的处理器减轻了硅中的Meltdown型攻击[27],例如,Comet Lake处理器没有已知的Meltdown型漏洞。由于Meltdown类型攻击的硬件防御通常也可以减轻相应的LVI攻击,因此攻击者无法将任意数据注入受害者域。然而,在一些微体系结构上,硬件防御并没有从受害者域返回值,而是只将值清零[7,60]。虽然这可以防止数据泄露,但它可以用作侧通道来检测地址是否有效,例如,破坏KASLR[7]。更糟糕的是,这在LVI攻击变体中仍然是可利用的,即LVI-NULL[60]。使用LVI-NULL,攻击者仍然可以将“0”值注入受害者域。

LVI论文显示了LVI-NULL在AES-NI攻击中的危险,但LVI-NULL的拟议防御措施尚未得到彻底评估[60]。虽然LVI的软件解决方案也可以防止LVI-NULL,但成本高昂,英特尔建议开发人员“应根据风险分析和缓解对性能影响的评估,确定其环境所需的软件强化级别”[29]。每个加载指令都可能发生故障,需要为此类指令设置内存围栏[60]。这还包括用其他指令序列替换某些指令,例如返回指令[29,60]。在现实世界的工作负载上,这些缓解措施的最坏情况开销介于系数2和19之间[38,60]。这就提出了一个问题,即在具有针对LVI的硬件缓解措施的处理器上,是否仍然需要这些昂贵得令人望而却步的防御措施来防御LVI-NULL

在本文中,我们提出了一种针对SGX中LVI-NULL的轻量级缓解措施。我们的缓解措施LVI-NULLify建立在对LVI-NULL变体的系统分析之上,对每个变体的攻击构建块产生了新的见解。特别是,我们发现六分之四的变体依赖于指针重定向到空页面。基于我们的分析和实验验证,我们发现Van Bulk等人[60]提出的LVI-NULL缓解措施是无效的。

LVI NULLify的思想是相对于包围区的存储器区域的开始来偏移在SGX包围区内执行的所有存储器访问。为了实现此属性,LVINULify重新调整了分段的用途。分段是x86上的一种快速遗留硬件机制,用于每次内存操作的地址转换。LVI NULLify的第一部分是一个编译器扩展,它只生成与段相关的数据加载。因此,任何“0”注入都只从包围区的内存区域开始加载数据,该内存区域完全由SGX包围区控制。LVI NULLify的第二部分是一个经过修改的SGX-SDK,用于维护与不可信用户空间程序的互操作性。

LVI NULLify的安全性依赖于飞地存储区域的特殊准备,从而减少任意值的瞬态注入。LVI NULLify将包围区内存区域中的第一页标记为不可执行。临时执行不可执行内存会导致立即停止,从而防止任何攻击。LVI NULLify还将这些页面标记为不可读。我们根据经验验证了这会立即暂停加载和相关指令。

在我们的评估中,我们表明LVI NULLify非常轻量级,在最坏的情况下运行时开销低于10%。这比以前针对LVI的防御要快得多,在我们测试的最坏情况下,其开销高达1220%。LVI NULLify的内存开销约为代码大小的21.5%,这是由于生成了明确使用分段的指令序列。我们说明了我们的缓解措施是一种实用的解决方案,可以保护易受LVI-NULL攻击但不易受LVI攻击的硬件上的SGX飞地。

贡献

我们系统地分析和分类LVI-NULL变体,揭示了常见的攻击需求和先前提出的防御的不足。

我们提出了LVI-NULLify,这是一种针对SGX中LVI-NULL的新的轻量级防御,以一种特殊的方式重新调整了分割的用途。

我们评估了LVINLLify的安全性和性能。我们证明了LVIfixed Comet Lake CPU上的SGX飞地只有通过我们的防御才是安全的。我们观察到性能开销低于10%。

背景

瞬态执行攻击

瞬态执行攻击[8]是一类新的攻击,利用所谓的瞬态指令(即已执行但从未失效的指令)来泄露敏感数据。Kocher等人[34]用Spectre引入了第一个子类,而Lipp等人[41]用Meltdown引入了第二个子类。当Spectre攻击利用硬件做出的控制或数据流预测时,Meltdown在从不同的安全域访问内存时利用延迟的权限检查。这种延迟权限检查允许无序执行对缓存中通常不可访问的数据进行编码,然后攻击者从缓存中提取数据。随后的工作显示了这两个子类中的其他变体[4,8,18,33,42,44,52,53,57,69]。其他工作总结了过渡执行攻击[5,8,70]和防御[6,8]的最新技术。

负载值注入

负载值注入(LVI)通过利用受害者的故障来扭转Meltdown[60]。因此,LVI将值注入到故障受害者的瞬态执行中,而不是泄漏值。对于LVI,攻击者准备一个微体系结构缓冲区,例如存储缓冲区或L1,方法是用应该注入受害者的值填充它。然后,受害者在从内存中获取数据以临时使用攻击者注入的值时,必须遭受故障或微码协助。随后,利用注入值执行后续指令,对微体系结构中的机密进行编码,或劫持控制或数据流。与Spectre类似,LVI要求小工具位于受害者体内,并且必须额外引发故障或协助受害者。

对于未缓解的处理器,LVI的最先进解决方案是在内存加载后插入lfence指令[29]。这些围栏确保故障负载在下一条指令之前失效,从而有效地停止LVI的所有变体。然而,这种类型的软件缓解会带来因子2和19之间的性能损失[38,60]。

LVI-NULL

从Cascade Lake微体系结构开始,Intel处理器包括针对Meltdown、Foreshadow和MDS攻击的硅内缓解措施,包括LVI[27]。这些缓解措施防止通过所有当前已知的缓冲器进行非零值注入。但是,这种缓解措施只能防止攻击者注入攻击者控制的数据。故障负载仍然暂时将“0”转发到相关指令[7,60],而不是停滞。因此,通过在受害者域中引发故障,攻击者将常数值“0”注入受害者的瞬态执行中。LVI的这种变体称为LVI-NULL。即使注入“0”也可能被利用效果,例如,将完全由“0”组成的循环密钥临时注入AES-NI计算[60]。

Comet Lake系列代表了英特尔最新的SGXenabled一代,可用于受LVI-NULL影响的移动和桌面工作站型号[27]。基于Sunny Cove架构的Ice Lake处理器似乎不受LVI-NULL的影响[27]。

Intel SGX

为了为安全飞地提供处理器级别的隔离和证明,英特尔开发了软件保护扩展插件(SGX)[12]。根据设计,SGX假定只有处理器是可信的。因此,攻击者可以在仍然处于威胁模型内的情况下完全控制操作系统。

运行安全飞地时,它会被放置在不受信任的用户空间进程的虚拟地址空间中。虽然操作系统不受信任,但它仍然负责维护虚拟到物理地址的映射。自然,这将使飞地容易受到地址重新映射攻击[12]。为了防止这些情况,SGX在Enclave Page Cache Map(EPCM)中维护自己的影子条目,该条目包含每个有效飞地页面的预期虚拟地址和许可位(R-W-X)。如果遇到非法的虚拟到物理映射,则会引发EPCM页面错误。

尽管侧信道攻击不在SGX威胁模型的范围内,但先前的工作表明,可以对SGX发起强大的侧信道攻击。根攻击者仍然可以通过缓存[2,43,50]、页表访问[62,64,71]、中断定时[63]或分支预测器[14,19,40]发起低噪声侧信道攻击。SGX也容易受到瞬态执行攻击[9,52,59,65],英特尔已经发布了微码更新来抵御这些攻击[23,25]。

虚拟内存与分段

在现代系统中,虚拟地址空间被用作抽象和隔离进程。因此,它们是由硬件本机支持的。每个进程都在自己的、基本上不重叠的虚拟地址空间中工作,不会无意中干扰另一个进程的内存。使用的虚拟地址需要使用多级页面转换表转换为相应的物理地址。当前进程的表的位置由专用寄存器指示,并由操作系统在上下文切换时切换。

除了分页之外,另一个概念是分段。其想法是拥有一组用于不同用途的分段,例如代码、数据、堆栈。虽然较旧的处理器使用分段来使用更多的物理内存,但较新的处理器主要将其用作保护机制。

段通过位于内存中的段描述符进行配置,然后与分页一起使用。每个段描述符都有一个基地址和一个限制。在地址转换期间,CPU将基地址添加到分段的虚拟地址,从而产生非分段的虚拟寻址。一些指令隐式地使用段(例如,堆栈段的推送和弹出),并且通过代码段隐式地执行代码获取。数据段可以显式地与内存引用指令一起使用。

在现代系统中,分页已经完全取代了虚拟地址转换的分段。因此,处理器制造商在64位长模式(IA-32e)中删除了除fs和gs以外的所有段的这一功能。现在,除这两个段外,所有段都要求基数为0和最大可能大小。fs和gs段仍然支持base和limit,因为它们被广泛用于实现用户线程的线程本地存储和操作系统中的核心本地存储。因此,要在64位系统上使用分段的基本和极限特性,用户级软件必须使用使用fs或gs的指令,并且操作系统必须设置具有基本和极限的fs或gs。

对象重新定位

重新定位是ELF文件格式的重要组成部分[1,13]。如果在对象文件中引用了一个符号,则链接器或动态加载程序必须解析该符号的地址,并将该引用的所有引用替换为实际的符号地址。重定位类型指定应如何计算此地址以及引用哪个符号。

SGX包围区的行为类似于动态库,可以加载到主程序虚拟地址空间内的任意地址上。因此,包围区和动态库需要一种机制来调整图像内的地址,以指向地址空间中的所需位置。实现这一点的最常见方法是使用相对寻址,其中库中的所有绝对地址都是通过指令指针计算的。这种类型的重新定位可以在链接动态库的过程中解决。

与相对寻址相反,动态库还支持绝对寻址,其中动态加载器在加载映像的基地址已知之后解析地址。这里,加载程序用实际的符号地址替换动态库中的占位符。

威胁模型

硬件

对于我们的缓解措施,我们假设当前或未来的Intel处理器带有SGX,可以缓解硬件中的LVI,但不会阻止LVI-NULL,例如Comet Lake微体系结构。我们假设不存在直接从飞地泄露数据的Meltdown类型的瞬态执行攻击[41,52,59,65]。此外,Rowhammer[16,30,32]或电压不足[31,45,47]等硬件漏洞超出了范围。我们还假设Spectre类型的攻击[8,9,34]可以在硬件、固件或软件中得到缓解。此外,我们假设超线程将被禁用。“英特尔SGX验证服务”指示是否启用了超线程,以便验证方可以强制执行其状态。

软件

我们假设一个特权攻击者明确在英特尔SGX威胁模型的范围内。对于飞地,我们假设它不易受到传统的侧通道攻击,如缓存攻击[2,43,50]或控制通道攻击[71]。我们假设攻击者可以根据需要经常启动飞地,因此依赖于精确的执行控制,例如单步或零步[62]。飞地中的错误,例如同步问题[49,66],或ABI或API级别上的验证丢失[61],超出了范围。

我们只考虑64位飞地,因为飞地可以通过32位分割[17]进行攻击(参见第2.4节),但由于行为的差异,不能通过64位分割进行攻击。

要点:我们的缓解措施针对易受LVI-NULL攻击的CPU上的64位SGX飞地,但不易受LVI攻击。
图1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1043181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【深度学习实验】卷积神经网络(三):自定义二维卷积层:步长、填充、输入输出通道

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 步长、填充 a. 二维互相关运算(corr2d) b. 二维卷积层类(Conv2D) c. 模型测试 d. 代码整合 2. 输入输出通道 a…

面试打底稿④ 专业技能的第四部分

简历原文 抽查部分 了解Python的使用(第一篇关于Python升级版本bug解决的文章斩获6W阅读),用python实现了几篇图像信息隐藏领 域论文的复现(博客中有提及); 了解Django基本框架,写过Django框架的…

手把手教你实现法玛三因子模型

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

xxl-job 执行器注册成功,但是xxl-admin 不显示

问题:项目启动成功后,日志显示执行器注册成功,但是xxl-job-admin 管理页面后台确无法查看到执行器信息。 经过百度后并结合官方文档说明,执行器客户端启动完成后,数据只会放在注册表xxl_job_registry 中。 而执行器管…

隐语 Meetup 北京站|精彩时刻大盘点!新品发布、行业案例、专家解读......欢迎围观

“隐语”是开源的可信隐私计算框架,内置 MPC、TEE、同态等多种密态计算虚拟设备供灵活选择,提供丰富的联邦学习算法和差分隐私机制 开源项目 github.com/secretflow gitee.com/secretflow 9月23日,隐语开源社区 Meetup 北京专场顺利举行&am…

sox音频处理和ffmpeg评测

ffmpeg音频处理不如sox,ffmpeg切分,最低切分是0.1秒,而sox可以切分更小单位0.001这种 ffmpeg处理视频等功能更全。 命令 ffmpeg -i 2.wav -y -ss 0.01 -acodec copy test.wav sox 2.wav output2.wav trim 0.01

redis部署与管理

目录 一、关系数据库与非关系型数据库: 1. 关系型数据库: 2.非关系型数据库: 二、关系型数据库和非关系型数据库区别: (1)数据存储方式不同: (2)扩展方式不同&#xf…

【100天精通Python】Day67:Python可视化_Matplotlib 绘制动画,2D、3D 动画 示例+代码

1 绘制2D动画(animation) Matplotlib是一个Python绘图库,它提供了丰富的绘图功能,包括绘制动画。要绘制动画,Matplotlib提供了FuncAnimation类,允许您创建基于函数的动画。下面是一个详细的Matplotlib动画示…

Django — 类视图和中间件

目录 一、类视图1、基于类的结构2、常见的类视图基类3、类视图的优点4、代码案例 二、中间件1、定义2、工作原理3、自带中间件4、中间件开发流程5、自定义中间件6、案例 一、类视图 类视图(Class-Based Views)是 Django 中用于处理 HTTP 请求和生成 HTT…

24届近3年河海大学自动化考研院校

⚜️所谓又专又精,专是指我们售后群团队上百人都是自动化研究生,精是指我们只做自动化这一门专业学科7年了,研究到极致! 🔉今天学长给大家带来的是河海大学控制考研分析 满满干货~还不快快点赞收藏 目录…

XC9700 单通道限流电流负载开关 低内阻负载开关

XC9700是一种低成本、低电压、单P-MOSFET负载开关,为自供电和总线供电的通用串行总线(USB)应用进行了优化。该开关的输入范围从2.4V到5.5V,使它非常适合3V和5V系统。该开关的低RDS(ON),80mΩ&am…

怒刷LeetCode的第16天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一:迭代 方法二:模拟 方法三:循环模拟 方法四:传递 第二题 题目来源 题目内容 解决方法 方法一:回溯 方法二:枚举优化 第三题 题目来源 题目…

Unity之NetCode多人网络游戏联机对战教程(3)--NetworkObject组件讲解

文章目录 NetworkObjectAlways Replicate As RootSynchronization TransformActive Scene SynchronizationScene Migration SynchronizationSpawn With ObserversDont Destroy With OwnerAuto Object Parent Sync 后话 NetworkObject 为了复制任何Netcode感知属性或发送/接收R…

Linux生产者和消费者模型 条件变量 信号量

/*条件变量类型 pthread_cond_tint pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);int pthread_cond_destory(pthread_cond_t * cond);int pthread_cond_wait(pthread_cond_t *restrict cond, const pthread_mutex_t *restrict …

人生第一个java项目 学生管理系统

开始编程 建类 开始主要部分 main()部分 方法部分

Nodejs+vue高校机房设备管理系统jt07u

开发语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 集成IDE对高校机房设备管理系统统进行开发,整合系统的各个模块。 拟开发的高校机房设备管理系统通过测试,确保在最大负载的情况下…

新型crypt勒索病毒,都有哪些特征?勒索病毒解密,数据恢复

近日,云天数据恢复中心在接受用户咨询的过程中发现,市场上悄然出现了一种新型的勒索病毒——crypt勒索病毒,接下来我们将这种类型的勒索病毒做一个全面的分析。 一,中了crypt勒索病毒的特征 在桌面以及多个文件夹中都有一个名称为…

matlab产生指定功率的噪声信号、固定SNR的信号

randn函数产生噪声信号 首先要理解信号的幅度和功率,例如信号的幅度为 U U U,那么信号的功率就是 U 2 U^2 U2,他们之间是平方的关系。 matlab中randn函数用法,产生正态分布的随机数或矩阵的函数。 randn:产生均值为0…

基于Java+vue开发的企事业移动培训考试平台

随着移动互联网的快速发展,越来越多的企业开始关注移动培训和考试平台的开发。为了满足这一需求,我们可以使用Java和Vue来开发一个基于移动端的企事业培训考试平台。 一、背景和需求 企事业移动培训考试平台是一个基于Web的应用程序,旨在提…

el-upload上传文件(vue2,Element中的 el-upload文件上传)

简介:el-upload是一个基于Element UI的上传组件,大家应该都知道,它可以方便地实现文件上传功能,今天来记录下如何(在vue2中)使用el-upload上传文件。 1、首先,我们想要使用el-upload&#xff0c…