本篇论文发表于FAST 2022上。
文件系统的去重功能
数据去重的主要思想是,当遇到重复的文件块时,这些文件块只会有一份被物理地存放在磁盘上,剩下的块都只会存储索引来指向该文件块。现在一些文件系统,如ZFS和Btrfs,支持了这种数据去重的功能,它们采用COW(copy-on-write)机制,只有当数据产生更改的时候才会进行复制。当数据不发生更改时,则继续使用索引共享数据区块。
构建侧信道攻击
这种共享的行为其实存在一定的安全性问题,容易受到侧信道攻击的影响。由于COW机制的存在,如果两个数据区块存放的数据内容存在重复,那么文件系统只会构建索引。相反,如果数据区块的内容不一致,那么数据区块就会被真正地物理写入磁盘中。很显然,存放索引所消耗的时间和存储数据所消耗的时间是不一样的,那么利用这种时间差就可以构建timing side channel攻击。
攻击方案
那么具体应该怎么做呢?如上图所示为alignment probing的方法,假设攻击者想要窃取的数据为secret data,那么攻击者可以设法将某一数据区块填入自己预先设定好的数据,然后将secret data逐byte填入其中。每填入一个byte,攻击者就尝试枚举填入的secret data的byte数值在另一个地方构造区块,并采用timing的方法来检验构造出来的区块是否和之前的区块相同。通过这样的办法,攻击者可以逐byte破解出secret data。
alignment probing可以实现local的攻击,即共享一台服务器的跨用户的攻击,但是跨网络的攻击需要对此timing进行放大。作者提出了secret spraying的方法,即一次请求进行多次写入,将时间差进行放大。基于以上,作者可以实现一种端到端的远程数据窃取攻击,具体是窃取nginx服务器上log文件中的OAuth access token(长度为22 bytes),在OAuth协议中的重要秘密数据。
当用户访问攻击者构造的恶意网站(即上图中的attack.com时),里面会有一个隐藏的iframe,该iframe会不断强制用户浏览器构建链接来在log文件中写入攻击者自己的secret OAuth token。通过这种方式,攻击者可以控制通过控制文件中的数据,进而控制文件区块中数据来实现攻击。由于该token的长度为22 bytes,通过重复22次操作即可复原这个key。
原文始发于微信公众号(COMPASS Lab):DupeFS:利用文件系统去重功能以侧信道攻击的方式泄露用户数据