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 |