【机密计算顶会解读】08:Cipherfix——缓解软件中的密文侧信道攻击

导读:本文介绍CipherFix工具,专门设计用于防止密文侧信道攻击,能够有效解决常量时间实现中存在的脆弱性问题。

原文链接:Cipherfix: Mitigating Ciphertext Side-Channel Attacks in Software | USENIX

Cipherfix: Mitigating Ciphertext Side-Channel Attacks in Software(USENIX Security ’23)

一、背景介绍

随着云计算的普及,越来越多的用户和组织依赖于共享物理硬件的虚拟机(VM)来处理敏感数据。不过,当用户需要保护自己隐私数据时,对云服务商往往存在不信任的情况。在这种背景下,可信执行环境(TEE)提供了对云工作负载的硬件辅助安全保障,成为了一种重要的解决方案。

然而,近期的Cipherleaks攻击揭示,即使在TEE中依然存在安全隐患。这些攻击利用了确定性内存加密的特点,能够通过分析加密后文本的模式来推测秘密数据,即所谓密文侧信道攻击(图1)。

图1:密文侧信道通过观察同一地址的密文是否变化,推测出当前明文的模式

传统的反侧信道防护措施,如常量时间代码,并不足以抵御此类攻击。为此论文提出一种新的方案,即 CipherFix通过动态污点分析与二进制插桩相结合,能够在不重新编译的情况下,自动保护现有的二进制文件,从而消除加密内存中的秘密依赖模式。

二、现状分析

在当前抵御侧信道攻击的技术中,常量时间代码是最广泛应用的防御机制,旨在消除通过时间分析获取秘密信息的可能性。尽管常量时间代码可以在一定程度上抵御传统的计时侧信道,但在使用确定性内存加密的环境中,攻击者可以根据密文的变化洞悉内部状态和潜在秘密,导致常量时间的设定无效。

此外,现有的自动化常量时间分析工具虽然提供了一些保护,但其侧重于微架构和计时方面的分析,未能有效应对密文模式分析所带来的新威胁。这种缺乏对密文依赖性的深入理解和评估的情况,使得防御措施无法覆盖所有潜在的泄漏渠道。

因此,必须解决的问题是:如何在不增加过多性能开销的情况下,针对密文侧信道攻击提供有效的防护。这需要新的安全分析方法和工具,以识别和缓解秘密数据在内存写入过程中的潜在泄漏。

三、应对设计

论文中提出的应对机制是CipherFix,它专门设计用于防止密文侧信道攻击,有效解决了当前常量时间实现中存在的脆弱性问题。CipherFix的设计理念是通过动态污点分析(DTA)与静态二进制插桩(SBI)相结合,识别与保护敏感数据在内存中的访问(图2),从而防止攻击者从密文模式中推断出内部状态。

图2:CipherFix通过动态污点分析与静态二进制插桩进行密文侧信道修复

具体而言,CipherFix首先通过动态污点分析定位所有可能包含敏感信息的内存位置。这一过程能够在二进制执行时实时跟踪数据流,识别出哪些变量是秘密。同时,CipherFix会动态记录秘密内存分配和访问的情况,以帮助后续的静态插桩步骤。

完成动态分析后,CipherFix接着进行静态二进制插桩。具体地,CipherFix采用掩码对即将写入内存的秘密变量进行模糊操作(图3),使得最终的密文模式不可预测。当CipherFix遇到秘密变量时,它插入一条跳转指令,该指令跳转到修复代码块中。在修复代码块,CipherFix生成一个随机变量,将该随机变量与秘密变量进行异或(XOR)操作并写入内存中。完整掩码模糊步骤后,CipherFix将跳转回原先的执行流程中。

图3:CipherFix通过掩码操作对即将存入内存的秘密变量进行模糊

CipherFix提供三种不同的安全级别,可以根据具体应用场景的需求灵活选择,以平衡安全性和性能的关系。1)base模式:对于部分非秘密变量,使用00与掩码(mask)先进行异或,以此表明该变量不需要保护,因此需要额外的内存单元存储该隐秘变量。2)fast模式:直接在掩码中存储隐秘变量(00或者ff),因此非秘密变量可以直接与掩码异或。3)enhanced模式:为减少掩码的冲突,同时更新32位掩码。

此外,CipherFix还考虑到了与现有控制流完整性(CFI)的兼容性。该框架在插入保护代码的同时,确保不影响程序的控制流,保持系统的正常运行状态。

总的来说,CIPHERFIX通过动态与静态二进制插桩相结合的创新方法,针对密文侧信道攻击的独特挑战,提供了一种高效且灵活的解决方案,显著提高了执行环境中的安全性,为开发者在处理敏感数据时提供了可靠的保护机制。

四、技术分析

CipherFix的核心在于在静态二进制插桩过程中,对秘密变量的追踪以及对相应内存单元掩码的管理。这其中包括栈(stack)和堆(heap)秘密变量的处理。

对于栈区域的秘密标量,CipherFix的处理是直接的,这是由于动态污点分析中可以直接拿到该秘密栈的偏移量以及大小。因此,CipherFix直接在每个函数开始的地方生成一个相应的栈用来存储掩码。

对于堆区域的秘密变量,由于堆是动态生成与回收的,因此CipherFix也需要动态地追踪秘密堆的生成。为此,CipherFix使用调用栈的方式(图4),追踪秘密堆的生成与回收。一旦检测到秘密堆的分配,CipherFix直接在堆地址上加上一个固定的变量来分配掩码堆以及隐秘变量堆。同时,CipherFix需要插入相关的代码,对分配的掩码堆和隐秘变量堆进行初始化。

图4:CipherFix使用调用栈来追踪秘密堆的生成与回收

为提高掩码的安全性,CipherFix提出每一次内存存储需要对掩码进行更新。CipherFix采用三种指令来生成新的掩码,分别是:rdrand,vaesenc,XorShift128+。

五、验证评估

CipherFix的有效性通过一系列性能和安全性评估实验得到了验证。实验针对多种广泛使用的加密库(如OpenSSL、WolfSSL、mbedTLS及libsodium)中的易受密文侧信道攻击的算法进行了分析。这包括对EdDSA、ECDSA和RSA签名算法的评估,均显示出这些常见实现仍然存在漏洞。

在性能评估方面,动态分析的执行时间通常低于5分钟,具有约80%的时间花费用于寄存器跟踪,显示出分析过程的高效性。而在实际应用CipherFix进行静态插桩后,结果显示出加密操作的执行时间显著增加。总的来说,在使用最快的模式fast中,使用rdrand进行掩码更新,平均引入了16.8倍的性能开销,vaesenc平均引入了2.4倍的开销,而XorShift128+引入了2.7倍的开销。这表明在安全性与性能之间存在权衡。

本账号发布内容均为原创,欢迎转载,转载请注明出处。更多资讯请移步【机密计算前沿技术】服务号,欢迎交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值