mr-gl00m/frost-guard

GitHub: mr-gl00m/frost-guard

一款被动检测 FROST OPFS SSD 计时侧信道指纹攻击前置条件的 Chrome 扩展,通过监视磁盘空闲空间的急剧下降来触发告警。

Stars: 0 | Forks: 0

# FROST Guard [基于 OPFS 的 SSD 计时的远程指纹识别](https://tugraz.elsevierpure.com/en/publications/14c3156a-0b81-4809-8f37-1487bbb4572e/)(Weissteiner 等人在 DIMVA 2026 提出的基于浏览器的 SSD 计时侧信道攻击)的被动绊线。它持续监视空闲磁盘空间,除非有程序分配了该攻击运行所必需的超大文件,否则它会保持静默。 ## 它的实际作用 FROST 通过 JavaScript,利用 Origin Private File System (OPFS) 测试 SSD 争用来对正在使用的网站和应用程序进行指纹识别。它有一个不可避免的要求:它必须创建一个**大于你的 RAM** 的文件,以确保读取操作会绕过 OS 页面缓存并直接命中 SSD。在 32 GB 的机器上,这意味着磁盘上会出现一个 30 GB 以上的文件。 此扩展无法查看其他源的 OPFS 内部;没有任何扩展可以做到这一点。它*能*看到的是该文件无法隐藏的副作用:空闲磁盘空间急剧下降。它每分钟会统计一次所有固定驱动器上的剩余空间总和;如果在一个时间间隔内下降了超过阈值(默认为 10 GB),它会触发一条桌面通知,提醒你检查你的标签页。 就是这样。没有内容脚本,没有标头重写,也没有逐页挂钩。仅需最少的权限(`system.storage`、`notifications`、`alarms`、`storage`)。它不干预页面的加载或运行方式。 ## 安装(加载未打包的扩展程序) 1. `chrome://extensions` 2. 开启右上角的**开发者模式**。 3. 点击**加载已解压的扩展程序**,然后选择此 `frost-guard` 文件夹。 4. 完成。它会在后台运行;只有当磁盘空间发生快速且大量的下降时,你才会收到它的通知。 ## 客观的局限性 这是**检测,而不是预防。** 它不能阻止 FROST;它会告诉你攻击的前置条件刚刚出现,以便你关闭标签页并切断持续的间谍活动。具体来说: - **针对卷级别,而非进程级别。** 它看到的是总剩余空间,而不知道是哪个进程占用的。30 GB 的游戏安装或大文件下载也会触发它。这个警报只是一个信息提示,而不是指控。 - **捕捉快速填满,而不是缓慢增长。** 真正的 FROST 分配会在几秒钟内发生,因此每分钟一次的检查可以轻松捕获它。如果攻击者故意在几分钟内以低于阈值的块缓慢写入文件,则可能会逃过检测。如果你希望以增加误报为代价来换取灵敏度,可以在 `watch.js` 中调低 `DROP_THRESHOLD`。 - **依赖于 `chrome.system.storage.getAvailableCapacity`。** 历史上,此方法仅限于某些 Chrome 渠道使用。如果你的版本中没有返回任何内容,Worker 会静默禁用自身(无读数,无警报)。要验证其是否有效,请参阅下文的测试部分。 - **10 秒的瞬时追踪在这里基本无法阻止。** 它的价值在于对抗*持续的*监视(攻击在后台标签页中持续运行),在这种情况下,及时的警报可以终结它。 ## 刻意舍弃的设计 为了保持其不可见且零附带损害,我们特意考虑并放弃了两个在理论上更强的防护层: - **剥离 `COOP`/`COEP` 标头**(拒绝 FROST 用于解锁高精度计时器的跨源隔离)。这很稳健(它甚至能触及攻击的 Web Worker,因为它在 JS 层之下工作),但它会破坏需要 `SharedArrayBuffer` 的合法网站(WASM 多线程应用、某些游戏)。为了构建一个无感知的版本,这种附带损害让我们将其排除在外。 - **限制页面中的 OPFS 文件大小。** 对于公开的 FROST 攻击来说几乎没有用:攻击的热循环运行在内容脚本无法触及的 Web Worker 中,并且文件完全可以完全在该 Worker 中分配。它只会阻止偷懒的主线程变体,代价是破坏合法的大型 OPFS Web 应用。不值得。 如果这种威胁不再是假设性的,并且你想要真正的防御,剥离 `COOP`/`COEP` 加上一个小型的白名单就是应该添加的手段。 ## 测试 你很难轻易伪造一个 30 GB 的 OPFS 分配,但你可以确认警报路径: 1. 在 `watch.js` 中,暂时设置 `DROP_THRESHOLD = 1 * GiB`,并让 `POLL_MINUTES` 保持为 1。 2. 在 `chrome://extensions` 中重新加载扩展程序。 3. 将大于 1 GB 的文件复制或下载到固定驱动器上(这会减少剩余空间)。 4. 在一分钟内你应该会收到通知。如果始终没有收到,则 `getAvailableCapacity` 可能在你的渠道上不可用。 5. 将 `DROP_THRESHOLD` 恢复为 `10 * GiB` 并重新加载。 ## 调优 所有配置都位于 `watch.js` 的顶部:`POLL_MINUTES`、`DROP_THRESHOLD`。特意不提供 UI。 ## 参考 Weissteiner, Weiser, Czerny, Neela, Rauscher, Juffinger, Gruss. *FROST: Fingerprinting Remotely using OPFS-based SSD Timing.* DIMVA 2026, Springer. 论文链接:
标签:AMSI绕过, 侧信道攻击, 威胁检测, 数据可视化, 浏览器扩展, 网络安全, 自定义脚本, 隐私保护