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"><<a class="email" href="mailto:mikeperry#torproject org">mikeperry#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Erinn</span> <span class="surname">Clark</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:erinn#torproject org">erinn#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Steven</span> <span class="surname">Murdoch</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:sjmurdoch#torproject org">sjmurdoch#torproject org</a>></code></p></div></div></div></div><div><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"><<a class="email" href="mailto:mikeperry#torproject org">mikeperry#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Erinn</span> <span class="surname">Clark</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:erinn#torproject org">erinn#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Steven</span> <span class="surname">Murdoch</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:sjmurdoch#torproject org">sjmurdoch#torproject org</a>></code></p></div></div></div></div><div><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 "New Identity" 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&small=1&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 |