SGX侧信道攻击防御方法、系统、介质、程序及应用与流程

文档序号:22750606发布日期:2020-10-31 09:44阅读:381来源:国知局
SGX侧信道攻击防御方法、系统、介质、程序及应用与流程

本发明属于网络安全技术领域,尤其涉及一种sgx侧信道攻击防御方法、系统、介质、程序及应用。



背景技术:

随着软件复杂性的提高以提供更丰富的功能,编写无漏洞软件已被广泛认为是一项艰巨的任务。尽管在编程语言,软件测试和操作系统方面都进行了积极的研究,但是软件漏洞仍然以惊人的速度被发现,并且仍然是计算机安全的主要挑战。当软件堆栈受到破坏时,有两种主要的方法可用于实现安全计算:加密算法或安全系统。为了对机密数据进行安全的计算,现有方法对输入进行加密,然后对其进行操作,只有拥有陷门的授权方才能获得计算结果。然而,尽管最近的研究在同态加密上取得了突破,能够对加密数据进行任意计算,但其性能开销仍然较高。另一方面,计算机体系结构社区的解决方法是将可信计算基础(tcb)最小化到仅处理器,从而产生了硬件辅助的可信执行环境(tee)。tee通过仅信任片上系统(soc),从而防御最高特权的软件,例如bios和操作系统。由于认识到这种方法的潜力,所有主要的处理器制造商都开发了类似的硬件原语,例如armtrustzone和intelsgx。这些受信任的执行环境也已在移动和云环境的生产系统中使用。尽管安全区内的应用程序代码和数据受到保护,但防护区仍需要依靠操作系统(os)进行系统服务,例如内存管理和调度。这种依赖为不受信任的特权软件提供了特别的机会,使其可以通过控制侧信道(即页面错误,高速缓存,分支目标缓冲区(btb)和最后分支记录(lbr))来推断可信容器内的秘密)。其中,基于接口的侧信道攻击利用了sgx辅助应用程序的接口调用跟踪。由于语义和确定性的直接可用性,与其他攻击类型相比,接口调用可提供更丰富的信息以进行秘密推理。

目前针对侧信道攻击提出了许多sgx防御侧信道攻击的解决方案。但是这些防御措施只针对特定的侧信道提供了点解决方案,但是基于接口的侧信道攻击包含了时间和空间层面的多种攻击,尚未有方案提供整体化的解决方案,考虑到组合多个点对点解决方案会带来很高的开销,希望找到能解决全部此类基于接口的侧信道攻击的解决方案。

通过上述分析,现有技术存在的问题及缺陷为:目前针对侧信道攻击提出了许多sgx防御侧信道攻击的解决方案只针对特定的侧信道提供了点解决方案,无法防御所有类型的基于接口的侧信道攻击,组合多个解决方案开销高。

解决以上问题及缺陷的难度为:

基于接口的侧信道攻击包含了时间和空间层面的多种攻击,包括接口调用时长,参数大小,返回值大小等等。全面防御此类基于接口的侧信道攻击需要考虑多种技术组合使用,且不能带来较大的开销。考虑到减轻开发人员的工作量,方案需要尽可能无需开发人员手动修改源代码。

解决以上问题及缺陷的意义为:

基于接口的侧信道攻击会破坏sgx的安全保证,可以用于提取安全区应用程序中的秘密,例如,可以用于减小rsa密钥的密钥空间,用于推断网络流量处理路径等等。本发明用于防御基于接口的侧信道攻击,并提供了整体的解决方案,使用本发明不需要对程序源代码进行修改,防御过程由编译器自动执行,且编译后的程序具有良好的性能。



技术实现要素:

针对现有技术存在的问题,本发明提供了一种sgx侧信道攻击防御方法、系统、介质、程序及应用。

本发明是这样实现的,一种sgx侧信道攻击防御方法,所述sgx侧信道攻击防御方法包括:

跟踪安全区输入数据的数据流,找到依赖于输入数据的分支和循环,此类分支和循环将泄漏有关输入数据的侧信道信息;框架读取edl文件以获取所有ecall函数及其参数,作为污点分析的来源;在确定功能和变量之后,使用phasar进行精确的过程间污点分析,识别依赖于安全区输入数据的分支,循环和操作数;

框架隐藏了由于使用了不同的输入数据而被暴露于输出数据和控制流上的基于接口的侧信道信息;使用分支混淆和循环混淆来缓解不同输入数据之间的调用顺序和调用延迟差异;使用恒定大小的包装器以使输出数据的大小恒定。

进一步,所述sgx侧信道攻击防御方法的污点分析的结果混淆以保护隐私的内存访问和条件分支语句的列表。

进一步,所述框架隐藏了由于使用了不同的输入数据而被暴露于输出数据和控制流上的基于接口的侧信道信息;使用分支混淆和循环混淆来缓解不同输入数据之间的调用顺序和调用延迟差异;使用恒定大小的包装器以使输出数据的大小恒定包括:

1)诱饵store指令:混淆机制的关键组成部分是诱饵store指令;

2)分支混淆包装器:分支混淆机制会强制程序在两条路径中执行所有指令,以对分支进行混淆;

3)循环混淆包装器。将输入数据相关的循环计数转换为几个固定数以防止信息泄漏;

4)固定大小包装器,将输出数据大小设置为一个近似数字;

5)同时使用,框架转换代码,代码用作调用以将某些数据加密到[out]指针,edl文件中的注释告知phasar指针的内容是敏感输入。

进一步,所述诱饵store指令:原始的store指令接受源操作数和目标操作数,将源操作数移动到目标;通过将源操作数移动到源操作数本身实现诱饵store指令;使用诱饵store指令以与实际执行路径相同的执行延迟执行诱饵路径;

所述分支混淆包装器,通过将一个路径的所有原始指令插入到另一路径的开头,然后将另一种路径的所有原始指令插入到原始路径的结尾;通过用前面描述的诱饵store指令替换所有插入的store指令;

对于在诱饵路径中的函数调用在编译时创建了一个新函数,将全部store指令更改为诱饵store指令。

进一步,所述循环混淆包装器首先执行静态污点分析,以确定哪些循环实际上取决于秘密数据;然后,对受敏感数据影响的循环进行修改;在运行期间为循环计数器设置一个近似数,使循环体执行大于或等于实际循环次数的最小二乘方次;

所述固定大小包装器先找到使用加密函数的位置,判断其参数是否含有被[out]/[usercheck]标记的指针,并将函数参数中的源数据填充至固定大小。

进一步,所述sgx侧信道攻击防御方法将源代码转换为llvmir,静态污点分析到07-08行的分支指令取决于秘密值,对该分支进行模糊处理,将所有basicblock复制到另一条到对应的另一条路径的对应位置,将复制的所有store指令替换为诱饵store指令;将诱饵basicblock中调用的所有函数替换为诱饵函数,诱饵函数中的所有store指令被诱饵store指令替换;

在恒定大小的转换过程中,加密函数的源地址和大小也被替换为新指针,该指针填充到固定大小。

本发明的另一目的在于提供一种计算机设备,所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如下步骤:

跟踪安全区输入数据的数据流,找到依赖于输入数据的分支和循环,此类分支和循环将泄漏有关输入数据的侧信道信息;框架读取edl文件以获取所有ecall函数及其参数,作为污点分析的来源;在确定功能和变量之后,使用phasar进行精确的过程间污点分析,识别依赖于安全区输入数据的分支,循环和操作数;

框架隐藏了由于使用了不同的输入数据而被暴露于输出数据和控制流上的基于接口的侧信道信息;使用分支混淆和循环混淆来缓解不同输入数据之间的调用顺序和调用延迟差异;使用恒定大小的包装器以使输出数据的大小恒定。

本发明的另一目的在于提供一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如下步骤:

跟踪安全区输入数据的数据流,找到依赖于输入数据的分支和循环,此类分支和循环将泄漏有关输入数据的侧信道信息;框架读取edl文件以获取所有ecall函数及其参数,作为污点分析的来源;在确定功能和变量之后,使用phasar进行精确的过程间污点分析,识别依赖于安全区输入数据的分支,循环和操作数;

框架隐藏了由于使用了不同的输入数据而被暴露于输出数据和控制流上的基于接口的侧信道信息;使用分支混淆和循环混淆来缓解不同输入数据之间的调用顺序和调用延迟差异;使用恒定大小的包装器以使输出数据的大小恒定。

本发明的另一目的在于提供一种实施所述sgx侧信道攻击防御方法的sgx侧信道攻击防御系统,所述sgx侧信道攻击防御系统包括:

漏洞识别模块,用于跟踪安全区输入数据的数据流,找到依赖于输入数据的分支和循环,此类分支和循环将泄漏有关输入数据的侧信道信息;框架读取edl文件以获取所有ecall函数及其参数,作为污点分析的来源;在确定了功能和变量之后,使用phasar进行精确的过程间污点分析,以识别依赖于安全区输入数据的分支,循环和操作数;

漏洞缓解模块,用于当使用不同的安全区输入数据时,隐藏输出数据和控制流所暴露的基于接口的侧信道信息;使用分支混淆和循环混淆来缓解不同输入数据之间的调用顺序和调用延迟差异;使用恒定大小的包装器以使输出数据的大小恒定。

本发明的另一目的在于提供一种计算机安全控制系统,所述计算机安全控制系统搭载所述的sgx侧信道攻击防御系统。

结合上述的所有技术方案,本发明所具备的优点及积极效果为:intelsoftwareguardextension(sgx)是一种新引入的可信计算技术,它为用户程序提供了一个称为enclave的独立、安全的执行环境,而无需信任任何特权软件(如操作系统或管理程序)或固件。一些侧信道攻击(例如基于页面错误的攻击、基于缓存的攻击和基于接口的攻击)来泄漏enclave的机密。其中,基于接口的侧信道攻击利用接口处的侧信道信息来推断enclave的秘密,产生基于接口的侧信道攻击的根本原因是不可信权限软件所能观察到的与输入相关的接口调用信息(如接口信息和调用模式),揭示了安全区内部的控制流,该类攻击尚没有研究提出防御方法。本发明文给出了针对此类基于接口的侧信道攻击的一种可行的防御方法,本发明方法的关键思想是在源代码级别混淆程序,使得程序的控制流与输入无关。并证明了在现代处理器的背景下本发明的转换是安全的。

本发明基于接口的侧信道攻击的根本原因是安全区接口调用(ecall/ocall)时不同的数据导致了不同的可观察的接口调用模式(例如,接口调用顺序和调用延迟等)。因此,当其他解决方案试图隐藏症状时,例如控制两条路径的指令数量相等,通过执行无关的程序路径来从根本上解决问题。直观地说,在混淆之后,对手使用不同的输入执行的任何ecall/ocall调用通过任何侧信道的视角看起来都是相同的,就好像程序是用相同的输入多次运行一样。真实路径和诱饵路径的唯一区别在于写入内存的值:诱饵路径和真实路径将写入不同的值,但除非对手能够破坏数据加密,否则她无法通过监视数字侧信道来区分诱饵路径和真实路径。

本发明可以抵御几乎所有的基于接口的sgx侧信道攻击;不要求程序本身是秘密的,只要求数据;不需要禁用标准处理器功能,如缓存、分支预听写器和预取器。

本发明为在普通硬件上执行的程序防御基于接口的侧信道攻击。评估机制的安全性,混淆的数据流和控制流是正确的,并且总是保密的;使用信息流在推理规则之上来论证自己的代码不会泄漏信息。展示了本发明抵御简单但强大的基于接口的sgx侧信道攻击。

本发明方案的性能开销比最相似的raccoon小5%,但raccoon无法防御所有基于接口的sgx侧信道攻击。

附图说明

为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图做简单的介绍,显而易见地,下面所描述的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的sgx侧信道攻击防御方法流程图。

图2是本发明实施例提供的sgx侧信道攻击防御系统的结构示意图;

图中:1、漏洞识别模块;2、漏洞缓解模块。

图3是本发明实施例提供的示例源程序示意图。

图4是本发明实施例提供的示例源程序的中间语言表示示意图。

图5是本发明实施例提供的转换后的中间语言表示示意图。

图6是本发明实施例提供的本发明与raccoon开销比较示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

针对现有技术存在的问题,本发明提供了一种sgx侧信道攻击防御方法、系统、介质、程序及应用,下面结合附图对本发明作详细的描述。

如图1所示,本发明提供的sgx侧信道攻击防御方法包括以下步骤:

s101:跟踪安全区输入数据的数据流,以找到依赖于输入数据的分支和循环,这将泄漏输入数据的信息;框架读取edl文件以获取所有ecall函数及其参数,作为污点分析的来源;在确定了功能和变量之后,使用phasar进行精确的过程间污点分析,以识别依赖于安全区输入数据的分支,循环和操作数;

s102:框架隐藏了由于使用了不同的输入数据而被暴露于输出数据和控制流上的基于接口的侧信道信息;使用分支混淆和循环混淆来缓解不同输入数据之间的调用顺序和调用延迟差异;使用恒定大小的包装器以使输出数据的大小恒定。

本发明提供的sgx侧信道攻击防御方法业内的普通技术人员还可以采用其他的步骤实施,图1的本发明提供的sgx侧信道攻击防御方法仅仅是一个具体实施例而已。

如图2所示,本发明提供的sgx侧信道攻击防御系统包括:

漏洞识别模块1,用于跟踪安全区输入数据的数据流,找到依赖于输入数据的分支和循环,此类分支和循环将泄漏有关输入数据的侧信道信息;框架读取edl文件以获取所有ecall函数及其参数,作为污点分析的来源;在确定了功能和变量之后,使用phasar进行精确的过程间污点分析,以识别依赖于安全区输入数据的分支,循环和操作数;

漏洞缓解模块2,用于当使用不同的安全区输入数据时,隐藏了输出数据和控制流所暴露的基于接口的侧信道信;使用分支混淆和循环混淆来缓解不同输入数据之间的调用顺序和调用延迟差异;使用恒定大小的包装器以使输出数据的大小恒定。

下面结合附图对本发明的技术方案作进一步的描述。

1、背景知识与相关工作

1.1可信执行环境-intelsgx

英特尔sgx是一种基于硬件的机制,它可以确保即使攻击者获取了特权软件或对机器的物理访问(例如,内存总线和系统总线),也可以确保应用程序代码和数据的机密性和完整性。它依赖于实现安全承诺的两种主要机制。第一个是硬件强制的进程隔离机制,该机制使用户级应用程序拥有即使是最高特权的系统软件也无法访问的私有内存。第二种是远程证明机制,它允许远程验证者验证是否在已启用sgx的系统上建立了安全区以及在安全区内运行的代码的完整性。软件隔离机制由intel提供的新指令实现。这些指令可用于创建“安全区”,该安全区是只能由创建者进程访问的存储区域。每个安全区都映射到安全区页面高速缓存(epc),该高速缓存是由处理器控制的主内存访问中的硬件加密地址空间。epc的内容仅在处理器内部使用处理器特定的密钥解密。因此,即使特权软件(例如,os和虚拟机管理器)也不能访问安全区内容。安全区代码始终在用户模式下执行,因此通过系统调用(例如网络或磁盘i/o)与os进行的任何交互都必须在安全区外部执行。

支持sgx的应用程序开发人员可以使用intel的sgxsdk创建安全区库,这些库可以装入安全区并由sgx支持的cpu执行。英特尔sgxsdk通过外部调用(ocall)和安全区入口调用(ecall)为sgx应用程序提供了一种函数调用机制。开发人员需要定义安全区代码和其他不受信任的应用程序代码之间的接口。具体来说,对安全区的调用称为ecall,而ocall允许安全区代码调用不受信任的外部函数。对于每个ecall,sdk会添加指令以在安全区外部封装参数,并在进去安全区后解除参数封装,然后在安全区内执行函数。对于每个ocall,添加的sdk代码退出安全区,解除参数封装,并在安全区外执行不受信任的代码,然后重新进入安全区。

远程证明机制是通过使用质询响应协议来生成对安全区的度量值来实现的,该度量值由处理器签名。可以使用英特尔的增强隐私id(epid)密码系统来验证该测量结果。通过将软件隔离机制和远程证明机制相结合,远程方可以在接收到隐私数据之前,验证期望代码是否已在安全区域中运行,随后将机密发送到远程系统。收到机密后,远程系统的任何其他部分都无法访问这些机密。

但是,sgx无法防御任何侧信道攻击。特别是,英特尔sgx库在安全区域外运行。因此,os可以观察到任何安全区调用模式,可以利用这些模式来推断有关安全区输入数据的信息。

1.2软件侧信道攻击

由于对智能手机系统的侧信道攻击取决于pc平台系统中不存在的智能手机系统的特定属性。因此,仅关注针对pc平台的软件侧信道攻击。根据被利用的侧信道的类型将现有的软件侧信道攻击分为四类,包括架构,操作系统资源,操作系统控制通道和接口。以下将详细总结各种旁路攻击。

1)操作系统资源侧信道:

操作系统资源共享和系统资源的公共可访问统计信息(例如上下文切换数,cpu利用率时间,中断计数器等)的共享所生成的操作系统资源侧信道。许多系统在没有任何特权权限的情况下提供此类信息。例如,类似unix的系统中的proc文件系统是提供内核数据结构接口的伪文件系统。它通常安装在/proc上,并包含有关系统资源的信息。通常在没有特权权限的应用程序之间进行这种旁通道攻击。

堆栈内容,通过linux系统上的/proc/pid/stat提供的扩展堆栈指针(esp)和扩展指令指针(eip)信息的内容窃听用户的按键。

内存跟踪,通过观察多用户系统上的内存占用量和cpu调度统计信息,推断用户访问的网页以及受害者与站点的关系。

数据包统计,借助对procfs提供的传入/传出tcp数据包数量的汇总统计信息,进行tcp序列号推理攻击。

内存页去重,利用通过写时复制页面管理机制重新创建的重复数据消除后的内存页面上的写访问时间差,以识别在受害者的vitrul计算机(vm)上运行的应用程序。

2)架构侧信道:

通过在攻击者应用程序和受害者应用程序之间共享计算机体系结构硬件,可以生成体系结构侧信道。这种攻击也不需要特权权限。

dram,利用攻击者和受害者之间的共享dram缓冲区行来监视firefox地址栏中的击键;针对intelsgx的cache-dram攻击,该攻击结合了缓存和dram行缓冲区信息来监视安全区中与输入有关的分支。

cache。目前已经提出了prime+probe和flush+reload方法,这些方法利用了攻击者和受害者之间共享缓存访问延迟的差异来推断受害者的秘密。利用转换后备缓冲区(tlb)打破地址空间布局随机化(aslr)。brasser,gotzfried,hahnel和moghimi展示了对sgx的基于缓存的侧信道攻击,以推断安全区中的秘密,例如aes密钥,rsa密钥或安全区中的加密输入数据。

分支目标缓冲区(btb)。dmitry当前的btb侧信道攻击,它可以发现另一个进程或内核的内存布局,从而绕过kaslr方案。lee通过构造与飞区代码共享分支目标缓冲区(btb)的代码并观察最后分支记录(lbr)来推断飞区代码的细粒度控制流,来说明分支影子攻击。

推测执行,展示利用分支预测单元恢复秘密密钥的侧信道攻击。chen等利用推测执行机制窃取位于寄存器中的安全区中的秘密。

3)os服务(控制)侧信道:

当受害者应用程序运行时,操作系统服务(控制)侧信道攻击会利用恶意操作系统提供的信息。因此,威胁模型包括在这种攻击中具有特权权限的恶意os。

页面错误。shinde和bulck阐述了页面错误攻击,它们有意操纵不受信任的os管理的页面表以推断安全区域内的秘密。利用当前cpu的超线程功能来刷新pte条目,该条目可用于进行页面错误攻击而不会产生任何中断。

内存访问地址,joppe阐述了差分计算分析(dca)。dca使用内存访问跟踪来打破白盒加密技术,该技术将加密密钥隐藏在软件程序中。

4)基于rpc接口的侧信道

随着多种可信计算执行(tee)技术的出现,例如英特尔sgx和armtrustzone,使用此类tee技术的应用程序始终分为可信部分(包)和不可信部分。恶意os可以观察到这两部分之间的通信。因此,特权系统软件可以收集和分析两个部分之间的接口调用模式。当这些模式依赖于秘密时,它们可能会在敏感部分泄漏敏感信息。这类侧信道即基于接口的侧信道攻击。

sgx平台上的现有侧信道攻击主要集中在体系结构侧信道和os控制侧信道上。由于安全区是在隔离的内存空间中执行的,并且没有用于统计sgx辅助应用程序的os资源的统计信息的接口,因此几乎不会利用os资源侧信道。相比其他类型的侧信道攻击,基于接口的侧信道攻击具有一些优点。首先,它可以精确地收集侧信道信息。sgx平台上所有现有的侧信道攻击都遭受侧信道信息收集假阳率的问题。例如,对不同内存地址的多次内存访问可能会生成相同的缓存集和页面访问跟踪。但是,基于接口的侧信道攻击中的信息收集是精确的。每次调用决定性接口时,本发明都可以收集精确的接口调用信息。其次,它是隐蔽的。当收集侧信道信息时,某些侧信道攻击将产生中断。但是,基于接口的在收集辅助通道信息时不会引入任何中断。最后,基于接口的侧信道攻击是有效的。它只需要执行一次目标程序,即可收集所需的辅助信道信息。尽管多次测量执行时间可以提高时间测量的精度,但是结合其他接口侧信道的时间测量也可以达到良好的攻击效果。

1.3防御方法

本发明将总结现有的侧信道防御技术,并讨论可能适用于基于接口的侧信道攻击的技术。现有的侧信道防御技术主要包括以下几类。

应用强化。应用程序强化策略会修改应用程序代码,以防止敏感信息从侧信道中泄漏。手动或使用特殊编译器隐藏内存访问模式。它们可用于利用缓存和页面错误侧信道来防御侧信道攻击。忽略了可以防御btb侧信道的分支执行模式。通过将执行时间填充到固定值或预定义值来防御执行处理时间侧信道,从而降低了潜在处理时间的粒度。攻击不依赖于内存访问模式信息和分支执行信息。因此,用于隐藏内存访问模式和分支执行路径的应用程序加固将不适用于基于接口的侧信道攻击。固定的运行时间的可能会在基于接口的侧信道攻击中隐藏接口调用延迟。但是这种机制总是会产生很大的性能开销,并且仅在用于时间侧信道。

限制功能。限制功能策略通过限制辅助通道源,攻击者使用的指令或刷新辅助通道状态来删除辅助通道。例如,禁用缓存可以防御基于缓存的侧信道攻击,刷新分支状态可以防御基于btb的侧信道攻击,限制rdtsc可以防止攻击者测量内存访问时间。限制rdtsc似乎可以防御本发明的攻击。但是,这种幼稚的策略将阻止所有程序开发人员分析程序性能,并且还有其他计时测量方法。同样,它仅在本发明的攻击中适用于接口调用延迟通道。

新的软件机制。新的软件机制策略提出了新的软件机制,有助于消除现有的副渠道。将页面调度从os移至可用于防御页面故障侧信道的应用程序。oram技术来隐藏内存访问模式,可以防御基于缓存和基于dram的侧信道攻击。使用当前cpu的超线程功能来运行可验证的影子线程,以防止使用超线程进行侧信道攻击。基于接口的侧信道攻击不依赖于内存访问模式和超线程功能。因此,上述防御措施不适用于基于接口的侧信道攻击。

硬件体系结构修改。硬件体系结构修改策略重新设计了当前硬件,以防止侧信道信息泄漏。依靠缓存中的访问随机化来防御基于缓存的侧信道攻击。提出了缓存分区,以确保对安全敏感的代码永远不会与不受信任的进程共享缓存。硬件体系结构修改主要适用于体系结构侧信道攻击。基于接口的侧信道攻击不会在任何硬件体系结构属性上进行中继。因此,这种防御不适用于基于接口的侧信道攻击。

攻击检测。shih等和chen等使用intel的硬件事务存储器来检测由侧信道攻击引起的频繁中断和程序执行时间延迟使用异常缓存未命中来检测基于缓存的侧信道攻击。但是,基于接口的侧信道攻击不会产生中断,基于执行时间的攻击检测只能阻止攻击者使用执行时间信息。攻击者仍然可以使用其他两种接口侧信道信息进行攻击。缓存未命中检测不适用于基于接口的侧信道攻击。

2、威胁模型和假设

本发明假设对手可以监视和篡改处理器i/o引脚上的任何数字信号。本发明还假设处理器是一个密封芯片,所有片外资源(包括dram、磁盘和网络设备)都是不可信的,所有读写值都是加密的,并且检查所有读写的完整性。

软件假设。本发明假设对手可以在与受害者的应用程序相同的操作系统和/或硬件上运行恶意应用程序。本发明允许恶意应用程序探测操作系统公开的受害者应用程序的运行时统计信息(例如/proc/pid/stat中的堆栈指针)。

本发明设计假定输入程序没有错误,即(1)程序不包含会导致应用程序崩溃的错误,(2)程序不显示未定义的行为,以及(3)如果是多线程的,则程序不存在数据竞争。在这些假设下,本发明不会引入新的终止通道泄漏,会正确地混淆多线程程序。

本发明静态地将用户代码转换为修改过的二进制代码;本发明假设对手可以访问此转换的二进制代码以及可能存在的任何符号表和调试信息。

3、方案设计

本发明提出了一种方法来自动识别和消除sgx应用程序二进制文件上基于接口的侧信道信息泄漏漏洞。漏洞识别机制基于污点分析。自动缓解机制利用llvm实现,该机制由分支混淆,循环混淆和恒定大小三种包装器组成。

a.漏洞识别

本发明跟踪安全区输入数据的数据流,找到依赖于输入数据的分支和循环,此类分支和循环将泄漏有关输入数据的侧信道信息。本发明的框架读取edl文件以获取所有ecall函数及其参数,作为污点分析的来源。在确定了这些功能和变量之后,本发明使用phasar进行精确的过程间污点分析,以识别依赖于安全区输入数据的分支,循环和操作数。这些指令需要进行混淆以防止基于接口的侧信道信息泄漏。本发明的污点分析的结果是必须混淆以保护隐私的内存访问和条件分支语句的列表。

b.漏洞缓解

本发明隐藏了由于使用了不同的输入数据而被暴露于输出数据和控制流上的基于接口的侧信道信息。为了隐藏由控制流引起的信息泄漏,本发明使用分支混淆和循环混淆来缓解不同输入数据之间的调用顺序和调用延迟差异。为了隐藏由输出数据引起的信息泄漏,本发明建议使用恒定大小的包装器以使输出数据的大小恒定。

1)诱饵store指令:混淆机制的关键组成部分是诱饵store指令。原始的store指令接受源操作数和目标操作数,它将源操作数移动到目标。本发明通过将源操作数移动到源操作数本身来实现诱饵store指令。本发明使用诱饵store指令以与实际执行路径相同的执行延迟来执行诱饵路径,而无需对程序结果进行任何更改。

2)分支混淆包装器:本发明的分支混淆机制会强制程序在两条路径中执行所有指令,以对分支进行混淆。这遇到了两个挑战:(1)如何在两条路径中执行指令,从而使攻击者只能获得固定的侧通道信息,以及(2)如何确保在诱饵路径中执行的内存更新不会改变原始指令的结果。本发明通过将一个路径的所有原始指令插入到另一路径的开头,然后将另一种路径的所有原始指令插入到原始路径的结尾,来解决第一个挑战。这确保了条件分支指令产生的两个路径的顺序执行。本发明通过用前面描述的诱饵store指令替换所有插入的store操作来解决第二个挑战。

对于那些在诱饵路径中的函数调用(它们的参数为指针或引用时可能会更改输入值),本发明在编译时创建了一个新函数,该函数几乎是原始函数的拷贝,但将其全部store指令更改为诱饵store指令。

3)循环混淆包装器:本发明将输入数据相关的循环计数转换为几个固定数以防止信息泄漏。本发明首先执行静态污点分析,以确定哪些循环实际上取决于秘密数据。然后,本发明对受敏感数据影响的循环进行修改,从而在不影响其执行结果的情况下使其不会泄露侧信道信息。本发明无法将循环计数设置为固定数字,因为无法静态确定迭代次数。因此,本发明在运行期间为循环计数器设置一个近似数。本发明使循环体执行大于或等于实际循环次数的最小二乘方次,例如循环体执行了20次,则将循环体的执行次数设置为大于20的最小2乘方,即32次,从而在程序性能和安全性之间取得折衷。并且使用诱饵store指令使新增加的循环代码不对原始程序的结果产生影响。使用此转换后的代码,观察到循环计数器为l的对手可以推断出实际的循环跳闸计数l在0.5xl到l之间。但是,l的确切值不会泄露。另外,本发明也允许中开发者手动指定最小和最大循环次数,以减轻暴力破解行为。

4)固定大小包装器:本发明将输出数据大小设置为一个近似数字,以缓解由输出数据引起的信息泄漏。英特尔sgxsdk需要程序员使用[in]/[out]/[usercheck]注释edl文件中的指针,以指示指针的使用。本发明假设开发人员使用sgxsdk中提供的被广泛应用的加密库在将数据写入输出缓冲区前对数据进行加密。因此,本发明先找到使用这些加密函数的位置,然后判断其参数是否含有被[out]/[usercheck]标记的指针,并在这些操作中将源数据填充至固定大小。与循环转换类似,填充大小可以是大于或等于源数据大小的最小二乘方或由开发者提供的大小。

5)同时使用:现在,本发明解释框架如何转换图3所示的代码,该代码用作调用以将某些数据加密到[out]指针。edl文件中的注释告知phasar指针的内容是敏感输入。

然后,本发明将源代码转换为llvmir,如图4所示。静态污点分析分析到07-08行的分支指令取决于秘密值,因此本发明对该分支进行了模糊处理,这意味着本发明将所有basicblock复制到另一条到对应的另一条路径的对应位置,但是将复制的所有store指令替换为诱饵store指令,诱饵store指令如图5的第16行所示,其源地址和目的地址相同。本发明还将诱饵basicblock中调用的所有函数替换为诱饵函数,诱饵函数中的所有store指令被诱饵store指令替换。

在恒定大小的转换过程中,加密函数的源地址和大小也被替换为新指针,该指针填充到固定大小,如第11-13行所示。

下面结合安全性分析对本发明的技术方案作进一步的描述。

本发明首先证明混淆程序中的控制流是正确的,并且与秘密值无关。然后,本发明使用跟踪信息流的类型规则,认为本发明的代码不会泄漏秘密信息。本发明通过推理x86处理程序中的异常来说明本发明针对基于接口的sgx侧道攻击的防御措施。

混淆代码的安全性,本发明认为混淆的控制流和数据流(1)保留了原始程序的依赖关系,而(2)没有透露任何秘密信息。

保留原始程序的依赖关系。在分支混淆包装器中,为了确保正确的控制流,本发明使用前面描述的诱饵store指令替换所有插入的store指令,由于诱饵store指令的源地址和目的地址相同,同时本发明还将诱饵basicblock中调用的所有函数替换为诱饵函数,诱饵函数中的所有store指令也被诱饵store指令替换,所以在诱饵路径中执行的内存更新不会改变原始指令的结果;在循环混淆包装器中,本发明使用循环计数的近似数来代替静态的迭代次数,并且使用诱饵store指令使新增加的循环代码不对原始程序的结果产生影响。

不会透露秘密信息。在分支和循环混淆包装器中,本发明对诱饵路径进行了混淆。在分支混淆包装器中,本发明通过将一个路径的所有原始指令插入到诱饵路径的开头,然后将诱饵路径的所有原始指令插入到原始路径的结尾,使得攻击者只能获得固定的侧通道信息;循环包装器中将静态的迭代次数转换为实际循环次数的最小二乘方次,这样攻击者只可能推断出迭代次数的区间值,并无法获取确定的循环次数;固定大小包装器可以通过对输出数据大小的填充处理,填充大小可以是大于或等于源数据大小的最小二乘方或由开发者提供的大小,在指令中将源数据填充至固定大小后,可以缓解由输出数据引起的信息泄漏。

本发明方案也可以正确地混淆了多线程代码。在混淆的程序中,真实路径上的加载和store指令是原子性的,并且是全局可见的,而诱饵路径上的store指令是仅本地可见的。因此,本发明得出的结论是,混淆代码为单线程和多线程程序维护了正确的数据流。

下面结合性能评估对本发明的技术效果作详细的描述。

1、性能评估

本发明在llvm编译器框架v10.0.0中实现。在本发明的测试设置中,主机操作系统是centos7。为了评估性能,本发明使用8个程序。表1总结了它们的特性和相关的输入数据大小。表中的8个程序与用于评估raccoon的程序相同,本发明使用这些程序将本发明的开销与raccoon的开销进行比较。本发明使用与raccoon相似的数据大小。本发明将raccoon移植为可编译为llvmir的语言。所有测试都使用llvm/clang编译器工具链。

表1

本发明在一台具有两个intelxeon处理器和16gb(8×2gb)ddr3内存的计算机上运行所有实验。每个处理器有八个内核,带有256kb专用l2缓存。处理器芯片上的八个核心共享20mb的l3缓存。流加密/解密硬件使从加密ram存储区访问存储器的成本几乎与访问dram存储区的成本相同。底层硬件不支持加密的ram存储区,但是本发明不会在测量中单独添加任何与加密相关的开销,因为带或不带加密的流访问成本几乎相同。

2、混淆开销

本发明的开销主要来源有:控制流混淆的开销(包括缓冲内存访问的开销,复制程序堆栈的开销和cpu寄存器,以及混淆算法和内存访问指令的成本)。当然,开销会随程序特性而变化,例如输入数据的大小,混淆语句的数量和内存访问语句的数量。图6比较了raccoon在模拟处理器上和本发明的开销。实验中本发明8个程序中的平均开销约比raccoon的平均开销低5%,但是raccoon无法防御所有基于接口的sgx侧信道攻击,本发明几乎可以抵御所有的基于接口的sgx侧信道攻击。

intelsgx是一种由硬件技术实现的tee,它被认为是非常有前景的tee之一。然而,在它是使用过程中可能会遭受到各种各样的侧信道攻击。在本发明中,本发明根据基于接口的侧信道攻击的可行性和能力,设计了一种防御基于接口的sgx侧信道攻击的解决方案,本发明利用程序间污点分析来识别应用程序二进制中基于接口的侧信道信息泄漏,然后使用分支混淆、循环混淆和常量大小封装来防御此类漏洞攻击。该方案基本可以防御所有基于接口的sgx侧信道攻击。最后本发明分析了该方案中混淆代码的安全性以及开销,并在实验中取得了较好的性能。

应当注意,本发明的实施方式可以通过硬件、软件或者软件和硬件的结合来实现。硬件部分可以利用专用逻辑来实现;软件部分可以存储在存储器中,由适当的指令执行系统,例如微处理器或者专用设计硬件来执行。本领域的普通技术人员可以理解上述的设备和方法可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、cd或dvd-rom的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本发明的设备及其模块可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合例如固件来实现。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,都应涵盖在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1