Update Tor Browser Design Doc for 4.5.
Mike Perry

Mike Perry commited on 2015-04-30 07:25:35
Zeige 1 geänderte Dateien mit 340 Einfügungen und 226 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.78.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">&lt;<a class="email" href="mailto:mikeperry#torproject org">mikeperry#torproject org</a>&gt;</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">&lt;<a class="email" href="mailto:erinn#torproject org">erinn#torproject org</a>&gt;</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">&lt;<a class="email" href="mailto:sjmurdoch#torproject org">sjmurdoch#torproject org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">November 6th, 2014</p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="#idp59720528">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="#idp60597904">5.1. Achieving Binary Reproducibility</a></span></dt><dt><span class="sect2"><a href="#idp60632800">5.2. Package Signatures and Verification</a></span></dt><dt><span class="sect2"><a href="#idp60636736">5.3. Anonymous Verification</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="#idp60669376">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="idp59720528"></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.78.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">&lt;<a class="email" href="mailto:mikeperry#torproject org">mikeperry#torproject org</a>&gt;</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">&lt;<a class="email" href="mailto:erinn#torproject org">erinn#torproject org</a>&gt;</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">&lt;<a class="email" href="mailto:sjmurdoch#torproject org">sjmurdoch#torproject org</a>&gt;</code></p></div></div></div></div><div><p class="pubdate">April 30th, 2015</p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="#idp51709072">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="#idp54108896">5.1. Achieving Binary Reproducibility</a></span></dt><dt><span class="sect2"><a href="#idp54129600">5.2. Package Signatures and Verification</a></span></dt><dt><span class="sect2"><a href="#idp54134112">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="#idp54168528">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="idp51709072"></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
-4.5-alpha-1.
6
+4.5.
7 7
 
8 8
   </p><p>
9 9
 
... ...
@@ -12,14 +12,20 @@ describe a reference implementation of a Private Browsing Mode that defends
12 12
 against active network adversaries, in addition to the passive forensic local
13 13
 adversary currently addressed by the major browsers.
14 14
 
15
+  </p><p>
16
+
17
+For more practical information regarding Tor Browser development, please
18
+consult the <a class="ulink" href="https://trac.torproject.org/projects/tor/wiki/doc/TorBrowser/Hacking" target="_top">Tor
19
+Browser Hacking Guide</a>.
20
+
15 21
   </p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="components"></a>1.1. Browser Component Overview</h3></div></div></div><p>
16 22
 
17 23
 The Tor Browser is based on <a class="ulink" href="https://www.mozilla.org/en-US/firefox/organizations/" target="_top">Mozilla's Extended
18 24
 Support Release (ESR) Firefox branch</a>. We have a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git" target="_top">series of patches</a>
19 25
 against this browser to enhance privacy and security. Browser behavior is
20
-additionally augmented through the <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/tree/master" target="_top">Torbutton
26
+additionally augmented through the <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/tree/" target="_top">Torbutton
21 27
 extension</a>, though we are in the process of moving this functionality
22
-into direct Firefox patches. We also <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/blob/refs/heads/tor-browser-31.2.0esr-4.x-1:/browser/app/profile/000-tor-browser.js" 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-31.6.0esr-4.5-1" target="_top">change
23 29
 a number of Firefox preferences</a> from their defaults.
24 30
 
25 31
    </p><p>
... ...
@@ -33,14 +39,14 @@ Instantbird, and XULRunner.
33 39
 To help protect against potential Tor Exit Node eavesdroppers, we include
34 40
 <a class="ulink" href="https://www.eff.org/https-everywhere" target="_top">HTTPS-Everywhere</a>. To
35 41
 provide users with optional defense-in-depth against Javascript and other
36
-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/blob/refs/heads/master:/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="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
37 43
 extension preferences</a> from their defaults.
38 44
 
39 45
    </p><p>
40 46
 
41 47
 To provide censorship circumvention in areas where the public Tor network is
42 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
43
-Transports</a> in the distribution. As of this writing, we include <a class="ulink" href="https://gitweb.torproject.org/pluggable-transports/obfsproxy.git/blob/HEAD:/doc/obfs3/obfs3-protocol-spec.txt" target="_top">Obfsproxy</a>,
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">Obfs4proxy</a>,
44 50
 <a class="ulink" href="https://trac.torproject.org/projects/tor/wiki/doc/meek" target="_top">meek</a>,
45 51
 <a class="ulink" href="https://fteproxy.org/" target="_top">FTE</a>, and <a class="ulink" href="https://crypto.stanford.edu/flashproxy/" target="_top">FlashProxy</a>.
46 52
 
... ...
@@ -552,7 +556,7 @@ Proxy obedience is assured through the following:
552 556
    </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">Firefox proxy settings, patches, and build flags
553 557
  <p>
554 558
 
555
-Our <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/blob/refs/heads/tor-browser-31.2.0esr-4.x-1:/browser/app/profile/000-tor-browser.js" target="_top">Firefox
559
+Our <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/tree/browser/app/profile/000-tor-browser.js?h=tor-browser-31.6.0esr-4.5-1" target="_top">Firefox
556 560
 preferences file</a> sets the Firefox proxy settings to use Tor directly
557 561
 as a SOCKS proxy. It sets <span class="command"><strong>network.proxy.socks_remote_dns</strong></span>,
558 562
 <span class="command"><strong>network.proxy.socks_version</strong></span>,
... ...
@@ -568,9 +572,9 @@ as set the pref <span class="command"><strong>media.peerconnection.enabled</stro
568 572
  </p><p>
569 573
 
570 574
 We also patch Firefox in order to provide several defense-in-depth mechanisms
571
-for proxy safety. Notably, we <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/8527bec0ad59fb3d885c5639735fb188eefa336f" target="_top">patch
575
+for proxy safety. Notably, we <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=8c6604d2b776f0d8e33ed9130c5f5b8cf744bac8" target="_top">patch
572 576
 the DNS service</a> to prevent any browser or addon DNS resolution, and we
573
-also <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/04c046e11f6622f44ca010bcb8ecf68cf470a4c0" target="_top">patch
577
+also <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=c96c854c0eca21fed1362d1ddd164b657d351795" target="_top">patch
574 578
 OCSP and PKIX code</a> to prevent any use of the non-proxied command-line
575 579
 tool utility functions from being functional while linked in to the browser.
576 580
 In both cases, we could find no direct paths to these routines in the browser,
... ...
@@ -578,7 +582,7 @@ but it seemed better safe than sorry.
578 582
 
579 583
  </p><p>
580 584
 
581
-During every Extended Support Release transition, we perform <a class="ulink" href="https://gitweb.torproject.org/tor-browser-spec.git/tree/HEAD:/audits" target="_top">in-depth
585
+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
582 586
 code audits</a> to verify that there were no system calls or XPCOM
583 587
 activity in the source tree that did not use the browser proxy settings.
584 588
  </p><p>
... ...
@@ -590,7 +594,7 @@ geolocation queries, searchbox queries, XPCOM addon HTTPS/HTTP activity,
590 594
 WebSockets, and live bookmark updates. We have also verified that IPv6
591 595
 connections are not attempted, through the proxy or otherwise (Tor does not
592 596
 yet support IPv6). We have also verified that external protocol helpers, such
593
-as smb urls and other custom protocol handlers are all blocked.
597
+as SMB URLs and other custom protocol handlers are all blocked.
594 598
 
595 599
  </p></li><li class="listitem">Disabling plugins
596 600
 
... ...
@@ -610,8 +614,10 @@ restricted from automatic load through Firefox's click-to-play preference
610 614
 
611 615
 In addition, to reduce any unproxied activity by arbitrary plugins at load
612 616
 time, and to reduce the fingerprintability of the installed plugin list, we
613
-also patch the Firefox source code to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/2ecf6c33618ecee554155f735a3e92860f519f9c" target="_top">
614
-prevent the load of any plugins except for Flash and Gnash</a>.
617
+also patch the Firefox source code to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=465cb8295db58a6450dc14a593d29372cbebc71d" target="_top">
618
+prevent the load of any plugins except for Flash and Gnash</a>. Even for
619
+Flash and Gnash, we also patch Firefox to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=e5531b1baa3c96dee7d8d4274791ff393bafd241" target="_top">prevent loading them into the
620
+address space</a> until they are explicitly enabled.
615 621
 
616 622
  </p></li><li class="listitem">External App Blocking and Drag Event Filtering
617 623
   <p>
... ...
@@ -619,7 +625,7 @@ prevent the load of any plugins except for Flash and Gnash</a>.
619 625
 External apps can be induced to load files that perform network activity.
620 626
 Unfortunately, there are cases where such apps can be launched automatically
621 627
 with little to no user input. In order to prevent this, Torbutton installs a
622
-component to <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/external-app-blocker.js" target="_top">
628
+component to <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/tree/src/components/external-app-blocker.js" target="_top">
623 629
 provide the user with a popup</a> whenever the browser attempts to launch
624 630
 a helper app.
625 631
 
... ...
@@ -629,7 +635,7 @@ Additionally, modern desktops now pre-emptively fetch any URLs in Drag and
629 635
 Drop events as soon as the drag is initiated. This download happens
630 636
 independent of the browser's Tor settings, and can be triggered by something
631 637
 as simple as holding the mouse button down for slightly too long while
632
-clicking on an image link. We filter drag and drop events events <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/external-app-blocker.js" target="_top">from
638
+clicking on an image link. We filter drag and drop events events <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/tree/src/components/external-app-blocker.js" target="_top">from
633 639
 Torbutton</a> before the OS downloads the URLs the events contained.
634 640
 
635 641
   </p></li><li class="listitem">Disabling system extensions and clearing the addon whitelist
... ...
@@ -654,24 +660,24 @@ system-wide extensions (through the use of
654 660
 disabled, which prevents Flash cookies from leaking from a pre-existing Flash
655 661
 directory.
656 662
 
657
-   </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="idp60374176"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
663
+   </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="idp53861360"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
658 664
 
659 665
 The User Agent MUST (at user option) prevent all disk records of browser activity.
660 666
 The user should be able to optionally enable URL history and other history
661 667
 features if they so desire. 
662 668
 
663
-    </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60375536"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
669
+    </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp53862720"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
664 670
 
665 671
 We achieve this goal through several mechanisms. First, we set the Firefox
666 672
 Private Browsing preference
667 673
 <span class="command"><strong>browser.privatebrowsing.autostart</strong></span>. In addition, four Firefox patches are needed to prevent disk writes, even if
668 674
 Private Browsing Mode is enabled. We need to
669 675
 
670
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/4ebc3cda4b704c0149fb9e0fdcbb6e5ee3a8e75c" target="_top">prevent
671
-the permissions manager from recording HTTPS STS state</a>, <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/8904bfc10cd537bd35be5ddd23c58fdaa72baa21" target="_top">prevent
672
-intermediate SSL certificates from being recorded</a>, <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/86f6bc9dc28b6f8d7eae7974c7e9b537c3a08e41" target="_top">prevent
676
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=44b8ae43a83191bbf5161cbdbf399e10c1b943d0" target="_top">prevent
677
+the permissions manager from recording HTTPS STS state</a>, <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=e5abcb28f131aa96e8762212573488d303b3614d" target="_top">prevent
678
+intermediate SSL certificates from being recorded</a>, <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=ee34e122ac2929a7668314483e36e58a88c98c08" target="_top">prevent
673 679
 the clipboard cache from being written to disk for large pastes</a>, and
674
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/d5da6f8b7de089335e49e2f7dbd2b8d74e4cb613" target="_top">prevent
680
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=c8e357740dd7bafa2a129007f27d2b243e36f4a2" target="_top">prevent
675 681
 the content preferences service from recording site zoom</a>. We also had
676 682
 to disable the media cache with the pref <span class="command"><strong>media.cache_size</strong></span>,
677 683
 to prevent HTML5 videos from being written to the OS temporary directory,
... ...
@@ -734,7 +740,7 @@ the url bar origin for which browser state exists, possibly with a
734 740
 context-menu option to drill down into specific types of state or permissions.
735 741
 An example of this simplification can be seen in Figure 1.
736 742
 
737
-   </p><div class="figure"><a id="idp60398240"></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>
743
+   </p><div class="figure"><a id="idp53885184"></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>
738 744
 
739 745
 This example UI is a mock-up of how isolating identifiers to the URL bar
740 746
 origin can simplify the privacy UI for all data - not just cookies. Once
... ...
@@ -761,59 +767,35 @@ unlinkability trumps that desire.
761 767
      </p></li><li class="listitem">Cache
762 768
      <p>
763 769
 
764
-Cache is isolated to the url bar origin by using a technique pioneered by
765
-Colin Jackson et al, via their work on <a class="ulink" href="http://www.safecache.com/" target="_top">SafeCache</a>. The technique re-uses the
766
-<a class="ulink" href="https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsICachingChannel" target="_top">nsICachingChannel.cacheKey</a>
767
-attribute that Firefox uses internally to prevent improper caching and reuse
768
-of HTTP POST data.  
769
-
770
-     </p><p>
771
-
772
-However, to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3666" target="_top">increase the
773
-security of the isolation</a> and to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3754" target="_top">solve conflicts
774
-with OCSP relying the cacheKey property for reuse of POST requests</a>, we
775
-had to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/18dfd3064aff23a402fec248aab797036a9ba615" target="_top">patch
776
-Firefox to provide a cacheDomain cache attribute</a>. We use the fully
777
-qualified url bar domain as input to this field, to avoid the complexities
778
-of heuristically determining the second-level DNS name.
779
-
780
-     </p><p>
781
-
782
- Furthermore, we chose a different
783
-isolation scheme than the Stanford implementation. First, we decoupled the
784
-cache isolation from the third party cookie attribute. Second, we use several
785
-mechanisms to attempt to determine the actual location attribute of the
786
-top-level window (to obtain the url bar FQDN) used to load the page, as
787
-opposed to relying solely on the Referer property.
788
-
789
-     </p><p>
790
-
791
-Therefore, <a class="ulink" href="http://crypto.stanford.edu/sameorigin/safecachetest.html" target="_top">the original
792
-Stanford test cases</a> are expected to fail. Functionality can still be
793
-verified by navigating to <a class="ulink" href="about:cache" target="_top">about:cache</a> and
794
-viewing the key used for each cache entry. Each third party element should
795
-have an additional "domain=string" property prepended, which will list the
796
-FQDN that was used to source the third party element.
770
+In Firefox, there are actually two distinct caching mechanisms: One for
771
+general content (HTML, Javascript, CSS), and one specifically for images. The
772
+content cache is isolated to the URL bar domain by <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=7c58be929777d386a03e1faaee648909151fd951" target="_top">altering
773
+each cache key</a> to include an additional ID that includes the URL bar
774
+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
775
+entry. Each third party element should have an additional "id=string"
776
+property prepended, which will list the FQDN that was used to source the third
777
+party element.
797 778
 
798 779
      </p><p>
799 780
 
800 781
 Additionally, because the image cache is a separate entity from the content
801
-cache, we had to patch Firefox to also <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/114cd22282f8b3cd6e6a5c29de8a8c396a79acc0" target="_top">isolate
782
+cache, we had to patch Firefox to also <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=d8b98a75fb200268c40886d876adc19e00b933bf" target="_top">isolate
802 783
 this cache per url bar domain</a>.
803 784
 
804 785
      </p></li><li class="listitem">HTTP Auth
805 786
      <p>
806 787
 
807
-HTTP authentication tokens are removed for third party elements using the
808
-<a class="ulink" href="https://developer.mozilla.org/en/Setting_HTTP_request_headers#Observers" target="_top">http-on-modify-request
809
-observer</a> to remove the Authorization headers to prevent <a class="ulink" href="http://jeremiahgrossman.blogspot.com/2007/04/tracking-users-without-cookies.html" target="_top">silent
810
-linkability between domains</a>. 
788
+HTTP Authorization headers can be used by Javascript to encode <a class="ulink" href="http://jeremiahgrossman.blogspot.com/2007/04/tracking-users-without-cookies.html" target="_top">silent
789
+third party tracking identifiers</a>. To prevent this, we remove HTTP
790
+authentication tokens for third party elements through a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=b8ce4a0760759431f146c71184c89fbd5e1a27e4" target="_top">patch
791
+to nsHTTPChannel</a>. 
792
+
811 793
      </p></li><li class="listitem">DOM Storage
812 794
      <p>
813 795
 
814 796
 DOM storage for third party domains MUST be isolated to the url bar origin,
815 797
 to prevent linkability between sites. This functionality is provided through a
816
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/973468a07fb9e7d9995d01b250223a8df16d6cfd" target="_top">patch
798
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=97490c4a90ca1c43374486d9ec0c5593d5fe5720" target="_top">patch
817 799
 to Firefox</a>.
818 800
 
819 801
      </p></li><li class="listitem">Flash cookies
... ...
@@ -830,37 +812,83 @@ We are currently <a class="ulink" href="https://trac.torproject.org/projects/tor
830 812
 difficulties</a> causing Flash player to use this settings
831 813
 file on Windows, so Flash remains difficult to enable.
832 814
 
833
-     </p></li><li class="listitem">SSL+TLS session resumption, HTTP Keep-Alive and SPDY
815
+     </p></li><li class="listitem">SSL+TLS session resumption
834 816
      <p><span class="command"><strong>Design Goal:</strong></span>
835 817
 
836 818
 TLS session resumption tickets and SSL Session IDs MUST be limited to the url
837
-bar origin.  HTTP Keep-Alive connections from a third party in one url bar
838
-origin MUST NOT be reused for that same third party in another url bar origin.
819
+bar origin.
839 820
 
840 821
      </p><p><span class="command"><strong>Implementation Status:</strong></span>
841 822
 
842 823
 We currently clear SSL Session IDs upon <a class="link" href="#new-identity" title="4.7. Long-Term Unlinkability via &quot;New Identity&quot; button">New
843 824
 Identity</a>, we disable TLS Session Tickets via the Firefox Pref
844 825
 <span class="command"><strong>security.enable_tls_session_tickets</strong></span>. We disable SSL Session
845
-IDs via a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/5524ae43780e4738310852cc2a0b7c5d25aa69ed" target="_top">patch
826
+IDs via a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=a01fb747d4b8b24687de538cb6a1304fe27d9d88" target="_top">patch
846 827
 to Firefox</a>. To compensate for the increased round trip latency from disabling
847 828
 these performance optimizations, we also enable
848 829
 <a class="ulink" href="https://tools.ietf.org/html/draft-bmoeller-tls-falsestart-00" target="_top">TLS
849 830
 False Start</a> via the Firefox Pref 
850 831
 <span class="command"><strong>security.ssl.enable_false_start</strong></span>.
832
+    </p></li><li class="listitem">IP address, Tor Circuit, and HTTP Keep-Alive linkability
833
+     <p>
834
+
835
+IP addresses, Tor Circuits, and HTTP connections from a third party in one URL
836
+bar origin MUST NOT be reused for that same third party in another URL bar
837
+origin.
851 838
      </p><p>
852 839
 
853
-Because of the extreme performance benefits of HTTP Keep-Alive for interactive
854
-web apps, and because of the difficulties of conveying urlbar origin
855
-information down into the Firefox HTTP layer, as a compromise we currently
856
-merely reduce the HTTP Keep-Alive timeout to 20 seconds (which is measured
857
-from the last packet read on the connection) using the Firefox preference
858
-<span class="command"><strong>network.http.keep-alive.timeout</strong></span>.
840
+This isolation functionality is provided by the combination of a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=b3ea705cc35b79a9ba27323cb3e32d5d004ea113" target="_top">Firefox
841
+patch to allow SOCKS username and passwords</a>, as well as a Torbutton
842
+component that <a class="ulink" href="" target="_top">sets
843
+the SOCKS username and password for each request</a>. The Tor client has
844
+logic to prevent connections with different SOCKS usernames and passwords from
845
+using the same Tor Circuit, which provides us with IP address unlinkability.
846
+Firefox has existing logic to ensure that connections with SOCKS proxy do not
847
+re-use existing HTTP Keep Alive connections unless the proxy settings match.
848
+We extended this logic to cover SOCKS username and password authentication,
849
+providing us with HTTP Keep-Alive unlinkability.
850
+
851
+     </p></li><li class="listitem">SharedWorkers
852
+     <p>
853
+
854
+<a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker" target="_top">SharedWorkers</a>
855
+are a special form of Javascript Worker Threads that have a shared scope
856
+between all threads from the same Javascript origin.
857
+     </p><p><span class="command"><strong>Design Goal:</strong></span>
858
+
859
+SharedWorker scope MUST be isolated to the URL bar domain. A SharedWorker
860
+launched from a third party from one URL bar domain MUST NOT have access to
861
+the objects created by that same third party loaded under another URL bar domain.
862
+
863
+     </p><p><span class="command"><strong>Implementation Status:</strong></span>
864
+
865
+For now, we disable SharedWorkers via the pref
866
+<span class="command"><strong>dom.workers.sharedWorkers.enabled</strong></span>.
867
+
868
+     </p></li><li class="listitem">blob: URIs (URL.createObjectURL)
869
+     <p>
870
+
871
+The <a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL" target="_top">URL.createObjectURL</a>
872
+API allows a site to load arbitrary content into a random UUID that is stored
873
+in the user's browser, and this content can be accessed via a URL of the form
874
+<span class="command"><strong>blob:UUID</strong></span> from any other content element anywhere on the
875
+web. While this UUID value is neither under control of the site nor
876
+predictable, it can still be used to tag a set of users that are of high
877
+interest to an adversary.
859 878
 
860 879
      </p><p>
861
-However, because SPDY can store identifiers and has extremely long keepalive
862
-duration, it is disabled through the Firefox preference
863
-<span class="command"><strong>network.http.spdy.enabled</strong></span>.
880
+
881
+URIs created with URL.createObjectURL MUST be limited in scope to the first
882
+party URL bar domain that created them. We provide this isolation in Tor
883
+Browser via a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=0d67ab406bdd3cf095802cb25c081641aa1f0bcc" target="_top">direct
884
+patch to Firefox</a>.
885
+
886
+     </p></li><li class="listitem">SPDY
887
+     <p>
888
+
889
+Because SPDY can store identifiers, it is disabled through the
890
+Firefox preference <span class="command"><strong>network.http.spdy.enabled</strong></span>.
891
+
864 892
      </p></li><li class="listitem">Automated cross-origin redirects MUST NOT store identifiers
865 893
     <p><span class="command"><strong>Design Goal:</strong></span>
866 894
 
... ...
@@ -932,65 +960,106 @@ the best approach.
932 960
 cleared by <a class="link" href="#new-identity" title="4.7. Long-Term Unlinkability via &quot;New Identity&quot; button">New Identity</a>, but we don't
933 961
 defend against the creation of these cookies between <span class="command"><strong>New
934 962
 Identity</strong></span> invocations.
935
-      </p></li><li class="listitem">Exit node usage
936
-    <p>
937
-
938
-All content elements associated with a given URL bar domain (including the
939
-main page) are given a SOCKS username and password for this domain, which
940
-causes Tor to isolate all of these requests on their own set of Tor circuits.
941
-
942 963
       </p></li></ol></div><p>
943 964
 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&amp;status=!closed" target="_top">tbb-linkability tag in our bugtracker</a>
944 965
   </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="fingerprinting-linkability"></a>4.6. Cross-Origin Fingerprinting Unlinkability</h3></div></div></div><p>
945 966
 
946
-In order to properly address the fingerprinting adversary on a technical
947
-level, we need a metric to measure linkability of the various browser
948
-properties beyond any stored origin-related state. <a class="ulink" href="https://panopticlick.eff.org/about.php" target="_top">The Panopticlick Project</a>
949
-by the EFF provides us with a prototype of such a metric. The researchers
950
-conducted a survey of volunteers who were asked to visit an experiment page
951
-that harvested many of the above components. They then computed the Shannon
952
-Entropy of the resulting distribution of each of several key attributes to
953
-determine how many bits of identifying information each attribute provided.
954
-
955
-   </p><p>
956
-
957
-Unfortunately, there are limitations to the way the Panopticlick study was
958
-conducted. Because the Panopticlick dataset is based on browser data spanning
959
-a number of widely deployed browsers over a number of years, any
960
-fingerprinting defenses attempted by browsers today are very likely to cause
961
-Panopticlick to report an <span class="emphasis"><em>increase</em></span> in fingerprintability
962
-and entropy, because those defenses will stand out in sharp contrast to
963
-historical data. Moreover, because fingerprinting is a problem that
964
-potentially touches every aspect of the browser, we do not believe it is
965
-possible to solve cross-browser fingerprinting issues. We reduce the efforts
966
-for fingerprinting resistance by only concerning ourselves with reducing the
967
-fingerprintable differences <span class="emphasis"><em>among</em></span> Tor Browser users. 
968
-
969
-   </p><p>
970
-
971
-The unsolvable nature of the cross-browser fingerprinting problem also means
972
-that the Panopticlick test website itself is not useful for evaluating the
973
-actual effectiveness of our defenses, or the fingerprinting defenses of any
974
-other web browser. We are interested in deploying an improved version of
975
-Panopticlick that measures entropy and variance only among a specific user
976
-agent population, but until then, intuition serves as a decent guide.
977
-Essentially, anything that reveals custom user configuration, third party
978
-software, highly variable hardware details, and external devices attached to
979
-the users computer is likely to more fingerprintable than things like
980
-operating system type and even processor speed.
981
-
982
-   </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="fingerprinting-defenses"></a>Fingerprinting defenses in the Tor Browser</h4></div></div></div><p>
967
+Browser fingerprinting is the act of inspecting browser behaviors and features in
968
+an attempt to differentiate and track individual users. Fingerprinting attacks
969
+are typically broken up into passive and active vectors. Passive
970
+fingerprinting makes use of any information the browser provides automatically
971
+to a website without any specific action on the part of the website. Active
972
+fingerprinting makes use of any information that can be extracted from the
973
+browser by some specific website action, usually involving Javascript.
974
+Some definitions of browser fingerprinting also include supercookies and
975
+cookie-like identifier storage, but we deal with those issues separately in
976
+the <a class="link" href="#identifier-linkability" title="4.5. Cross-Origin Identifier Unlinkability">preceding section on identifier
977
+linkability</a>.
978
+
979
+   </p><p>
980
+
981
+For the most part, however, we do not differentiate between passive or active
982
+fingerprinting sources, since many active fingerprinting mechanisms are very
983
+rapid, and can be obfuscated or disguised as legitimate functionality.
984
+Instead, we believe fingerprinting can only be rationally addressed if we
985
+understand where the problem comes from, what sources of issues are the most
986
+severe, and how to study the efficacy of defenses properly.
987
+
988
+    </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="fingerprinting-scope"></a>Sources of Fingerprinting Issues</h4></div></div></div><p>
989
+
990
+All fingerprinting issues arise from one of four primary sources. In order
991
+from most severe to least severe, these sources are:
992
+
993
+    </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>End-user Configuration Details</strong></span><p>
994
+
995
+End-user configuration details are by far the most severe threat to
996
+fingerprinting, as they will quickly provide enough information to uniquely
997
+identify a user. We believe it is essential to avoid exposing platform
998
+configuration details to website content at all costs. We also discourage
999
+excessive fine-grained customization of Tor Browser by minimizing and
1000
+aggregating user-facing privacy and security options, as well as by
1001
+discouraging the use of additional addons. When it is necessary to expose
1002
+configuration details in the course of providing functionality, we strive to
1003
+do so only on a per-site basis via site permissions, to avoid linkability.
1004
+
1005
+     </p></li><li class="listitem"><span class="command"><strong>Device and Hardware Characteristics</strong></span><p>
1006
+
1007
+Device and hardware characteristics can be determined three ways: they can be
1008
+reported explicitly by the browser, they can be inferred through API behavior,
1009
+or they can be extracted through statistical measurements of system
1010
+performance. We are most concerned with the cases where this information is
1011
+either directly reported or can be determined via a single use of an API or
1012
+feature, and prefer to place such APIs either behind site permissions, or
1013
+disable them entirely.
1014
+      </p><p>
1015
+
1016
+On the other hand, because statistical inference of system performance
1017
+requires many iterations to achieve accuracy in the face of noise and
1018
+concurrent activity, we are less concerned with this mechanism of extracting
1019
+this information. We also expect that reducing the resolution of Javascript's
1020
+time sources will significantly increase the duration of execution required to
1021
+extract accurate results, and thus make statistical approaches both
1022
+unattractive and highly noticeable due to excessive resource consumption.
1023
+
1024
+      </p></li><li class="listitem"><span class="command"><strong>Operating System Vendor and Version Differences</strong></span><p>
1025
+
1026
+Operating system vendor and version differences permeate many different
1027
+aspects of the browser. While it is possible to address these issues with some
1028
+effort, the relative lack of diversity in operating systems causes us to
1029
+primarily focus our efforts on passive operating system fingerprinting
1030
+mechanisms at this point in time. For the purposes of protecting user
1031
+anonymity, it is not strictly essential that the operating system be
1032
+completely concealed, though we recognize that it is useful to reduce this
1033
+differentiation ability where possible, especially for cases where the
1034
+specific version of a system can be inferred.
1035
+
1036
+      </p></li><li class="listitem"><span class="command"><strong>Browser Vendor and Version Differences</strong></span><p>
1037
+
1038
+Due to vast differences in feature set and implementation behavior even
1039
+between different versions of the same browser, browser vendor and version
1040
+differences are simply not possible to conceal in any realistic way. It
1041
+is only possible to minimize the differences among different installations of
1042
+the same browser vendor and version. We make no effort to mimic any other
1043
+major browser vendor, and in fact most of our fingerprinting defenses serve to
1044
+differentiate Tor Browser users from normal Firefox users. Because of this,
1045
+any study that lumps browser vendor and version differences in to its analysis
1046
+of the fingerprintability of a population is largely useless for evaluating
1047
+either attacks or defenses. Unfortunately, this includes popular large-scale
1048
+studies such as <a class="ulink" href="https://panopticlick.eff.org/" target="_top">Panopticlick</a> and <a class="ulink" href="https://amiunique.org/" target="_top">Am I Unique</a>.
1049
+
1050
+      </p></li></ol></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="fingerprinting-defenses"></a>Fingerprinting defenses in the Tor Browser</h4></div></div></div><p>
983 1051
 
984 1052
 The following defenses are listed roughly in order of most severe
985
-fingerprinting threat first. This ordering is based on the above intuition that
986
-user configurable aspects of the computer are the most severe source of
987
-fingerprintability, though we are in need of updated measurements to determine
988
-this with certainty.
1053
+fingerprinting threat first. This ordering is based on the above intuition
1054
+that user configurable aspects of the computer are the most severe source of
1055
+fingerprintability, followed by device characteristics and hardware, and then
1056
+finally operating system vendor and version information.
989 1057
 
990 1058
    </p><p>
991
-Where our actual implementation differs from
992
-an ideal solution, we separately describe our <span class="command"><strong>Design Goal</strong></span>
993
-and our <span class="command"><strong>Implementation Status</strong></span>.
1059
+
1060
+Where our actual implementation differs from an ideal solution, we separately
1061
+describe our <span class="command"><strong>Design Goal</strong></span> and our <span class="command"><strong>Implementation
1062
+Status</strong></span>.
994 1063
 
995 1064
    </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">Plugins
996 1065
      <p>
... ...
@@ -1017,8 +1086,9 @@ Currently, we entirely disable all plugins in Tor Browser. However, as a
1017 1086
 compromise due to the popularity of Flash, we allow users to re-enable Flash,
1018 1087
 and flash objects are blocked behind a click-to-play barrier that is available
1019 1088
 only after the user has specifically enabled plugins. Flash is the only plugin
1020
-available, the rest are <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/1ef32dcf0cc64876f5b92a583b788dc921f22c5d" target="_top">entirely
1021
-blocked from loading by a Firefox patch</a>. We also set the Firefox
1089
+available, the rest are entirely
1090
+blocked from loading by the Firefox patches mentioned in the <a class="link" href="#proxy-obedience" title="4.1. Proxy Obedience">Proxy Obedience
1091
+section</a>. We also set the Firefox
1022 1092
 preference <span class="command"><strong>plugin.expose_full_path</strong></span> to false, to avoid
1023 1093
 leaking plugin installation information.
1024 1094
 
... ...
@@ -1041,13 +1111,12 @@ image can be used almost identically to a tracking cookie by the web server.
1041 1111
 In some sense, the canvas can be seen as the union of many other
1042 1112
 fingerprinting vectors. If WebGL is normalized through software rendering,
1043 1113
 system colors were standardized, and the browser shipped a fixed collection of
1044
-fonts (see later points in this list), it might not be necessary
1045
-to create a canvas permission. However, until then, to reduce the threat from
1046
-this vector, we have patched Firefox to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/3b53f525cfb68880e676e64f13cbc0b928ae3ecf" target="_top">prompt
1047
-before returning valid image data</a> to the Canvas APIs, and for <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/fb9f463fe3a69499d6896c217786bafdf0cda62f" target="_top">access
1048
-to isPointInPath and related functions</a>. If the user hasn't previously
1049
-allowed the site in the URL bar to access Canvas image data, pure white image
1050
-data is returned to the Javascript APIs.
1114
+fonts (see later points in this list), it might not be necessary to create a
1115
+canvas permission. However, until then, to reduce the threat from this vector,
1116
+we have patched Firefox to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=6a169ef0166b268b1a27546a17b3d7470330917d" target="_top">prompt
1117
+before returning valid image data</a> to the Canvas APIs. If the user
1118
+hasn't previously allowed the site in the URL bar to access Canvas image data,
1119
+pure white image data is returned to the Javascript APIs.
1051 1120
 
1052 1121
      </p><p>
1053 1122
      </p></li><li class="listitem">Open TCP Port Fingerprinting
... ...
@@ -1055,22 +1124,25 @@ data is returned to the Javascript APIs.
1055 1124
 
1056 1125
 In Firefox, by using either WebSockets or XHR, it is possible for remote
1057 1126
 content to <a class="ulink" href="http://www.andlabs.org/tools/jsrecon.html" target="_top">enumerate
1058
-the list of TCP ports open on 127.0.0.1</a>. In other browsers, this can
1059
-be accomplished by DOM events on image or script tags. This open vs filtered
1060
-vs closed port list can provide a very unique fingerprint of a machine,
1061
-because it essentially enables the detection of many different popular third
1062
-party applications and optional system services (Skype, Bitcoin, Bittorrent
1063
-and other P2P software, SSH ports, SMB and related LAN services, CUPS and
1064
-printer daemon config ports, mail servers, and so on). It is also possible to
1065
-determine when ports are closed versus filtered/blocked (and thus probe
1066
-custom firewall configuration).
1067
-
1068
-     </p><p>In Tor Browser, we prevent access to
1069
-127.0.0.1/localhost by ensuring that even these requests are still sent by
1070
-Firefox to our SOCKS proxy (ie we set
1127
+the list of TCP ports open on 127.0.0.1</a>, as well as on any other
1128
+machines on the local network. In other browsers, this can be accomplished by
1129
+DOM events on image or script tags. This open vs filtered vs closed port list
1130
+can provide a very unique fingerprint of a machine, because it essentially
1131
+enables the detection of many different popular third party applications and
1132
+optional system services (Skype, Bitcoin, Bittorrent and other P2P software,
1133
+SSH ports, SMB and related LAN services, CUPS and printer daemon config ports,
1134
+mail servers, and so on). It is also possible to determine when ports are
1135
+closed versus filtered/blocked (and thus probe custom firewall configuration).
1136
+
1137
+     </p><p>
1138
+
1139
+In Tor Browser, we prevent access to 127.0.0.1/localhost by ensuring that even
1140
+these requests are still sent by Firefox to our SOCKS proxy (ie we set
1071 1141
 <span class="command"><strong>network.proxy.no_proxies_on</strong></span> to the empty string). The local
1072 1142
 Tor client then rejects them, since it is configured to proxy for internal IP
1073
-addresses by default.
1143
+addresses by default. Access to the local network is forbidden via the same
1144
+mechanism.
1145
+
1074 1146
      </p></li><li class="listitem">Invasive Authentication Mechanisms (NTLM and SPNEGO)
1075 1147
      <p>
1076 1148
 
... ...
@@ -1127,7 +1199,7 @@ considerably larger than the combination of the Droid, Nanum, and Lohit fonts.
1127 1199
 In the meantime while we investigate shipping our own fonts, we disable
1128 1200
 plugins, which prevents font name enumeration. Additionally, we limit both the
1129 1201
 number of font queries from CSS, as well as the total number of fonts that can
1130
-be used in a document <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/d515c79ffd115b132caade7f881e5b467448964d" target="_top">with
1202
+be used in a document <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=e78bc05159a79c1358fa9c64e565af9d98c141ee" target="_top">with
1131 1203
 a Firefox patch</a>. We create two prefs,
1132 1204
 <span class="command"><strong>browser.display.max_font_attempts</strong></span> and
1133 1205
 <span class="command"><strong>browser.display.max_font_count</strong></span> for this purpose. Once these
... ...
@@ -1170,18 +1242,22 @@ this scheme.
1170 1242
 
1171 1243
      </p><p><span class="command"><strong>Implementation Status:</strong></span>
1172 1244
 
1173
-
1174
-We have implemented the above strategy using a window observer to <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob/HEAD:/src/chrome/content/torbutton.js#l2960" target="_top">resize
1175
-new windows based on desktop resolution</a>. Additionally, we patch
1176
-Firefox to use the client content window size <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/8fc2421becd0ab0cfb5ebbc19af67469552202b2" target="_top">for
1177
-window.screen</a>. Similarly, we <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/81e7fc3a10d27b1d8f0832faf1685899d21f6fef" target="_top">patch
1178
-DOM events to return content window relative points</a>. We also force
1245
+We automatically resize new browser windows to a 200x100 pixel multiple using
1246
+a window observer to <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/tree/src/chrome/content/torbutton.js#n3361" target="_top">resize
1247
+new windows based on desktop resolution</a>. To minimize the effect of the
1248
+long tail of large monitor sizes, we also cap the the window size at 1000
1249
+pixels in each direction. Additionally, we patch
1250
+Firefox to use the client content window size <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=bd3b1ed32a9c21fdc92fc35f2ec0a41badc378d5" target="_top">for
1251
+window.screen</a>, and to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=a5648c8d80f396caf294d761cc4a9a76c0b33a9d" target="_top">report
1252
+a window.devicePixelRatio of 1.0</a>. Similarly, we <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=3c02858027634ffcfbd97047dfdf170c19ca29ec" target="_top">patch
1253
+DOM events to return content window relative points</a>. We also 
1254
+
1255
+We also force
1179 1256
 popups to open in new tabs (via
1180 1257
 <span class="command"><strong>browser.link.open_newwindow.restriction</strong></span>), to avoid
1181 1258
 full-screen popups inferring information about the browser resolution. In
1182
-addition, we prevent auto-maximizing on browser start, and are investigating a
1183
-user-friendly way of informing users that maximized windows are detrimental
1184
-to privacy in this mode.
1259
+addition, we prevent auto-maximizing on browser start, and inform users that
1260
+maximized windows are detrimental to privacy in this mode.
1185 1261
 
1186 1262
      </p></li><li class="listitem">Display Media information
1187 1263
      <p>
... ...
@@ -1204,10 +1280,10 @@ details such as screen orientation or type.
1204 1280
      </p><p><span class="command"><strong>Implementation Status:</strong></span>
1205 1281
 
1206 1282
 We patch
1207
-Firefox to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/30dc2c4290698af81ceafae9d628a34c53faabe1" target="_top">report
1208
-a fixed set of system colors to content window CSS</a>, and <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/8f6e979d30598569dea14ac6f4eef4e96543b3d7" target="_top">prevent
1209
-detection of font smoothing on Mac OS X</a>. We also always
1210
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/09561f0e5452305b9efcb4e6169c613c8db33246" target="_top">report
1283
+Firefox to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=cf8956b4460107c5b0053c8fc574e34b0a30ec1e" target="_top">report
1284
+a fixed set of system colors to content window CSS</a>, and <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=bbc138486e0489b0d559343fa0522df4ee3b3533" target="_top">prevent
1285
+detection of font smoothing on OSX</a>. We also always
1286
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=e17d60442ab0db92664ff68d90fe7bf737374912" target="_top">report
1211 1287
 landscape-primary</a> for the screen orientation.
1212 1288
 
1213 1289
      </p></li><li class="listitem">WebGL
... ...
@@ -1249,7 +1325,7 @@ these headers should remain identical across the population even when updated.
1249 1325
 Firefox provides several options for controlling the browser user agent string
1250 1326
 which we leverage. We also set similar prefs for controlling the
1251 1327
 Accept-Language and Accept-Charset headers, which we spoof to English by default. Additionally, we
1252
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/95cd0e8071aa1fe3f4914331d4036f218007e31d" target="_top">remove
1328
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=e9841ee41e7f3f1535be2d605084c41ee9faf6c2" target="_top">remove
1253 1329
 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
1254 1330
 used</a> to fingerprint OS, platform, and Firefox minor version.  </p></li><li class="listitem">Locale Fingerprinting
1255 1331
      <p>
... ...
@@ -1263,7 +1339,7 @@ completeness, we attempt to maintain this property.
1263 1339
 
1264 1340
 We set the fallback character set to set to windows-1252 for all locales, via
1265 1341
 <span class="command"><strong>intl.charset.default</strong></span>.  We also patch Firefox to allow us to
1266
-<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/fe42a78575df7f460fa0ac48eabb57bc8812c23e" target="_top">instruct
1342
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=4545ecd6dc2ca7d10aefe36b81658547ea97b800" target="_top">instruct
1267 1343
 the JS engine</a> to use en-US as its internal C locale for all Date, Math,
1268 1344
 and exception handling.
1269 1345
 
... ...
@@ -1320,10 +1396,12 @@ large number of people.
1320 1396
 
1321 1397
      </p><p><span class="command"><strong>Implementation Status:</strong></span>
1322 1398
 
1323
-Currently, the only mitigation against performance fingerprinting is to
1399
+Currently, the our mitigation against performance fingerprinting is to
1324 1400
 disable <a class="ulink" href="http://www.w3.org/TR/navigation-timing/" target="_top">Navigation
1325 1401
 Timing</a> through the Firefox preference
1326
-<span class="command"><strong>dom.enable_performance</strong></span>.
1402
+<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
1403
+Video Statistics</a> API extensions via the preference
1404
+<span class="command"><strong>media.video_stats.enabled</strong></span>.
1327 1405
 
1328 1406
      </p></li><li class="listitem">Keystroke Fingerprinting
1329 1407
      <p>
... ...
@@ -1347,8 +1425,8 @@ characteristics of the operating system type may leak into content, and the
1347 1425
 comparatively low contribution of OS to overall entropy. In particular, there
1348 1426
 are likely to be many ways to measure the differences in widget size,
1349 1427
 scrollbar size, and other rendered details on a page. Also, directly exported
1350
-OS routines, such as the Math library, expose differences in their
1351
-implementations due to these results.
1428
+OS routines (such as those from the standard C math library) expose
1429
+differences in their implementations through their return values.
1352 1430
 
1353 1431
      </p><p><span class="command"><strong>Design Goal:</strong></span>
1354 1432
 
... ...
@@ -1362,26 +1440,27 @@ tag on our bug tracker</a>.
1362 1440
 
1363 1441
      </p><p><span class="command"><strong>Implementation Status:</strong></span>
1364 1442
 
1365
-At least two HTML5 features have different implementation status across the
1366
-major OS vendors: the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/DOM/window.navigator.battery" target="_top">Battery
1367
-API</a> and the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/DOM/window.navigator.connection" target="_top">Network
1368
-Connection API</a>. We disable these APIs through the Firefox preferences
1369
-<span class="command"><strong>dom.battery.enabled</strong></span> and
1370
-<span class="command"><strong>dom.network.enabled</strong></span>. 
1443
+At least three HTML5 features have different implementation status across the
1444
+major OS vendors and/or the underlying hardware: the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/DOM/window.navigator.battery" target="_top">Battery
1445
+API</a>, the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/DOM/window.navigator.connection" target="_top">Network
1446
+Connection API</a>, and the <a class="ulink" href="https://wiki.mozilla.org/Sensor_API" target="_top">Sensor API</a>. We disable these APIs through the Firefox preferences
1447
+<span class="command"><strong>dom.battery.enabled</strong></span>,
1448
+<span class="command"><strong>dom.network.enabled</strong></span>, and
1449
+<span class="command"><strong>device.sensors.enabled</strong></span>. 
1371 1450
 
1372
-     </p></li></ol></div></div><p>
1451
+     </p></li></ol></div><p>
1373 1452
 For more details on fingerprinting bugs and enhancements, see the <a class="ulink" href="https://trac.torproject.org/projects/tor/query?keywords=~tbb-fingerprinting&amp;status=!closed" target="_top">tbb-fingerprinting tag in our bug tracker</a>
1374
-  </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="new-identity"></a>4.7. Long-Term Unlinkability via "New Identity" button</h3></div></div></div><p>
1453
+   </p></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="new-identity"></a>4.7. Long-Term Unlinkability via "New Identity" button</h3></div></div></div><p>
1375 1454
 
1376 1455
 In order to avoid long-term linkability, we provide a "New Identity" context
1377 1456
 menu option in Torbutton. This context menu option is active if Torbutton can
1378 1457
 read the environment variables $TOR_CONTROL_PASSWD and $TOR_CONTROL_PORT.
1379 1458
 
1380
-   </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60545136"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
1459
+   </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp54050880"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
1381 1460
 
1382 1461
 All linkable identifiers and browser state MUST be cleared by this feature.
1383 1462
 
1384
-    </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60546384"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1463
+    </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp54052128"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1385 1464
 
1386 1465
 First, Torbutton disables Javascript in all open tabs and windows by using
1387 1466
 both the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIDocShell#Attributes" target="_top">browser.docShell.allowJavascript</a>
... ...
@@ -1409,8 +1488,13 @@ After the state is cleared, we then close all remaining HTTP keep-alive
1409 1488
 connections and then send the NEWNYM signal to the Tor control port to cause a
1410 1489
 new circuit to be created.
1411 1490
      </p><p>
1491
+
1412 1492
 Finally, a fresh browser window is opened, and the current browser window is
1413
-closed (this does not spawn a new Firefox process, only a new window).
1493
+closed (this does not spawn a new Firefox process, only a new window). Upon
1494
+the close of the final window, an unload handler is fired to invoke the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/Mozilla/Tech/XPCOM/Reference/Interface/nsIDOMWindowUtils#garbageCollect%28%29" target="_top">garbage
1495
+collector</a>, which has the effect of immediately purging any blob:UUID
1496
+URLs that were created by website content via <a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL" target="_top">URL.createObjectURL</a>.
1497
+
1414 1498
      </p></blockquote></div><div class="blockquote"><blockquote class="blockquote">
1415 1499
 If the user chose to "protect" any cookies by using the Torbutton Cookie
1416 1500
 Protections UI, those cookies are not cleared as part of the above.
... ...
@@ -1423,45 +1507,58 @@ privacy and security issues.
1423 1507
    </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a id="security-slider"></a><span class="command"><strong>Security Slider</strong></span><p>
1424 1508
 
1425 1509
 In order to provide vulnerability surface reduction for users that need high
1426
-security, we have implemented a "Security Slider" that essentially represents a
1427
-tradeoff between usability and security. Using metrics collected from
1428
-Mozilla's bug tracker, we analyzed the vulnerability counts of core components,
1429
-and used <a class="ulink" href="https://github.com/iSECPartners/publications/tree/master/reports/Tor%20Browser%20Bundle" target="_top">information
1510
+security, we have implemented a "Security Slider" to allow users to make a
1511
+tradeoff between usability and security while minimizing the total number of
1512
+choices (to reduce fingerprinting). Using metrics collected from
1513
+Mozilla's bug tracker, we analyzed the vulnerability counts of core
1514
+components, and used <a class="ulink" href="https://github.com/iSECPartners/publications/tree/master/reports/Tor%20Browser%20Bundle" target="_top">information
1430 1515
 gathered from a study performed by iSec Partners</a> to inform which
1431 1516
 features should be disabled at which security levels.
1432 1517
 
1433 1518
      </p><p>
1434 1519
 
1435
-The Security Slider consists of four positions. At the lowest security level
1436
-(the default), we disable
1437
-<span class="command"><strong>gfx.font_rendering.graphite.enabled</strong></span> for Latin locales, as
1438
-well as <span class="command"><strong>gfx.font_rendering.graphite.enabled</strong></span>. At the
1439
-medium-low level, we disable most Javascript JIT and related optimizations
1440
-(<span class="command"><strong>javascript.options.ion.content</strong></span>,
1441
-<span class="command"><strong>javascript.options.typeinference</strong></span>,
1442
-<span class="command"><strong>javascript.options.asmjs</strong></span>). We also make HTML5 media
1443
-click-to-play (<span class="command"><strong>noscript.forbidMedia</strong></span>), and disable WebAudio
1444
-(<span class="command"><strong>media.webaudio.enabled</strong></span>). At the medium-high level, we
1445
-disable the baseline JIT
1446
-(<span class="command"><strong>javascript.options.baselinejit.content</strong></span>), disable
1447
-Javascript entirely all elements that are loaded when the URL bar is not
1448
-HTTPS (<span class="command"><strong>noscript.globalHttpsWhitelist</strong></span>), and fully disable
1449
-graphite font rendering for all locales
1450
-(<span class="command"><strong>gfx.font_rendering.graphite.enable</strong></span>). At the highest level,
1451
-Javascript is fully disabled (<span class="command"><strong>noscript.global</strong></span>), as well as
1452
-all non-WebM HTML5 codecs (<span class="command"><strong>media.ogg.enabled</strong></span>,
1453
-<span class="command"><strong>media.opus.enabled</strong></span>, <span class="command"><strong>media.opus.enabled</strong></span>,
1454
-<span class="command"><strong>media.DirectShow.enabled</strong></span>,
1455
-<span class="command"><strong>media.wave.enabled</strong></span>, and
1456
-<span class="command"><strong>media.apple.mp3.enabled</strong></span>).
1457
-
1458
-     </p></li><li class="listitem"><a id="traffic-fingerprinting-defenses"></a><span class="command"><strong>Website Traffic Fingerprinting Defenses</strong></span><p>
1520
+The Security Slider consists of four positions:
1521
+
1522
+     </p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><span class="command"><strong>Low</strong></span><p>
1523
+
1524
+At this security level, the preferences are the Tor Browser defaults.
1525
+
1526
+      </p></li><li class="listitem"><span class="command"><strong>Medium-Low</strong></span><p>
1527
+
1528
+At this security level, we disable the ION JIT
1529
+(<span class="command"><strong>javascript.options.ion.content</strong></span>), TypeInference JIT
1530
+(<span class="command"><strong>javascript.options.typeinference</strong></span>), ASM.JS
1531
+(<span class="command"><strong>javascript.options.asmjs</strong></span>), WebAudio
1532
+(<span class="command"><strong>media.webaudio.enabled</strong></span>), MathML
1533
+(<span class="command"><strong>mathml.disabled</strong></span>), block remote JAR files
1534
+(<span class="command"><strong>network.jar.block-remote-files</strong></span>), and make HTML5 audio and
1535
+video click-to-play via NoScript (<span class="command"><strong>noscript.forbidMedia</strong></span>).
1536
+
1537
+       </p></li><li class="listitem"><span class="command"><strong>Medium-High</strong></span><p>
1538
+
1539
+This security level inherits the preferences from the Medium-Low level, and
1540
+additionally disables the baseline JIT
1541
+(<span class="command"><strong>javascript.options.baselinejit.content</strong></span>), disables graphite
1542
+font rendering (<span class="command"><strong>gfx.font_rendering.graphite.enabled</strong></span>), and
1543
+only allows Javascript to run if it is loaded over HTTPS and the URL bar is
1544
+HTTPS (by setting <span class="command"><strong>noscript.global</strong></span> to false and
1545
+<span class="command"><strong>noscript.globalHttpsWhitelist</strong></span> to true).
1546
+
1547
+       </p></li><li class="listitem"><span class="command"><strong>High</strong></span><p>
1548
+
1549
+This security level inherits the preferences from the Medium-Low and
1550
+Medium-High levels, and additionally disables remote fonts
1551
+(<span class="command"><strong>noscript.forbidFonts</strong></span>), completely disables Javascript (by
1552
+unsetting <span class="command"><strong>noscript.globalHttpsWhitelist</strong></span>), and disables SVG
1553
+images (<span class="command"><strong>svg.in-content.enabled</strong></span>).
1554
+
1555
+       </p></li></ul></div></li><li class="listitem"><a id="traffic-fingerprinting-defenses"></a><span class="command"><strong>Website Traffic Fingerprinting Defenses</strong></span><p>
1459 1556
 
1460 1557
 <a class="link" href="#website-traffic-fingerprinting">Website Traffic
1461 1558
 Fingerprinting</a> is a statistical attack to attempt to recognize specific
1462 1559
 encrypted website activity.
1463 1560
 
1464
-     </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60574784"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1561
+     </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp54085840"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1465 1562
 
1466 1563
 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
1467 1564
 for classification. This mechanism would either impact the true and false
... ...
@@ -1483,8 +1580,8 @@ Congestion-Sensitive BUFLO</a>. It may be also possible to <a class="ulink" href
1483 1580
 defenses</a> such that they only use existing spare Guard bandwidth capacity in the Tor
1484 1581
 network, making them also effectively no-overhead.
1485 1582
 
1486
-     </p></blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60581680"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1487
-Currently, we patch Firefox to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/27ef32d509ed1c9eeb28f7affee0f9ba11773f72" target="_top">randomize
1583
+     </p></blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp54092736"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1584
+Currently, we patch Firefox to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&amp;id=20a59cec9886cf2575b1fd8e92b43e31ba053fbd" target="_top">randomize
1488 1585
 pipeline order and depth</a>. Unfortunately, pipelining is very fragile.
1489 1586
 Many sites do not support it, and even sites that advertise support for
1490 1587
 pipelining may simply return error codes for successive requests, effectively
... ...
@@ -1493,7 +1590,7 @@ off and reduce or eliminate the pipeline if this happens. These
1493 1590
 shortcomings and fallback behaviors are the primary reason that Google
1494 1591
 developed SPDY as opposed simply extending HTTP to improve pipelining. It
1495 1592
 turns out that we could actually deploy exit-side proxies that allow us to
1496
-<a class="ulink" href="https://gitweb.torproject.org/torspec.git/blob/HEAD:/proposals/ideas/xxx-using-spdy.txt" target="_top">use
1593
+<a class="ulink" href="https://gitweb.torproject.org/torspec.git/tree/proposals/ideas/xxx-using-spdy.txt" target="_top">use
1497 1594
 SPDY from the client to the exit node</a>. This would make our defense not
1498 1595
 only free, but one that actually <span class="emphasis"><em>improves</em></span> performance.
1499 1596
 
... ...
@@ -1535,7 +1632,7 @@ date.
1535 1632
 
1536 1633
      </p><p>
1537 1634
 
1538
-We also make use of the in-browser Mozilla updater, and have <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/777695d09e3cff4c79c48839e1c9d5102b772d6f" target="_top">patched
1635
+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-31.6.0esr-4.5-1&amp;id=bcf51aae541fc28de251924ce9394224bd2b814c" target="_top">patched
1539 1636
 the updater</a> to avoid sending OS and Kernel version information as part
1540 1637
 of its update pings.
1541 1638
 
... ...
@@ -1548,7 +1645,7 @@ contend with. For this reason, we have deployed a build system
1548 1645
 that allows anyone to use our source code to reproduce byte-for-byte identical
1549 1646
 binary packages to the ones that we distribute.
1550 1647
 
1551
-  </p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp60597904"></a>5.1. Achieving Binary Reproducibility</h3></div></div></div><p>
1648
+  </p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp54108896"></a>5.1. Achieving Binary Reproducibility</h3></div></div></div><p>
1552 1649
 
1553 1650
 The GNU toolchain has been working on providing reproducible builds for some
1554 1651
 time, however a large software project such as Firefox typically ends up
... ...
@@ -1598,9 +1695,9 @@ The fix for this is to perform an additional sorting step on the input list
1598 1695
 for archives, but care must be taken to instruct libc and other sorting routines
1599 1696
 to use a fixed locale to determine lexicographic ordering, or machines with
1600 1697
 different locale settings will produce different sort results. We chose the
1601
-'C' locale for this purpose. We created wrapper scripts for <a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/blob/HEAD:/gitian/build-helpers/dtar.sh" target="_top">tar</a>,
1602
-<a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/blob/HEAD:/gitian/build-helpers/dzip.sh" target="_top">zip</a>,
1603
-and <a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/blob/HEAD:/gitian/build-helpers/ddmg.sh" target="_top">DMG</a>
1698
+'C' locale for this purpose. We created wrapper scripts for <a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/gitian/build-helpers/dtar.sh" target="_top">tar</a>,
1699
+<a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/gitian/build-helpers/dzip.sh" target="_top">zip</a>,
1700
+and <a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/gitian/build-helpers/ddmg.sh" target="_top">DMG</a>
1604 1701
 to aid in reproducible archive creation.
1605 1702
 
1606 1703
     </p></li><li class="listitem">Uninitialized memory in toolchain/archivers
... ...
@@ -1609,7 +1706,7 @@ to aid in reproducible archive creation.
1609 1706
 We ran into difficulties with both binutils and the DMG archive script using
1610 1707
 uninitialized memory in certain data structures that ended up written to disk.
1611 1708
 Our binutils fixes were merged upstream, but the DMG archive fix remains an
1612
-<a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/blob/HEAD:/gitian/patches/libdmg.patch" target="_top">independent
1709
+<a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/gitian/patches/libdmg.patch" target="_top">independent
1613 1710
 patch</a>.
1614 1711
 
1615 1712
     </p></li><li class="listitem">Fine-grained timestamps and timezone leaks
... ...
@@ -1618,7 +1715,7 @@ patch</a>.
1618 1715
 The standard way of controlling timestamps in Gitian is to use libfaketime,
1619 1716
 which hooks time-related library calls to provide a fixed timestamp. However,
1620 1717
 due to our use of wine to run py2exe for python-based pluggable transports,
1621
-pyc timestamps had to be address with an additional <a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/blob/HEAD:/gitian/build-helpers/pyc-timestamp.sh" target="_top">helper
1718
+pyc timestamps had to be address with an additional <a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/gitian/build-helpers/pyc-timestamp.sh" target="_top">helper
1622 1719
 script</a>. The timezone leaks were addressed by setting the
1623 1720
 <span class="command"><strong>TZ</strong></span> environment variable to UTC in our descriptors.
1624 1721
 
... ...
@@ -1665,7 +1762,7 @@ unitialized memory</a> that only appear in LXC mode, as well as
1665 1762
 <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/12240" target="_top">oddities related to
1666 1763
 time-based dependency tracking</a> that only appear in LXC containers.
1667 1764
 
1668
-   </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp60632800"></a>5.2. Package Signatures and Verification</h3></div></div></div><p>
1765
+   </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp54129600"></a>5.2. Package Signatures and Verification</h3></div></div></div><p>
1669 1766
 
1670 1767
 The build process produces a single sha256sums.txt file that contains a sorted
1671 1768
 list of the SHA-256 hashes of every package produced for that build version. Each
... ...
@@ -1693,13 +1790,12 @@ consensus, and encoding the package hashes in the Bitcoin blockchain.
1693 1790
 
1694 1791
      </p><p>
1695 1792
 
1696
-At the time of this writing, we do not yet support native code signing for Mac
1697
-OS or Windows. Because these signatures are embedded in the actual packages,
1698
-and by their nature are based on non-public key material, providing native
1699
-code-signed packages while still preserving ease of reproducibility
1700
-verification has not yet been achieved.
1793
+The Windows releases are also signed by a hardware token provided by Digicert.
1794
+In order to verify package integrity, the signature must be stripped off using
1795
+the osslsigncode tool, as described on the <a class="ulink" href="https://www.torproject.org/docs/verifying-signatures.html.en#BuildVerification" target="_top">Signature
1796
+Verification</a> page.
1701 1797
 
1702
-    </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp60636736"></a>5.3. Anonymous Verification</h3></div></div></div><p>
1798
+    </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp54134112"></a>5.3. Anonymous Verification</h3></div></div></div><p>
1703 1799
 
1704 1800
 Due to the fact that bit-identical packages can be produced by anyone, the
1705 1801
 security of this build system extends beyond the security of the official
... ...
@@ -1718,6 +1814,22 @@ the public builders/signers, hopefully using a pseudonym or our anonymous
1718 1814
 bug tracker account, to avoid revealing the fact that they are a build
1719 1815
 verifier.
1720 1816
 
1817
+   </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="update-safety"></a>5.4. Update Safety</h3></div></div></div><p>
1818
+
1819
+We make use of the Firefox updater in order to provide automatic updates to
1820
+users. We make use of certificate pinning to ensure that update checks
1821
+be tampered with, and we sign the individual MAR update files with an offline
1822
+signing key.
1823
+
1824
+   </p><p>
1825
+
1826
+The Firefox updater also has code to ensure that it can reliably access the
1827
+update server to prevent availability attacks, and complains to the user of 48
1828
+hours go by without a successful response from the server. Additionally, we
1829
+use Tor's SOCKS username and password isolation to ensure that every new
1830
+request to the updater traverses a separate circuit, to avoid holdback attacks
1831
+by exit nodes.
1832
+
1721 1833
    </p></div></div><div class="appendix"><h2 class="title" style="clear: both"><a id="Transparency"></a>A. Towards Transparency in Navigation Tracking</h2><p>
1722 1834
 
1723 1835
 The <a class="link" href="#privacy" title="2.2. Privacy Requirements">privacy properties</a> of Tor Browser are based
... ...
@@ -1815,7 +1927,7 @@ possible for us to <a class="ulink" href="https://trac.torproject.org/projects/t
1815 1927
 ourselves</a>, as they are comparatively rare and can be handled with site
1816 1928
 permissions.
1817 1929
 
1818
-   </p></li></ol></div></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp60669376"></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>
1930
+   </p></li></ol></div></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp54168528"></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>
1819 1931
 
1820 1932
 Web-Send is a browser-based link sharing and federated login widget that is
1821 1933
 designed to operate without relying on third-party tracking or abusing other
1822 1934