Georg Koppen commited on 2018-01-24 10:16:16
Zeige 1 geänderte Dateien mit 366 Einfügungen und 253 Löschungen.
... | ... |
@@ -1,9 +1,9 @@ |
1 | 1 |
<?xml version="1.0" encoding="UTF-8"?> |
2 |
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The Design and Implementation of the Tor Browser [DRAFT]</title><meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /></head><body><div class="article"><div class="titlepage"><div><div><h2 class="title"><a id="design"></a>The Design and Implementation of the Tor Browser [DRAFT]</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Mike</span> <span class="surname">Perry</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:mikeperry#torproject org">mikeperry#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Erinn</span> <span class="surname">Clark</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:erinn#torproject org">erinn#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Steven</span> <span class="surname">Murdoch</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:sjmurdoch#torproject org">sjmurdoch#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Georg</span> <span class="surname">Koppen</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:gk#torproject org">gk#torproject org</a>></code></p></div></div></div></div><div><p class="pubdate">March 10th, 2017</p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="#idm29">1. Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="#components">1.1. Browser Component Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="#DesignRequirements">2. Design Requirements and Philosophy</a></span></dt><dd><dl><dt><span class="sect2"><a href="#security">2.1. Security Requirements</a></span></dt><dt><span class="sect2"><a href="#privacy">2.2. Privacy Requirements</a></span></dt><dt><span class="sect2"><a href="#philosophy">2.3. Philosophy</a></span></dt></dl></dd><dt><span class="sect1"><a href="#adversary">3. Adversary Model</a></span></dt><dd><dl><dt><span class="sect2"><a href="#adversary-goals">3.1. Adversary Goals</a></span></dt><dt><span class="sect2"><a href="#adversary-positioning">3.2. Adversary Capabilities - Positioning</a></span></dt><dt><span class="sect2"><a href="#attacks">3.3. Adversary Capabilities - Attacks</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Implementation">4. Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="#proxy-obedience">4.1. Proxy Obedience</a></span></dt><dt><span class="sect2"><a href="#state-separation">4.2. State Separation</a></span></dt><dt><span class="sect2"><a href="#disk-avoidance">4.3. Disk Avoidance</a></span></dt><dt><span class="sect2"><a href="#app-data-isolation">4.4. Application Data Isolation</a></span></dt><dt><span class="sect2"><a href="#identifier-linkability">4.5. Cross-Origin Identifier Unlinkability</a></span></dt><dt><span class="sect2"><a href="#fingerprinting-linkability">4.6. Cross-Origin Fingerprinting Unlinkability</a></span></dt><dt><span class="sect2"><a href="#new-identity">4.7. Long-Term Unlinkability via "New Identity" button</a></span></dt><dt><span class="sect2"><a href="#other-security">4.8. Other Security Measures</a></span></dt></dl></dd><dt><span class="sect1"><a href="#BuildSecurity">5. Build Security and Package Integrity</a></span></dt><dd><dl><dt><span class="sect2"><a href="#idm1010">5.1. Achieving Binary Reproducibility</a></span></dt><dt><span class="sect2"><a href="#idm1042">5.2. Package Signatures and Verification</a></span></dt><dt><span class="sect2"><a href="#idm1049">5.3. Anonymous Verification</a></span></dt><dt><span class="sect2"><a href="#update-safety">5.4. Update Safety</a></span></dt></dl></dd><dt><span class="appendix"><a href="#Transparency">A. Towards Transparency in Navigation Tracking</a></span></dt><dd><dl><dt><span class="sect1"><a href="#deprecate">A.1. Deprecation Wishlist</a></span></dt><dt><span class="sect1"><a href="#idm1090">A.2. Promising Standards</a></span></dt></dl></dd></dl></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idm29"></a>1. Introduction</h2></div></div></div><p> |
|
2 |
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The Design and Implementation of the Tor Browser [DRAFT]</title><meta name="generator" content="DocBook XSL Stylesheets V1.79.1" /></head><body><div class="article"><div class="titlepage"><div><div><h2 class="title"><a id="design"></a>The Design and Implementation of the Tor Browser [DRAFT]</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Mike</span> <span class="surname">Perry</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:mikeperry#torproject org">mikeperry#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Erinn</span> <span class="surname">Clark</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:erinn#torproject org">erinn#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Steven</span> <span class="surname">Murdoch</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:sjmurdoch#torproject org">sjmurdoch#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Georg</span> <span class="surname">Koppen</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:gk#torproject org">gk#torproject org</a>></code></p></div></div></div></div><div><p class="pubdate">January 24th, 2017</p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="#idm29">1. Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="#components">1.1. Browser Component Overview</a></span></dt></dl></dd><dt><span class="sect1"><a href="#DesignRequirements">2. Design Requirements and Philosophy</a></span></dt><dd><dl><dt><span class="sect2"><a href="#security">2.1. Security Requirements</a></span></dt><dt><span class="sect2"><a href="#privacy">2.2. Privacy Requirements</a></span></dt><dt><span class="sect2"><a href="#philosophy">2.3. Philosophy</a></span></dt></dl></dd><dt><span class="sect1"><a href="#adversary">3. Adversary Model</a></span></dt><dd><dl><dt><span class="sect2"><a href="#adversary-goals">3.1. Adversary Goals</a></span></dt><dt><span class="sect2"><a href="#adversary-positioning">3.2. Adversary Capabilities - Positioning</a></span></dt><dt><span class="sect2"><a href="#attacks">3.3. Adversary Capabilities - Attacks</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Implementation">4. Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="#proxy-obedience">4.1. Proxy Obedience</a></span></dt><dt><span class="sect2"><a href="#state-separation">4.2. State Separation</a></span></dt><dt><span class="sect2"><a href="#disk-avoidance">4.3. Disk Avoidance</a></span></dt><dt><span class="sect2"><a href="#app-data-isolation">4.4. Application Data Isolation</a></span></dt><dt><span class="sect2"><a href="#identifier-linkability">4.5. Cross-Origin Identifier Unlinkability</a></span></dt><dt><span class="sect2"><a href="#fingerprinting-linkability">4.6. Cross-Origin Fingerprinting Unlinkability</a></span></dt><dt><span class="sect2"><a href="#new-identity">4.7. Long-Term Unlinkability via "New Identity" button</a></span></dt><dt><span class="sect2"><a href="#other-security">4.8. Other Security Measures</a></span></dt></dl></dd><dt><span class="sect1"><a href="#BuildSecurity">5. Build Security and Package Integrity</a></span></dt><dd><dl><dt><span class="sect2"><a href="#idm1107">5.1. Achieving Binary Reproducibility</a></span></dt><dt><span class="sect2"><a href="#idm1139">5.2. Package Signatures and Verification</a></span></dt><dt><span class="sect2"><a href="#idm1146">5.3. Anonymous Verification</a></span></dt><dt><span class="sect2"><a href="#update-safety">5.4. Update Safety</a></span></dt></dl></dd><dt><span class="appendix"><a href="#Transparency">A. Towards Transparency in Navigation Tracking</a></span></dt><dd><dl><dt><span class="sect1"><a href="#deprecate">A.1. Deprecation Wishlist</a></span></dt><dt><span class="sect1"><a href="#idm1189">A.2. Promising Standards</a></span></dt></dl></dd></dl></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idm29"></a>1. Introduction</h2></div></div></div><p> |
|
3 | 3 |
|
4 | 4 |
This document describes the <a class="link" href="#adversary" title="3. Adversary Model">adversary model</a>, |
5 | 5 |
<a class="link" href="#DesignRequirements" title="2. Design Requirements and Philosophy">design requirements</a>, and <a class="link" href="#Implementation" title="4. Implementation">implementation</a> of the Tor Browser. It is current as of Tor Browser |
6 |
-6.5.1. |
|
6 |
+7.0.11. |
|
7 | 7 |
|
8 | 8 |
</p><p> |
9 | 9 |
|
... | ... |
@@ -25,7 +25,7 @@ Support Release (ESR) Firefox branch</a>. We have a <a class="ulink" href="https |
25 | 25 |
against this browser to enhance privacy and security. Browser behavior is |
26 | 26 |
additionally augmented through the <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/tree/" target="_top">Torbutton |
27 | 27 |
extension</a>, though we are in the process of moving this functionality |
28 |
-into direct Firefox patches. We also <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/tree/browser/app/profile/000-tor-browser.js?h=tor-browser-45.8.0esr-6.5-2" target="_top">change |
|
28 |
+into direct Firefox patches. We also <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/tree/browser/app/profile/000-tor-browser.js?h=tor-browser-52.5.2esr-7.0-2" target="_top">change |
|
29 | 29 |
a number of Firefox preferences</a> from their defaults. |
30 | 30 |
|
31 | 31 |
</p><p> |
... | ... |
@@ -39,7 +39,7 @@ Instantbird, and XULRunner. |
39 | 39 |
To help protect against potential Tor Exit Node eavesdroppers, we include |
40 | 40 |
<a class="ulink" href="https://www.eff.org/https-everywhere" target="_top">HTTPS-Everywhere</a>. To |
41 | 41 |
provide users with optional defense-in-depth against JavaScript and other |
42 |
-potential exploit vectors, we also include <a class="ulink" href="http://noscript.net/" target="_top">NoScript</a>. We also modify <a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/Bundle-Data/linux/Data/Browser/profile.default/preferences/extension-overrides.js" target="_top">several |
|
42 |
+potential exploit vectors, we also include <a class="ulink" href="https://noscript.net/" target="_top">NoScript</a>. We also modify <a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/Bundle-Data/linux/Data/Browser/profile.default/preferences/extension-overrides.js" target="_top">several |
|
43 | 43 |
extension preferences</a> from their defaults. |
44 | 44 |
|
45 | 45 |
</p><p> |
... | ... |
@@ -47,7 +47,7 @@ extension preferences</a> from their defaults. |
47 | 47 |
To provide censorship circumvention in areas where the public Tor network is |
48 | 48 |
blocked either by IP, or by protocol fingerprint, we include several <a class="ulink" href="https://trac.torproject.org/projects/tor/wiki/doc/AChildsGardenOfPluggableTransports" target="_top">Pluggable |
49 | 49 |
Transports</a> in the distribution. As of this writing, we include <a class="ulink" href="https://gitweb.torproject.org/pluggable-transports/obfs4.git" target="_top">Obfs3proxy, |
50 |
-Obfs4proxy, Scramblesuit</a>, |
|
50 |
+Obfs4proxy</a>, |
|
51 | 51 |
<a class="ulink" href="https://trac.torproject.org/projects/tor/wiki/doc/meek" target="_top">meek</a>, |
52 | 52 |
and <a class="ulink" href="https://fteproxy.org/" target="_top">FTE</a>. |
53 | 53 |
|
... | ... |
@@ -214,7 +214,7 @@ linkability. |
214 | 214 |
<a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3100" target="_top">Another |
215 | 215 |
failure of Torbutton</a> was the options panel. Each option |
216 | 216 |
that detectably alters browser behavior can be used as a fingerprinting tool. |
217 |
-Similarly, all extensions <a class="ulink" href="http://blog.chromium.org/2010/06/extensions-in-incognito.html" target="_top">should be |
|
217 |
+Similarly, all extensions <a class="ulink" href="https://blog.chromium.org/2010/06/extensions-in-incognito.html" target="_top">should be |
|
218 | 218 |
disabled in the mode</a> except as an opt-in basis. We should not load |
219 | 219 |
system-wide and/or operating system provided addons or plugins. |
220 | 220 |
|
... | ... |
@@ -233,17 +233,17 @@ permissions can be written to disk. Otherwise, they should remain memory-only. |
233 | 233 |
</p></li><li class="listitem"><span class="command"><strong>No filters</strong></span><p> |
234 | 234 |
|
235 | 235 |
Site-specific or filter-based addons such as <a class="ulink" href="https://addons.mozilla.org/en-US/firefox/addon/adblock-plus/" target="_top">AdBlock |
236 |
-Plus</a>, <a class="ulink" href="http://requestpolicy.com/" target="_top">Request Policy</a>, |
|
237 |
-<a class="ulink" href="http://www.ghostery.com/about" target="_top">Ghostery</a>, <a class="ulink" href="http://priv3.icsi.berkeley.edu/" target="_top">Priv3</a>, and <a class="ulink" href="http://sharemenot.cs.washington.edu/" target="_top">Sharemenot</a> are to be |
|
236 |
+Plus</a>, <a class="ulink" href="https://requestpolicy.com/" target="_top">Request Policy</a>, |
|
237 |
+<a class="ulink" href="https://www.ghostery.com/about-ghostery/" target="_top">Ghostery</a>, <a class="ulink" href="http://priv3.icsi.berkeley.edu/" target="_top">Priv3</a>, and <a class="ulink" href="https://sharemenot.cs.washington.edu/" target="_top">Sharemenot</a> are to be |
|
238 | 238 |
avoided. We believe that these addons do not add any real privacy to a proper |
239 | 239 |
<a class="link" href="#Implementation" title="4. Implementation">implementation</a> of the above <a class="link" href="#privacy" title="2.2. Privacy Requirements">privacy requirements</a>, and that development efforts |
240 |
-should be focused on general solutions that prevent tracking by all |
|
241 |
-third parties, rather than a list of specific URLs or hosts. |
|
240 |
+should be focused on general solutions that prevent tracking by all third |
|
241 |
+parties, rather than a list of specific URLs or hosts. |
|
242 | 242 |
</p><p> |
243 | 243 |
Implementing filter-based blocking directly into the browser, such as done with |
244 |
-<a class="ulink" href="http://ieee-security.org/TC/SPW2015/W2SP/papers/W2SP_2015_submission_32.pdf" target="_top"> |
|
244 |
+<a class="ulink" href="https://ieee-security.org/TC/SPW2015/W2SP/papers/W2SP_2015_submission_32.pdf" target="_top"> |
|
245 | 245 |
Firefox' Tracking Protection</a>, does not alleviate the concerns mentioned |
246 |
-in the previous paragraph. There is still just a list concerned with specific |
|
246 |
+in the previous paragraph. There is still just a list containing specific |
|
247 | 247 |
URLs and hosts which, in this case, are |
248 | 248 |
<a class="ulink" href="https://services.disconnect.me/disconnect-plaintext.json" target="_top"> |
249 | 249 |
assembled</a> by <a class="ulink" href="https://disconnect.me/trackerprotection" target="_top"> |
... | ... |
@@ -256,11 +256,14 @@ Even with a precision rate at 99% and a false positive rate at 0.1% trackers |
256 | 256 |
would be missed and sites would be wrongly blocked. |
257 | 257 |
</p><p> |
258 | 258 |
Filter-based solutions in general can also introduce strange breakage and cause |
259 |
-usability nightmares. Coping with those easily leads to just <a class="ulink" href="https://github.com/mozilla-services/shavar-list-exceptions" target="_top">whitelisting |
|
259 |
+usability nightmares. For instance, there is a trend to observe that websites |
|
260 |
+start <a class="ulink" href="https://petsymposium.org/2017/papers/issue3/paper25-2017-3-source.pdf" target="_top"> |
|
261 |
+detecting filer extensions and block access to content</a> on them. Coping |
|
262 |
+with this fallout easily leads to just <a class="ulink" href="https://github.com/mozilla-services/shavar-list-exceptions" target="_top">whitelisting |
|
260 | 263 |
</a> |
261 |
-the affected domains defeating the purpose of the filter in the first place. |
|
262 |
-Filters will also fail to do their job if an adversary simply |
|
263 |
-registers a new domain or <a class="ulink" href="http://ieee-security.org/TC/SPW2015/W2SP/papers/W2SP_2015_submission_24.pdf" target="_top"> |
|
264 |
+the affected domains, hoping that this helps, defeating the purpose of the |
|
265 |
+filter in the first place. Filters will also fail to do their job if an |
|
266 |
+adversary simply registers a new domain or <a class="ulink" href="https://ieee-security.org/TC/SPW2015/W2SP/papers/W2SP_2015_submission_24.pdf" target="_top"> |
|
264 | 267 |
creates a new URL path</a>. Worse still, the unique filter sets that each |
265 | 268 |
user creates or installs will provide a wealth of fingerprinting targets. |
266 | 269 |
</p><p> |
... | ... |
@@ -436,7 +439,7 @@ about the user agent. |
436 | 439 |
Also, JavaScript can be used to query the user's timezone via the |
437 | 440 |
<code class="function">Date()</code> object, <a class="ulink" href="https://www.khronos.org/registry/webgl/specs/1.0/#5.13" target="_top">WebGL</a> can |
438 | 441 |
reveal information about the video card in use, and high precision timing |
439 |
-information can be used to <a class="ulink" href="http://w2spconf.com/2011/papers/jspriv.pdf" target="_top">fingerprint the CPU and |
|
442 |
+information can be used to <a class="ulink" href="https://cseweb.ucsd.edu/~hovav/dist/jspriv.pdf" target="_top">fingerprint the cpu and |
|
440 | 443 |
interpreter speed</a>. JavaScript features such as |
441 | 444 |
<a class="ulink" href="https://www.w3.org/TR/resource-timing/" target="_top">Resource Timing</a> |
442 | 445 |
may leak an unknown amount of network timing related information. And, moreover, |
... | ... |
@@ -455,7 +458,7 @@ fingerprintability. Additionally, plugins are capable of extracting font lists, |
455 | 458 |
interface addresses, and other machine information that is beyond what the |
456 | 459 |
browser would normally provide to content. In addition, plugins can be used to |
457 | 460 |
store unique identifiers that are more difficult to clear than standard |
458 |
-cookies. <a class="ulink" href="http://epic.org/privacy/cookies/flash.html" target="_top">Flash-based |
|
461 |
+cookies. <a class="ulink" href="https://epic.org/privacy/cookies/flash.html" target="_top">Flash-based |
|
459 | 462 |
cookies</a> fall into this category, but there are likely numerous other |
460 | 463 |
examples. Beyond fingerprinting, plugins are also abysmal at obeying the proxy |
461 | 464 |
settings of the browser. |
... | ... |
@@ -475,7 +478,7 @@ encrypted traffic patterns of specific websites. In the case of Tor, this |
475 | 478 |
attack would take place between the user and the Guard node, or at the Guard |
476 | 479 |
node itself. |
477 | 480 |
</p><p> The most comprehensive study of the statistical properties of this |
478 |
-attack against Tor was done by <a class="ulink" href="http://lorre.uni.lu/~andriy/papers/acmccs-wpes11-fingerprinting.pdf" target="_top">Panchenko |
|
481 |
+attack against Tor was done by <a class="ulink" href="https://lorre.uni.lu/~andriy/papers/acmccs-wpes11-fingerprinting.pdf" target="_top">Panchenko |
|
479 | 482 |
et al</a>. Unfortunately, the publication bias in academia has encouraged |
480 | 483 |
the production of |
481 | 484 |
<a class="ulink" href="https://blog.torproject.org/blog/critique-website-traffic-fingerprinting-attacks" target="_top">a |
... | ... |
@@ -494,7 +497,7 @@ In general, with machine learning, as you increase the <a class="ulink" href="ht |
494 | 497 |
categories to classify</a> while maintaining a limit on reliable feature |
495 | 498 |
information you can extract, you eventually run out of descriptive feature |
496 | 499 |
information, and either true positive accuracy goes down or the false positive |
497 |
-rate goes up. This error is called the <a class="ulink" href="http://www.cs.washington.edu/education/courses/csep573/98sp/lectures/lecture8/sld050.htm" target="_top">bias |
|
500 |
+rate goes up. This error is called the <a class="ulink" href="https://www.cs.washington.edu/education/courses/csep573/98sp/lectures/lecture8/sld050.htm" target="_top">bias |
|
498 | 501 |
in your hypothesis space</a>. In fact, even for unbiased hypothesis |
499 | 502 |
spaces, the number of training examples required to achieve a reasonable error |
500 | 503 |
bound is <a class="ulink" href="https://en.wikipedia.org/wiki/Probably_approximately_correct_learning#Equivalence" target="_top">a |
... | ... |
@@ -507,7 +510,7 @@ In the case of this attack, the key factors that increase the classification |
507 | 510 |
complexity (and thus hinder a real world adversary who attempts this attack) |
508 | 511 |
are large numbers of dynamically generated pages, partially cached content, |
509 | 512 |
and also the non-web activity of the entire Tor network. This yields an |
510 |
-effective number of "web pages" many orders of magnitude larger than even <a class="ulink" href="http://lorre.uni.lu/~andriy/papers/acmccs-wpes11-fingerprinting.pdf" target="_top">Panchenko's |
|
513 |
+effective number of "web pages" many orders of magnitude larger than even <a class="ulink" href="https://lorre.uni.lu/~andriy/papers/acmccs-wpes11-fingerprinting.pdf" target="_top">Panchenko's |
|
511 | 514 |
"Open World" scenario</a>, which suffered continuous near-constant decline |
512 | 515 |
in the true positive rate as the "Open World" size grew (see figure 4). This |
513 | 516 |
large level of classification complexity is further confounded by a noisy and |
... | ... |
@@ -579,7 +582,7 @@ are typically linked for these cases. |
579 | 582 |
Proxy obedience is assured through the following: |
580 | 583 |
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Firefox proxy settings, patches, and build flags</strong></span><p> |
581 | 584 |
|
582 |
-Our <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/tree/browser/app/profile/000-tor-browser.js?h=tor-browser-45.8.0esr-6.5-2" target="_top">Firefox |
|
585 |
+Our <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/tree/browser/app/profile/000-tor-browser.js?h=tor-browser-52.5.2esr-7.0-2" target="_top">Firefox |
|
583 | 586 |
preferences file</a> sets the Firefox proxy settings to use Tor directly |
584 | 587 |
as a SOCKS proxy. It sets <span class="command"><strong>network.proxy.socks_remote_dns</strong></span>, |
585 | 588 |
<span class="command"><strong>network.proxy.socks_version</strong></span>, |
... | ... |
@@ -595,11 +598,11 @@ as set the pref <span class="command"><strong>media.peerconnection.enabled</stro |
595 | 598 |
</p><p> |
596 | 599 |
|
597 | 600 |
We also patch Firefox in order to provide several defense-in-depth mechanisms |
598 |
-for proxy safety. Notably, we <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=177e78923b3252a7442160486ec48252a6adb77a" target="_top">patch |
|
601 |
+for proxy safety. Notably, we <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=35ce9974e034c0374fb3c8e00e9eb0231c4f3378" target="_top">patch |
|
599 | 602 |
the DNS service</a> to prevent any browser or addon DNS resolution, and we |
600 |
-also <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=6e17cef8f3cf61fdabf99e40d5e09a730142d6cd" target="_top"> |
|
603 |
+also <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=ee28d8f27fdb1e47481987535c7da70095042ee2" target="_top"> |
|
601 | 604 |
remove the DNS lookup for the profile lock signature</a>. Furhermore, we |
602 |
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=8197f6ffe58ba167e3bca4230c5721ebcfae55de" target="_top">patch |
|
605 |
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=ffba8d1b84431b4024d5012b326cbcb986047f27" target="_top">patch |
|
603 | 606 |
OCSP and PKIX code</a> to prevent any use of the non-proxied command-line |
604 | 607 |
tool utility functions from being functional while linked in to the browser. |
605 | 608 |
In both cases, we could find no direct paths to these routines in the browser, |
... | ... |
@@ -607,7 +610,7 @@ but it seemed better safe than sorry. |
607 | 610 |
|
608 | 611 |
</p><p> |
609 | 612 |
|
610 |
-For further defense-in-depth we disabled WebIDE because it can bypass proxy |
|
613 |
+For further defense-in-depth we disable WebIDE because it can bypass proxy |
|
611 | 614 |
settings for remote debugging, and also because it downloads extensions we |
612 | 615 |
have not reviewed. We |
613 | 616 |
are doing this by setting |
... | ... |
@@ -616,26 +619,21 @@ are doing this by setting |
616 | 619 |
<span class="command"><strong>devtools.webide.enabled</strong></span>, and |
617 | 620 |
<span class="command"><strong>devtools.appmanager.enabled</strong></span> to <span class="command"><strong>false</strong></span>. |
618 | 621 |
Moreover, we removed the Roku Screen Sharing and screencaster code with a |
619 |
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id= ad4abdb2e724fec060063f460604b829c66ea08a" target="_top"> |
|
622 |
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=055bdffbef68bc8d5e8005b3c7dd2f5d99da1163" target="_top"> |
|
620 | 623 |
Firefox patch</a> as these features can bypass proxy settings as well. |
621 | 624 |
</p><p> |
622 |
-Shumway is removed, too, for possible proxy bypass risks. We did this by |
|
623 |
-backporting a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=d020a4992d8d25baf7dfb5c8b308d80b47a8d312" target="_top"> |
|
624 |
-number</a> <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=98bf6c81b22cb5e4651a5fc060182f27b26c8ee5" target="_top"> |
|
625 |
-of</a> <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=14b723f28a6b1dd78093691013d1bf7d49dc4413" target="_top">Mozilla patches</a>. |
|
626 |
-Further down on our road to proxy safety we <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=a9e1d8eac28abb364bbfd3adabeae287751a6a8e" target="_top"> |
|
627 |
-disabled the network tickler</a> as it has the capability to send UDP |
|
628 |
-traffic. |
|
629 |
- </p><p> |
|
630 |
- |
|
631 |
-Finally, we <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=8e52265653ab223dc5af679f9f0c073b44371fa4" target="_top"> |
|
632 |
-disabled mDNS support</a>, since mDNS uses UDP packets. We also disable |
|
625 |
+Further down on our road to proxy safety we <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=7222d02638689a64d7297b8e5c202f9c37547523" target="_top"> |
|
626 |
+disable the network tickler</a> as it has the capability to send UDP |
|
627 |
+traffic and we <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=5bc957b4f635a659f9aecaa374972ecca7f770a8" target="_top"> |
|
628 |
+disable mDNS support</a>, since mDNS uses UDP packets as well. We also disable |
|
633 | 629 |
Mozilla's TCPSocket by setting |
634 | 630 |
<span class="command"><strong>dom.mozTCPSocket.enabled</strong></span> to <span class="command"><strong>false</strong></span>. We |
635 | 631 |
<a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/18866" target="_top">intend to |
636 | 632 |
rip out</a> the TCPSocket code in the future to have an even more solid |
637 | 633 |
guarantee that it won't be used by accident. |
638 |
- |
|
634 |
+ </p><p> |
|
635 |
+Finally, we <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=55bd129f081bd37ae9e72ae32434fbb56ff4e446" target="_top"> |
|
636 |
+remove</a> potentially unsafe Rust code. |
|
639 | 637 |
</p><p> |
640 | 638 |
During every Extended Support Release transition, we perform <a class="ulink" href="https://gitweb.torproject.org/tor-browser-spec.git/tree/audits" target="_top">in-depth |
641 | 639 |
code audits</a> to verify that there were no system calls or XPCOM |
... | ... |
@@ -651,7 +649,7 @@ protocol helpers, such as SMB URLs and other custom protocol handlers are all |
651 | 649 |
blocked. |
652 | 650 |
</p></li><li class="listitem"><span class="command"><strong>Disabling plugins</strong></span><p> |
653 | 651 |
Plugins, like Flash, have the ability to make arbitrary OS system calls and |
654 |
-<a class="ulink" href="http://decloak.net/" target="_top">bypass proxy settings</a>. This includes |
|
652 |
+<a class="ulink" href="https://ip-check.info/" target="_top">bypass proxy settings</a>. This includes |
|
655 | 653 |
the ability to make UDP sockets and send arbitrary data independent of the |
656 | 654 |
browser proxy settings. |
657 | 655 |
</p><p> |
... | ... |
@@ -667,9 +665,9 @@ restricted from automatic load through Firefox's click-to-play preference |
667 | 665 |
|
668 | 666 |
In addition, to reduce any unproxied activity by arbitrary plugins at load |
669 | 667 |
time, and to reduce the fingerprintability of the installed plugin list, we |
670 |
-also patch the Firefox source code to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=09883246904ce4dede9f3c4d4bb8d644aefe9d1d" target="_top"> |
|
668 |
+also patch the Firefox source code to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=95a0100fd8ac0fdbe9f517e9b7ea86d6b77ec2c9" target="_top"> |
|
671 | 669 |
prevent the load of any plugins except for Flash and Gnash</a>. Even for |
672 |
-Flash and Gnash, we also patch Firefox to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=9a0d506e3655f2fdec97ee4217f354941e39b5b3" target="_top"> |
|
670 |
+Flash and Gnash, we also patch Firefox to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=39f5a767c0c082b1e4a001cf685a6efb31bd62c6" target="_top"> |
|
673 | 671 |
prevent loading them into the address space</a> until they are explicitly |
674 | 672 |
enabled. |
675 | 673 |
</p><p> |
... | ... |
@@ -681,23 +679,39 @@ can't be built reproducibly or are binary blobs which we are not allowed to |
681 | 679 |
audit (or both). For the EME case we use the <span class="command"><strong>--disable-eme</strong></span> |
682 | 680 |
configure switch and set |
683 | 681 |
<span class="command"><strong>browser.eme.ui.enabled</strong></span>, |
682 |
+<span class="command"><strong>media.gmp-eme-adobe.visible</strong></span>, |
|
684 | 683 |
<span class="command"><strong>media.gmp-eme-adobe.enabled</strong></span>, |
684 |
+<span class="command"><strong>media.gmp-widevinecdm.visible</strong></span>, |
|
685 |
+<span class="command"><strong>media.gmp-widevinecdm.enabled</strong></span>, |
|
685 | 686 |
<span class="command"><strong>media.eme.enabled</strong></span>, and |
686 | 687 |
<span class="command"><strong>media.eme.apiVisible</strong></span> to <span class="command"><strong>false</strong></span> to indicate |
687 | 688 |
to the user that this feature is disabled. For GMPs in general we make sure that |
688 | 689 |
the external server is not even pinged for updates/downloads in the first place |
689 | 690 |
by setting <span class="command"><strong>media.gmp-manager.url.override</strong></span> to |
690 | 691 |
<span class="command"><strong>data:text/plain,</strong></span> and avoid any UI with <span class="command"><strong> |
691 |
-media.gmp-provider.enabled</strong></span> set to <span class="command"><strong>false</strong></span>. |
|
692 |
+ media.gmp-provider.enabled</strong></span> set to <span class="command"><strong>false</strong></span>. Moreover, |
|
693 |
+we disable GMP downloads via local fallback by setting |
|
694 |
+<span class="command"><strong>media.gmp-manager.updateEnabled</strong></span> to <span class="command"><strong>false</strong></span>. |
|
695 |
+To reduce our attack surface we exclude the ClearKey EME system, too. |
|
692 | 696 |
|
693 | 697 |
</p></li><li class="listitem"><span class="command"><strong>External App Blocking and Drag Event Filtering</strong></span><p> |
694 | 698 |
|
695 | 699 |
External apps can be induced to load files that perform network activity. |
696 | 700 |
Unfortunately, there are cases where such apps can be launched automatically |
697 |
-with little to no user input. In order to prevent this, Torbutton installs a |
|
698 |
-component to <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/tree/src/components/external-app-blocker.js" target="_top"> |
|
701 |
+with little to no user input. In order to prevent this, we ship <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=d179d8a4861199e203934ecc36dd6d8ade549dfa" target="_top"> |
|
702 |
+Firefox</a> <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=99173c3a5f83d9ac44091a72c5570efd296dff8f" target="_top">patches</a> and Torbutton installs a component to <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/tree/src/components/external-app-blocker.js" target="_top"> |
|
699 | 703 |
provide the user with a popup</a> whenever the browser attempts to launch |
700 |
-a helper app. |
|
704 |
+a helper application. |
|
705 |
+ |
|
706 |
+ </p><p> |
|
707 |
+ |
|
708 |
+Furthermore, we ship a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=d75b79f6fa920e6a1e3043005dfd50060ea70e57" target="_top">patch for Linux users</a> that makes |
|
709 |
+sure sftp:// and smb:// URLs are not passed along to the operating system as this |
|
710 |
+can lead to proxy bypasses on systems that have GIO/GnomeVS support. And proxy |
|
711 |
+bypass risks due to file:// URLs should be mitigated for macOS and Linux users |
|
712 |
+by <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=8db44df10d1d82850e8b4cfe81ac3b5fce32a663" target="_top"> |
|
713 |
+two</a> <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=a8e1fcc8678aa1583f73ef231c99f77cf17196d9" target="_top"> |
|
714 |
+further patches</a>. |
|
701 | 715 |
|
702 | 716 |
</p><p> |
703 | 717 |
|
... | ... |
@@ -719,7 +733,14 @@ system-level addons from the browser through the use of |
719 | 733 |
<span class="command"><strong>extensions.autoDisableScopes</strong></span>. Furthermore, we set |
720 | 734 |
<span class="command"><strong>extensions.systemAddon.update.url</strong></span> and <span class="command"><strong> |
721 | 735 |
extensions.hotfix.id</strong></span> to an empty string in order |
722 |
-to avoid the risk of getting extensions installed by Mozilla into Tor Browser. |
|
736 |
+to avoid the risk of getting extensions installed by Mozilla into Tor Browser, |
|
737 |
+and remove unused system extensions with a |
|
738 |
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=4d90fcf15e328ca369751011ad0a9c0c1ba2f153" target="_top"> |
|
739 |
+Firefox patch</a>. |
|
740 |
+In order to make it harder for users to accidentally install extensions which |
|
741 |
+Mozilla presents to them on the <span class="emphasis"><em>about:addons</em></span> page, we hide |
|
742 |
+the <span class="emphasis"><em>Get Addons</em></span> option on it by setting |
|
743 |
+<span class="command"><strong>extensions.getAddons.showPane</strong></span> to <span class="command"><strong>false</strong></span>. |
|
723 | 744 |
|
724 | 745 |
</p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="state-separation"></a>4.2. State Separation</h3></div></div></div><p> |
725 | 746 |
|
... | ... |
@@ -732,39 +753,35 @@ system-wide extensions (through the use of |
732 | 753 |
disabled, which prevents Flash cookies from leaking from a pre-existing Flash |
733 | 754 |
directory. |
734 | 755 |
|
735 |
- </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="disk-avoidance"></a>4.3. Disk Avoidance</h3></div></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm357"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
756 |
+ </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="disk-avoidance"></a>4.3. Disk Avoidance</h3></div></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm372"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
736 | 757 |
|
737 | 758 |
The User Agent MUST (at user option) prevent all disk records of browser activity. |
738 | 759 |
The user SHOULD be able to optionally enable URL history and other history |
739 | 760 |
features if they so desire. |
740 | 761 |
|
741 |
- </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm360"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
742 |
- |
|
762 |
+ </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm375"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
743 | 763 |
We are working towards this goal through several mechanisms. First, we set |
744 | 764 |
the Firefox Private Browsing preference |
745 |
- <span class="command"><strong>browser.privatebrowsing.autostart</strong></span>. |
|
765 |
+ <span class="command"><strong>browser.privatebrowsing.autostart</strong></span> to <span class="command"><strong>true</strong></span>. |
|
746 | 766 |
We also had to disable the media cache with the pref <span class="command"><strong>media.cache_size</strong></span>, to prevent HTML5 videos from being written to the OS temporary directory, which happened regardless of the private browsing mode setting. |
747 |
- Finally, we needed to disable asm.js as it turns out that |
|
748 |
- <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1047105" target="_top">asm.js |
|
749 |
- cache entries get written to disk</a> in private browsing mode. This |
|
750 |
- is done by setting <span class="command"><strong>javascript.options.asmjs</strong></span> to |
|
751 |
- <span class="command"><strong>false</strong></span> (for linkability concerns with asm.js see below). |
|
767 |
+ Finally, we set <span class="command"><strong>security.nocertdb</strong></span> to <span class="command"><strong>true</strong></span> |
|
768 |
+ to make the intermediate certificate store memory-only. |
|
769 |
+ </blockquote></div><div class="blockquote"><blockquote class="blockquote"> |
|
770 |
+ Moreover, we prevent text leaking from the web console to the /tmp |
|
771 |
+ directory with a direct <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=48b68533d113c5998d19d4e5acfb8967ba2d5f5b" target="_top">Firefox patch</a>. |
|
752 | 772 |
</blockquote></div><div class="blockquote"><blockquote class="blockquote"> |
753 | 773 |
|
754 |
-As an additional defense-in-depth measure, we set the following preferences: |
|
755 |
-<span class="command"><strong></strong></span>, |
|
774 |
+As an additional defense-in-depth measure, we set |
|
756 | 775 |
<span class="command"><strong>browser.cache.disk.enable</strong></span>, |
757 | 776 |
<span class="command"><strong>browser.cache.offline.enable</strong></span>, |
758 |
-<span class="command"><strong>dom.indexedDB.enabled</strong></span>, |
|
759 |
-<span class="command"><strong>network.cookie.lifetimePolicy</strong></span>, |
|
760 | 777 |
<span class="command"><strong>signon.rememberSignons</strong></span>, |
761 |
-<span class="command"><strong>browser.formfill.enable</strong></span>, |
|
762 |
-<span class="command"><strong>browser.download.manager.retention</strong></span>, |
|
763 |
-<span class="command"><strong>browser.sessionstore.privacy_level</strong></span>, |
|
764 |
-and <span class="command"><strong>network.cookie.lifetimePolicy</strong></span>. Many of these |
|
765 |
-preferences are likely redundant with |
|
766 |
-<span class="command"><strong>browser.privatebrowsing.autostart</strong></span>, but we have not done the |
|
767 |
-auditing work to ensure that yet. |
|
778 |
+<span class="command"><strong>browser.formfill.enable</strong></span> to <span class="command"><strong>true</strong></span>, |
|
779 |
+<span class="command"><strong>browser.download.manager.retention</strong></span> to <span class="command"><strong>1</strong></span>, |
|
780 |
+and both <span class="command"><strong>browser.sessionstore.privacy_level</strong></span> and |
|
781 |
+<span class="command"><strong>network.cookie.lifetimePolicy</strong></span> to <span class="command"><strong>2</strong></span>. Many |
|
782 |
+of these preferences are likely redundant with |
|
783 |
+<span class="command"><strong>browser.privatebrowsing.autostart</strong></span> enabled, but we have not |
|
784 |
+done the auditing work to ensure that yet. |
|
768 | 785 |
|
769 | 786 |
</blockquote></div><div class="blockquote"><blockquote class="blockquote"> |
770 | 787 |
|
... | ... |
@@ -803,7 +820,7 @@ the URL bar origin for which browser state exists, possibly with a |
803 | 820 |
context-menu option to drill down into specific types of state or permissions. |
804 | 821 |
An example of this simplification can be seen in Figure 1. |
805 | 822 |
|
806 |
- </p><div class="figure"><a id="idm393"></a><p class="title"><strong>Figure 1. Improving the Privacy UI</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="NewCookieManager.png" align="middle" alt="Improving the Privacy UI" /></div><div class="caption"><p></p> |
|
823 |
+ </p><div class="figure"><a id="idm410"></a><p class="title"><strong>Figure 1. Improving the Privacy UI</strong></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="NewCookieManager.png" align="middle" alt="Improving the Privacy UI" /></div><div class="caption"><p></p> |
|
807 | 824 |
|
808 | 825 |
This example UI is a mock-up of how isolating identifiers to the URL bar |
809 | 826 |
domain can simplify the privacy UI for all data - not just cookies. Once |
... | ... |
@@ -811,47 +828,39 @@ browser identifiers and site permissions operate on a URL bar basis, the same |
811 | 828 |
privacy window can represent browsing history, DOM Storage, HTTP Auth, search |
812 | 829 |
form history, login values, and so on within a context menu for each site. |
813 | 830 |
|
814 |
-</div></div></div><br class="figure-break" /><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm400"></a>Identifier Unlinkability Defenses in the Tor Browser</h4></div></div></div><p> |
|
831 |
+</div></div></div><br class="figure-break" /><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm417"></a>Identifier Unlinkability Defenses in the Tor Browser</h4></div></div></div><p> |
|
815 | 832 |
|
816 | 833 |
Unfortunately, many aspects of browser state can serve as identifier storage, |
817 |
-and no other browser vendor or standards body has invested the effort to |
|
834 |
+and no other browser vendor or standards body had invested the effort to |
|
818 | 835 |
enumerate or otherwise deal with these vectors for third party tracking. As |
819 | 836 |
such, we have had to enumerate and isolate these identifier sources on a |
820 |
-piecemeal basis. Here is the list that we have discovered and dealt with to |
|
821 |
-date: |
|
837 |
+piecemeal basis. This has gotten better lately with Mozilla stepping up and |
|
838 |
+helping us with uplifting our patches, and with contributing own ones where we |
|
839 |
+lacked proper fixes. However, we are not done yet with our unlinkability defense |
|
840 |
+as new identifier sources are still getting added to the web platform. Here is |
|
841 |
+the list that we have discovered and dealt with to date: |
|
822 | 842 |
|
823 | 843 |
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Cookies</strong></span><p><span class="command"><strong>Design Goal:</strong></span> |
824 | 844 |
|
825 | 845 |
All cookies MUST be double-keyed to the URL bar origin and third-party |
826 |
-origin. There exists a <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=565965" target="_top">Mozilla bug</a> |
|
827 |
-that contains a prototype patch, but it lacks UI, and does not apply to modern |
|
828 |
-Firefox versions. |
|
846 |
+origin. |
|
829 | 847 |
|
830 | 848 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
831 | 849 |
|
832 |
-As a stopgap to satisfy our design requirement of unlinkability, we currently |
|
833 |
-entirely disable 3rd party cookies by setting |
|
834 |
-<span class="command"><strong>network.cookie.cookieBehavior</strong></span> to <span class="command"><strong>1</strong></span>. We |
|
835 |
-would prefer that third party content continue to function, but we believe the |
|
836 |
-requirement for unlinkability trumps that desire. |
|
850 |
+Double-keying cookies should just work by setting <span class="command"><strong>privacy.firstparty.isolate |
|
851 |
+</strong></span> to <span class="command"><strong>true</strong></span>. However, |
|
852 |
+<a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/21905" target="_top">we have not |
|
853 |
+audited that</a> yet and there is still the |
|
854 |
+<a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/10353" target="_top">UI part |
|
855 |
+missing for managing cookies in Private Browsing Mode</a>. We therefore |
|
856 |
+opted to keep third-party cookies disabled for now by setting |
|
857 |
+<span class="command"><strong>network.cookie.cookieBehavior</strong></span> to <span class="command"><strong>1</strong></span>. |
|
837 | 858 |
|
838 | 859 |
</p></li><li class="listitem"><span class="command"><strong>Cache</strong></span><p><span class="command"><strong>Design Goal:</strong></span> |
839 | 860 |
All cache entries MUST be isolated to the URL bar domain. |
840 | 861 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
841 |
- |
|
842 |
-In Firefox, there are actually several distinct caching mechanisms: One is for |
|
843 |
-general content (HTML, JavaScript, CSS). That content cache is isolated to the |
|
844 |
-URL bar domain by <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=9e88ab764b1c9c5d26a398ec6381eef88689929c" target="_top">altering |
|
845 |
-each cache key</a> to include an additional ID that includes the URL bar |
|
846 |
-domain. This functionality can be observed by navigating to <a class="ulink" href="about:cache" target="_top">about:cache</a> and viewing the key used for each cache |
|
847 |
-entry. Each third party element should have an additional "string@:" |
|
848 |
-property prepended, which will list the base domain that was used to source it. |
|
849 |
- |
|
850 |
- </p><p> |
|
851 |
- |
|
852 |
-Additionally, there is the image cache. Because it is a separate entity from |
|
853 |
-the content cache, we had to patch Firefox to also <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=05749216781d470ab95c2d101dd28ad000d9161f" target="_top">isolate |
|
854 |
-this cache per URL bar domain</a>. |
|
862 |
+We isolate the content and image cache to the URL bar domain by setting |
|
863 |
+<span class="command"><strong>privacy.firstparty.isolate</strong></span> to <span class="command"><strong>true</strong></span>. |
|
855 | 864 |
|
856 | 865 |
</p><p> |
857 | 866 |
Furthermore there is the Cache API (CacheStorage). That one is currently not |
... | ... |
@@ -861,31 +870,29 @@ Private Browsing Mode by default. |
861 | 870 |
Finally, we have the asm.js cache. The cache entry of the sript is (among |
862 | 871 |
others things, like type of CPU, build ID, source characters of the asm.js |
863 | 872 |
module etc.) keyed <a class="ulink" href="https://blog.mozilla.org/luke/2014/01/14/asm-js-aot-compilation-and-startup-performance/" target="_top">to the origin of the script</a>. |
864 |
-Lacking a good solution for binding it to the URL bar domain instead (and given |
|
865 |
-the storage of asm.js modules in Private Browsing Mode) we decided to disable |
|
866 |
-asm.js for the time being by setting <span class="command"><strong>javascript.options.asmjs</strong></span> to |
|
867 |
-<span class="command"><strong>false</strong></span>. It remains to be seen whether keying the cache entry |
|
868 |
-to the source characters of the asm.js module helps to avoid using it for |
|
869 |
-cross-origin tracking of users. We did not investigate that yet. |
|
873 |
+Lacking a good solution for binding it to the URL bar domain instead we decided |
|
874 |
+to disable asm.js for the time being by setting |
|
875 |
+<span class="command"><strong>javascript.options.asmjs</strong></span> to <span class="command"><strong>false</strong></span>. It |
|
876 |
+remains to be seen whether keying the cache entry e.g. to the source characters |
|
877 |
+of the asm.js module helps to avoid using it for cross-origin tracking of users. |
|
878 |
+We did not investigate that yet. |
|
870 | 879 |
</p></li><li class="listitem"><span class="command"><strong>HTTP Authentication</strong></span><p> |
871 | 880 |
|
872 | 881 |
HTTP Authorization headers can be used to encode <a class="ulink" href="http://jeremiahgrossman.blogspot.com/2007/04/tracking-users-without-cookies.html" target="_top">silent |
873 |
-third party tracking identifiers</a>. To prevent this, we remove HTTP |
|
874 |
-authentication tokens for third party elements through a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=5e686c690cbc33cf3fdf984e6f3d3fe7b4d83701" target="_top">patch |
|
875 |
-to nsHTTPChannel</a>. |
|
882 |
+third party tracking identifiers</a>. To prevent this, we set |
|
883 |
+<span class="command"><strong>privacy.firstparty.isolate</strong></span> to <span class="command"><strong>true</strong></span>. |
|
876 | 884 |
|
877 | 885 |
</p></li><li class="listitem"><span class="command"><strong>DOM Storage</strong></span><p> |
878 | 886 |
|
879 | 887 |
DOM storage for third party domains MUST be isolated to the URL bar domain, |
880 |
-to prevent linkability between sites. This functionality is provided through a |
|
881 |
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=20fee895321a7a18e79547e74f6739786558c0e8" target="_top">patch |
|
882 |
-to Firefox</a>. |
|
888 |
+to prevent linkability between sites. We achieve this by setting |
|
889 |
+<span class="command"><strong>privacy.firstparty.isolate</strong></span> to <span class="command"><strong>true</strong></span>. |
|
883 | 890 |
|
884 | 891 |
</p></li><li class="listitem"><span class="command"><strong>Flash cookies</strong></span><p><span class="command"><strong>Design Goal:</strong></span> |
885 | 892 |
|
886 | 893 |
Users should be able to click-to-play flash objects from trusted sites. To |
887 | 894 |
make this behavior unlinkable, we wish to include a settings file for all |
888 |
-platforms that disables flash cookies using the <a class="ulink" href="http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager03.html" target="_top">Flash |
|
895 |
+platforms that disables flash cookies using the <a class="ulink" href="https://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager03.html" target="_top">Flash |
|
889 | 896 |
settings manager</a>. |
890 | 897 |
|
891 | 898 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
... | ... |
@@ -909,16 +916,18 @@ these performance optimizations, we also enable |
909 | 916 |
<a class="ulink" href="https://tools.ietf.org/html/draft-bmoeller-tls-falsestart-00" target="_top">TLS |
910 | 917 |
False Start</a> via the Firefox Pref |
911 | 918 |
<span class="command"><strong>security.ssl.enable_false_start</strong></span>. |
919 |
+However, URL bar domain isolation should be working both for session tickets and |
|
920 |
+session IDs but we <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/17252" target="_top"> |
|
921 |
+have not verified that yet</a>. |
|
912 | 922 |
|
913 |
- </p></li><li class="listitem"><span class="command"><strong>Tor circuit and HTTP connection linkability</strong></span><p> |
|
923 |
+ </p></li><li class="listitem"><span class="command"><strong>Tor circuit and HTTP connection linkability</strong></span><p><span class="command"><strong>Design Goal:</strong></span> |
|
914 | 924 |
|
915 | 925 |
Tor circuits and HTTP connections from a third party in one URL bar origin |
916 | 926 |
MUST NOT be reused for that same third party in another URL bar origin. |
917 | 927 |
|
918 |
- </p><p> |
|
928 |
+ </p><p><span class="command"><strong>Implementation Status:</strong></span> |
|
919 | 929 |
|
920 |
-This isolation functionality is provided by a Torbutton |
|
921 |
-component that <a class="ulink" href="" target="_top">sets |
|
930 |
+The isolation functionality is provided by a Torbutton component that <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/tree/src/components/domain-isolator.js" target="_top">sets |
|
922 | 931 |
the SOCKS username and password for each request</a>. The Tor client has |
923 | 932 |
logic to prevent connections with different SOCKS usernames and passwords from |
924 | 933 |
using the same Tor circuit. Firefox has existing logic to ensure that |
... | ... |
@@ -928,20 +937,22 @@ connections unless the proxy settings match. |
928 | 937 |
this logic</a> to cover SOCKS username and password authentication, |
929 | 938 |
providing us with HTTP Keep-Alive unlinkability. |
930 | 939 |
|
940 |
+ </p><p> |
|
941 |
+ |
|
942 |
+While the vast majority of web requests adheres to the circuit and connection |
|
943 |
+unlinkability requirement there are still corner cases we |
|
944 |
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=8661822237c56d543d5c9117c8a4708c402a110f" target="_top"> |
|
945 |
+ need to treat separately</a> or that |
|
946 |
+<a class="ulink" href="" target="_top">lack a fix altogether</a>. |
|
931 | 947 |
</p></li><li class="listitem"><span class="command"><strong>SharedWorkers</strong></span><p> |
932 | 948 |
|
933 | 949 |
<a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker" target="_top">SharedWorkers</a> |
934 | 950 |
are a special form of JavaScript Worker threads that have a shared scope between |
935 |
-all threads from the same Javascript origin. |
|
936 |
- |
|
937 |
- </p><p> |
|
938 |
- |
|
939 |
-The SharedWorker scope MUST be isolated to the URL bar domain. I.e. a |
|
940 |
-SharedWorker launched from a third party from one URL bar domain MUST NOT have |
|
941 |
-access to the objects created by that same third party loaded under another URL |
|
942 |
-bar domain. This functionality is provided by a |
|
943 |
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=d17c11445645908086c8d0af84e970e880f586eb" target="_top"> |
|
944 |
-Firefox patch</a>. |
|
951 |
+all threads from the same Javascript origin. They MUST be isolated to the URL |
|
952 |
+bar domain. I.e. a SharedWorker launched from a third party from one URL bar |
|
953 |
+domain MUST NOT have access to the objects created by that same third party |
|
954 |
+loaded under another URL bar domain. This functionality is provided by setting |
|
955 |
+<span class="command"><strong>privacy.firstparty.isolate</strong></span> to <span class="command"><strong>true</strong></span>. |
|
945 | 956 |
|
946 | 957 |
</p></li><li class="listitem"><span class="command"><strong>blob: URIs (URL.createObjectURL)</strong></span><p> |
947 | 958 |
|
... | ... |
@@ -953,15 +964,12 @@ web. While this UUID value is neither under control of the site nor |
953 | 964 |
predictable, it can still be used to tag a set of users that are of high |
954 | 965 |
interest to an adversary. |
955 | 966 |
|
956 |
- </p><p><span class="command"><strong>Design Goal:</strong></span> |
|
967 |
+ </p><p> |
|
957 | 968 |
|
958 | 969 |
URIs created with URL.createObjectURL MUST be limited in scope to the first |
959 |
-party URL bar domain that created them. |
|
960 |
- |
|
961 |
- </p><p><span class="command"><strong>Implementation Status:</strong></span> |
|
962 |
- |
|
963 |
-We provide the isolation in Tor Browser via a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=7eb0b7b7a9c7257140ae5683718e82f3f0884f4f" target="_top">direct |
|
964 |
-patch to Firefox</a>. However, downloads of PDF files via the download button in the PDF viewer <a class="ulink" href="https://bugs.torproject.org/17933" target="_top">are not isolated yet</a>. |
|
970 |
+party URL bar domain that created them. We provide the isolation in Tor |
|
971 |
+Browser by setting <span class="command"><strong>privacy.firstparty.isolate</strong></span> to |
|
972 |
+<span class="command"><strong>true</strong></span>. |
|
965 | 973 |
|
966 | 974 |
</p></li><li class="listitem"><span class="command"><strong>SPDY and HTTP/2</strong></span><p><span class="command"><strong>Design Goal:</strong></span> |
967 | 975 |
|
... | ... |
@@ -1007,7 +1015,7 @@ open</a> to implement what we can. |
1007 | 1015 |
<a class="ulink" href="https://developer.mozilla.org/En/DOM/Window.name" target="_top">window.name</a> is |
1008 | 1016 |
a magical DOM property that for some reason is allowed to retain a persistent value |
1009 | 1017 |
for the lifespan of a browser tab. It is possible to utilize this property for |
1010 |
-<a class="ulink" href="http://www.thomasfrank.se/sessionvars.html" target="_top">identifier |
|
1018 |
+<a class="ulink" href="https://www.thomasfrank.se/sessionvars.html" target="_top">identifier |
|
1011 | 1019 |
storage</a>. |
1012 | 1020 |
|
1013 | 1021 |
</p><p> |
... | ... |
@@ -1031,8 +1039,8 @@ appear, setting this preference prevents automatic linkability from stored passw |
1031 | 1039 |
|
1032 | 1040 |
</p></li><li class="listitem"><span class="command"><strong>HSTS and HPKP supercookies</strong></span><p> |
1033 | 1041 |
|
1034 |
-An extreme (but not impossible) attack to mount is the creation of <a class="ulink" href="http://www.leviathansecurity.com/blog/archives/12-The-Double-Edged-Sword-of-HSTS-Persistence-and-Privacy.html" target="_top">HSTS</a> |
|
1035 |
-<a class="ulink" href="http://www.radicalresearch.co.uk/lab/hstssupercookies/" target="_top"> |
|
1042 |
+An extreme (but not impossible) attack to mount is the creation of <a class="ulink" href="https://www.leviathansecurity.com/blog/archives/12-The-Double-Edged-Sword-of-HSTS-Persistence-and-Privacy.html" target="_top">HSTS</a> |
|
1043 |
+<a class="ulink" href="https://www.radicalresearch.co.uk/lab/hstssupercookies/" target="_top"> |
|
1036 | 1044 |
supercookies</a>. Since HSTS effectively stores one bit of information per domain |
1037 | 1045 |
name, an adversary in possession of numerous domains can use them to construct |
1038 | 1046 |
cookies based on stored HSTS state. |
... | ... |
@@ -1064,9 +1072,8 @@ instead be isolated to the URL bar domain. |
1064 | 1072 |
|
1065 | 1073 |
</p><p> |
1066 | 1074 |
|
1067 |
-We provide the isolation in Tor Browser via a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=3460a38721810b5b7e785e18f202dde20b3434e8" target="_top">direct |
|
1068 |
-patch to Firefox</a>. If we lack a window for determining the URL bar |
|
1069 |
-domain (e.g. in some worker contexts) the use of broadcast channels is disabled. |
|
1075 |
+We provide the isolation in Tor Browser by setting |
|
1076 |
+<span class="command"><strong>privacy.firstparty.isolate</strong></span> to <span class="command"><strong>true</strong></span>. |
|
1070 | 1077 |
|
1071 | 1078 |
</p></li><li class="listitem"><span class="command"><strong>OCSP</strong></span><p> |
1072 | 1079 |
|
... | ... |
@@ -1076,24 +1083,28 @@ no cached results are available. Thus, to avoid information leaks, e.g. to exit |
1076 | 1083 |
relays, OCSP requests MUST go over the same circuit as the HTTPS request causing |
1077 | 1084 |
them and MUST therefore be isolated to the URL bar domain. The resulting cache |
1078 | 1085 |
entries MUST be bound to the URL bar domain as well. This functionality is |
1079 |
-provided by a |
|
1080 |
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=7eb1568275acd4fdf61359c9b1e97c2753e7b2be" target="_top">Firefox patch</a>. |
|
1086 |
+provided by setting <span class="command"><strong>privacy.firstparty.isolate</strong></span> to |
|
1087 |
+<span class="command"><strong>true</strong></span>. |
|
1081 | 1088 |
|
1082 |
- </p></li><li class="listitem"><span class="command"><strong>Favicons</strong></span><p> |
|
1089 |
+ </p></li><li class="listitem"><span class="command"><strong>Favicons</strong></span><p><span class="command"><strong>Design Goal:</strong></span> |
|
1083 | 1090 |
|
1084 | 1091 |
When visiting a website its favicon is fetched via a request originating from |
1085 | 1092 |
the browser itself (similar to the OCSP mechanism mentioned in the previous |
1086 |
-section). Those requests MUST be isolated to the URL bar domain. This |
|
1087 |
-functionality is provided by a |
|
1088 |
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=f29f3ff28bbc471ea209d2181770677223c394d1" target="_top">Firefox patch</a>. |
|
1093 |
+section). Those requests MUST be isolated to the URL bar domain. |
|
1094 |
+ |
|
1095 |
+ </p><p><span class="command"><strong>Implemetation Status:</strong></span> |
|
1089 | 1096 |
|
1097 |
+Favicon requests are isolated to the URL bar domain by setting |
|
1098 |
+<span class="command"><strong>privacy.firstparty.isolate</strong></span> to <span class="command"><strong>true</strong></span>. |
|
1099 |
+However, we need an additional |
|
1100 |
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=eaa22334adaf8f79544ee4318982e5f4990c1a6f" target="_top">Firefox patch</a> |
|
1101 |
+to take care of favicons in tab list menuitems. |
|
1090 | 1102 |
</p></li><li class="listitem"><span class="command"><strong>mediasource: URIs and MediaStreams</strong></span><p> |
1091 | 1103 |
|
1092 | 1104 |
Much like blob URLs, mediasource: URIs and MediaStreams can be used to tag |
1093 | 1105 |
users. Therefore, mediasource: URIs and MediaStreams MUST be isolated to the URL bar domain. |
1094 |
-This functionality is part of a |
|
1095 |
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=7eb0b7b7a9c7257140ae5683718e82f3f0884f4f" target="_top">Firefox patch</a> |
|
1096 |
- |
|
1106 |
+This functionality is provided by setting <span class="command"><strong>privacy.firstparty.isolate</strong></span> |
|
1107 |
+to <span class="command"><strong>true</strong></span>. |
|
1097 | 1108 |
</p></li><li class="listitem"><span class="command"><strong>Speculative and prefetched connections</strong></span><p> |
1098 | 1109 |
|
1099 | 1110 |
Firefox provides the feature to <a class="ulink" href="https://www.igvita.com/2015/08/17/eliminating-roundtrips-with-preconnect/" target="_top">connect speculatively</a> to |
... | ... |
@@ -1108,26 +1119,42 @@ connections and rel="preconnect" usage where a proxy is used (see <a class="ulin |
1108 | 1119 |
3 in bug 18762</a> for further details). Explicit prefetching via the |
1109 | 1120 |
rel="prefetch" attribute is still performed, however. |
1110 | 1121 |
|
1111 |
- </p><p><span class="command"><strong>Design Goal:</strong></span> |
|
1122 |
+ </p><p> |
|
1112 | 1123 |
|
1113 | 1124 |
All pre-loaded links and speculative connections MUST be isolated to the URL |
1114 | 1125 |
bar domain, if enabled. This includes isolating both Tor circuit use, as well |
1115 | 1126 |
as the caching and associate browser state for the prefetched resource. |
1116 | 1127 |
|
1117 |
- </p><p><span class="command"><strong>Implementation Status:</strong></span> |
|
1128 |
+ </p><p> |
|
1118 | 1129 |
|
1119 | 1130 |
For automatic speculative connects and rel="preconnect", we leave them |
1120 | 1131 |
disabled as per the Mozilla default for proxy settings. However, if enabled, |
1121 | 1132 |
speculative connects will be isolated to the proper first party Tor circuit by |
1122 |
-the same mechanism as is used for HTTP Keep-alive. This is true for rel="prefetch" |
|
1123 |
-requests as well. For rel="preconnect", we isolate them <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=9126303651785d02f2df0554f391fffba0b0a00e" target="_top">via |
|
1124 |
-this patch</a>. This isolation makes both preconnecting and cache warming |
|
1125 |
-via rel=prefetch ineffective for links to domains other than the current URL |
|
1126 |
-bar domain. For links to the same domain as the URL bar domain, the full cache |
|
1127 |
-warming benefit is obtained. As an optimization, any preconnecting to domains |
|
1128 |
-other than the current URL bar domain can thus be disabled (perhaps with the |
|
1129 |
-exception of frames), but we do not do this. We allow these requests to |
|
1130 |
-proceed, but we isolate them. |
|
1133 |
+the same mechanism as is used for HTTP Keep-Alive. This is true for rel="prefetch" |
|
1134 |
+requests as well. For rel="preconnect", we set <span class="command"><strong>privacy.firstparty.isolate</strong></span> |
|
1135 |
+to <span class="command"><strong>true</strong></span>. This isolation makes both preconnecting and cache |
|
1136 |
+warming via rel="prefetch" ineffective for links to domains other than the |
|
1137 |
+current URL bar domain. For links to the same domain as the URL bar domain, |
|
1138 |
+the full cache warming benefit is obtained. As an optimization, any |
|
1139 |
+preconnecting to domains other than the current URL bar domain can thus be |
|
1140 |
+disabled (perhaps with the exception of frames), but we do not do this. |
|
1141 |
+We allow these requests to proceed, but we isolate them. |
|
1142 |
+ |
|
1143 |
+ </p></li><li class="listitem"><span class="command"><strong>Permissions API</strong></span><p> |
|
1144 |
+ |
|
1145 |
+The Permissions API allows a website to query the status of different |
|
1146 |
+permissions. Although permissions are keyed to the origin, that is not enough to |
|
1147 |
+alleviate cross-linkabilility concerns: the combined permission state could work |
|
1148 |
+like an identifier given more and more permissions and their state being |
|
1149 |
+accessible under this API. |
|
1150 |
+ |
|
1151 |
+ </p><p><span class="command"><strong>Design Goal:</strong></span> |
|
1152 |
+ |
|
1153 |
+Permissions MUST be isolated to the URL bar domain. |
|
1154 |
+ |
|
1155 |
+ </p><p><span class="command"><strong>Implementation Status:</strong></span> |
|
1156 |
+ |
|
1157 |
+Right now we provide a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=14374d30767f83923561084530b54c066bb661b4" target="_top">Firefox patch</a> that makes sure permissions are isolated to the URL bar domain. |
|
1131 | 1158 |
|
1132 | 1159 |
</p></li></ol></div><p> |
1133 | 1160 |
For more details on identifier linkability bugs and enhancements, see the <a class="ulink" href="https://trac.torproject.org/projects/tor/query?keywords=~tbb-linkability&status=!closed" target="_top">tbb-linkability tag in our bugtracker</a> |
... | ... |
@@ -1306,7 +1333,7 @@ narrow domain or use case, or when there are alternate ways of accomplishing |
1306 | 1333 |
the same task, these features and/or certain aspects of their functionality |
1307 | 1334 |
may be simply removed. |
1308 | 1335 |
|
1309 |
- </p></li></ol></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm608"></a>Strategies for Defense: Randomization versus Uniformity</h4></div></div></div><p> |
|
1336 |
+ </p></li></ol></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm646"></a>Strategies for Defense: Randomization versus Uniformity</h4></div></div></div><p> |
|
1310 | 1337 |
|
1311 | 1338 |
When applying a form of defense to a specific fingerprinting vector or source, |
1312 | 1339 |
there are two general strategies available: either the implementation for all |
... | ... |
@@ -1316,10 +1343,10 @@ each interaction between a user and a site provides a different fingerprint. |
1316 | 1343 |
|
1317 | 1344 |
</p><p> |
1318 | 1345 |
|
1319 |
-Although <a class="ulink" href="http://research.microsoft.com/pubs/209989/tr1.pdf" target="_top">some |
|
1320 |
-research suggests</a> that randomization can be effective, so far striving |
|
1321 |
-for uniformity has generally proved to be a better strategy for Tor Browser |
|
1322 |
-for the following reasons: |
|
1346 |
+Although <a class="ulink" href="https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/tr1-1.pdf" target="_top"> |
|
1347 |
+some research suggests</a> that randomization can be effective, so far |
|
1348 |
+striving for uniformity has generally proved to be a better strategy for Tor |
|
1349 |
+Browser for the following reasons: |
|
1323 | 1350 |
|
1324 | 1351 |
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Evaluation and measurement difficulties</strong></span><p> |
1325 | 1352 |
|
... | ... |
@@ -1430,8 +1457,8 @@ only after the user has specifically enabled plugins. Flash is the only plugin |
1430 | 1457 |
available, the rest are entirely |
1431 | 1458 |
blocked from loading by the Firefox patches mentioned in the <a class="link" href="#proxy-obedience" title="4.1. Proxy Obedience">Proxy Obedience |
1432 | 1459 |
section</a>. We also set the Firefox |
1433 |
-preference <span class="command"><strong>plugin.expose_full_path</strong></span> to false, to avoid |
|
1434 |
-leaking plugin installation information. |
|
1460 |
+preference <span class="command"><strong>plugin.expose_full_path</strong></span> to |
|
1461 |
+<span class="command"><strong>false</strong></span>, to avoid leaking plugin installation information. |
|
1435 | 1462 |
|
1436 | 1463 |
</p></li><li class="listitem"><span class="command"><strong>HTML5 Canvas Image Extraction</strong></span><p> |
1437 | 1464 |
|
... | ... |
@@ -1453,7 +1480,7 @@ fingerprinting vectors. If WebGL is normalized through software rendering, |
1453 | 1480 |
system colors were standardized, and the browser shipped a fixed collection of |
1454 | 1481 |
fonts (see later points in this list), it might not be necessary to create a |
1455 | 1482 |
canvas permission. However, until then, to reduce the threat from this vector, |
1456 |
-we have patched Firefox to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=526e6d0bc5c68d8c409cbaefc231c71973d949cc" target="_top">prompt before returning valid image data</a> to the Canvas APIs, |
|
1483 |
+we have patched Firefox to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=196354d7951a48b4e6f5309d2a8e46962fff9d5f" target="_top">prompt before returning valid image data</a> to the Canvas APIs, |
|
1457 | 1484 |
and for access to isPointInPath and related functions. Moreover, we put media |
1458 | 1485 |
streams on a canvas behind the site permission in that patch as well. |
1459 | 1486 |
If the user hasn't previously allowed the site in the URL bar to access Canvas |
... | ... |
@@ -1484,7 +1511,10 @@ Tor client then rejects them, since it is configured to proxy for internal IP |
1484 | 1511 |
addresses by default. Access to the local network is forbidden via the same |
1485 | 1512 |
mechanism. We also disable the WebRTC API as mentioned previously, since even |
1486 | 1513 |
if it were usable over Tor, it still currently provides the local IP address |
1487 |
-and associated network information to websites. |
|
1514 |
+and associated network information to websites. Additionally, we |
|
1515 |
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=13baf9df4b47bd13bb7da045048ed4339615ac03" target="_top"> |
|
1516 |
+rip out</a> the option to collect local IP addresses via the |
|
1517 |
+NetworkInfoService. |
|
1488 | 1518 |
|
1489 | 1519 |
</p></li><li class="listitem"><span class="command"><strong>Invasive Authentication Mechanisms (NTLM and SPNEGO)</strong></span><p> |
1490 | 1520 |
|
... | ... |
@@ -1495,7 +1525,8 @@ aren't an attractive vector for this reason. However, because it is not clear |
1495 | 1525 |
if certain carefully-crafted error conditions in these protocols could cause |
1496 | 1526 |
them to reveal machine information and still fail silently prior to the |
1497 | 1527 |
password prompt, these authentication mechanisms should either be disabled, or |
1498 |
-placed behind a site permission before their use. We simply disable them. |
|
1528 |
+placed behind a site permission before their use. We simply disable them |
|
1529 |
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=fe465944545a76287842321175cc7713091e77b1" target="_top">with a patch</a>. |
|
1499 | 1530 |
|
1500 | 1531 |
</p></li><li class="listitem"><span class="command"><strong>USB Device ID Enumeration via the GamePad API</strong></span><p> |
1501 | 1532 |
|
... | ... |
@@ -1518,7 +1549,7 @@ it via the pref <span class="command"><strong>dom.gamepad.enabled</strong></span |
1518 | 1549 |
</p></li><li class="listitem"><span class="command"><strong>Fonts</strong></span><p> |
1519 | 1550 |
|
1520 | 1551 |
According to the Panopticlick study, fonts provide the most linkability when |
1521 |
-they are provided as an enumerable list in file system order, via either the |
|
1552 |
+they are available as an enumerable list in file system order, via either the |
|
1522 | 1553 |
Flash or Java plugins. However, it is still possible to use CSS and/or |
1523 | 1554 |
JavaScript to query for the existence of specific fonts. With a large enough |
1524 | 1555 |
pre-built list to query, a large amount of fingerprintable information may |
... | ... |
@@ -1540,7 +1571,8 @@ vary in detail. |
1540 | 1571 |
|
1541 | 1572 |
For Windows and macOS we use a preference, <span class="command"><strong>font.system.whitelist</strong></span>, |
1542 | 1573 |
to restrict fonts being used to those in the whitelist. This functionality is |
1543 |
-provided <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=80d233db514a556d7255034ae057b138527cb2ea" target="_top">by a Firefox patch</a>. |
|
1574 |
+provided by setting <span class="command"><strong>privacy.resistFingerprinting</strong></span> to |
|
1575 |
+<span class="command"><strong>true</strong></span>. |
|
1544 | 1576 |
The whitelist for Windows and macOS contains both a set of |
1545 | 1577 |
<a class="ulink" href="https://www.google.com/get/noto" target="_top">Noto fonts</a> which we bundle |
1546 | 1578 |
and fonts provided by the operating system. For Linux systems we only bundle |
... | ... |
@@ -1595,11 +1627,13 @@ maximizing their windows can lead to fingerprintability under the current scheme |
1595 | 1627 |
|
1596 | 1628 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
1597 | 1629 |
|
1598 |
-We automatically resize new browser windows to a 200x100 pixel multiple <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=7b3e68bd7172d4f3feac11e74c65b06729a502b2" target="_top">based |
|
1599 |
-on desktop resolution</a> which is provided by a Firefox patch. To minimize |
|
1600 |
-the effect of the long tail of large monitor sizes, we also cap the window size |
|
1601 |
-at 1000 pixels in each direction. In addition to that we set |
|
1602 |
-<span class="command"><strong>privacy.resistFingerprinting</strong></span> |
|
1630 |
+We automatically resize new browser windows to a 200x100 pixel multiple based |
|
1631 |
+on desktop resolution by backporting patches from |
|
1632 |
+<a class="ulink" href="" target="_top">bug 1330882</a> |
|
1633 |
+and setting <span class="command"><strong>privacy.resistfingerprinting</strong></span> to |
|
1634 |
+<span class="command"><strong>true</strong></span>. To minimize the effect of the long tail of large |
|
1635 |
+monitor sizes, we also cap the window size at 1000 pixels in each direction. |
|
1636 |
+In addition to that we set <span class="command"><strong>privacy.resistFingerprinting</strong></span> |
|
1603 | 1637 |
to <span class="command"><strong>true</strong></span> to use the client content window size for |
1604 | 1638 |
window.screen, and to report a window.devicePixelRatio of 1.0. Similarly, |
1605 | 1639 |
we use that preference to return content window relative points for DOM events. |
... | ... |
@@ -1630,12 +1664,12 @@ details such as screen orientation or type. |
1630 | 1664 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
1631 | 1665 |
|
1632 | 1666 |
We set <span class="command"><strong>ui.use_standins_for_native_colors</strong></span> to <span class="command"><strong>true |
1633 |
-</strong></span> and provide a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=c6be9ba561a69250c7d5926d90e0112091453643" target="_top">Firefox patch</a> |
|
1667 |
+</strong></span> and provide a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=9e84b962ae4e7369fcf13fdf3adb646877d48f1d" target="_top">Firefox patch</a> |
|
1634 | 1668 |
to report a fixed set of system colors to content window CSS, and prevent |
1635 | 1669 |
detection of font smoothing on macOS with the help of |
1636 |
-<span class="command"><strong>privacy.resistFingerprinting</strong></span>. We also always |
|
1637 |
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=5a159c6bfa310b4339555de389ac16cf8e13b3f5" target="_top"> |
|
1638 |
-report landscape-primary</a> for the <a class="ulink" href="https://w3c.github.io/screen-orientation/" target="_top">screen orientation</a>. |
|
1670 |
+<span class="command"><strong>privacy.resistFingerprinting</strong></span> set to <span class="command"><strong>true</strong></span>. |
|
1671 |
+We use the same preference, too, to always report landscape-primary for the |
|
1672 |
+<a class="ulink" href="https://w3c.github.io/screen-orientation/" target="_top">screen orientation</a>. |
|
1639 | 1673 |
|
1640 | 1674 |
</p></li><li class="listitem"><span class="command"><strong>WebGL</strong></span><p> |
1641 | 1675 |
|
... | ... |
@@ -1645,24 +1679,25 @@ fingerprinting. |
1645 | 1679 |
|
1646 | 1680 |
</p><p> |
1647 | 1681 |
|
1648 |
-Because of the large amount of potential fingerprinting vectors and the <a class="ulink" href="http://www.contextis.com/resources/blog/webgl/" target="_top">previously unexposed |
|
1649 |
-vulnerability surface</a>, we deploy a similar strategy against WebGL as |
|
1650 |
-for plugins. First, WebGL Canvases have click-to-play placeholders (provided |
|
1651 |
-by NoScript), and do not run until authorized by the user. Second, we |
|
1652 |
-obfuscate driver information by setting the Firefox preferences |
|
1682 |
+Because of the large amount of potential fingerprinting vectors and the <a class="ulink" href="https://www.contextis.com/resources/blog/webgl-new-dimension-browser-exploitation/" target="_top"> |
|
1683 |
+previously unexposed vulnerability surface</a>, we deploy a similar strategy |
|
1684 |
+against WebGL as for plugins. First, WebGL Canvases have click-to-play |
|
1685 |
+placeholders (provided by NoScript), and do not run until authorized by the user. |
|
1686 |
+Second, we obfuscate driver information by setting the Firefox preferences |
|
1653 | 1687 |
<span class="command"><strong>webgl.disable-extensions</strong></span>, |
1654 | 1688 |
<span class="command"><strong>webgl.min_capability_mode</strong></span>, and |
1655 |
-<span class="command"><strong>webgl.disable-fail-if-major-performance-caveat</strong></span> which reduce |
|
1656 |
-the information provided by the following WebGL API calls: |
|
1657 |
-<span class="command"><strong>getParameter()</strong></span>, <span class="command"><strong>getSupportedExtensions()</strong></span>, |
|
1658 |
-and <span class="command"><strong>getExtension()</strong></span>. To make the minimal WebGL mode usable we |
|
1659 |
-additionally <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=7b0caa1224c3417754d688344eacc97fbbabf7d5" target="_top"> |
|
1689 |
+<span class="command"><strong>webgl.disable-fail-if-major-performance-caveat</strong></span> to |
|
1690 |
+<span class="command"><strong>true</strong></span> which reduces the information provided by the following |
|
1691 |
+WebGL API calls: <span class="command"><strong>getParameter()</strong></span>, |
|
1692 |
+<span class="command"><strong>getSupportedExtensions()</strong></span>, and <span class="command"><strong>getExtension()</strong></span>. Furthermore, WebGL2 is disabled by setting <span class="command"><strong>webgl.enable-webgl2</strong></span> |
|
1693 |
+to <span class="command"><strong>false</strong></span>. To make the minimal WebGL mode usable we |
|
1694 |
+additionally <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=1acd0c7fae9121240401cf4a8f0e2b1f6fdb9827" target="_top"> |
|
1660 | 1695 |
normalize its properties with a Firefox patch</a>. |
1661 | 1696 |
|
1662 | 1697 |
</p><p> |
1663 | 1698 |
|
1664 | 1699 |
Another option for WebGL might be to use software-only rendering, using a |
1665 |
-library such as <a class="ulink" href="http://www.mesa3d.org/" target="_top">Mesa</a>. The use of |
|
1700 |
+library such as <a class="ulink" href="https://www.mesa3d.org/" target="_top">Mesa</a>. The use of |
|
1666 | 1701 |
such a library would avoid hardware-specific rendering differences. |
1667 | 1702 |
|
1668 | 1703 |
</p></li><li class="listitem"><span class="command"><strong>MediaDevices API</strong></span><p> |
... | ... |
@@ -1681,8 +1716,35 @@ on the application software and/or drivers a user chose to install. Web pages |
1681 | 1716 |
can not only estimate the amount of MIME types registered by checking |
1682 | 1717 |
<span class="command"><strong>navigator.mimetypes.length</strong></span>. Rather, they are even able to |
1683 | 1718 |
test whether particular MIME types are available which can have a non-negligible |
1684 |
-impact on a user's fingerprint. We prevent both of these information leaks with |
|
1685 |
-a direct <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=38999857761196b0b7f59f49ee93ae13f73c6149" target="_top">Firefox patch</a>. |
|
1719 |
+impact on a user's fingerprint. We prevent both of these information leaks by |
|
1720 |
+setting <span class="command"><strong>privacy.resistfingerprinting</strong></span> to <span class="command"><strong>true</strong></span>. |
|
1721 |
+ </p></li><li class="listitem"><span class="command"><strong>Web Speech API</strong></span><p> |
|
1722 |
+ |
|
1723 |
+The Web Speech API consists of two parts: SpeechSynthesis (Text-to-Speech) and |
|
1724 |
+SpeechRecognition (Asynchronous Speech Recognition). The latter is still |
|
1725 |
+disabled in Firefox. However, the former is enabled by default and there is the |
|
1726 |
+risk that <span class="command"><strong>speechSynthesis.getVoices()</strong></span> has access to |
|
1727 |
+computer-specific speech packages making them available in an enumerable |
|
1728 |
+fashion. Morevover, there are callbacks that would allow JavaScript to time how |
|
1729 |
+long a phrase takes to be "uttered". To prevent both we set |
|
1730 |
+<span class="command"><strong>media.webspeech.synth.enabled</strong></span> to <span class="command"><strong>false</strong></span>. |
|
1731 |
+ |
|
1732 |
+ </p></li><li class="listitem"><span class="command"><strong>Touch API</strong></span><p> |
|
1733 |
+ |
|
1734 |
+Touch events are able to reveal the absolute screen coordinates of a device |
|
1735 |
+which would defeat our approach to mitigate leaking the screen size as described |
|
1736 |
+above. In order to prevent that we implemented two defenses: first we disable |
|
1737 |
+the Touch API by setting <span class="command"><strong>dom.w3c_touch_events.enabled</strong></span> to |
|
1738 |
+<span class="command"><strong>false</strong></span>. Second, for those user that really need or want to |
|
1739 |
+have this API available we patched the code to give content-window related |
|
1740 |
+coordinates back. Furthermore, we made sure that the touch area described by |
|
1741 |
+<span class="command"><strong>Touch.radiusX</strong></span>, <span class="command"><strong>Touch.radiusY</strong></span>, and |
|
1742 |
+<span class="command"><strong>Touch.rotationAngle</strong></span> does not leak further information and |
|
1743 |
+<span class="command"><strong>Touch.force</strong></span> does not reveal how much pressure a user applied |
|
1744 |
+to the surface. That is achieved by a direct |
|
1745 |
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=7d9701c2b6a203b1b7a556f614858588e3e5976e" target="_top"> |
|
1746 |
+Firefox patch</a> which reports back <span class="command"><strong>1</strong></span> for the first two |
|
1747 |
+properties and <span class="command"><strong>0.0</strong></span> for the two last ones. |
|
1686 | 1748 |
|
1687 | 1749 |
</p></li><li class="listitem"><span class="command"><strong>System Uptime</strong></span><p> |
1688 | 1750 |
|
... | ... |
@@ -1708,9 +1770,9 @@ Browser user. |
1708 | 1770 |
|
1709 | 1771 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
1710 | 1772 |
|
1711 |
-We provide <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=a65b5269ff04e4fbbb3689e2adf853543804ffbf" target="_top">two</a> |
|
1712 |
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=383b8e7e073ea79e70f19858efe1c5fde64b99cf" target="_top">Firefox patches</a> that |
|
1713 |
-take care of spoofing <span class="command"><strong>KeyboardEvent.code</strong></span> and <span class="command"><strong> |
|
1773 |
+We provide <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=d6d29f155e60c63b38918c8879ee221b9c90b1f7" target="_top">two</a> |
|
1774 |
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=789bad5fe5a7a0c2d27e1d8dd7b9a7e35de91cc8" target="_top">Firefox patches</a> |
|
1775 |
+that take care of spoofing <span class="command"><strong>KeyboardEvent.code</strong></span> and <span class="command"><strong> |
|
1714 | 1776 |
KeyboardEvent.keyCode</strong></span> by providing consensus (US-English-style) fake |
1715 | 1777 |
properties. This is achieved by hiding the user's use of the numpad, and any |
1716 | 1778 |
non-QWERTY US English keyboard. Characters from non-en-US languages |
... | ... |
@@ -1730,7 +1792,7 @@ these headers should remain identical across the population even when updated. |
1730 | 1792 |
Firefox provides several options for controlling the browser user agent string |
1731 | 1793 |
which we leverage. We also set similar prefs for controlling the |
1732 | 1794 |
Accept-Language and Accept-Charset headers, which we spoof to English by default. Additionally, we |
1733 |
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=848da9cdb2b7c09dc8ec335d687f535fc5c87a67" target="_top">remove |
|
1795 |
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=bd51d0c24d339c5135028297f5eeb591a65e99df" target="_top">remove |
|
1734 | 1796 |
content script access</a> to Components.interfaces, which <a class="ulink" href="http://pseudo-flaw.net/tor/torbutton/fingerprint-firefox.html" target="_top">can be |
1735 | 1797 |
used</a> to fingerprint OS, platform, and Firefox minor version. </p></li><li class="listitem"><span class="command"><strong>Timing-based Side Channels</strong></span><p> |
1736 | 1798 |
Attacks based on timing side channels are nothing new in the browser context. |
... | ... |
@@ -1748,25 +1810,31 @@ timing-based side channels. |
1748 | 1810 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
1749 | 1811 |
|
1750 | 1812 |
The cleanest solution to timing-based side channels would be to get rid of them. |
1751 |
-However, this does not seem to be trivial even considering just a |
|
1813 |
+This has been <a class="ulink" href="https://acmccs.github.io/papers/p163-caoA.pdf" target="_top">proposed</a> |
|
1814 |
+in the research community. However, we remain skeptical as it does not seem to |
|
1815 |
+be trivial even considering just a |
|
1752 | 1816 |
<a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=711043" target="_top">single</a> |
1753 |
-<a class="ulink" href="https://cseweb.ucsd.edu/~dkohlbre/papers/subnormal.pdf" target="_top">side channel</a>. |
|
1754 |
-Thus, we rely on disabling all possible timing sources or making them |
|
1755 |
-coarse-grained enough in order to render timing side channels unsuitable as a |
|
1756 |
-means for fingerprinting browser users. |
|
1817 |
+<a class="ulink" href="https://cseweb.ucsd.edu/~dkohlbre/papers/subnormal.pdf" target="_top">side channel</a> |
|
1818 |
+and <a class="ulink" href="https://gruss.cc/files/fantastictimers.pdf" target="_top">more and more |
|
1819 |
+potential side channels</a> are showing up. Thus, we rely on disabling all |
|
1820 |
+possible timing sources or making them coarse-grained enough in order to render |
|
1821 |
+timing side channels unsuitable as a means for fingerprinting browser users. |
|
1757 | 1822 |
|
1758 | 1823 |
</p><p> |
1759 | 1824 |
|
1760 | 1825 |
We set <span class="command"><strong>dom.enable_user_timing</strong></span> and |
1761 | 1826 |
<span class="command"><strong>dom.enable_resource_timing</strong></span> to <span class="command"><strong>false</strong></span> to |
1762 | 1827 |
disable these explicit timing sources. Furthermore, we clamp the resolution of |
1763 |
-explicit clocks to 100ms <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=1febc98f7ae5dbec845567415bd5b703ee45d774" target="_top">with a Firefox patch</a>. |
|
1828 |
+explicit clocks to 100ms <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=1736ea256276546c899d712dffdae2c8d050d8a0" target="_top">with two Firefox</a> <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=a4c6d2c07d483acfd729c7a50dd3f7b07fcba03a" target="_top">patches</a>. |
|
1764 | 1829 |
|
1765 | 1830 |
This includes <span class="command"><strong>performance.now()</strong></span>, <span class="command"><strong>new Date().getTime() |
1766 | 1831 |
</strong></span>, <span class="command"><strong>audioContext.currentTime</strong></span>, <span class="command"><strong> |
1767 | 1832 |
canvasStream.currentTime</strong></span>, <span class="command"><strong>video.currentTime</strong></span>, |
1768 | 1833 |
<span class="command"><strong>audio.currentTime</strong></span>, <span class="command"><strong>new File([], "").lastModified |
1769 |
-</strong></span>, and <span class="command"><strong>new File([], "").lastModifiedDate.getTime()</strong></span>. |
|
1834 |
+</strong></span>, <span class="command"><strong>new File([], "").lastModifiedDate.getTime()</strong></span>, |
|
1835 |
+<span class="command"><strong>animation.startTime</strong></span>, <span class="command"><strong>animation.currentTime</strong></span>, |
|
1836 |
+<span class="command"><strong>animation.timeline.currentTime</strong></span>, |
|
1837 |
+and <span class="command"><strong>document.timeline.currentTime</strong></span>. |
|
1770 | 1838 |
|
1771 | 1839 |
</p><p> |
1772 | 1840 |
|
... | ... |
@@ -1796,7 +1864,7 @@ out of a Tor Browser user by deploying resource:// and/or chrome:// URIs. Until |
1796 | 1864 |
this is fixed in Firefox <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/tree/src/components/content-policy.js" target="_top"> |
1797 | 1865 |
we filter</a> resource:// and chrome:// requests done |
1798 | 1866 |
by web content denying them by default. We need a whitelist of resource:// and |
1799 |
-chrome:// URIs, though, to avoid breaking parts of Firefox. Those nearly a |
|
1867 |
+chrome:// URIs, though, to avoid breaking parts of Firefox. Those more than a |
|
1800 | 1868 |
dozen Firefox resources do not aid in fingerprinting Tor Browser users as they |
1801 | 1869 |
are not different on the platforms and in the locales we support. |
1802 | 1870 |
|
... | ... |
@@ -1814,7 +1882,7 @@ We set the fallback character set to set to windows-1252 for all locales, via |
1814 | 1882 |
<span class="command"><strong>javascript.use_us_english_locale</strong></span> to <span class="command"><strong>true</strong></span> |
1815 | 1883 |
to instruct the JS engine to use en-US as its internal C locale for all Date, |
1816 | 1884 |
Math, and exception handling. Additionally, we provide a patch to use an |
1817 |
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=0080b2d6bafcbfb8a57f54a26e53d7f74d239389" target="_top"> |
|
1885 |
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=d144738fedeeb23746d7a9f16067bd985b0d59aa" target="_top"> |
|
1818 | 1886 |
en-US label for the <span class="command"><strong>isindex</strong></span> HTML element</a> instead of |
1819 | 1887 |
letting the label leak the browser's UI locale. |
1820 | 1888 |
</p></li><li class="listitem"><span class="command"><strong>Timezone and Clock Offset</strong></span><p> |
... | ... |
@@ -1829,7 +1897,7 @@ All Tor Browser users MUST report the same timezone to websites. Currently, we |
1829 | 1897 |
choose UTC for this purpose, although an equally valid argument could be made |
1830 | 1898 |
for EDT/EST due to the large English-speaking population density (coupled with |
1831 | 1899 |
the fact that we spoof a US English user agent). Additionally, the Tor |
1832 |
-software should detect if the users clock is significantly divergent from the |
|
1900 |
+software should detect if the user's clock is significantly divergent from the |
|
1833 | 1901 |
clocks of the relays that it connects to, and use this to reset the clock |
1834 | 1902 |
values used in Tor Browser to something reasonably accurate. Alternatively, |
1835 | 1903 |
the browser can obtain this clock skew via a mechanism similar to that used in |
... | ... |
@@ -1837,19 +1905,19 @@ the browser can obtain this clock skew via a mechanism similar to that used in |
1837 | 1905 |
|
1838 | 1906 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
1839 | 1907 |
|
1840 |
-We <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=0ee3aa4cbeb1be3301d8960d0cf3a64831ea6d1b" target="_top"> |
|
1908 |
+We <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=dd1ba0b5c9281ee3207e5a87991159b8d2609a11" target="_top"> |
|
1841 | 1909 |
set the timezone to UTC</a> with a Firefox patch using the TZ environment |
1842 | 1910 |
variable, which is supported on all platforms. Moreover, with an additional |
1843 |
-patch just needed for the Windows platform, <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=bdd0303a78347d17250950a4cf858de556afb1c7" target="_top"> |
|
1911 |
+patch just needed for the Windows platform, <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=008649e2ce0357f31eb67d874e6429c39ddd7e8f" target="_top"> |
|
1844 | 1912 |
we make sure</a> the TZ environment variable is respected by the |
1845 | 1913 |
<a class="ulink" href="http://site.icu-project.org/" target="_top">ICU library</a> as well. |
1846 | 1914 |
|
1847 | 1915 |
</p></li><li class="listitem"><span class="command"><strong>JavaScript Performance Fingerprinting</strong></span><p> |
1848 | 1916 |
|
1849 |
-<a class="ulink" href="http://w2spconf.com/2011/papers/jspriv.pdf" target="_top">JavaScript performance |
|
1850 |
-fingerprinting</a> is the act of profiling the performance |
|
1851 |
-of various JavaScript functions for the purpose of fingerprinting the |
|
1852 |
-JavaScript engine and the CPU. |
|
1917 |
+<a class="ulink" href="https://cseweb.ucsd.edu/~hovav/dist/jspriv.pdf" target="_top">JavaScript |
|
1918 |
+performance fingerprinting</a> is the act of profiling the performance of |
|
1919 |
+various JavaScript functions for the purpose of fingerprinting the JavaScript |
|
1920 |
+engine and the CPU. |
|
1853 | 1921 |
|
1854 | 1922 |
</p><p><span class="command"><strong>Design Goal:</strong></span> |
1855 | 1923 |
|
... | ... |
@@ -1860,7 +1928,7 @@ favorite is to reduce the resolution of the Event.timeStamp and the JavaScript |
1860 | 1928 |
Date() object, while also introducing jitter. We believe that JavaScript time |
1861 | 1929 |
resolution may be reduced all the way up to the second before it seriously |
1862 | 1930 |
impacts site operation. Our goal with this quantization is to increase the |
1863 |
-amount of time it takes to mount a successful attack. <a class="ulink" href="http://w2spconf.com/2011/papers/jspriv.pdf" target="_top">Mowery et al</a> found |
|
1931 |
+amount of time it takes to mount a successful attack. <a class="ulink" href="https://cseweb.ucsd.edu/~hovav/dist/jspriv.pdf" target="_top">Mowery et al</a> found |
|
1864 | 1932 |
that even with the default precision in most browsers, they required up to 120 |
1865 | 1933 |
seconds of amortization and repeated trials to get stable results from their |
1866 | 1934 |
feature set. We intend to work with the research community to establish the |
... | ... |
@@ -1873,11 +1941,12 @@ large number of people. |
1873 | 1941 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
1874 | 1942 |
|
1875 | 1943 |
Currently, our mitigation against performance fingerprinting is to |
1876 |
-disable <a class="ulink" href="http://www.w3.org/TR/navigation-timing/" target="_top">Navigation |
|
1877 |
-Timing</a> through the Firefox preference |
|
1878 |
-<span class="command"><strong>dom.enable_performance</strong></span>, and to disable the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement#Gecko-specific_properties" target="_top">Mozilla |
|
1879 |
-Video Statistics</a> API extensions via the preference |
|
1880 |
-<span class="command"><strong>media.video_stats.enabled</strong></span>. |
|
1944 |
+disable <a class="ulink" href="https://www.w3.org/TR/navigation-timing/" target="_top">Navigation |
|
1945 |
+Timing</a> by setting the Firefox preference |
|
1946 |
+<span class="command"><strong>dom.enable_performance</strong></span> to <span class="command"><strong>false</strong></span>, and to |
|
1947 |
+disable the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement#Gecko-specific_properties" target="_top">Mozilla |
|
1948 |
+Video Statistics</a> API extensions by setting the preference |
|
1949 |
+<span class="command"><strong>media.video_stats.enabled</strong></span> to <span class="command"><strong>false</strong></span>, too. |
|
1881 | 1950 |
|
1882 | 1951 |
</p></li><li class="listitem"><span class="command"><strong>Keystroke Fingerprinting</strong></span><p> |
1883 | 1952 |
|
... | ... |
@@ -1891,7 +1960,42 @@ fingerprinting: timestamp quantization and jitter. |
1891 | 1960 |
|
1892 | 1961 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
1893 | 1962 |
|
1894 |
-We clamp keyboard event resolution to 100ms with a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=1febc98f7ae5dbec845567415bd5b703ee45d774" target="_top">Firefox patch</a>. |
|
1963 |
+We clamp keyboard event resolution to 100ms with a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=1736ea256276546c899d712dffdae2c8d050d8a0" target="_top">Firefox patch</a>. |
|
1964 |
+ |
|
1965 |
+ </p></li><li class="listitem"><span class="command"><strong>Amount of Processor Cores (hardwareConcurrency)</strong></span><p> |
|
1966 |
+ |
|
1967 |
+Modern computers have multiple physical processor cores in their CPU available. |
|
1968 |
+One core typically allows to run more than one thread at a time and |
|
1969 |
+<span class="command"><strong>navigator.hardwareConcurrency</strong></span> makes the number of those |
|
1970 |
+threads (i.e. logical processors) available to web content. |
|
1971 |
+ |
|
1972 |
+ </p><p><span class="command"><strong>Design Goal:</strong></span> |
|
1973 |
+ |
|
1974 |
+Websites MUST NOT be able to fingerprint a Tor Browser user taking advantage of |
|
1975 |
+the amount of logical processors available. |
|
1976 |
+ |
|
1977 |
+ </p><p><span class="command"><strong>Implementation Status:</strong></span> |
|
1978 |
+ |
|
1979 |
+We set <span class="command"><strong>dom.maxHardwareConcurrency</strong></span> to <span class="command"><strong>1</strong></span> to |
|
1980 |
+report the same amount of logical processors for everyone. However, there are |
|
1981 |
+<a class="ulink" href="https://github.com/oftn/core-estimator" target="_top">probablistic ways of |
|
1982 |
+determining the same information available</a> which we are not defending |
|
1983 |
+against currently. Moreover, we might even want to think about a more elaborate |
|
1984 |
+approach defending against this fingerprinting technique by not making all users |
|
1985 |
+uniform but rather <a class="ulink" href="https://bugs.torproject.org/22127" target="_top">by following |
|
1986 |
+a bucket approach</a> as we currently do in our defense against screen |
|
1987 |
+size exfiltration. |
|
1988 |
+ |
|
1989 |
+ </p></li><li class="listitem"><span class="command"><strong>MediaError.message</strong></span><p> |
|
1990 |
+ |
|
1991 |
+The <span class="command"><strong>MediaError</strong></span> object allows the user agent to report errors |
|
1992 |
+that occurred while handling media, for instance using <span class="command"><strong>audio</strong></span> |
|
1993 |
+or <span class="command"><strong>video</strong></span> elements. The <span class="command"><strong>message</strong></span> property |
|
1994 |
+provides specific diagnostic information to help understanding the error |
|
1995 |
+condition. As a defense-in-depth we make sure that no information aiding in |
|
1996 |
+fingerprinting is leaking to websites that way |
|
1997 |
+<span class="command"><strong> |
|
1998 |
+by returning just an empty string</strong></span>. |
|
1895 | 1999 |
|
1896 | 2000 |
</p></li><li class="listitem"><span class="command"><strong>Connection State</strong></span><p> |
1897 | 2001 |
|
... | ... |
@@ -1937,7 +2041,12 @@ datareporting.healthreport.about.reportUrl</strong></span> and the new tiles fea |
1937 | 2041 |
related <span class="command"><strong>browser.newtabpage.directory.ping</strong></span> and <span class="command"><strong> |
1938 | 2042 |
browser.newtabpage.directory.source</strong></span> preferences. Additionally, we |
1939 | 2043 |
disable the UITour backend by setting <span class="command"><strong>browser.uitour.enabled</strong></span> |
1940 |
-to <span class="command"><strong>false</strong></span>. |
|
2044 |
+to <span class="command"><strong>false</strong></span>. Finally, we provide <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=9f24ce35cd8776a0f7c3a4d54992ecb0eaad6311" target="_top">a patch</a> |
|
2045 |
+to prevent Mozilla's websites from querying whether particular extensions are |
|
2046 |
+installed and what their state in Tor Browser is by using the |
|
2047 |
+<span class="command"><strong>window.navigator.AddonManager</strong></span> API. As a defense-in-depth the |
|
2048 |
+patch makes sure that not only Mozilla's websites can't get at that information |
|
2049 |
+but that the whitelist governing this access is empty in general. |
|
1941 | 2050 |
</p></li><li class="listitem"><span class="command"><strong>Operating System Type Fingerprinting</strong></span><p> |
1942 | 2051 |
|
1943 | 2052 |
As we mentioned in the introduction of this section, OS type fingerprinting is |
... | ... |
@@ -1977,11 +2086,11 @@ In order to avoid long-term linkability, we provide a "New Identity" context |
1977 | 2086 |
menu option in Torbutton. This context menu option is active if Torbutton can |
1978 | 2087 |
read the environment variables $TOR_CONTROL_PASSWD and $TOR_CONTROL_PORT. |
1979 | 2088 |
|
1980 |
- </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm914"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
2089 |
+ </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm1011"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
1981 | 2090 |
|
1982 | 2091 |
All linkable identifiers and browser state MUST be cleared by this feature. |
1983 | 2092 |
|
1984 |
- </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm917"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p> |
|
2093 |
+ </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm1014"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p> |
|
1985 | 2094 |
|
1986 | 2095 |
First, Torbutton disables JavaScript in all open tabs and windows by using |
1987 | 2096 |
both the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIDocShell#Attributes" target="_top">browser.docShell.allowJavaScript</a> |
... | ... |
@@ -2000,14 +2109,14 @@ After closing all tabs, we then clear the searchbox and findbox text and emit |
2000 | 2109 |
state). Then we manually clear the following state: HTTP auth, SSL state, |
2001 | 2110 |
crypto tokens, OCSP state, site-specific content preferences (including HSTS |
2002 | 2111 |
state), the undo tab history, content and image cache, offline and memory cache, |
2003 |
-offline storage, cookies, DOM storage, the safe browsing key, the |
|
2004 |
-Google wifi geolocation token (if it exists), and the domain isolator state. We |
|
2005 |
-also clear NoScript's site and temporary permissions, and all other browser site |
|
2006 |
-permissions. |
|
2112 |
+offline storage, IndexedDB storage, asm.js cache, cookies, DOM storage, the |
|
2113 |
+safe browsing key, the Google wifi geolocation token (if it exists), and the |
|
2114 |
+domain isolator state. We also clear NoScript's site and temporary permissions, |
|
2115 |
+and all other browser site permissions. |
|
2007 | 2116 |
|
2008 | 2117 |
</p><p> |
2009 | 2118 |
|
2010 |
-After the state is cleared, we then close all remaining HTTP keep-alive |
|
2119 |
+After the state is cleared, we then close all remaining HTTP Keep-Alive |
|
2011 | 2120 |
connections and then send the NEWNYM signal to the Tor control port to cause a |
2012 | 2121 |
new circuit to be created. |
2013 | 2122 |
</p><p> |
... | ... |
@@ -2045,7 +2154,9 @@ includes three features that were formerly governed by the slider at |
2045 | 2154 |
higher security levels: <span class="command"><strong>gfx.font_rendering.graphite.enabled</strong></span> |
2046 | 2155 |
is set to <span class="command"><strong>false</strong></span> now after Mozilla got convinced that |
2047 | 2156 |
<a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1255731" target="_top">leaving |
2048 |
-it enabled is too risky</a>. <span class="command"><strong>network.jar.block-remote-files</strong></span> |
|
2157 |
+it enabled is too risky</a>. Even though Mozilla reverted that decision |
|
2158 |
+after another round of fixing critical Graphite bugs, we remain skeptical |
|
2159 |
+and keep that feature disabled for now. <span class="command"><strong>network.jar.block-remote-files</strong></span> |
|
2049 | 2160 |
is set to <span class="command"><strong>true</strong></span>. Mozilla tried to block remote JAR files in |
2050 | 2161 |
Firefox 45 but needed to revert that decision due to breaking IBM's iNotes. |
2051 | 2162 |
While Mozilla <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1329336" target="_top"> |
... | ... |
@@ -2059,9 +2170,9 @@ Unlinkability</a> sections for further details. |
2059 | 2170 |
</p></li><li class="listitem"><span class="command"><strong>Medium</strong></span><p> |
2060 | 2171 |
|
2061 | 2172 |
At this security level, we disable the ION JIT |
2062 |
-(<span class="command"><strong>javascript.options.ion.content</strong></span>), TypeInference JIT |
|
2063 |
-(<span class="command"><strong>javascript.options.typeinference</strong></span>), Baseline JIT |
|
2064 |
-(<span class="command"><strong>javascript.options.baselinejit.content</strong></span>), WebAudio |
|
2173 |
+(<span class="command"><strong>javascript.options.ion</strong></span>), native regular expressions |
|
2174 |
+(<span class="command"><strong>javascript.options.native_regexp</strong></span>), Baseline JIT |
|
2175 |
+(<span class="command"><strong>javascript.options.baselinejit</strong></span>), WebAudio |
|
2065 | 2176 |
(<span class="command"><strong>media.webaudio.enabled</strong></span>), MathML |
2066 | 2177 |
(<span class="command"><strong>mathml.disabled</strong></span>), SVG Opentype font rendering |
2067 | 2178 |
(<span class="command"><strong>gfx.font_rendering.opentype_svg.enabled</strong></span>), and make HTML5 audio |
... | ... |
@@ -2084,7 +2195,7 @@ images (<span class="command"><strong>svg.in-content.enabled</strong></span>). |
2084 | 2195 |
Fingerprinting</a> is a statistical attack to attempt to recognize specific |
2085 | 2196 |
encrypted website activity. |
2086 | 2197 |
|
2087 |
- </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm975"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p> |
|
2198 |
+ </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm1072"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p> |
|
2088 | 2199 |
|
2089 | 2200 |
We want to deploy a mechanism that reduces the accuracy of <a class="ulink" href="https://en.wikipedia.org/wiki/Feature_selection" target="_top">useful features</a> available |
2090 | 2201 |
for classification. This mechanism would either impact the true and false |
... | ... |
@@ -2096,18 +2207,18 @@ that could be classified at a given accuracy rate. |
2096 | 2207 |
Ideally, this mechanism would be as light-weight as possible, and would be |
2097 | 2208 |
tunable in terms of overhead. We suspect that it may even be possible to |
2098 | 2209 |
deploy a mechanism that reduces feature extraction resolution without any |
2099 |
-network overhead. In the no-overhead category, we have <a class="ulink" href="http://freehaven.net/anonbib/cache/LZCLCP_NDSS11.pdf" target="_top">HTTPOS</a> and |
|
2210 |
+network overhead. In the no-overhead category, we have <a class="ulink" href="https://freehaven.net/anonbib/cache/LZCLCP_NDSS11.pdf" target="_top">HTTPOS</a> and |
|
2100 | 2211 |
<a class="ulink" href="https://blog.torproject.org/blog/experimental-defense-website-traffic-fingerprinting" target="_top">better |
2101 | 2212 |
use of HTTP pipelining and/or SPDY</a>. |
2102 | 2213 |
In the tunable/low-overhead |
2103 | 2214 |
category, we have <a class="ulink" href="https://arxiv.org/abs/1512.00524" target="_top">Adaptive |
2104 |
-Padding</a> and <a class="ulink" href="http://www.cs.sunysb.edu/~xcai/fp.pdf" target="_top"> |
|
2215 |
+Padding</a> and <a class="ulink" href="https://www3.cs.stonybrook.edu/~xcai/fp.pdf" target="_top"> |
|
2105 | 2216 |
Congestion-Sensitive BUFLO</a>. It may be also possible to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/7028" target="_top">tune such |
2106 | 2217 |
defenses</a> such that they only use existing spare Guard bandwidth capacity in the Tor |
2107 | 2218 |
network, making them also effectively no-overhead. |
2108 | 2219 |
|
2109 |
- </p></blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm987"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p> |
|
2110 |
-Currently, we patch Firefox to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=60f9e7f73f3dba5542f7fbe882f7c804cb8ecc18" target="_top">randomize |
|
2220 |
+ </p></blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idm1084"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p> |
|
2221 |
+Currently, we patch Firefox to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=b9fa77472aa67e26bd46a5ca889b20ce3448f9d1" target="_top">randomize |
|
2111 | 2222 |
pipeline order and depth</a>. Unfortunately, pipelining is very fragile. |
2112 | 2223 |
Many sites do not support it, and even sites that advertise support for |
2113 | 2224 |
pipelining may simply return error codes for successive requests, effectively |
... | ... |
@@ -2158,7 +2269,7 @@ date. |
2158 | 2269 |
|
2159 | 2270 |
</p><p> |
2160 | 2271 |
|
2161 |
-We also make use of the in-browser Mozilla updater, and have <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=a5a23f5d316a850f11063ead15353d677c9153fd" target="_top">patched |
|
2272 |
+We also make use of the in-browser Mozilla updater, and have <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=0efd496826cc3dfb0a6874d150e8acecd4eb6a92" target="_top">patched |
|
2162 | 2273 |
the updater</a> to avoid sending OS and Kernel version information as part |
2163 | 2274 |
of its update pings. |
2164 | 2275 |
|
... | ... |
@@ -2171,7 +2282,7 @@ contend with. For this reason, we have deployed a build system |
2171 | 2282 |
that allows anyone to use our source code to reproduce byte-for-byte identical |
2172 | 2283 |
binary packages to the ones that we distribute. |
2173 | 2284 |
|
2174 |
- </p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idm1010"></a>5.1. Achieving Binary Reproducibility</h3></div></div></div><p> |
|
2285 |
+ </p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idm1107"></a>5.1. Achieving Binary Reproducibility</h3></div></div></div><p> |
|
2175 | 2286 |
|
2176 | 2287 |
The GNU toolchain has been working on providing reproducible builds for some |
2177 | 2288 |
time, however a large software project such as Firefox typically ends up |
... | ... |
@@ -2279,7 +2390,7 @@ particular: libgmp) attempt to detect the current CPU to determine which |
2279 | 2390 |
optimizations to compile in. This CPU type is uniform on our KVM instances, |
2280 | 2391 |
but differs under LXC. |
2281 | 2392 |
|
2282 |
- </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idm1042"></a>5.2. Package Signatures and Verification</h3></div></div></div><p> |
|
2393 |
+ </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idm1139"></a>5.2. Package Signatures and Verification</h3></div></div></div><p> |
|
2283 | 2394 |
|
2284 | 2395 |
The build process generates a single sha256sums-unsigned-build.txt file that |
2285 | 2396 |
contains a sorted list of the SHA-256 hashes of every package produced for that |
... | ... |
@@ -2312,7 +2423,7 @@ In order to verify package integrity, the signature must be stripped off using |
2312 | 2423 |
the osslsigncode tool, as described on the <a class="ulink" href="https://www.torproject.org/docs/verifying-signatures.html.en#BuildVerification" target="_top">Signature |
2313 | 2424 |
Verification</a> page. |
2314 | 2425 |
|
2315 |
- </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idm1049"></a>5.3. Anonymous Verification</h3></div></div></div><p> |
|
2426 |
+ </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idm1146"></a>5.3. Anonymous Verification</h3></div></div></div><p> |
|
2316 | 2427 |
|
2317 | 2428 |
Due to the fact that bit-identical packages can be produced by anyone, the |
2318 | 2429 |
security of this build system extends beyond the security of the official |
... | ... |
@@ -2382,25 +2493,26 @@ occurring. |
2382 | 2493 |
|
2383 | 2494 |
</p><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="deprecate"></a>A.1. Deprecation Wishlist</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>The Referer Header</strong></span><p> |
2384 | 2495 |
|
2385 |
-When leaving a .onion domain we <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-45.8.0esr-6.5-2&id=09188cb14dfaa8ac22f687c978166c7bd171b576" target="_top"> |
|
2386 |
-set the Referer header to the destination</a> to avoid leaking information |
|
2387 |
-which might be especially problematic in the case of transitioning from a .onion |
|
2388 |
-domain to one reached over clearnet. Apart from that we haven't disabled or |
|
2389 |
-restricted the Referer ourselves because of the non-trivial number of sites |
|
2390 |
-that rely on the Referer header to "authenticate" image requests and deep-link |
|
2391 |
-navigation on their sites. Furthermore, there seems to be no real privacy |
|
2392 |
-benefit to taking this action by itself in a vacuum, because many sites have |
|
2393 |
-begun encoding Referer URL information into GET parameters when they need it to |
|
2394 |
-cross HTTP to HTTPS scheme transitions. Google's +1 buttons are the best |
|
2496 |
+When leaving a .onion domain we set the Referer header to an empty string by |
|
2497 |
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-52.5.2esr-7.0-2&id=021bffff111b6b93eecb5859e680d540991c20c9" target="_top"> |
|
2498 |
+providing a preference</a>, <span class="command"><strong>network.http.referer.hideOnionSource</strong></span>, and setting it to <span class="command"><strong>true</strong></span>. That avoids leaking |
|
2499 |
+information which might be especially problematic in the case of transitioning |
|
2500 |
+from a .onion domain to one reached over clearnet. Apart from that we haven't |
|
2501 |
+disabled or restricted the Referer ourselves because of the non-trivial number |
|
2502 |
+of sites that rely on the Referer header to "authenticate" image requests and |
|
2503 |
+deep-link navigation on their sites. Furthermore, there seems to be no real |
|
2504 |
+privacy benefit to taking this action by itself in a vacuum, because many sites |
|
2505 |
+have begun encoding Referer URL information into GET parameters when they need |
|
2506 |
+it to cross HTTP to HTTPS scheme transitions. Google's +1 buttons are the best |
|
2395 | 2507 |
example of this activity. |
2396 | 2508 |
|
2397 | 2509 |
</p><p> |
2398 | 2510 |
|
2399 | 2511 |
Because of the availability of these other explicit vectors, we believe the |
2400 | 2512 |
main risk of the Referer header is through inadvertent and/or covert data |
2401 |
-leakage. In fact, <a class="ulink" href="http://www2.research.att.com/~bala/papers/wosn09.pdf" target="_top">a great deal of |
|
2402 |
-personal data</a> is inadvertently leaked to third parties through the |
|
2403 |
-source URL parameters. |
|
2513 |
+leakage. In fact, <a class="ulink" href="http://web2.research.att.com/export/sites/att_labs/people/Krishnamurthy_Balachander/papers/wosn09.pdf" target="_top"> |
|
2514 |
+a great deal of personal data</a> is inadvertently leaked to third parties |
|
2515 |
+through the source URL parameters. |
|
2404 | 2516 |
|
2405 | 2517 |
</p><p> |
2406 | 2518 |
|
... | ... |
@@ -2421,7 +2533,7 @@ attribute. |
2421 | 2533 |
<a class="ulink" href="https://developer.mozilla.org/En/DOM/Window.name" target="_top">window.name</a> is |
2422 | 2534 |
a DOM property that for some reason is allowed to retain a persistent value |
2423 | 2535 |
for the lifespan of a browser tab. It is possible to utilize this property for |
2424 |
-<a class="ulink" href="http://www.thomasfrank.se/sessionvars.html" target="_top">identifier |
|
2536 |
+<a class="ulink" href="https://www.thomasfrank.se/sessionvars.html" target="_top">identifier |
|
2425 | 2537 |
storage</a> during click navigation. This is sometimes used for additional |
2426 | 2538 |
CSRF protection and federated login. |
2427 | 2539 |
</p><p> |
... | ... |
@@ -2447,12 +2559,13 @@ possible for us to <a class="ulink" href="https://trac.torproject.org/projects/t |
2447 | 2559 |
ourselves</a>, as they are comparatively rare and can be handled with site |
2448 | 2560 |
permissions. |
2449 | 2561 |
|
2450 |
- </p></li></ol></div></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idm1090"></a>A.2. Promising Standards</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a class="ulink" href="http://web-send.org" target="_top">Web-Send Introducer</a><p> |
|
2562 |
+ </p></li></ol></div></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idm1189"></a>A.2. Promising Standards</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a class="ulink" href="https://web.archive.org/web/20130213034335/http://web-send.org:80/" target="_top">Web-Send Introducer</a><p> |
|
2451 | 2563 |
|
2452 | 2564 |
Web-Send is a browser-based link sharing and federated login widget that is |
2453 | 2565 |
designed to operate without relying on third-party tracking or abusing other |
2454 |
-cross-origin link-click side channels. It has a compelling list of <a class="ulink" href="http://web-send.org/features.html" target="_top">privacy and security features</a>, |
|
2455 |
-especially if used as a "Like button" replacement. |
|
2566 |
+cross-origin link-click side channels. It has a compelling list of <a class="ulink" href="https://web.archive.org/web/20130213034335/http://web-send.org:80/featurs.html" target="_top"> |
|
2567 |
+privacy and security features</a>, especially if used as a "Like button" |
|
2568 |
+replacement. |
|
2456 | 2569 |
|
2457 | 2570 |
</p></li><li class="listitem"><a class="ulink" href="https://developer.mozilla.org/en-US/docs/Persona" target="_top">Mozilla Persona</a><p> |
2458 | 2571 |
|
2459 | 2572 |