网站可以使用文件的最后修改日期执行哪些“定时攻击”?

信息安全 网页浏览器 javascript 指纹识别 定时攻击
2021-08-25 04:09:49

https://developer.mozilla.org/en-US/docs/Web/API/File/lastModified描述了JavaScript.lastModified中对象的属性File(通常在用户通过 HTML<input type="file">元素选择文件时创建;在浏览器中提供 JavaScript从网页当然不能无限访问用户的文件系统!)

文档包含以下神秘的安全备注:

为了防止定时攻击和指纹识别,someFile.lastModified可能会根据浏览器设置四舍五入的精度。在 Firefox 中,privacy.reduceTimerPrecision 默认启用首选项,在 Firefox 59 中默认为 20us;在 60 中它将是 2ms。

在一个真正的延伸中,我可以看到假设文件修改日期如何用于指纹识别:如果您可以让用户<input type="file">在多个站点对话框中选择相同的文件,并且您存储精确到微秒的文件修改日期,然后您可以交叉引用它们并注意到,瞧,它是同一个用户(尽管这似乎是一个非常牵强的场景!)。但是我完全无法想象这种四舍五入可以防止什么“定时攻击”。

此功能实际上应该防止哪些攻击?

2个回答

我认为没有专门针对File.lastModified. 我认为 lastModified 字段的精度降低是缓解各种定时攻击的效果。

通过定时某些语句,可以从 JavaScript中利用 Spectre/Meltdown 。为此,您需要高精度计时。为了解决这个问题,Mozilla 使用privacy.reduceTimerPrecision. 这必须影响所有计时器:如果someFile.lastModifiednew Date()其他计时器更精确,您可以通过更改文件然后查看lastModified.

你是对的:它可以防止指纹识别。


这不需要任何用户交互,因为您可以通过 JavaScript 创建虚拟文件:

const file = new File([], 'foo.bar');
console.log(file.lastModified);

如果您不指定最后修改日期,则默认值为Date.now().

由于Date.now必须限制以防止指纹攻击(请参阅错误 #1217238),因此文档需要将该行为反映给开发人员。