Update TBB design doc based on review comments.
Mike Perry

Mike Perry commited on 2013-03-08 03:42:45
Zeige 1 geänderte Dateien mit 204 Einfügungen und 46 Löschungen.

... ...
@@ -1,6 +1,6 @@
1 1
 <?xml version="1.0" encoding="UTF-8"?>
2 2
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
-<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.75.2" /></head><body><div class="article" title="The Design and Implementation of the Tor Browser [DRAFT]"><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">Feb 23 2013</p></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="#idp1435840">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="#adversarygoals">3.1. Adversary Goals</a></span></dt><dt><span class="sect2"><a href="#adversarypositioning">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="#firefox-patches">4.8. Description of Firefox Patches</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="#idp5757152">A.2. Promising Standards</a></span></dt></dl></dd></dl></div><div class="sect1" title="1. Introduction"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp1435840"></a>1. Introduction</h2></div></div></div><p>
3
+<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.76.1" /></head><body><div class="article" title="The Design and Implementation of the Tor Browser [DRAFT]"><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">March 7 2013</p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl><dt><span class="sect1"><a href="#idp28773808">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="#adversarygoals">3.1. Adversary Goals</a></span></dt><dt><span class="sect2"><a href="#adversarypositioning">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">4.8. Other Security Measures</a></span></dt><dt><span class="sect2"><a href="#firefox-patches">4.9. Description of Firefox Patches</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="#idp31471328">A.2. Promising Standards</a></span></dt></dl></dd></dl></div><div class="sect1" title="1. Introduction"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp28773808"></a>1. Introduction</h2></div></div></div><p>
4 4
 
5 5
 This document describes the <a class="link" href="#adversary" title="3. Adversary Model">adversary model</a>,
6 6
 <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 2.3.25-4
... ...
@@ -16,7 +16,7 @@ adversary currently addressed by the major browsers.
16 16
   </p><div class="sect2" title="1.1. Browser Component Overview"><div class="titlepage"><div><div><h3 class="title"><a id="components"></a>1.1. Browser Component Overview</h3></div></div></div><p>
17 17
 
18 18
 The Tor Browser is based on <a class="ulink" href="https://www.mozilla.org/en-US/firefox/organizations/" target="_top">Mozilla's Extended
19
-Support Release (ESR) Firefox branch</a>. We have a <a class="link" href="#firefox-patches" title="4.8. Description of Firefox Patches">series of patches</a> against this browser to
19
+Support Release (ESR) Firefox branch</a>. We have a <a class="link" href="#firefox-patches" title="4.9. Description of Firefox Patches">series of patches</a> against this browser to
20 20
 enhance privacy and security. Browser behavior is additionally augmented
21 21
 through the <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/tree/master" target="_top">Torbutton
22 22
 extension</a>, though we are in the process of moving this
... ...
@@ -70,9 +70,13 @@ in order for Tor to support the use of a particular browser.
70 70
    </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a class="link" href="#proxy-obedience" title="4.1. Proxy Obedience"><span class="command"><strong>Proxy
71 71
 Obedience</strong></span></a><p>The browser
72 72
 MUST NOT bypass Tor proxy settings for any content.</p></li><li class="listitem"><a class="link" href="#state-separation" title="4.2. State Separation"><span class="command"><strong>State
73
-Separation</strong></span></a><p>The browser MUST NOT provide any stored state to the content window
74
-from other browsers or other browsing modes, including shared state from
75
-plugins, machine identifiers, and TLS session state.
73
+Separation</strong></span></a><p>
74
+
75
+The browser MUST NOT provide the content window with any state from any other
76
+browsers or any non-Tor browsing modes. This includes shared state from
77
+independent plugins, and shared state from Operating System implementations of
78
+TLS and other support libraries.
79
+
76 80
 </p></li><li class="listitem"><a class="link" href="#disk-avoidance" title="4.3. Disk Avoidance"><span class="command"><strong>Disk
77 81
 Avoidance</strong></span></a><p>
78 82
 
... ...
@@ -135,8 +139,8 @@ linkability from fingerprinting browser behavior.
135 139
   </p></li><li class="listitem"><a class="link" href="#new-identity" title="4.7. Long-Term Unlinkability via &quot;New Identity&quot; button"><span class="command"><strong>Long-Term
136 140
 Unlinkability</strong></span></a><p>
137 141
 
138
-The browser SHOULD provide an obvious, easy way to remove all of its
139
-authentication tokens and browser state and obtain a fresh identity.
142
+The browser MUST provide an obvious, easy way for the user to remove all of
143
+its authentication tokens and browser state and obtain a fresh identity.
140 144
 Additionally, the browser SHOULD clear linkable state by default automatically
141 145
 upon browser restart, except at user option.
142 146
 
... ...
@@ -160,7 +164,7 @@ User model breakage was one of the <a class="ulink" href="https://blog.torprojec
160 164
 of Torbutton</a>: Even if users managed to install everything properly,
161 165
 the toggle model was too hard for the average user to understand, especially
162 166
 in the face of accumulating tabs from multiple states crossed with the current
163
-tor-state of the browser. 
167
+Tor-state of the browser. 
164 168
 
165 169
       </p></li><li class="listitem"><span class="command"><strong>Favor the implementation mechanism least likely to
166 170
 break sites</strong></span><p>
... ...
@@ -182,21 +186,22 @@ contribute to fingerprinting.
182 186
 Therefore, if plugins are to be enabled in private browsing modes, they must
183 187
 be restricted from running automatically on every page (via click-to-play
184 188
 placeholders), and/or be sandboxed to restrict the types of system calls they
185
-can execute. If the user decides to craft an exemption to allow a plugin to be
186
-used, it MUST only apply to the top level url bar domain, and not to all sites,
187
-to reduce cross-origin fingerprinting linkability.
189
+can execute. If the user agent allows the user to craft an exemption to allow
190
+a plugin to be used automatically, it must only apply to the top level url bar
191
+domain, and not to all sites, to reduce cross-origin fingerprinting
192
+linkability.
188 193
 
189 194
        </p></li><li class="listitem"><span class="command"><strong>Minimize Global Privacy Options</strong></span><p>
190 195
 
191 196
 <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3100" target="_top">Another
192 197
 failure of Torbutton</a> was the options panel. Each option
193 198
 that detectably alters browser behavior can be used as a fingerprinting tool.
194
-Similarly, all extensions <a class="ulink" href="http://blog.chromium.org/2010/06/extensions-in-incognito.html" target="_top">SHOULD be
195
-disabled in the mode</a> except as an opt-in basis. We SHOULD NOT load
199
+Similarly, all extensions <a class="ulink" href="http://blog.chromium.org/2010/06/extensions-in-incognito.html" target="_top">should be
200
+disabled in the mode</a> except as an opt-in basis. We should not load
196 201
 system-wide and/or Operating System provided addons or plugins.
197 202
 
198 203
      </p><p>
199
-Instead of global browser privacy options, privacy decisions SHOULD be made
204
+Instead of global browser privacy options, privacy decisions should be made
200 205
 <a class="ulink" href="https://wiki.mozilla.org/Privacy/Features/Site-based_data_management_UI" target="_top">per
201 206
 url bar origin</a> to eliminate the possibility of linkability
202 207
 between domains. For example, when a plugin object (or a Javascript access of
... ...
@@ -206,7 +211,7 @@ goes for exemptions to third party cookie policy, geo-location, and any other
206 211
 privacy permissions.
207 212
      </p><p>
208 213
 If the user has indicated they wish to record local history storage, these
209
-permissions can be written to disk. Otherwise, they MUST remain memory-only. 
214
+permissions can be written to disk. Otherwise, they should remain memory-only. 
210 215
      </p></li><li class="listitem"><span class="command"><strong>No filters</strong></span><p>
211 216
 
212 217
 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
... ...
@@ -300,6 +305,12 @@ through Tor for marketing purposes.
300 305
 The adversary can also inject malicious content at the user's upstream router
301 306
 when they have Tor disabled, in an attempt to correlate their Tor and Non-Tor
302 307
 activity.
308
+     </p><p>
309
+
310
+Additionally, at this position the adversary can block Tor, or attempt to
311
+recognize the traffic patterns of specific web pages at the entrance to the Tor
312
+network. 
313
+
303 314
      </p></li><li class="listitem"><span class="command"><strong>Physical Access</strong></span><p>
304 315
 Some users face adversaries with intermittent or constant physical access.
305 316
 Users in Internet cafes, for example, face such a threat. In addition, in
... ...
@@ -421,7 +432,53 @@ queries</a> can be inserted to gather information about the desktop size,
421 432
 widget size, display type, DPI, user agent type, and other information that
422 433
 was formerly available only to Javascript.
423 434
 
424
-     </p></li></ol></div></li><li class="listitem"><span class="command"><strong>Remotely or locally exploit browser and/or
435
+     </p></li></ol></div></li><li class="listitem"><a id="website-traffic-fingerprinting"></a><span class="command"><strong>Website traffic fingerprinting</strong></span><p>
436
+
437
+Website traffic fingerprinting is an attempt by the adversary to recognize the
438
+encrypted traffic patterns of specific websites. The most comprehensive study
439
+of the statistical properties of this attack against Tor was done by <a class="ulink" href="http://lorre.uni.lu/~andriy/papers/acmccs-wpes11-fingerprinting.pdf" target="_top">Panchenko
440
+et al</a>. Unfortunately, the publication bias in academia has encouraged
441
+the production of a number of follow-on attack papers claiming "improved"
442
+success rates using this attack in recognizing only very small numbers of
443
+websites. Despite these subsequent results, we are skeptical of the efficacy
444
+of this attack in a real world scenario, especially in the face of any defenses.
445
+
446
+     </p><p>
447
+
448
+In general, with machine learning, as you increase the number of
449
+categories to classify with few reliable features to extract, either true
450
+positive accuracy goes down or the false positive rate goes up.
451
+
452
+     </p><p>
453
+
454
+
455
+In the case of this attack, the key factors that increase the classification
456
+requirements (and thus hinder a real world adversary who attempts this attack)
457
+are large numbers of dynamically generated pages, partially cached content,
458
+and non-web activity in the "Open World" scenario of the entire Tor network.
459
+This large set of classification categories is further confounded by a poor
460
+and often noisy available featureset, which is also realtively easy for the
461
+defender to manipulate.
462
+
463
+     </p><p>
464
+
465
+In fact, the ocean of possible Tor Internet activity makes it a certainty that
466
+an adversary attempting to classify a large number of sites with poor feature
467
+resolution will ultimately be overwhelmed by false positives. This problem is
468
+known in the IDS literature as the <a class="ulink" href="http://www.raid-symposium.org/raid99/PAPERS/Axelsson.pdf" target="_top">Base Rate
469
+Fallacy</a>, and it is the primary reason that anomaly and activity
470
+classification-based IDS and antivirus systems have failed to materialize in
471
+the marketplace.
472
+
473
+     </p><p>
474
+
475
+Still, we do not believe that these issues are enough to dismiss the attack
476
+outright. But we do believe these factors make it both worthwhile and
477
+effective to <a class="link" href="#traffic-fingerprinting-defenses">deploy
478
+light-weight defenses</a> that reduce the accuracy of this attack by
479
+further contributing noise to hinder successful feature extraction.
480
+
481
+     </p></li><li class="listitem"><span class="command"><strong>Remotely or locally exploit browser and/or
425 482
 OS</strong></span><p>
426 483
 
427 484
 Last, but definitely not least, the adversary can exploit either general
... ...
@@ -513,30 +570,37 @@ time, and to reduce the fingerprintability of the installed plugin list, we
513 570
 also patch the Firefox source code to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0005-Block-all-plugins-except-flash.patch" target="_top">prevent the load of any plugins except
514 571
 for Flash and Gnash</a>.
515 572
 
516
- </p></li><li class="listitem">External App Blocking
573
+ </p></li><li class="listitem">External App Blocking and Drag Event Filtering
517 574
   <p>
518
-External apps, if launched automatically, can be induced to load files that
519
-perform network activity. In order to prevent this, Torbutton installs a
520
-component to 
521
-<a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/external-app-blocker.js" target="_top">
522
-provide the user with a popup</a> whenever the browser attempts to
523
-launch a helper app. 
524
-
525
-Additionally, due to an issue with Ubuntu Unity, url-based drag and drop is
526
-filtered by this component. Unity was pre-fetching URLs without using the
527
-browser's proxy settings during a drag action, even if the drop was ultimately
528
-canceled by the user. A similar issue was discovered on Mac OS.
575
+
576
+External apps can be induced to load files that perform network activity.
577
+Unfortunately, there are cases where such apps can be launched automatically
578
+with little to no user input. In order to prevent this, Torbutton installs a
579
+component to <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/external-app-blocker.js" target="_top">
580
+provide the user with a popup</a> whenever the browser attempts to launch
581
+a helper app.
582
+
583
+  </p><p>
584
+
585
+Additionally, modern desktops now pre-emptively fetch any URLs in Drag and
586
+Drop events as soon as the drag is initiated. This download happens
587
+independent of the browser's Tor settings, and can be triggered by something
588
+as simple as holding the mouse button down for slightly too long while
589
+clicking on an image link. We had to patch Firefox to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0018-Emit-observer-event-to-filter-the-Drag-Drop-url-list.patch" target="_top">emit
590
+an observer event during dragging</a> to allow us to filter the drag
591
+events from Torbutton before the OS downloads the URLs the events contained.
592
+
529 593
   </p></li></ol></div></div><div class="sect2" title="4.2. State Separation"><div class="titlepage"><div><div><h3 class="title"><a id="state-separation"></a>4.2. State Separation</h3></div></div></div><p>
530 594
 Tor Browser State is separated from existing browser state through use of a
531 595
 custom Firefox profile. Furthermore, plugins are disabled, which prevents
532 596
 Flash cookies from leaking from a pre-existing Flash directory.
533
-   </p></div><div class="sect2" title="4.3. Disk Avoidance"><div class="titlepage"><div><div><h3 class="title"><a id="disk-avoidance"></a>4.3. Disk Avoidance</h3></div></div></div><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5528304"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
597
+   </p></div><div class="sect2" title="4.3. Disk Avoidance"><div class="titlepage"><div><div><h3 class="title"><a id="disk-avoidance"></a>4.3. Disk Avoidance</h3></div></div></div><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="idp31218608"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
534 598
 
535 599
 The User Agent MUST (at user option) prevent all disk records of browser activity.
536 600
 The user should be able to optionally enable URL history and other history
537 601
 features if they so desire. 
538 602
 
539
-    </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5529664"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
603
+    </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="idp31219968"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
540 604
 
541 605
 We achieve this goal through several mechanisms. First, we set the Firefox
542 606
 Private Browsing preference
... ...
@@ -552,7 +616,7 @@ download history from being recorded</a>, and
552 616
 <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0006-Make-content-pref-service-memory-only-clearable.patch" target="_top">prevent
553 617
 the content preferences service from recording site zoom</a>.
554 618
 
555
-For more details on these patches, <a class="link" href="#firefox-patches" title="4.8. Description of Firefox Patches">see the
619
+For more details on these patches, <a class="link" href="#firefox-patches" title="4.9. Description of Firefox Patches">see the
556 620
 Firefox Patches section</a>.
557 621
 
558 622
     </blockquote></div><div class="blockquote"><blockquote class="blockquote">
... ...
@@ -616,7 +680,7 @@ the url bar origin for which browser state exists, possibly with a
616 680
 context-menu option to drill down into specific types of state or permissions.
617 681
 An example of this simplification can be seen in Figure 1.
618 682
 
619
-   </p><div class="figure"><a id="idp5553664"></a><p class="title"><b>Figure 1. Improving the Privacy UI</b></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>
683
+   </p><div class="figure"><a id="idp31244048"></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>
620 684
 
621 685
 This example UI is a mock-up of how isolating identifiers to the URL bar
622 686
 origin can simplify the privacy UI for all data - not just cookies. Once
... ...
@@ -962,7 +1026,7 @@ a Firefox patch</a>. We create two prefs,
962 1026
 <span class="command"><strong>browser.display.max_font_attempts</strong></span> and
963 1027
 <span class="command"><strong>browser.display.max_font_count</strong></span> for this purpose. Once these
964 1028
 limits are reached, the browser behaves as if
965
-<span class="command"><strong>browser.display.use_document_fonts</strong></span> was reached. We are
1029
+<span class="command"><strong>browser.display.use_document_fonts</strong></span> was set. We are
966 1030
 still working to determine optimal values for these prefs.
967 1031
 
968 1032
      </p><p>
... ...
@@ -1001,6 +1065,14 @@ DOM events to return content window relative points</a>. We also patch
1001 1065
 Firefox to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0023-Do-not-expose-system-colors-to-CSS-or-canvas.patch" target="_top">report
1002 1066
 a fixed set of system colors to content window CSS</a>.
1003 1067
 
1068
+     </p><p>
1069
+
1070
+To further reduce resolution-based fingerprinting, we are <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/7256" target="_top">investigating
1071
+zoom/viewport-based mechanisms</a> that might allow us to always report
1072
+the same desktop resolution regardless of the actual size of the content
1073
+window, and simply scale to make up the difference. However, the complexity
1074
+and rendering impact of such a change is not yet known.
1075
+
1004 1076
      </p></li><li class="listitem">User Agent and HTTP Headers
1005 1077
      <p><span class="command"><strong>Design Goal:</strong></span>
1006 1078
 
... ...
@@ -1094,11 +1166,11 @@ In order to avoid long-term linkability, we provide a "New Identity" context
1094 1166
 menu option in Torbutton. This context menu option is active if Torbutton can
1095 1167
 read the environment variables $TOR_CONTROL_PASSWD and $TOR_CONTROL_PORT.
1096 1168
 
1097
-   </p><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5670816"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
1169
+   </p><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="idp31362992"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote">
1098 1170
 
1099 1171
 All linkable identifiers and browser state MUST be cleared by this feature.
1100 1172
 
1101
-    </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="idp5672064"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1173
+    </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="idp31364240"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1102 1174
 
1103 1175
 First, Torbutton disables Javascript in all open tabs and windows by using
1104 1176
 both the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIDocShell#Attributes" target="_top">browser.docShell.allowJavascript</a>
... ...
@@ -1127,7 +1199,82 @@ closed.
1127 1199
      </p></blockquote></div><div class="blockquote"><blockquote class="blockquote">
1128 1200
 If the user chose to "protect" any cookies by using the Torbutton Cookie
1129 1201
 Protections UI, those cookies are not cleared as part of the above.
1130
-    </blockquote></div></div></div><div class="sect2" title="4.8. Description of Firefox Patches"><div class="titlepage"><div><div><h3 class="title"><a id="firefox-patches"></a>4.8. Description of Firefox Patches</h3></div></div></div><p>
1202
+    </blockquote></div></div></div><div class="sect2" title="4.8. Other Security Measures"><div class="titlepage"><div><div><h3 class="title"><a id="other"></a>4.8. Other Security Measures</h3></div></div></div><p>
1203
+
1204
+In addition to the above mechanisms that are devoted to preserving privacy
1205
+while browsing, we also have a number of technical mechanisms to address other
1206
+privacy and security issues.
1207
+
1208
+   </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a id="traffic-fingerprinting-defenses"></a><span class="command"><strong>Website Traffic Fingerprinting Defenses</strong></span><p>
1209
+
1210
+<a class="link" href="#website-traffic-fingerprinting">Website Traffic
1211
+Fingerprinting</a> is a statistical attack to attempt to recognize specific
1212
+encrypted website activity.
1213
+
1214
+     </p><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="idp31376880"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1215
+
1216
+We want to deploy a mechanism that reduces the accuracy of features available
1217
+for classification. This mechanism would either impact the true and false
1218
+positive accuracy rates, <span class="emphasis"><em>or</em></span> reduce the number of webpages
1219
+that could be classified at a given accuracy rate.
1220
+
1221
+     </p><p>
1222
+
1223
+Ideally, this mechanism would be as light-weight as possible, and would be
1224
+tunable in terms of overhead. We suspect that it may even be possible to
1225
+deploy a mechanism that reduces feature extraction resolution without any
1226
+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
1227
+<a class="ulink" href="https://blog.torproject.org/blog/experimental-defense-website-traffic-fingerprinting" target="_top">better
1228
+use of HTTP pipelining and/or SPDY</a>. In the tunable/low-overhead
1229
+category, we have <a class="ulink" href="http://freehaven.net/anonbib/cache/ShWa-Timing06.pdf" target="_top">Adaptive
1230
+Padding</a> and <a class="ulink" href="http://www.cs.sunysb.edu/~xcai/fp.pdf" target="_top">
1231
+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
1232
+defenses</a> such that they only use existing spare Guard bandwidth capacity in the Tor
1233
+network.
1234
+
1235
+     </p></blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="idp31383008"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p>
1236
+Currently, we patch Firefox to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0017-Randomize-HTTP-request-order-and-pipeline-depth.patch" target="_top">randomize
1237
+pipeline order and depth</a>. Unfortunately, pipelining is very fragile.
1238
+Many sites do not support it, and even sites that advertise support for
1239
+pipelining may simply return error codes for successive requests, effectively
1240
+forcing the browser into non-pipelined behavior. Firefox also has code to back
1241
+off and reduce or eliminate the pipeline if this happens. These
1242
+shortcomings and fallback behaviors are the primary reason that Google
1243
+developed SPDY as opposed simply extending HTTP to improve pipelining.
1244
+
1245
+     </p><p>
1246
+
1247
+Knowing this, we created the defense as an <a class="ulink" href="https://blog.torproject.org/blog/experimental-defense-website-traffic-fingerprinting" target="_top">experimental
1248
+research prototype</a> to help evaluate what could be done in the best
1249
+case with full server support (ie with SPDY).  Unfortunately, the bias in
1250
+favor of compelling attack papers has caused academia to thus far ignore our
1251
+requests, instead publishing only cursory (yet "devastating") evaluations that
1252
+fail to provide even simple statistics such as the rates of actual pipeline
1253
+utilization during their evaluations.
1254
+
1255
+     </p></blockquote></div></div></li><li class="listitem"><span class="command"><strong>Privacy-preserving update notification</strong></span><p>
1256
+
1257
+In order to inform the user when their Tor Browser is out of date, we perform a
1258
+privacy-preserving update check in the asynchronously in the background. The
1259
+check uses Tor to download the file <a class="ulink" href="https://check.torproject.org/RecommendedTBBVersions" target="_top">https://check.torproject.org/RecommendedTBBVersions</a>
1260
+and searches that version list for the current value for the local preference
1261
+<span class="command"><strong>torbrowser.version</strong></span>. If the value from our preference is
1262
+present in the recommended version list, the check is considered to have
1263
+succeeded and the user is up to date. If not, it is considered to have failed
1264
+and an update is needed. The check is triggered upon browser launch, new
1265
+window, and new tab, but is rate limited so as to happen no more frequently
1266
+than once every 1.5 hours.
1267
+
1268
+     </p><p>
1269
+
1270
+If the check fails, we cache this fact, and update the Torbutton graphic to
1271
+display a flashing warning icon and insert a menu option that provides a link
1272
+to our download page. Additionally, we reset the value for the browser
1273
+homepage to point to a <a class="ulink" href="https://check.torproject.org/?lang=en-US&amp;small=1&amp;uptodate=0" target="_top">page that
1274
+informs the user</a> that their browser is out of
1275
+date.
1276
+
1277
+     </p></li></ol></div></div><div class="sect2" title="4.9. Description of Firefox Patches"><div class="titlepage"><div><div><h3 class="title"><a id="firefox-patches"></a>4.9. Description of Firefox Patches</h3></div></div></div><p>
1131 1278
 
1132 1279
 The set of patches we have against Firefox can be found in the <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/tree/maint-2.4:/src/current-patches/firefox" target="_top">current-patches directory of the torbrowser git repository</a>. They are:
1133 1280
 
... ...
@@ -1257,12 +1404,15 @@ As an
1257 1404
 defense against Website Traffic Fingerprinting</a>, we patch the standard
1258 1405
 HTTP pipelining code to randomize the number of requests in a
1259 1406
 pipeline, as well as their order.
1260
-     </p></li><li class="listitem"><a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0018-Adapt-Steven-Michaud-s-Mac-crashfix-patch.patch" target="_top">Adapt Steve Michaud's Mac crashfix patch</a><p>
1407
+     </p></li><li class="listitem"><a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0018-Emit-observer-event-to-filter-the-Drag-Drop-url-list.patch" target="_top">Emit
1408
+an observer event to filter the Drag and Drop URL list</a><p>
1261 1409
 
1262
-This patch allows us to block Drag and Drop without causing crashes on Mac OS.
1410
+This patch allows us to block external Drag and Drop events from Torbutton.
1263 1411
 We need to block Drag and Drop because Mac OS and Ubuntu both immediately load
1264 1412
 any URLs they find in your drag buffer before you even drop them (without
1265
-using your browser's proxy settings, of course).
1413
+using your browser's proxy settings, of course). This can lead to proxy bypass
1414
+during user activity that is as basic as holding down the mouse button for
1415
+slightly too long while clicking on an image link.
1266 1416
 
1267 1417
      </p></li><li class="listitem"><a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0019-Add-mozIThirdPartyUtil.getFirstPartyURI-API.patch" target="_top">Add mozIThirdPartyUtil.getFirstPartyURI() API</a><p>
1268 1418
 
... ...
@@ -1306,6 +1456,14 @@ securely and without addon conflicts.
1306 1456
 This patch prevents DOM Storage from being used to store third party tracking
1307 1457
 identifiers.
1308 1458
 
1459
+     </p></li><li class="listitem"><a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0027-Remove-This-plugin-is-disabled-barrier.patch" target="_top">Remove
1460
+"This plugin is disabled" barrier</a><p>
1461
+
1462
+This patch removes a barrier that was informing users that plugins were
1463
+disabled and providing them with a link to enable them. We felt this was poor
1464
+user experience, especially since the barrier was displayed even for sites
1465
+with dual Flash+HTML5 video players, such as YouTube.
1466
+
1309 1467
      </p></li></ol></div></div></div><div class="appendix" title="A. Towards Transparency in Navigation Tracking"><h2 class="title" style="clear: both"><a id="Transparency"></a>A. Towards Transparency in Navigation Tracking</h2><p>
1310 1468
 
1311 1469
 The <a class="link" href="#privacy" title="2.2. Privacy Requirements">privacy properties</a> of Tor Browser are based
... ...
@@ -1361,12 +1519,12 @@ source URL parameters.
1361 1519
 
1362 1520
 We believe the Referer header should be made explicit. If a site wishes to
1363 1521
 transmit its URL to third party content elements during load or during
1364
-link-click, it should have to specify this as a property of the associated
1365
-HTML tag. With an explicit property, it would then be possible for the user
1366
-agent to inform the user if they are about to click on a link that will
1367
-transmit referer information (perhaps through something as subtle as a
1368
-different color for the destination URL). This same UI notification can also
1369
-be used for links with the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/HTML/Element/a#Attributes" target="_top">"ping"</a>
1522
+link-click, it should have to specify this as a property of the associated HTML
1523
+tag. With an explicit property, it would then be possible for the user agent to
1524
+inform the user if they are about to click on a link that will transmit referer
1525
+information (perhaps through something as subtle as a different color in the
1526
+lower toolbar for the destination URL). This same UI notification can also be
1527
+used for links with the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/HTML/Element/a#Attributes" target="_top">"ping"</a>
1370 1528
 attribute.
1371 1529
 
1372 1530
   </p></li><li class="listitem">window.name
... ...
@@ -1401,7 +1559,7 @@ possible for us to <a class="ulink" href="https://trac.torproject.org/projects/t
1401 1559
 ourselves</a>, as they are comparatively rare and can be handled with site
1402 1560
 permissions.
1403 1561
 
1404
-   </p></li></ol></div></div><div class="sect1" title="A.2. Promising Standards"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp5757152"></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>
1562
+   </p></li></ol></div></div><div class="sect1" title="A.2. Promising Standards"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp31471328"></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>
1405 1563
 
1406 1564
 Web-Send is a browser-based link sharing and federated login widget that is
1407 1565
 designed to operate without relying on third-party tracking or abusing other
1408 1566