FROST: Fingerprinting Remotely using OPFS-based SSD Timing

Hello,
I found a paper at https://hannesweissteiner.com/publications/frost/ that introduces a new covert channel attack using the browser’s OPFS (Origin Private File System) API in JavaScript to exfiltrate data and perform fingerprinting. I’m curious how this impacts Qubes users.

The abstract is as follows:

Prior work showed that variations in SSD access time can be used to leak information about user activity, e.g., the websites a user accesses, and for covert data transmission. To achieve this, SSD contention side channels require accurate high-resolution timing measurements of I/O operations, e.g., through the io_uring kernel API. However, the impact of these attacks is limited in their requirement for native code execution on the victim’s system.

In this paper, we show that SSD contention side channels can be mounted by a remote attacker from within the browser, without native code execution. Our attack FROST targets the Origin Private File System (OPFS) API in JavaScript, allowing us to create and access files on the disk, within the browser’s sandboxed environment. While a challenge in prior work was to evict the OS page cache, we devise an approach that instead bypasses the page cache, enabling fast SSD contention measurements from JavaScript without any user interaction. To evaluate the effectiveness of FROST on macOS and Linux, we build a covert channel that exfiltrates data from a native application to the malicious website with a true channel capacity of 661.63 bit/s on a Linux machine, and 891.77 bit/s on a macOS machine. To evaluate FROST in a side-channel scenario, we mount a website- and an application-fingerprinting attack on users of macOS systems. We can predict accessed websites with an F1 score of 88.95 %, and accessed application with an F1 score of 95.83 %, demonstrating the privacy implications our attack has on regular users.

What do you think?

3 Likes

It is an interesting side-channel, using the hardware. It is discussed also at https://discuss.privacyguides.net/t/ars-technica-websites-have-a-new-way-to-spy-on-visitors-analyzing-their-ssd-activity/38171.

I am not aware of any other practical mitigation than stopping or pausing all other web-facing qubes.

Even with all the extra indirection in Qubes-OS, any disk data must actually go to the ssd, and any contention is still there, even between qubes.

What am I missing?

1 Like

Disabling JavaScript.

1 Like

Real (ram-only) disposables are the future?

Setups with multiple drives.

Obvious mitigation is to not let websites use OPFS without user permission, but then attacker can make up a legitimate-looking reason for allowing OPFS.

Equivalents of the profile-sync-daemon are a better option - IMO it is harder for the attacker to justify selection of a large file.

I don’t think that it’s secure ultimately, but I can’t help to wonder what happens on a system with zfs ARC.

Another way to mitigate this is to halt all tabs you aren’t looking at. Not sure how to do this, but firefox has the “unload tab” button, maybe there is a way…

2 Likes

In about:config, there is a browser.tabs.unloadOnLowMemory preference that accepts Boolean values, you can change it from false (default) to true. Adjusting the available memory pool within each VM will also directly affect how aggressively the tabs unload in Firefox. The most effective mitigation against FROST within this framework is altering user behaviour so that only one tab is available at any given time.

However, the elephant in the room still lingers. If the site you are viewing is malicious, it does not stop the attack itself, only that other halted background tabs are not pulled into the blast radius. There are also usability trade-offs, particularily breaking ongoing WebSocket connections or other real-time tasks, such as playing audio.

My one-liner from earlier in this topic blocks the attack, full-stop.

What one-liner? You mean setting browser.tabs.unloadOnLowMemory?
Apparently there is also a suggestion to set dom.fs.enabled on privacyguides but I can’t find any docs about this

1 Like

Disabling JavaScript.

If JavaScript is a required, then what?

1 Like

I already provided a comprehensive response for that, allowing JavaScript in the browser but with various granular mitigations, but it is certainly not a comprehensive solution against the attack going through itself.

After re-reading the paper, it seems the underlying side channel allows fingerprinting of other qubes by any application able to make large disk writes and to use precise timing instruments on its own activity.

Javascript+OPFS is only the obvious mechanism - usable from a website. Other non-browser applications - malicious or compromised - could have the same ability.

I will be revisiting my personal javascript tolerance threshhold, all the same.

1 Like

How is disabling javascript a solution? It’s like saying don’t use the internet if you don’t want to get hacked.

1 Like

I would be more concerned over the SSD’s firmware myself. Still another reason to use multiple boot usbs or external ssds,

1 Like

@otter2

Real (ram-only) disposables are the future?

And the present too :slight_smile:

1 Like

Not really. As much as I agree that disabling js is impractical in modern environment, automatically executing code submitted by a stranger on the internet is a broken part of the industry. I don’t believe it can change if you and I disable js in our browsers, but I’ve been wrong before

This is why FROST is even applicable to qubes :sweat_smile:

It also opens an exfiltration channel, infected networkless qube can transmit data out over SSD latency spikes. Not very useful as a channel, there are better options:

And websites probably aren’t the limit - the way applications access drives is definitely fingerprintable, but I’m not sure how doable it is with measurement resolutions they use in the paper, nor what resolutions are possible.

3 Likes