如今,共享计算设备是一种非常普遍的行为,尤其是当用户在云端或移动设备进行计算时。但是这种资源共享行为很可能会无意间泄露用户的隐私信息。由于同一台计算机上运行的多个程序可能共享相同的内存资源,因此它们中存放的隐私数据(例如存储在计算机内存中的加密密钥或用户密码)可能会被恶意程序通过“内存时序(memory-timing)侧信道攻击(side-channel attacks)”窃取。
侧信道内存攻击目前在现实中并不常见,原因在于,这种攻击通常具有高度的复杂性,不仅需要定制攻击程序,还要对电信号(electric signaling)的工作原理以及操纵模式非常了解。但是,研究人员发现,一些高级攻击者已经开始利用该技术对高价值目标发起针对性攻击。值得一提的是,北卡罗来纳州立大学研究人员不久前正是通过侧信道攻击,实现了对同态加密技术的绕过。攻击方仅通过监听执行同态加密编码操作的设备功耗,就成功以明文形式提取了同态加密中的数据。这件事情也为行业敲响了警钟,警示我们即便是下一代加密技术也同样需要针对侧信道攻击的有效防护机制。
阻止这种攻击的传统方法是,一次只允许一个程序使用内存控制器,但这会大大降低计算速度。麻省理工学院的研究团队目前成功设计出了一种新方法,该方法允许内存共享继续存在,同时提供针对此类侧信道攻击的安全防护能力。这种新方法,将程序的内存请求“塑造”成预定义的模式,并混淆程序实际需要使用内存控制器的时间,从而扰乱攻击者的视线。
在一个程序可以访问内存控制器之前,它必须通过一个“请求塑造器”(request shaper)来“塑造”内存请求。这种“请求塑造器”使用图形结构来处理请求并按照固定的时间表将它们发送到内存控制器。这种类型的图称为有向无环图(DAG),而这种创新安全方案称为DAGguise。
使用这种严格的时间表,有时DAGguise会将程序的请求延迟到下一次允许访问内存(根据固定的时间表),或者有时如果程序不需要访问内存,它会提交一个假请求调度间隔。总之,通过这种非常结构化的模式,用户可以向攻击者隐藏实际行为。
DAGguise会将程序的内存访问请求表现为一个图,其中每个请求都存储在一个“节点”中,连接节点的“边”是请求之间的时间依赖关系。(请求A必须在请求B之前完成。)节点之间的边——每个请求之间的时间是固定的。程序可以在需要时向DAGguise提交内存请求,DAGguise将调整该请求的时间以始终确保安全。无论处理内存请求需要多长时间,攻击者看到的都只是请求实际发送到控制器的时间。
这种图结构使内存控制器能够动态共享。如果有许多程序试图一次使用内存,DAGguise可以适应并相应地调整固定时间表,从而更有效地使用共享内存硬件,同时仍然保持安全性。研究人员称,“我们的解决方案就是将受害者对内存控制器的访问请求转移到动态随机存取存储器(Dynamic Random Access Memory,简称DRAM),然后‘塑造’请求。这样一来,无论攻击者通过何种方式,都很难窃取到隐私数据。对此,我们进行了模拟验证,结果显示DAGguise这一方案非常有效。”
研究人员承认,DAGuise会对系统性能产生一定影响,但与其他安全解决方案相比,DAGguise对计算设备性能的影响大幅降低。当然,除了在实现更快计算的同时提供更好的安全性之外,该技术还可以应用于一系列针对共享计算资源的不同侧信道攻击。