写在前面
最近在学习防侧信道攻击的策略,主要看的是这两篇论文,先贴官方链接(论文和代码):
- Fast Fully Oblivious Compaction and Shuffling
https://crysp.uwaterloo.ca/software/obliv/#oblivshuffle (CCS 2022)
- Waks-On/Waks-Off: Fast Oblivious Offline/Online Shuffling and Sorting with Waksman Networks
https://crysp.uwaterloo.ca/software/obliv/#wakson (CCS 2023)
先主要看看论文(初涉该领域,翻译不准确的地方望见谅)
一、前瞻知识
1.1 Trusted Execution Environment
可信执行环境(TEE),始于十多年前的英特尔TXT [25],经历了几次改进。
近年来,硬件辅助的TEEs(例如:英特尔SGX、AMD SEV,以及它们的开源衍生版本Keystone )已经能够在硬件保护的容器中(称为:Enclaves)中安全地执行程序,提供强大的机密性和完整性保证,即使其主机是恶意的。它们有效地在否则是恶意服务器上提供了一个小的可信计算基础(TCB - Trusted Computing Base)。
由于技术原理类似,这里仅 选用最成熟的 Intel SGX 为例。
在Intel SGX中,enclaves 通过在制造时融合到处理器中的加密密钥来启动安全性,从而提供了可信执行环境。在引导时,这样的处理器将其可用DRAM的一部分设置为处理器保留内存(PRM)。对PRM中内存页面的所有访问都通过Intel的内存加密引擎(MEE)进行,该引擎使用处理器融合密钥每次它们离开系统缓存并返回PRM时对这些页面进行加密。类似地,MEE在将从PRM加载的所有页面移动到缓存供SGX支持的处理器使用之前解密和完整性检查这些页面;因此,这些页面的内容始终受到保护。
1.2 SGX 威胁模型
SGX的威胁模型允许对手控制支持SGX的服务器的软件堆栈,包括特别是操作系统。
对手可能可以物理访问服务器,但被假定为无法对处理器芯片进行物理篡改、提取处理器融合密钥,或窥探处理器寄存器的状态,这将使所谓的安全保证无效。
尽管如此,对手仍然是强大的,即可以观察所有共享资源和外围设备。
研究人员已经发现了对SGX的多种攻击:
- 侧信道攻击(Side-Channel Attacks):利用了系统中的物理实现细节,例如电磁辐射、功耗分析、甚至是时间延迟,来推断处理器执行的操作或访问的数据。
- 元数据攻击(Metadata Attacks):关注的是数据处理过程中产生的元数据信息,例如访问模式、数据大小、数据处理时间等。攻击者可以通过分析这些元数据信息来推断敏感数据的特征或行为。
- 控制流攻击(Control-Flow Attacks):利用程序控制流程的异常或漏洞来获取未授权访问权限的攻击方式。
这些攻击促使设计可信代码为“不经意的数据”以作为一种防御手段。
1.3 不经意性的程度
论文中定义了三种独立性的方式(可信环境内程序相对于秘密数据的不经意性):
- 外部内存的不经意性:对PRM之外的数据的内存访问与任何秘密数据无关。
- 受保护内存的不经意性:对PRM内部数据的内存访问与任何秘密数据无关。
更细颗粒度的访问模式:- 页面不经意性:SGX掩盖了页错误地址的最后12位给未受信任的操作系统,从而将对恶意操作系统的内存访问模式泄露限制到页面级别(4 KiB)。
(几种提出的攻击利用了未受信任的操作系统仍然负责enclave程序的页表管理的事实,通过在 Enclave 程序上引起页错误来提取程序访问的内存位置。) - 缓存行不经意性:高级攻击可以在页错误时提取加载的(64 B)缓存行的精确地址。
- 子缓存行不经意行:在缓存级别之上没有侧信道攻击。但是未来的研究可能会,可以提取从缓存行加载到寄存器的内存获取操作中加载的(8 B)字的确切地址。
- 页面不经意性:SGX掩盖了页错误地址的最后12位给未受信任的操作系统,从而将对恶意操作系统的内存访问模式泄露限制到页面级别(4 KiB)。
- 控制流不经意性:程序的执行不依赖于秘密数据。(攻击可以提取在依赖于秘密的控制流程分支中选择的确切分支,从而泄露有关秘密的信息。)
如果程序满足上述所有不经意性的定义,论文中称为“完全不经意性”;(不防范硬件侧信道攻击)
即使代码是控制流不经意的,但是编译后可能并不会保留该不经意性。编译器在进行代码优化时可能会改变编程逻辑中的安全策略,比如:
- 常数时间代码(Constant-Time Code):常数时间代码保证不同输入的执行时间是恒定的,不会因为某些输入数据的特性而导致执行时间的泄漏。
- 抵御侧信道攻击的内存访问模式(Side-Channel Resilient Memory Access Patterns):涉及对内存访问的排序、对内存地址的随机化等技术,以使得攻击者无法从内存访问模式中获取有用的信息。
论文中针对这种“优化”,设计了FOAV(帮助验证程序二进制文件的控制流不经意性的工具)。
一些物理的侧信道攻击(比如微体系结构侧信道)会侵犯SGX和处理器的安全模型,英特尔会预防。但是内存访问的侧信道类型,不被认为是违反了SGX安全模型的(并没有声称保护访问的内存地址),所以这些侧信道必须在软件中解决。
1.4 Waksman 网络
Waksman网络是一种特殊的排列网络,用于执行任意排列操作。它由一系列二进制开关组成,每个开关有两个输入和两个输出,其行为由一个控制位控制。当控制位为1时,开关交换其两个输入;当控制位为0时,开关按原始顺序输出其两个输入。通过适当设置Waksman网络中的这些控制位,可以实现对输入数据的任意排列,即对数据项的重新排序操作。
Waksman网络的构建以递归方式进行:
对于偶数和奇数n,构建稍有不同。在这两种情况下,首先应用一个输入开关层,然后将结果用作顶部和底部的Waksman子网络的输入,然后在这些子网络的输出上应用一个输出开关层。(这个图严格来讲不完整,中间的虚线部分应该是递归下去的多个)
给定层中的开关接受不相交的输入,因此它们可以并行应用。当n = 2时,网络是一个单一开关,当n = 1时则没有开关。Waksman网络旨在最小化开关数量,同时仍能应用任何排列。
如果你保存了每个开关的状态(控制位的值),就相当于保存了一种打乱顺序的策略。当需要恢复原始顺序时,只需按照相反的顺序设置这些开关的状态即可。这样,Waksman网络就可以用来实现数据项的打乱和恢复操作,同时保证了这一过程是可逆的。
请注意,Waksman网络的拓扑结构是固定的;也就是说,哪些开关以何种顺序应用于哪些值仅取决于n。这种特性使得Waksman网络在不经意性计算中非常有用。
在这停顿
全写在一篇感觉篇幅太长了,也不方便大家看。
这篇就先介绍下背景,下篇具体展开看算法。