研读《ROTE: Rollback Protection for Trusted Execution》——分布式系统保护数据的新鲜性

编程入门 行业动态 更新时间:2024-10-25 02:20:15

研读《ROTE: Rollback Protection for Trusted Execution》——<a href=https://www.elefans.com/category/jswz/34/1770120.html style=分布式系统保护数据的新鲜性"/>

研读《ROTE: Rollback Protection for Trusted Execution》——分布式系统保护数据的新鲜性

本博客是对文章《ROTE: Rollback Protection for Trusted Execution》的研读与解析,为了直奔文章讨论的问题笔者增加了副标题“分布式系统保护消息的新鲜性”。这篇论文发表在2017年第26届USENIX安全研讨会论文集中。论文针对现有SGX回滚防护方案的不足,提出一种分布式系统来保护数据的新鲜性。作者实现了系统原型,并测试出该系统比已有的解决方案有更好的性能。

本博客基本依照论文的顺序,同时为了使之前没有了解过回滚攻击、可信执行技术、分布式系统等知识的同学也能比较好的把握文章内容,笔者补充了一些内容,最后解析思路依次回答这些问题来进行(博客目录的*号标记):

第一部分 problem statement

*什么是回滚攻击?

笔者没有在比较常用的词条找到回滚攻击的定义,但是我们还是可以通过一些实例了解它的含义。

首先说下回滚的含义,笔者最初接触计算机中的回滚这个词是在学习数据库的时候,指数据库中对数据做修改(update,insert,delete)后但未commit之前,使用rollback可以恢复到数据到修改之前的状态。维基百科对该词的解释如下:

In database technologies, a rollback is an operation which returns the database to some previous state.

这个操作,在数据管理中,多是积极作用,用于防止数据库服务器崩溃导致数据丢失,或者对数据做出错误的修改时,还能恢复到一个干净的副本。

但是在计算机系统或网络认证中,数据或消息一般与版本,时间等因素有关,回滚可能会破坏数据的完整性,造成攻击。举个例子:比如软件或系统被爆出漏洞时,软件开发商通常通过签发一个补丁包给客户端运行升级来解决。假如对这个补丁包只能鉴别其来源而不能检查是否是最新的补丁包,那么攻击者就可以对客户端运行历史的补丁包使其回滚到新爆出的漏洞还没解决的状态对漏洞进行利用。

回滚攻击和大家较为熟知的重放攻击有点像,不同在于重放攻击攻击者重放一模一样的消息达到目的,而回滚攻击重放数据源相同的历史状态的消息达到目的。一种更为相似的攻击是降级攻击,其典型案例Man-in-the-Middle TLS Protocol Downgrade Attack就叫做密码组回滚攻击。在此,贴出维基百科的描述:

A downgrade attack is a form of cryptographic attack on a computer system or communications protocol that makes it abandon a high-quality mode of operation (e.g. an encrypted connection) in favor of an older, lower-quality mode of operation (e.g. cleartext) that is typically provided for backward compatibility with older systems.

因此,我们可以稍微总结出回滚攻击是修改数据到旧版本或安全性更低版本的攻击

*SGX中的回滚攻击

SGX简介

SGX的全称是Software Guard Extensions(英特尔软件防护扩展),是英特尔发布的一项可信执行技术。其本质是x86架构指令的安全扩展,提供一个隔离于操作系统的可信执行环境,称为enclave。enclave程序运行时,支持SGX的处理器确保除enclave之外的任何程序,包括操作系统,虚拟机,特权代码等都不能访问enclave内存。

enclave程序退出时,SGX提供密封机制,允许enclave将数据加密保存在外存和执行完整性检查。用于加密和签名的密钥为enclave特有,这样,enclave程序下次启动时直接在本地解密恢复数据,而攻击者仅能在磁盘中获得enclave数据密文。

SGX中回滚攻击的实现

虽然SGX提供了强有力的硬件隔离机制,但是仍有办法回滚enclave数据到历史状态。有两种情况,一种是通过替换enclave的密封数据为历史版本的密封数据,另一种是通过实例化两个enclave程序,一个进行数据修改操作,一个进行数据读操作来实现。

(1)替换密封数据

我们可以注意到enclave使用SGX提供的密封机制将数据加密保存到外存并做签名时,但是enclave无法区分哪个数据是最新密封的,这样攻击者可以拿到之前密封的数据来替换当前的密封数据达到回滚攻击。

(2)同时启动两个enclave实例

还有一种情况是,攻击者可以同时实例化两个enclave程序,其中一个进行数据修改操作,另一个进行数据读操作,那么读数据的状态实际上是对修改了的造成了回滚。

*现有的保护方案的不足

通常,消除回滚攻击的办法就是先对数据状态做标识,防护进而转变成保护这个标识的完整性,即保护数据的新鲜值。目前的保护方案,根据存储enclave密封数据的新鲜值存放在什么地方实施保护又分为三类解决方案。

1、存储在本地非易失性存储器

(1)SGX counters

SGX counters是英特尔公司官方发布的,作为SGX的一个可选功能用于防回滚攻击的方案。它通过引入可信的平台服务enclave(Platform Service Enclave,PSE)来为本地的其他普通enclave程序提供计数器服务,然后将PSE的记录的不同enclave的计数器值将保存在本地非易失性存储器。英特尔公司虽然提供了这个方法以及相应的技术支持,但是没有对这个方法性能和安全性做详细的说明,本文章通过实验发现 :

  • 计数器修改需要80-250ms,读操作需要60-140ms。并且非易失性存储器大约在一百万次写入后因磨损而无法使用。
  • 用来保存计数器值的非易失性存储器在处理器包外。

因此该方案不适用于状态频繁持续更新的系统, 而且可能会遭受总线攻击和闪存镜像攻击。

(2)TPM solutions

TPM方案与SGX counter类似,通过在TPM中引入计数器,用NVRAM保存计数器值。这个方法在性能上也十分受限。

  • TPM计数器接口是速率限制的,通常每5秒增加一次,以防止内存磨损。写入NVRAM大约需要100 ms,并且在300K到1.4M写入后内存将无法使用。

因此,该方案不适用与状态要求快速持续更新的系统。

2、存储在可信服务器

Integrity servers

这种方法是通过引入一个可信的服务器维护enclave的新鲜值。这种方法的缺点是使得该服务器目标明显,容易遭受黑客攻击。而为了消除单点失效攻击,采用拜占庭共识机制备份服务器的话,如果使用标准的共识协议,如PBFT,要求多轮通信,具有高的消息复杂性,并且为了保护一个节点,至少需要三个副本节点。

3、驻留在enclave内存

Architecture modifications

这种方法通过修改SGX体系结构,使得enclave程序退出时,enclave的内存不会被OS清除,enclave状态得以驻留在enclave内存中。但是这样影响OS对enclave程序的调度,而且势必导致不能运行多个enclave程序。另外通过实例化两个enclave实例的回滚攻击还是能实现。

第二部分 Our approach&ROTE system

*本文提出的方法

防护目标

根据对现有防护方案的分析,我们可以总结出现有防护方案存在的不足,而我们提出的防护目标基本就是解决这些问题,即对SGX回滚攻击的防护应达到enclave状态更新次数能不受限制,并且提供快速更新,enclave新鲜值不依赖处理器包之外的存储器保存,抗击单点失效攻击。

分布式的保护模型

有了上述的目标,作者想到既然单个SGX平台无法有效保护数据新鲜值,但SGX平台的所有者或所有者可以注册多个处理器以互相帮助,于是描绘方案的基本轮廓:用协助enclave为本地的一般enclave程序提供计数器服务,而协助enclave的计数器值通过构建一个多协助enclave的分布式系统,向系统广播这个计数器值,通过分布式系统的同步协议来保证协助enclave计数器值安全。同时这些协议针对回滚保护任务来设计以减少所需的副本和通信数量。

敌手模型

提出了分布式的保护模型之后,考虑的在这种场景下的敌手模型,攻击者的能力范围总结如下:

  • 网络通信控制。假定对手可以阻塞消息,并通过选择在任何给定时间到达的节点来划分网络。
  • 控制多个协助enclave同时重启。
  • 启动多个协助enclave实例。
    (因为一开始加入到分布式系统的协助enclave就可能是攻击者所控制的,因此攻击者对被控制协助enclave做任何操作都是可能的)

*ROTE系统

系统架构

系统架构如图所示。每个平台有运行特定应用程序的enclave,称为ASE(Application-specific Enclave),ROTE系统用于回滚保护的RE(Rollback Enclave)和配置在ASE的用于ASE请求RE回滚保护的ROTE lib库。RE还与其他平台的RE通讯,其他平台也是同样的结构。

分布式系统的参数

需要提醒的是,这个分布式系统中涉及到一些参数,结构图没有体现:

  • n 协助平台总数。
  • f 被攻击的额协助平台数
  • u 在目标平台更新状态时消息不可达或者没有响应的最大协助平台数。(这里忽略了正常情况下的重启协助平台数,即认为平台重启不是很频繁,而且要求系统的协助enclave都是响应式的)

那么我们系统具有这样的公式n=f+2u+1,也就是说系统管理员选定了可接受的安全级别f和鲁棒性,就可以确定所需的协助平台数量n。或者,给定n个协助平台,管理员可以设定f和u。为什么是这样的公式会在后面的章节解释。

工作流程

系统中各种enclave的数据结构如下图所示:

当ASE需要更新其状态时,它会从ROTE库调用计数器增量函数。一旦RE返回计数器值,ASE就可以安全地更新其状态,将计数器值保存到其存储器中并将所有数据与计数器值一起密封。当ASE需要验证其状态的新鲜度时,它可以再次从ROTE库调用一个函数来获取最新的计数器值,以验证未密封的密封数据(或其运行时内存中的状态)的新鲜度。

为了方便描述,我们称发起服务请求的为目标平台,协助平台和目标平台构成一个保护组。RE维护单调计数器(MC),为每次ASE更新增加它,将其分配给在辅助平台上运行的RE,并将计数器值包括在其自己的密封数据中。当RE需要验证其自身状态的新鲜度时,它从分布式保护组中的协助节点获得最新的计数器值。

协议

下面介绍系统工作涉及到的协议的具体流程。

(1)ASE状态更新协议


①:ASE向RE请求计数器增
②~③:目标RE对ASE做计数器增操作,签发自己自增后的MC给系统所有其他RE。
④~⑤:一旦收到签名MC,每个RE更新自己保存的组计数器表,然后发送echo标识符给目标RE。需要注意的是这个组计数器表保存在运行内存,不会被密封到外存的,以避免整个系统无休止的更新下去。同时,更新MC值是需要两轮通信的,因此每个RE也保存echo在运行内存以便后续验证使用。
⑥:RE收到q=u+f+1=(n+f+1)/2个echo后,有将echo返回echo给相应的发送者。
⑦:收到目标RE返回的echo,每个RE检查是否与自己运行内存中的一致,如果一致返回ACK标识符。
⑧:目标RE收到q个ACK,就酱自己的状态连同MC值密封到本地外存。
⑨:RE返回增加过的ASE计数器值给ASE,ASE可以继续后续的状态修改操作,将状态值连同这个计数器值密封。

(2)RE重启协议

RE重启协议是RE重启之后需执行的操作。它的主要目的是让RE加入一个存在的保护组,恢复它的计数器值和组计数器表。

①:RE与其他节点建立加密传输连接,更新组配置信息。
②~③:向本地OS请求密封数据,如果有本地密封数据,解封恢复MC。
④~⑤:目标RE向所有其他节点请求它们为自己保存的MC值。其他节点RE检查自己的组计数器表,如果找到了这个MC就对该MC签名回复,并将自己平台的计数器表也发送给目标RE。
⑥:当目标RE收到q个MC回复后,在其中选择一个签名通过的最大MC值,认为这个是它的计数器值,用这个MC值更新组计数器表。同时,目标RE要验证至少f+1个收到的计数器值都不为0。最后如果解封状态中有和MC值匹配的,目标RE恢复该状态。
⑦:目标RE密封更新后的状态,同时保存计数器值在运行内存。

(3)ASE启动/读计数器值协议


①~②:ASE向本地OS请求密封数据,如果有本地密封数据,解封恢复出计数器值。
③:ASE向平台上的RE请求其为自身保存的最后一次计数器值。
④~⑤:目标RE为了保证它自身运行内存的计数器值是最新的,执行RE重启协议的④到⑥步,验证从系统获得的MC和自己内存的MC值,如果相同,将ASE的计数器值返回。
⑥:ASE收到RE返回的计数器值恢复与之匹配的密封状态。

第三部分 Security analysis&Performance evaluation

通过第二部分对文章提出的方法和系统的介绍,我们可以总结出,ROTE系统中ASE的数据新鲜性依赖本地平台上的RE的数据新鲜性,而RE的数据新鲜性依赖协助平台。ASE通过ROTE lib库和RE通信,以及SGX的密封机制实现安全存储,是很容易证明如果RE不被回滚,ASE也不被回滚的。那么RE依赖分布式的保护组的安全性又怎样呢?RE重启协议中,如果目标RE能收到q(q=f+u+1=(n+f+1)/2)个计数器值回复,那么认为q其中最大的计数器值是自己的计数器值。RE之间的通讯是安全的,每个RE也有密封机制实现安全存储。也就是说,除非攻击者将所有其他协助enclave都回滚,否则不能回滚目标协助enclave。但是为什么只要求至少能收到分布式保护中的一个极大计数器值就能保证RE的新鲜性,达到了节点备份更少(和拜占庭标准共识协议相比)?这部分重点分析这个问题。

*ROTE系统如何只需要q个协助平台?

结合分布式情况下敌手的能力模型,敌手可以:

  • 网络通信控制。
  • 控制多个协助enclave同时重启。
  • 启动多个协助enclave实例

攻击者可以控制u个节点的网络,导致它们为目标RE保存的MC值是小于最新MC的。
比如上图,目标RE第一次向系统广播计数器值时,攻击者可以阻止发送到左侧,只允许计数器值1到达组的右侧,第二次向系统广播计数器值时,攻击者阻止发送到右侧,只允许计数器值2到达组的左侧。 最后,目标RE请求计数器值时,攻击者再次阻塞左侧。 这样组中至少存在u + 1个诚实平台的计数器值为2,但是收到的q=f+1+u®中只有一个是真实的并且是最大值。当然攻击者可以阻塞一部分u(l)一部分u®最后返回的,这样收到的q中不止一个真实值,但仍然是大值。所以目标RE验证自身的新鲜性时至少需要保护组的一个正确的计数器值。

协助enclave重启意味运行内存丢失,着需要重新和保护组建立会话,同步组计数器表,这样重启的协助enclave自身都需要其他协助enclave恢复自身计数器值,是没办法帮助目标RE验证新鲜性的。如果攻击者同时重启多个协助enclave会出现什么情况?ROTE如何应对的?第一种情况,u个节点同时重启,这样根据上一段的论述,这样不足以造成回滚攻击,对系统运行也不造成影响。第二种情况是有多于u个,但不是整个保护组同时重启,这样虽然系统不能正常运行,系统管理员可以通过至少一个没有重启的enclave重置整个系统,然而那个没有重启的enclave的组计数器表可能不是最新的,有回滚攻击的风险。最极端的情况是n+1个节点同时重启了,那么系统管理员要重新导入配置信息来初始化系统。

现在讨论ROTE如何保证保护组中q个节点成功保存目标RE的计数器值。回忆一下ASE更新协议,目标RE需收到q个标志协助RE收到MC值的echo回复。但是仅接收到q个echo就能保证吗?考虑这种情况:首先,攻击者只允许将更新消息传递到一个协助节点并返回echo,之后,攻击者重新启动该节点,并阻止其与目标平台通信,这样重新启动的RE恢复先前的计数器值,而其他可到达的RE尚未接收到新值。攻击者对所有协助平台重复相同的过程。结果,目标节点可以接收到q个echo并接受状态更新,但是所有辅助节点都具有先前的计数器值,导致回滚攻击。因此,ASE协议是两轮通信的,目标RE收到q个echo之后又将它返回给对于的协助RE,协助RE对比与自己内存中的echo,如果一致,发送ACK标识符。如果在这过程中协助RE重启了,目标RE是收不到q个ACK的。因此目标RE收到q个echo和ACK,这才确认保护组中q个节点记录了它的计数器值。

性能评估

过程:略
结论:通过实验表明,性能上:(1)ROTE强加的性能开销很大程度上取决于节点之间的网络连接。(2)如果节点通过低延迟网络连接,ROTE支持需要非常快速状态更新的应用程序(1-2毫秒), 对于容忍较大延迟的应用(例如,每个状态更新超过600ms),ROTE可以在地理上较远的组上运行。与基于本地非易失性存储器的方法相比:我们的系统提供了更快的回滚保护。 与没有回滚保护的系统相比,我们的解决方案带来了适度的开销。

第四部分 Conclusion&Discussion

总结:本文提出了一种新的英特尔SGX回滚保护方法。其主要想法是将完整性保护实现为多enclave平台协助的分布式系统。 并构建了一个强大的对手模型。论证系统提供了强大的安全保障,称之为全有或全无回滚。通过实验表明,与基于本地非易失性存储器的解决方案相比,此保护方法可提供明显更好的性能。

更多推荐

研读《ROTE: Rollback Protection for Trusted Execution》——分布式系统保护数据的新鲜性

本文发布于:2024-03-13 01:44:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1732904.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:分布式   新鲜   数据   系统   Rollback

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!