3 ms·
> To the best of our knowledge, we are the first to report on the applicability of TLS session resumption for user tracking. Whoa. I had no idea browsers were
by btown 8y ago
> To the best of our knowledge, we are the first to report on the applicability of TLS session resumption for user tracking.
Whoa. I had no idea browsers were sending unique identifiers back to previously visited sites, even with cleared/disabled cookies. Nginx can pass $ssl_session_id upstream, so it's very possible that this is being used for tracking in the wild: http://nginx.org/en/docs/http/ngx_http_ssl_module.html#variables http://nginx.org/en/docs/http/ngx_http_ssl_module.html#varia...
Luckily, it looks like Chrome incognito mode does have a different TLS session cache, so at least things aren't leaking there. https://bugs.chromium.org/p/chromium/issues/detail?id=30877 https://bugs.chromium.org/p/chromium/issues/detail?id=30877
But it's unclear, for instance, whether mobile browsers use separate TLS caches for private browsing.
On top of the tracking described in the OP, the very presence of session resumption introduces an interesting timing attack. Imagine a malicious site which attempts to embed assets from various sites, all of which are known to have a similar RTT (perhaps they're hosted from the same datacenter). By seeing which are fulfilled more quickly than others (by virtue of resuming TLS sessions), you could probabilistically know which sites the user has visited before. Malicious actors could use this for phishing, or to establish bona fides in extorting payments (particularly for obscure sites with questionable content). It's exactly why we don't allow Javascript to introspect whether a link is blue or purple. Not good.
- byte1918 8y agoI didn't know you could not check if a link is blue or purple with javascript. I assume you can't do it through standard means. What about this css hack? https://github.com/maxchehab/CSS-Keylogging https://github.com/maxchehab/CSS-Keylogging Wouldn't using a selector like a:visited { background-image: url-to-tracking-image }? You can apply this with JS and check the href, although you can do that with CSS as well.
- btown 8y agoMany browsers have specifically disabled background-image, or anything with side effects, on :visited selectors - https://hacks.mozilla.org/2010/03/privacy-related-changes-coming-to-css-vistited/ https://hacks.mozilla.org/2010/03/privacy-related-changes-co... You can still trick users into clicking on overlays on top of visited links (e.g. with a fake captcha that says "click all the things that are purple"). But because this requires manual actions, it's less critical than something like the session resumption attack above, which could run all night and enumerate the RTT of every single banking site and niche mature-content site out there.
- kodablah 8y agoFWIW, Tor browser has had it disabled for years. Caching and anonymity are almost always at odds. For timing attacks, I think the required sample size of first connection to third party would be too large to reasonably exploit. You have to see if your first attempt does just a couple of TCP handshake messages shorter, future attempts would send the session ID from the first in client hello. There's too much between the third party and your user's browser for you to make any assumptions about just one loaded resource's TLS shortcut.
- Klathmon 8y ago> There's too much between the third party and your user's browser for you to make any assumptions about just one loaded resource's TLS shortcut. Are you assuming that or is there some testing you know of that can help back that up? Because I've heard of timing attacks happening over networks with a surprising amount of precision. Granted I'm inclined to believe you, it's my gut feeling as well, but I've been so very wrong about this in the past that I default to assuming there is no amount of latency or jitter that can hide a timing attack from a determined attacker.
- jerf 8y ago"Because I've heard of timing attacks happening over networks with a surprising amount of precision." They can, when you can issues thousands, millions, or even billions of attempts that are sufficiently statistically independent and then do statistics on the result. In this case, you want to see if the user has an open TLS session to a particular resource, but you only get one shot at the result, because after the first shot, now the user certainly has a TLS session open to the particular resource. So you have no opportunity to do many K/M/Grequests to nail down the differences and are swamped by other random events. Across a population of browsers you might be able to extract a small fraction of a bit per user, but you're certainly not getting anywhere near the full bit (yes they have open session/no they do not) on a per-user basis. While you can extract non-zero amounts of information I don't think you could count on getting any sort of useful information from it.
- 8y ago