Mike Perry commited on 2015-05-06 07:40:50
Zeige 1 geänderte Dateien mit 308 Einfügungen und 181 Löschungen.
| ... | ... |
@@ -1,5 +1,5 @@ |
| 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"><<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">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> |
|
| 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"><<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">May 5th, 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="#idp64554400">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="#idp66457392">5.1. Achieving Binary Reproducibility</a></span></dt><dt><span class="sect2"><a href="#idp66479152">5.2. Package Signatures and Verification</a></span></dt><dt><span class="sect2"><a href="#idp66483680">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="#idp66520624">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="idp64554400"></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 |
| ... | ... |
@@ -129,16 +129,16 @@ to prefer one browser over another. |
| 129 | 129 |
|
| 130 | 130 |
For the purposes of the unlinkability requirements of this section as well as |
| 131 | 131 |
the descriptions in the <a class="link" href="#Implementation" title="4. Implementation">implementation |
| 132 |
-section</a>, a <span class="command"><strong>url bar origin</strong></span> means at least the |
|
| 132 |
+section</a>, a <span class="command"><strong>URL bar origin</strong></span> means at least the |
|
| 133 | 133 |
second-level DNS name. For example, for mail.google.com, the origin would be |
| 134 |
-google.com. Implementations MAY, at their option, restrict the url bar origin |
|
| 134 |
+google.com. Implementations MAY, at their option, restrict the URL bar origin |
|
| 135 | 135 |
to be the entire fully qualified domain name. |
| 136 | 136 |
|
| 137 | 137 |
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a class="link" href="#identifier-linkability" title="4.5. Cross-Origin Identifier Unlinkability"><span class="command"><strong>Cross-Origin |
| 138 | 138 |
Identifier Unlinkability</strong></span></a><p> |
| 139 | 139 |
|
| 140 |
-User activity on one url bar origin MUST NOT be linkable to their activity in |
|
| 141 |
-any other url bar origin by any third party automatically or without user |
|
| 140 |
+User activity on one URL bar origin MUST NOT be linkable to their activity in |
|
| 141 |
+any other URL bar origin by any third party automatically or without user |
|
| 142 | 142 |
interaction or approval. This requirement specifically applies to linkability |
| 143 | 143 |
from stored browser identifiers, authentication tokens, and shared state. The |
| 144 | 144 |
requirement does not apply to linkable information the user manually submits |
| ... | ... |
@@ -149,8 +149,8 @@ login in a substantial way. |
| 149 | 149 |
</p></li><li class="listitem"><a class="link" href="#fingerprinting-linkability" title="4.6. Cross-Origin Fingerprinting Unlinkability"><span class="command"><strong>Cross-Origin |
| 150 | 150 |
Fingerprinting Unlinkability</strong></span></a><p> |
| 151 | 151 |
|
| 152 |
-User activity on one url bar origin MUST NOT be linkable to their activity in |
|
| 153 |
-any other url bar origin by any third party. This property specifically applies to |
|
| 152 |
+User activity on one URL bar origin MUST NOT be linkable to their activity in |
|
| 153 |
+any other URL bar origin by any third party. This property specifically applies to |
|
| 154 | 154 |
linkability from fingerprinting browser behavior. |
| 155 | 155 |
|
| 156 | 156 |
</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 |
| ... | ... |
@@ -204,7 +204,7 @@ Therefore, if plugins are to be enabled in private browsing modes, they must |
| 204 | 204 |
be restricted from running automatically on every page (via click-to-play |
| 205 | 205 |
placeholders), and/or be sandboxed to restrict the types of system calls they |
| 206 | 206 |
can execute. If the user agent allows the user to craft an exemption to allow |
| 207 |
-a plugin to be used automatically, it must only apply to the top level url bar |
|
| 207 |
+a plugin to be used automatically, it must only apply to the top level URL bar |
|
| 208 | 208 |
domain, and not to all sites, to reduce cross-origin fingerprinting |
| 209 | 209 |
linkability. |
| 210 | 210 |
|
| ... | ... |
@@ -220,10 +220,10 @@ system-wide and/or operating system provided addons or plugins. |
| 220 | 220 |
</p><p> |
| 221 | 221 |
Instead of global browser privacy options, privacy decisions should be made |
| 222 | 222 |
<a class="ulink" href="https://wiki.mozilla.org/Privacy/Features/Site-based_data_management_UI" target="_top">per |
| 223 |
-url bar origin</a> to eliminate the possibility of linkability |
|
| 223 |
+URL bar origin</a> to eliminate the possibility of linkability |
|
| 224 | 224 |
between domains. For example, when a plugin object (or a Javascript access of |
| 225 | 225 |
window.plugins) is present in a page, the user should be given the choice of |
| 226 |
-allowing that plugin object for that url bar origin only. The same |
|
| 226 |
+allowing that plugin object for that URL bar origin only. The same |
|
| 227 | 227 |
goes for exemptions to third party cookie policy, geolocation, and any other |
| 228 | 228 |
privacy permissions. |
| 229 | 229 |
</p><p> |
| ... | ... |
@@ -241,7 +241,7 @@ third parties, rather than a list of specific URLs or hosts. |
| 241 | 241 |
</p><p> |
| 242 | 242 |
Filter-based addons can also introduce strange breakage and cause usability |
| 243 | 243 |
nightmares, and will also fail to do their job if an adversary simply |
| 244 |
-registers a new domain or creates a new url path. Worse still, the unique |
|
| 244 |
+registers a new domain or creates a new URL path. Worse still, the unique |
|
| 245 | 245 |
filter sets that each user creates or installs will provide a wealth of |
| 246 | 246 |
fingerprinting targets. |
| 247 | 247 |
</p><p> |
| ... | ... |
@@ -300,7 +300,7 @@ In some cases, the adversary may opt for a heavy-handed approach, such as |
| 300 | 300 |
seizing the computers of all Tor users in an area (especially after narrowing |
| 301 | 301 |
the field by the above two pieces of information). History records and cache |
| 302 | 302 |
data are the primary goals here. Secondary goals may include confirming |
| 303 |
-on-disk identifiers (such as hostname and disk-logged spoofed MAC adddress |
|
| 303 |
+on-disk identifiers (such as hostname and disk-logged spoofed MAC address |
|
| 304 | 304 |
history) obtained by other means. |
| 305 | 305 |
|
| 306 | 306 |
</p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="adversary-positioning"></a>3.2. Adversary Capabilities - Positioning</h3></div></div></div><p> |
| ... | ... |
@@ -553,8 +553,7 @@ are typically linked for these cases. |
| 553 | 553 |
</p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="proxy-obedience"></a>4.1. Proxy Obedience</h3></div></div></div><p> |
| 554 | 554 |
|
| 555 | 555 |
Proxy obedience is assured through the following: |
| 556 |
- </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">Firefox proxy settings, patches, and build flags |
|
| 557 |
- <p> |
|
| 556 |
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Firefox proxy settings, patches, and build flags</strong></span><p> |
|
| 558 | 557 |
|
| 559 | 558 |
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 |
| 560 | 559 |
preferences file</a> sets the Firefox proxy settings to use Tor directly |
| ... | ... |
@@ -589,16 +588,14 @@ activity in the source tree that did not use the browser proxy settings. |
| 589 | 588 |
|
| 590 | 589 |
We have verified that these settings and patches properly proxy HTTPS, OCSP, |
| 591 | 590 |
HTTP, FTP, gopher (now defunct), DNS, SafeBrowsing Queries, all JavaScript |
| 592 |
-activity, including HTML5 audio and video objects, addon updates, wifi |
|
| 591 |
+activity, including HTML5 audio and video objects, addon updates, WiFi |
|
| 593 | 592 |
geolocation queries, searchbox queries, XPCOM addon HTTPS/HTTP activity, |
| 594 | 593 |
WebSockets, and live bookmark updates. We have also verified that IPv6 |
| 595 | 594 |
connections are not attempted, through the proxy or otherwise (Tor does not |
| 596 | 595 |
yet support IPv6). We have also verified that external protocol helpers, such |
| 597 | 596 |
as SMB URLs and other custom protocol handlers are all blocked. |
| 598 | 597 |
|
| 599 |
- </p></li><li class="listitem">Disabling plugins |
|
| 600 |
- |
|
| 601 |
- <p>Plugins have the ability to make arbitrary OS system calls and <a class="ulink" href="http://decloak.net/" target="_top">bypass proxy settings</a>. This includes |
|
| 598 |
+ </p></li><li class="listitem"><span class="command"><strong>Disabling plugins</strong></span><p>Plugins have the ability to make arbitrary OS system calls and <a class="ulink" href="http://decloak.net/" target="_top">bypass proxy settings</a>. This includes |
|
| 602 | 599 |
the ability to make UDP sockets and send arbitrary data independent of the |
| 603 | 600 |
browser proxy settings. |
| 604 | 601 |
</p><p> |
| ... | ... |
@@ -619,8 +616,7 @@ prevent the load of any plugins except for Flash and Gnash</a>. Even for |
| 619 | 616 |
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&id=e5531b1baa3c96dee7d8d4274791ff393bafd241" target="_top">prevent loading them into the |
| 620 | 617 |
address space</a> until they are explicitly enabled. |
| 621 | 618 |
|
| 622 |
- </p></li><li class="listitem">External App Blocking and Drag Event Filtering |
|
| 623 |
- <p> |
|
| 619 |
+ </p></li><li class="listitem"><span class="command"><strong>External App Blocking and Drag Event Filtering</strong></span><p> |
|
| 624 | 620 |
|
| 625 | 621 |
External apps can be induced to load files that perform network activity. |
| 626 | 622 |
Unfortunately, there are cases where such apps can be launched automatically |
| ... | ... |
@@ -638,8 +634,7 @@ as simple as holding the mouse button down for slightly too long while |
| 638 | 634 |
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 |
| 639 | 635 |
Torbutton</a> before the OS downloads the URLs the events contained. |
| 640 | 636 |
|
| 641 |
- </p></li><li class="listitem">Disabling system extensions and clearing the addon whitelist |
|
| 642 |
- <p> |
|
| 637 |
+ </p></li><li class="listitem"><span class="command"><strong>Disabling system extensions and clearing the addon whitelist</strong></span><p> |
|
| 643 | 638 |
|
| 644 | 639 |
Firefox addons can perform arbitrary activity on your computer, including |
| 645 | 640 |
bypassing Tor. It is for this reason we disable the addon whitelist |
| ... | ... |
@@ -660,13 +655,13 @@ system-wide extensions (through the use of |
| 660 | 655 |
disabled, which prevents Flash cookies from leaking from a pre-existing Flash |
| 661 | 656 |
directory. |
| 662 | 657 |
|
| 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 |
+ </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="idp66162928"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 664 | 659 |
|
| 665 | 660 |
The User Agent MUST (at user option) prevent all disk records of browser activity. |
| 666 | 661 |
The user should be able to optionally enable URL history and other history |
| 667 | 662 |
features if they so desire. |
| 668 | 663 |
|
| 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 |
+ </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp66164288"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 670 | 665 |
|
| 671 | 666 |
We achieve this goal through several mechanisms. First, we set the Firefox |
| 672 | 667 |
Private Browsing preference |
| ... | ... |
@@ -718,43 +713,49 @@ To ensure TBB directory isolation, we set |
| 718 | 713 |
$HOME environment variable to be the TBB extraction directory. |
| 719 | 714 |
</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="identifier-linkability"></a>4.5. Cross-Origin Identifier Unlinkability</h3></div></div></div><p> |
| 720 | 715 |
|
| 721 |
-The Tor Browser MUST prevent a user's activity on one site from being linked |
|
| 722 |
-to their activity on another site. When this goal cannot yet be met with an |
|
| 723 |
-existing web technology, that technology or functionality is disabled. Our |
|
| 724 |
-<a class="link" href="#privacy" title="2.2. Privacy Requirements">design goal</a> is to ultimately eliminate the need to disable arbitrary |
|
| 725 |
-technologies, and instead simply alter them in ways that allows them to |
|
| 726 |
-function in a backwards-compatible way while avoiding linkability. Users |
|
| 727 |
-should be able to use federated login of various kinds to explicitly inform |
|
| 728 |
-sites who they are, but that information should not transparently allow a |
|
| 729 |
-third party to record their activity from site to site without their prior |
|
| 730 |
-consent. |
|
| 716 |
+The Cross-Origin Identifier Unlinkability design requirement is satisfied |
|
| 717 |
+through first party isolation of all browser identifier sources. First party |
|
| 718 |
+isolation means that all identifier sources and browser state are scoped |
|
| 719 |
+(isolated) using the URL bar domain. This scoping is performed in |
|
| 720 |
+combination with any additional third party scope. When first party isolation |
|
| 721 |
+is used with explicit identifier storage that already has a constrained third |
|
| 722 |
+party scope (such as cookies, DOM storage, and cache), this approach is |
|
| 723 |
+referred to as "double-keying". |
|
| 731 | 724 |
|
| 732 | 725 |
</p><p> |
| 733 | 726 |
|
| 734 | 727 |
The benefit of this approach comes not only in the form of reduced |
| 735 | 728 |
linkability, but also in terms of simplified privacy UI. If all stored browser |
| 736 |
-state and permissions become associated with the url bar origin, the six or |
|
| 729 |
+state and permissions become associated with the URL bar origin, the six or |
|
| 737 | 730 |
seven different pieces of privacy UI governing these identifiers and |
| 738 | 731 |
permissions can become just one piece of UI. For instance, a window that lists |
| 739 |
-the url bar origin for which browser state exists, possibly with a |
|
| 732 |
+the URL bar origin for which browser state exists, possibly with a |
|
| 740 | 733 |
context-menu option to drill down into specific types of state or permissions. |
| 741 | 734 |
An example of this simplification can be seen in Figure 1. |
| 742 | 735 |
|
| 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> |
|
| 736 |
+ </p><div class="figure"><a id="idp66186000"></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> |
|
| 744 | 737 |
|
| 745 | 738 |
This example UI is a mock-up of how isolating identifiers to the URL bar |
| 746 | 739 |
origin can simplify the privacy UI for all data - not just cookies. Once |
| 747 |
-browser identifiers and site permissions operate on a url bar basis, the same |
|
| 740 |
+browser identifiers and site permissions operate on a URL bar basis, the same |
|
| 748 | 741 |
privacy window can represent browsing history, DOM Storage, HTTP Auth, search |
| 749 | 742 |
form history, login values, and so on within a context menu for each site. |
| 750 | 743 |
|
| 751 |
-</div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">Cookies |
|
| 752 |
- <p><span class="command"><strong>Design Goal:</strong></span> |
|
| 744 |
+</div></div></div><br class="figure-break" /><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp66189424"></a>Identifier Unlinkability Defenses in the Tor Browser</h4></div></div></div><p> |
|
| 745 |
+ |
|
| 746 |
+Unfortunately, many aspects of browser state can serve as identifier storage, |
|
| 747 |
+and no other browser vendor or standards body has invested the effort to |
|
| 748 |
+enumerate or otherwise deal with these vectors for third party tracking. As |
|
| 749 |
+such, we have had to enumerate and isolate these identifier sources on a |
|
| 750 |
+piecemeal basis. Here is the list that we have discovered and dealt with to |
|
| 751 |
+date: |
|
| 753 | 752 |
|
| 754 |
-All cookies MUST be double-keyed to the url bar origin and third-party |
|
| 753 |
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Cookies</strong></span><p><span class="command"><strong>Design Goal:</strong></span> |
|
| 754 |
+ |
|
| 755 |
+All cookies MUST be double-keyed to the URL bar origin and third-party |
|
| 755 | 756 |
origin. There exists a <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=565965" target="_top">Mozilla bug</a> |
| 756 | 757 |
that contains a prototype patch, but it lacks UI, and does not apply to modern |
| 757 |
-Firefoxes. |
|
| 758 |
+Firefox versions. |
|
| 758 | 759 |
|
| 759 | 760 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
| 760 | 761 |
|
| ... | ... |
@@ -764,8 +765,7 @@ entirely disable 3rd party cookies by setting |
| 764 | 765 |
third party content continue to function, but we believe the requirement for |
| 765 | 766 |
unlinkability trumps that desire. |
| 766 | 767 |
|
| 767 |
- </p></li><li class="listitem">Cache |
|
| 768 |
- <p> |
|
| 768 |
+ </p></li><li class="listitem"><span class="command"><strong>Cache</strong></span><p> |
|
| 769 | 769 |
|
| 770 | 770 |
In Firefox, there are actually two distinct caching mechanisms: One for |
| 771 | 771 |
general content (HTML, Javascript, CSS), and one specifically for images. The |
| ... | ... |
@@ -773,33 +773,29 @@ content cache is isolated to the URL bar domain by <a class="ulink" href="https: |
| 773 | 773 |
each cache key</a> to include an additional ID that includes the URL bar |
| 774 | 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 | 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. |
|
| 776 |
+property prepended, which will list the FQDN that was used to source it. |
|
| 778 | 777 |
|
| 779 | 778 |
</p><p> |
| 780 | 779 |
|
| 781 | 780 |
Additionally, because the image cache is a separate entity from the content |
| 782 | 781 |
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&id=d8b98a75fb200268c40886d876adc19e00b933bf" target="_top">isolate |
| 783 |
-this cache per url bar domain</a>. |
|
| 782 |
+this cache per URL bar domain</a>. |
|
| 784 | 783 |
|
| 785 |
- </p></li><li class="listitem">HTTP Auth |
|
| 786 |
- <p> |
|
| 784 |
+ </p></li><li class="listitem"><span class="command"><strong>HTTP Authentication</strong></span><p> |
|
| 787 | 785 |
|
| 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 |
|
| 786 |
+HTTP Authorization headers can be used to encode <a class="ulink" href="http://jeremiahgrossman.blogspot.com/2007/04/tracking-users-without-cookies.html" target="_top">silent |
|
| 789 | 787 |
third party tracking identifiers</a>. To prevent this, we remove HTTP |
| 790 | 788 |
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&id=b8ce4a0760759431f146c71184c89fbd5e1a27e4" target="_top">patch |
| 791 | 789 |
to nsHTTPChannel</a>. |
| 792 | 790 |
|
| 793 |
- </p></li><li class="listitem">DOM Storage |
|
| 794 |
- <p> |
|
| 791 |
+ </p></li><li class="listitem"><span class="command"><strong>DOM Storage</strong></span><p> |
|
| 795 | 792 |
|
| 796 |
-DOM storage for third party domains MUST be isolated to the url bar origin, |
|
| 793 |
+DOM storage for third party domains MUST be isolated to the URL bar origin, |
|
| 797 | 794 |
to prevent linkability between sites. This functionality is provided through a |
| 798 | 795 |
<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&id=97490c4a90ca1c43374486d9ec0c5593d5fe5720" target="_top">patch |
| 799 | 796 |
to Firefox</a>. |
| 800 | 797 |
|
| 801 |
- </p></li><li class="listitem">Flash cookies |
|
| 802 |
- <p><span class="command"><strong>Design Goal:</strong></span> |
|
| 798 |
+ </p></li><li class="listitem"><span class="command"><strong>Flash cookies</strong></span><p><span class="command"><strong>Design Goal:</strong></span> |
|
| 803 | 799 |
|
| 804 | 800 |
Users should be able to click-to-play flash objects from trusted sites. To |
| 805 | 801 |
make this behavior unlinkable, we wish to include a settings file for all platforms that disables flash |
| ... | ... |
@@ -812,10 +808,9 @@ We are currently <a class="ulink" href="https://trac.torproject.org/projects/tor |
| 812 | 808 |
difficulties</a> causing Flash player to use this settings |
| 813 | 809 |
file on Windows, so Flash remains difficult to enable. |
| 814 | 810 |
|
| 815 |
- </p></li><li class="listitem">SSL+TLS session resumption |
|
| 816 |
- <p><span class="command"><strong>Design Goal:</strong></span> |
|
| 811 |
+ </p></li><li class="listitem"><span class="command"><strong>SSL+TLS session resumption</strong></span><p><span class="command"><strong>Design Goal:</strong></span> |
|
| 817 | 812 |
|
| 818 |
-TLS session resumption tickets and SSL Session IDs MUST be limited to the url |
|
| 813 |
+TLS session resumption tickets and SSL Session IDs MUST be limited to the URL |
|
| 819 | 814 |
bar origin. |
| 820 | 815 |
|
| 821 | 816 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
| ... | ... |
@@ -829,27 +824,24 @@ these performance optimizations, we also enable |
| 829 | 824 |
<a class="ulink" href="https://tools.ietf.org/html/draft-bmoeller-tls-falsestart-00" target="_top">TLS |
| 830 | 825 |
False Start</a> via the Firefox Pref |
| 831 | 826 |
<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> |
|
| 827 |
+ </p></li><li class="listitem"><span class="command"><strong>Tor circuit and HTTP connection linkability</strong></span><p> |
|
| 828 |
+ |
|
| 829 |
+Tor circuits and HTTP connections from a third party in one URL bar origin |
|
| 830 |
+MUST NOT be reused for that same third party in another URL bar origin. |
|
| 834 | 831 |
|
| 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. |
|
| 838 | 832 |
</p><p> |
| 839 | 833 |
|
| 840 | 834 |
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&id=b3ea705cc35b79a9ba27323cb3e32d5d004ea113" target="_top">Firefox |
| 841 |
-patch to allow SOCKS username and passwords</a>, as well as a Torbutton |
|
| 835 |
+patch to allow SOCKS usernames and passwords</a>, as well as a Torbutton |
|
| 842 | 836 |
component that <a class="ulink" href="" target="_top">sets |
| 843 | 837 |
the SOCKS username and password for each request</a>. The Tor client has |
| 844 | 838 |
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. |
|
| 839 |
+using the same Tor circuit. Firefox has existing logic to ensure that connections with |
|
| 840 |
+SOCKS proxies do not re-use existing HTTP Keep-Alive connections unless the |
|
| 841 |
+proxy settings match. We extended this logic to cover SOCKS username and |
|
| 842 |
+password authentication, providing us with HTTP Keep-Alive unlinkability. |
|
| 850 | 843 |
|
| 851 |
- </p></li><li class="listitem">SharedWorkers |
|
| 852 |
- <p> |
|
| 844 |
+ </p></li><li class="listitem"><span class="command"><strong>SharedWorkers</strong></span><p> |
|
| 853 | 845 |
|
| 854 | 846 |
<a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/API/SharedWorker" target="_top">SharedWorkers</a> |
| 855 | 847 |
are a special form of Javascript Worker Threads that have a shared scope |
| ... | ... |
@@ -865,8 +857,7 @@ the objects created by that same third party loaded under another URL bar domain |
| 865 | 857 |
For now, we disable SharedWorkers via the pref |
| 866 | 858 |
<span class="command"><strong>dom.workers.sharedWorkers.enabled</strong></span>. |
| 867 | 859 |
|
| 868 |
- </p></li><li class="listitem">blob: URIs (URL.createObjectURL) |
|
| 869 |
- <p> |
|
| 860 |
+ </p></li><li class="listitem"><span class="command"><strong>blob: URIs (URL.createObjectURL)</strong></span><p> |
|
| 870 | 861 |
|
| 871 | 862 |
The <a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL" target="_top">URL.createObjectURL</a> |
| 872 | 863 |
API allows a site to load arbitrary content into a random UUID that is stored |
| ... | ... |
@@ -881,23 +872,23 @@ interest to an adversary. |
| 881 | 872 |
URIs created with URL.createObjectURL MUST be limited in scope to the first |
| 882 | 873 |
party URL bar domain that created them. We provide this isolation in Tor |
| 883 | 874 |
Browser via a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&id=0d67ab406bdd3cf095802cb25c081641aa1f0bcc" target="_top">direct |
| 884 |
-patch to Firefox</a>. |
|
| 875 |
+patch to Firefox</a> and disable URL.createObjectURL in the WebWorker |
|
| 876 |
+context as a stopgap, due to an edge case with enforcing this isolation in |
|
| 877 |
+WebWorkers. |
|
| 885 | 878 |
|
| 886 |
- </p></li><li class="listitem">SPDY |
|
| 887 |
- <p> |
|
| 879 |
+ </p></li><li class="listitem"><span class="command"><strong>SPDY</strong></span><p> |
|
| 888 | 880 |
|
| 889 | 881 |
Because SPDY can store identifiers, it is disabled through the |
| 890 | 882 |
Firefox preference <span class="command"><strong>network.http.spdy.enabled</strong></span>. |
| 891 | 883 |
|
| 892 |
- </p></li><li class="listitem">Automated cross-origin redirects MUST NOT store identifiers |
|
| 893 |
- <p><span class="command"><strong>Design Goal:</strong></span> |
|
| 884 |
+ </p></li><li class="listitem"><span class="command"><strong>Automated cross-origin redirects</strong></span><p><span class="command"><strong>Design Goal:</strong></span> |
|
| 894 | 885 |
|
| 895 | 886 |
To prevent attacks aimed at subverting the Cross-Origin Identifier |
| 896 | 887 |
Unlinkability <a class="link" href="#privacy" title="2.2. Privacy Requirements">privacy requirement</a>, the browser |
| 897 | 888 |
MUST NOT store any identifiers (cookies, cache, DOM storage, HTTP auth, etc) |
| 898 | 889 |
for cross-origin redirect intermediaries that do not prompt for user input. |
| 899 |
-For example, if a user clicks on a bit.ly url that redirects to a |
|
| 900 |
-doubleclick.net url that finally redirects to a cnn.com url, only cookies from |
|
| 890 |
+For example, if a user clicks on a bit.ly URL that redirects to a |
|
| 891 |
+doubleclick.net URL that finally redirects to a cnn.com URL, only cookies from |
|
| 901 | 892 |
cnn.com should be retained after the redirect chain completes. |
| 902 | 893 |
|
| 903 | 894 |
</p><p> |
| ... | ... |
@@ -911,8 +902,7 @@ There are numerous ways for the user to be redirected, and the Firefox API |
| 911 | 902 |
support to detect each of them is poor. We have a <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3600" target="_top">trac bug |
| 912 | 903 |
open</a> to implement what we can. |
| 913 | 904 |
|
| 914 |
- </p></li><li class="listitem">window.name |
|
| 915 |
- <p> |
|
| 905 |
+ </p></li><li class="listitem"><span class="command"><strong>window.name</strong></span><p> |
|
| 916 | 906 |
|
| 917 | 907 |
<a class="ulink" href="https://developer.mozilla.org/En/DOM/Window.name" target="_top">window.name</a> is |
| 918 | 908 |
a magical DOM property that for some reason is allowed to retain a persistent value |
| ... | ... |
@@ -927,10 +917,9 @@ that utilize this property to function, we reset the window.name property of |
| 927 | 917 |
tabs in Torbutton every time we encounter a blank Referer. This behavior |
| 928 | 918 |
allows window.name to persist for the duration of a click-driven navigation |
| 929 | 919 |
session, but as soon as the user enters a new URL or navigates between |
| 930 |
-https/http schemes, the property is cleared. |
|
| 920 |
+HTTPS/HTTP schemes, the property is cleared. |
|
| 931 | 921 |
|
| 932 |
- </p></li><li class="listitem">Auto form-fill |
|
| 933 |
- <p> |
|
| 922 |
+ </p></li><li class="listitem"><span class="command"><strong>Auto form-fill</strong></span><p> |
|
| 934 | 923 |
|
| 935 | 924 |
We disable the password saving functionality in the browser as part of our |
| 936 | 925 |
<a class="link" href="#disk-avoidance" title="4.3. Disk Avoidance">Disk Avoidance</a> requirement. However, |
| ... | ... |
@@ -940,8 +929,7 @@ preference to false to prevent saved values from immediately populating |
| 940 | 929 |
fields upon page load. Since Javascript can read these values as soon as they |
| 941 | 930 |
appear, setting this preference prevents automatic linkability from stored passwords. |
| 942 | 931 |
|
| 943 |
- </p></li><li class="listitem">HSTS supercookies |
|
| 944 |
- <p> |
|
| 932 |
+ </p></li><li class="listitem"><span class="command"><strong>HSTS supercookies</strong></span><p> |
|
| 945 | 933 |
|
| 946 | 934 |
An extreme (but not impossible) attack to mount is the creation of <a class="ulink" href="http://www.leviathansecurity.com/blog/archives/12-The-Double-Edged-Sword-of-HSTS-Persistence-and-Privacy.html" target="_top">HSTS |
| 947 | 935 |
supercookies</a>. Since HSTS effectively stores one bit of information per domain |
| ... | ... |
@@ -952,7 +940,7 @@ cookies based on stored HSTS state. |
| 952 | 940 |
|
| 953 | 941 |
There appears to be three options for us: 1. Disable HSTS entirely, and rely |
| 954 | 942 |
instead on HTTPS-Everywhere to crawl and ship rules for HSTS sites. 2. |
| 955 |
-Restrict the number of HSTS-enabled third parties allowed per url bar origin. |
|
| 943 |
+Restrict the number of HSTS-enabled third parties allowed per URL bar origin. |
|
| 956 | 944 |
3. Prevent third parties from storing HSTS rules. We have not yet decided upon |
| 957 | 945 |
the best approach. |
| 958 | 946 |
|
| ... | ... |
@@ -962,7 +950,7 @@ defend against the creation of these cookies between <span class="command"><stro |
| 962 | 950 |
Identity</strong></span> invocations. |
| 963 | 951 |
</p></li></ol></div><p> |
| 964 | 952 |
For more details on identifier linkability bugs and enhancements, see the <a class="ulink" href="https://trac.torproject.org/projects/tor/query?keywords=~tbb-linkability&status=!closed" target="_top">tbb-linkability tag in our bugtracker</a> |
| 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> |
|
| 953 |
+ </p></div></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> |
|
| 966 | 954 |
|
| 967 | 955 |
Browser fingerprinting is the act of inspecting browser behaviors and features in |
| 968 | 956 |
an attempt to differentiate and track individual users. Fingerprinting attacks |
| ... | ... |
@@ -987,8 +975,17 @@ severe, and how to study the efficacy of defenses properly. |
| 987 | 975 |
|
| 988 | 976 |
</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 | 977 |
|
| 990 |
-All fingerprinting issues arise from one of four primary sources. In order |
|
| 991 |
-from most severe to least severe, these sources are: |
|
| 978 |
+All browser fingerprinting issues arise from one of four primary sources: |
|
| 979 |
+end-user configuration details, device and hardware characteristics, operating |
|
| 980 |
+system vendor and version differences, and browser vendor and version |
|
| 981 |
+differences. Additionally, user behavior itself provides one more source of |
|
| 982 |
+potential fingerprinting. |
|
| 983 |
+ |
|
| 984 |
+ </p><p> |
|
| 985 |
+ |
|
| 986 |
+In order to help prioritize and inform defenses, we now list these sources in |
|
| 987 |
+order from most severe to least severe in terms of the amount of information |
|
| 988 |
+they reveal, and describe them in more detail. |
|
| 992 | 989 |
|
| 993 | 990 |
</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>End-user Configuration Details</strong></span><p> |
| 994 | 991 |
|
| ... | ... |
@@ -1004,13 +1001,15 @@ do so only on a per-site basis via site permissions, to avoid linkability. |
| 1004 | 1001 |
|
| 1005 | 1002 |
</p></li><li class="listitem"><span class="command"><strong>Device and Hardware Characteristics</strong></span><p> |
| 1006 | 1003 |
|
| 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. |
|
| 1004 |
+Device and hardware characteristics can be determined in three ways: they can |
|
| 1005 |
+be reported explicitly by the browser, they can be inferred through browser |
|
| 1006 |
+functionality, or they can be extracted through statistical measurements of |
|
| 1007 |
+system performance. We are most concerned with the cases where this |
|
| 1008 |
+information is either directly reported or can be determined via a single use |
|
| 1009 |
+of an API or feature, and prefer to place such APIs either behind site |
|
| 1010 |
+permissions, alter their functionality to prevent exposing the most variable |
|
| 1011 |
+aspects of these characteristics, or disable them entirely. |
|
| 1012 |
+ |
|
| 1014 | 1013 |
</p><p> |
| 1015 | 1014 |
|
| 1016 | 1015 |
On the other hand, because statistical inference of system performance |
| ... | ... |
@@ -1033,6 +1032,16 @@ completely concealed, though we recognize that it is useful to reduce this |
| 1033 | 1032 |
differentiation ability where possible, especially for cases where the |
| 1034 | 1033 |
specific version of a system can be inferred. |
| 1035 | 1034 |
|
| 1035 |
+ </p></li><li class="listitem"><span class="command"><strong>User Behavior</strong></span><p> |
|
| 1036 |
+ |
|
| 1037 |
+While somewhat outside the scope of browser fingerprinting, for completeness |
|
| 1038 |
+it is important to mention that users themselves theoretically might be |
|
| 1039 |
+fingerprinted through their behavior while interacting with a website. This |
|
| 1040 |
+behavior includes e.g. keystrokes, mouse movements, click speed, and writing |
|
| 1041 |
+style. Basic vectors such as keystroke and mouse usage fingerprinting can be |
|
| 1042 |
+mitigated by altering Javascript's notion of time. More advanced issues like |
|
| 1043 |
+writing style fingerprinting are the domain of <a class="ulink" href="https://github.com/psal/anonymouth" target="_top">other tools</a>. |
|
| 1044 |
+ |
|
| 1036 | 1045 |
</p></li><li class="listitem"><span class="command"><strong>Browser Vendor and Version Differences</strong></span><p> |
| 1037 | 1046 |
|
| 1038 | 1047 |
Due to vast differences in feature set and implementation behavior even |
| ... | ... |
@@ -1047,7 +1056,150 @@ of the fingerprintability of a population is largely useless for evaluating |
| 1047 | 1056 |
either attacks or defenses. Unfortunately, this includes popular large-scale |
| 1048 | 1057 |
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 | 1058 |
|
| 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> |
|
| 1059 |
+ </p></li></ol></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="fingerprinting-defenses-general"></a>General Fingerprinting Defenses</h4></div></div></div><p> |
|
| 1060 |
+ |
|
| 1061 |
+To date, the Tor Browser team has concerned itself only with developing |
|
| 1062 |
+defenses for APIs that have already been standardized and deployed. Once an |
|
| 1063 |
+API or feature has been standardized and widely deployed, defenses to the |
|
| 1064 |
+associated fingerprinting issues tend to have only a few options available to |
|
| 1065 |
+address the lack up-front privacy design. In our experience, these options |
|
| 1066 |
+tend to be limited to value spoofing, subsystem reimplementation, |
|
| 1067 |
+virtualization, site permissions, and feature removal. We will now describe |
|
| 1068 |
+these options and the fingerprinting sources they tend to work best with. |
|
| 1069 |
+ |
|
| 1070 |
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Value Spoofing</strong></span><p> |
|
| 1071 |
+ |
|
| 1072 |
+Value spoofing can be used for simple cases where the browser directly |
|
| 1073 |
+provides some aspect of the user's configuration details, devices, hardware, |
|
| 1074 |
+or operating system directly to a website. It becomes less useful when the |
|
| 1075 |
+fingerprinting method relies on behavior to infer aspects of the hardware or |
|
| 1076 |
+operating system, rather than obtain them directly. |
|
| 1077 |
+ |
|
| 1078 |
+ </p></li><li class="listitem"><span class="command"><strong>Subsystem Reimplementation</strong></span><p> |
|
| 1079 |
+ |
|
| 1080 |
+In cases where simple spoofing is not enough to properly conceal underlying |
|
| 1081 |
+device characteristics or operating system details, the underlying |
|
| 1082 |
+subsystem that provides the functionality for a feature or API may need |
|
| 1083 |
+to be completely reimplemented. This is most common in cases where |
|
| 1084 |
+customizable or version-specific aspects of the user's operating system are |
|
| 1085 |
+visible through the browser's featureset or APIs, usually because the browser |
|
| 1086 |
+directly exposes OS-provided implementations of underlying features. In these |
|
| 1087 |
+cases, such OS-provided implementations must be replaced by a generic |
|
| 1088 |
+implementation, or at least an implementation wrapper that makes effort to |
|
| 1089 |
+conceal any user-customized aspects of the system. |
|
| 1090 |
+ |
|
| 1091 |
+ </p></li><li class="listitem"><span class="command"><strong>Virtualization</strong></span><p> |
|
| 1092 |
+ |
|
| 1093 |
+Virtualization is needed when simply reimplementing a feature in a different |
|
| 1094 |
+way is insufficient to fully conceal the underlying behavior. This is most |
|
| 1095 |
+common in instances of device and hardware fingerprinting, but since the |
|
| 1096 |
+notion of time can also be virtualized, virtualization also can apply to any |
|
| 1097 |
+instance where an accurate measurement of wall clock time is required for a |
|
| 1098 |
+fingerprinting vector to attain high accuracy. |
|
| 1099 |
+ |
|
| 1100 |
+ </p></li><li class="listitem"><span class="command"><strong>Site Permissions</strong></span><p> |
|
| 1101 |
+ |
|
| 1102 |
+In the event that reimplementation or virtualization is too expensive in terms |
|
| 1103 |
+of performance or engineering effort, and the relative expected usage of a |
|
| 1104 |
+feature is rare, site permissions can be used to prevent the usage of a |
|
| 1105 |
+feature except in cases where the user actually wishes to use it. |
|
| 1106 |
+Unfortunately, this mechanism becomes less effective once a feature becomes |
|
| 1107 |
+widely overused and abused by many websites, as warning fatigue quickly sets |
|
| 1108 |
+in for most users. |
|
| 1109 |
+ |
|
| 1110 |
+ </p></li><li class="listitem"><span class="command"><strong>Feature/Functionality Removal</strong></span><p> |
|
| 1111 |
+ |
|
| 1112 |
+Due to the current bias in favor of invasive APIs that expose the maximum |
|
| 1113 |
+amount of platform information, some features and APIs are simply not |
|
| 1114 |
+salvageable in their current form. When such invasive features serve only a |
|
| 1115 |
+narrow domain or use case, or when there are alternate ways of accomplishing |
|
| 1116 |
+the same task, these features and/or certain aspects of their functionality |
|
| 1117 |
+may be simply removed. |
|
| 1118 |
+ |
|
| 1119 |
+ </p></li></ol></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp66282416"></a>Randomization or Uniformity?</h4></div></div></div><p> |
|
| 1120 |
+ |
|
| 1121 |
+When applying a form of defense to a specific fingerprinting vector or source, |
|
| 1122 |
+there are two general strategies available. Either the implementation for all |
|
| 1123 |
+users of a single browser implementation can be made to behave as uniformly as |
|
| 1124 |
+possible, or the user agent can attempt to randomize its behavior, so that |
|
| 1125 |
+each interaction between a user and a site provides a different fingerprint. |
|
| 1126 |
+ |
|
| 1127 |
+ </p><p> |
|
| 1128 |
+ |
|
| 1129 |
+Although <a class="ulink" href="http://research.microsoft.com/pubs/209989/tr1.pdf" target="_top">some |
|
| 1130 |
+research suggests</a> that randomization can be effective, so far striving |
|
| 1131 |
+for uniformity has generally proved to be a better strategy for Tor Browser |
|
| 1132 |
+for the following reasons: |
|
| 1133 |
+ |
|
| 1134 |
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Randomization is not a shortcut</strong></span><p> |
|
| 1135 |
+ |
|
| 1136 |
+While many end-user configuration details that the browser currently exposes |
|
| 1137 |
+may be safely replaced by false information, randomization of these details |
|
| 1138 |
+must be just as exhaustive as an approach that seeks to make these behaviors |
|
| 1139 |
+uniform. In the face of either strategy, the adversary can still make use of |
|
| 1140 |
+those features which have not been altered to be either sufficiently uniform |
|
| 1141 |
+or sufficiently random. |
|
| 1142 |
+ |
|
| 1143 |
+ </p><p> |
|
| 1144 |
+ |
|
| 1145 |
+Furthermore, the randomization approach seems to break down when it is applied |
|
| 1146 |
+to deeper issues where underlying system functionality is directly exposed. In |
|
| 1147 |
+particular, it is not clear how to randomize the capabilities of hardware |
|
| 1148 |
+attached to a computer in such a way that it either convincingly behaves like |
|
| 1149 |
+other hardware, or where the exact properties of the hardware that vary from |
|
| 1150 |
+user to user are sufficiently randomized. Similarly, truly concealing operating |
|
| 1151 |
+system version differences through randomization may require reimplementation |
|
| 1152 |
+of the underlying operating system functionality to ensure that every version |
|
| 1153 |
+that your randomization is trying to blend in with is covered by the range of |
|
| 1154 |
+possible behaviors. |
|
| 1155 |
+ |
|
| 1156 |
+ </p></li><li class="listitem"><span class="command"><strong>Evaluation and measurement difficulties</strong></span><p> |
|
| 1157 |
+ |
|
| 1158 |
+The fact that randomization causes behaviors to differ slightly with every |
|
| 1159 |
+site visit makes it appealing at first glance, but this same property makes it |
|
| 1160 |
+very difficult to objectively measure its effectiveness. By contrast, an |
|
| 1161 |
+implementation that strives for uniformity is very simple to measure. Despite |
|
| 1162 |
+their current flaws, a properly designed version of <a class="ulink" href="https://panopticlick.eff.org/" target="_top">Panopticlick</a> or <a class="ulink" href="https://amiunique.org/" target="_top">Am I Unique</a> could report the entropy and |
|
| 1163 |
+uniqueness rates for all users of a single user agent version, without the |
|
| 1164 |
+need for complicated statistics about the variance of the measured behaviors. |
|
| 1165 |
+ |
|
| 1166 |
+ </p><p> |
|
| 1167 |
+ |
|
| 1168 |
+Randomization (especially incomplete randomization) may also provide a false |
|
| 1169 |
+sense of security. When a fingerprinting attempt makes naive use of randomized |
|
| 1170 |
+information, a fingerprint will appear unstable, but may not actually be |
|
| 1171 |
+sufficiently randomized to prevent a dedicated adversary. Sophisticated |
|
| 1172 |
+fingerprinting mechanisms may either ignore randomized information, or |
|
| 1173 |
+incorporate knowledge of the distribution and range of randomized values into |
|
| 1174 |
+the creation of a more stable fingerprint (by either removing the randomness, |
|
| 1175 |
+modeling it, or averaging it). |
|
| 1176 |
+ |
|
| 1177 |
+ </p></li><li class="listitem"><span class="command"><strong>Usability issues</strong></span><p> |
|
| 1178 |
+ |
|
| 1179 |
+When randomization is introduced to features that affect site behavior, it can |
|
| 1180 |
+be very distracting for this behavior to change between visits of a given |
|
| 1181 |
+site. For simple cases such as when this information affects layout behavior, |
|
| 1182 |
+this will lead to visual nuisances. However, when this information affects |
|
| 1183 |
+reported functionality or hardware characteristics, sometimes a site will |
|
| 1184 |
+function one way on one visit, and another way on a subsequent visit. |
|
| 1185 |
+ |
|
| 1186 |
+ </p></li><li class="listitem"><span class="command"><strong>Performance costs</strong></span><p> |
|
| 1187 |
+ |
|
| 1188 |
+Randomizing involves performance costs. This is especially true if the |
|
| 1189 |
+fingerprinting surface is large (like in a modern browser) and one needs more |
|
| 1190 |
+elaborate randomizing strategies (including randomized virtualization) to |
|
| 1191 |
+ensure that the randomization fully conceals the true behavior. Many calls to |
|
| 1192 |
+a cryptographically secure random number generator during the course of a page |
|
| 1193 |
+load will both serve to exhaust available entropy pools, as well as lead to |
|
| 1194 |
+increased computation while loading a page. |
|
| 1195 |
+ |
|
| 1196 |
+ </p></li><li class="listitem"><span class="command"><strong>Increased vulnerability surface</strong></span><p> |
|
| 1197 |
+ |
|
| 1198 |
+Improper randomization might introduce a new fingerprinting vector, as the |
|
| 1199 |
+process of generating the values for the fingerprintable attributes could be |
|
| 1200 |
+itself susceptible to side-channel attacks, analysis, or exploitation. |
|
| 1201 |
+ |
|
| 1202 |
+ </p></li></ol></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="fingerprinting-defenses"></a>Specific Fingerprinting Defenses in the Tor Browser</h4></div></div></div><p> |
|
| 1051 | 1203 |
|
| 1052 | 1204 |
The following defenses are listed roughly in order of most severe |
| 1053 | 1205 |
fingerprinting threat first. This ordering is based on the above intuition |
| ... | ... |
@@ -1061,8 +1213,7 @@ Where our actual implementation differs from an ideal solution, we separately |
| 1061 | 1213 |
describe our <span class="command"><strong>Design Goal</strong></span> and our <span class="command"><strong>Implementation |
| 1062 | 1214 |
Status</strong></span>. |
| 1063 | 1215 |
|
| 1064 |
- </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">Plugins |
|
| 1065 |
- <p> |
|
| 1216 |
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Plugins</strong></span><p> |
|
| 1066 | 1217 |
|
| 1067 | 1218 |
Plugins add to fingerprinting risk via two main vectors: their mere presence |
| 1068 | 1219 |
in window.navigator.plugins (because they are optional, end-user installed |
| ... | ... |
@@ -1092,8 +1243,7 @@ section</a>. We also set the Firefox |
| 1092 | 1243 |
preference <span class="command"><strong>plugin.expose_full_path</strong></span> to false, to avoid |
| 1093 | 1244 |
leaking plugin installation information. |
| 1094 | 1245 |
|
| 1095 |
- </p></li><li class="listitem">HTML5 Canvas Image Extraction |
|
| 1096 |
- <p> |
|
| 1246 |
+ </p></li><li class="listitem"><span class="command"><strong>HTML5 Canvas Image Extraction</strong></span><p> |
|
| 1097 | 1247 |
|
| 1098 | 1248 |
After plugins and plugin-provided information, we believe that the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/HTML/Canvas" target="_top">HTML5 |
| 1099 | 1249 |
Canvas</a> is the single largest fingerprinting threat browsers face |
| ... | ... |
@@ -1113,14 +1263,13 @@ fingerprinting vectors. If WebGL is normalized through software rendering, |
| 1113 | 1263 |
system colors were standardized, and the browser shipped a fixed collection of |
| 1114 | 1264 |
fonts (see later points in this list), it might not be necessary to create a |
| 1115 | 1265 |
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&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. |
|
| 1266 |
+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&id=6a169ef0166b268b1a27546a17b3d7470330917d" target="_top">prompt before returning valid image data</a> to the Canvas APIs, |
|
| 1267 |
+and for <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&id=7d51acca6383732480b49ccdb5506ad6fb92e651" target="_top">access to isPointInPath and related functions</a>. |
|
| 1268 |
+If the user hasn't previously allowed the site in the URL bar to access Canvas |
|
| 1269 |
+image data, pure white image data is returned to the Javascript APIs. |
|
| 1120 | 1270 |
|
| 1121 | 1271 |
</p><p> |
| 1122 |
- </p></li><li class="listitem">Open TCP Port Fingerprinting |
|
| 1123 |
- <p> |
|
| 1272 |
+ </p></li><li class="listitem"><span class="command"><strong>Open TCP Port and Local Network Fingerprinting</strong></span><p> |
|
| 1124 | 1273 |
|
| 1125 | 1274 |
In Firefox, by using either WebSockets or XHR, it is possible for remote |
| 1126 | 1275 |
content to <a class="ulink" href="http://www.andlabs.org/tools/jsrecon.html" target="_top">enumerate |
| ... | ... |
@@ -1143,8 +1292,7 @@ Tor client then rejects them, since it is configured to proxy for internal IP |
| 1143 | 1292 |
addresses by default. Access to the local network is forbidden via the same |
| 1144 | 1293 |
mechanism. |
| 1145 | 1294 |
|
| 1146 |
- </p></li><li class="listitem">Invasive Authentication Mechanisms (NTLM and SPNEGO) |
|
| 1147 |
- <p> |
|
| 1295 |
+ </p></li><li class="listitem"><span class="command"><strong>Invasive Authentication Mechanisms (NTLM and SPNEGO)</strong></span><p> |
|
| 1148 | 1296 |
|
| 1149 | 1297 |
Both NTLM and SPNEGO authentication mechanisms can leak the hostname, and in |
| 1150 | 1298 |
some cases the current username. The only reason why these aren't a more |
| ... | ... |
@@ -1155,8 +1303,7 @@ them to reveal machine information and still fail silently prior to the |
| 1155 | 1303 |
password prompt, these authentication mechanisms should either be disabled, or |
| 1156 | 1304 |
placed behind a site permission before their use. We simply disable them. |
| 1157 | 1305 |
|
| 1158 |
- </p></li><li class="listitem">USB Device ID Enumeration |
|
| 1159 |
- <p> |
|
| 1306 |
+ </p></li><li class="listitem"><span class="command"><strong>USB Device ID Enumeration</strong></span><p> |
|
| 1160 | 1307 |
|
| 1161 | 1308 |
The <a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/Guide/API/Gamepad" target="_top">GamePad |
| 1162 | 1309 |
API</a> provides web pages with the <a class="ulink" href="https://dvcs.w3.org/hg/gamepad/raw-file/default/gamepad.html#widl-Gamepad-id" target="_top">USB |
| ... | ... |
@@ -1166,8 +1313,7 @@ should be behind a site permission in Private Browsing Modes, or should present |
| 1166 | 1313 |
controller type (perhaps a two button controller that can be mapped to the keyboard) in all cases. |
| 1167 | 1314 |
We simply disable it via the pref <span class="command"><strong>dom.gamepad.enabled</strong></span>. |
| 1168 | 1315 |
|
| 1169 |
- </p></li><li class="listitem">Fonts |
|
| 1170 |
- <p> |
|
| 1316 |
+ </p></li><li class="listitem"><span class="command"><strong>Fonts</strong></span><p> |
|
| 1171 | 1317 |
|
| 1172 | 1318 |
According to the Panopticlick study, fonts provide the most linkability when |
| 1173 | 1319 |
they are provided as an enumerable list in file system order, via either the |
| ... | ... |
@@ -1188,7 +1334,7 @@ and <a class="ulink" href="https://fedorahosted.org/lohit/" target="_top">Lohit |
| 1188 | 1334 |
font set is fairly complete by itself, but Nanum and Lohit have smaller |
| 1189 | 1335 |
versions of many South Asian languages. When combined in a way that chooses the |
| 1190 | 1336 |
smallest font implementations for each locale, these three font sets provide |
| 1191 |
-poverage for the all languages used on Wikipedia with more than |
|
| 1337 |
+coverage for the all languages used on Wikipedia with more than |
|
| 1192 | 1338 |
10,000 articles, and several others as well, in approximately 3MB of compressed |
| 1193 | 1339 |
overhead. The <a class="ulink" href="https://www.google.com/get/noto/" target="_top">Noto font |
| 1194 | 1340 |
set</a> is another font set that aims for complete coverage, but is |
| ... | ... |
@@ -1212,8 +1358,7 @@ To improve rendering, we exempt remote <a class="ulink" href="https://developer. |
| 1212 | 1358 |
fonts</a> from these counts, and if a font-family CSS rule lists a remote |
| 1213 | 1359 |
font (in any order), we use that font instead of any of the named local fonts. |
| 1214 | 1360 |
|
| 1215 |
- </p></li><li class="listitem">Monitor, Widget, and OS Desktop Resolution |
|
| 1216 |
- <p> |
|
| 1361 |
+ </p></li><li class="listitem"><span class="command"><strong>Monitor, Widget, and OS Desktop Resolution</strong></span><p> |
|
| 1217 | 1362 |
|
| 1218 | 1363 |
Both CSS and Javascript have access to a lot of information about the screen |
| 1219 | 1364 |
resolution, usable desktop size, OS widget size, toolbar size, title bar size, |
| ... | ... |
@@ -1243,24 +1388,21 @@ this scheme. |
| 1243 | 1388 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
| 1244 | 1389 |
|
| 1245 | 1390 |
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&id=bd3b1ed32a9c21fdc92fc35f2ec0a41badc378d5" target="_top">for |
|
| 1391 |
+a window observer <a class="ulink" href="https://gitweb.torproject.org/torbutton.git/tree/src/chrome/content/torbutton.js#n3361" target="_top">based |
|
| 1392 |
+on desktop resolution</a>. To minimize the effect of the long tail of large |
|
| 1393 |
+monitor sizes, we also cap the window size at 1000 pixels in each direction. |
|
| 1394 |
+Additionally, we patch 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&id=bd3b1ed32a9c21fdc92fc35f2ec0a41badc378d5" target="_top">for |
|
| 1251 | 1395 |
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&id=a5648c8d80f396caf294d761cc4a9a76c0b33a9d" target="_top">report |
| 1252 | 1396 |
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&id=3c02858027634ffcfbd97047dfdf170c19ca29ec" target="_top">patch |
| 1253 |
-DOM events to return content window relative points</a>. We also |
|
| 1397 |
+DOM events to return content window relative points</a>. |
|
| 1254 | 1398 |
|
| 1255 |
-We also force |
|
| 1256 |
-popups to open in new tabs (via |
|
| 1399 |
+We also force popups to open in new tabs (via |
|
| 1257 | 1400 |
<span class="command"><strong>browser.link.open_newwindow.restriction</strong></span>), to avoid |
| 1258 | 1401 |
full-screen popups inferring information about the browser resolution. In |
| 1259 | 1402 |
addition, we prevent auto-maximizing on browser start, and inform users that |
| 1260 | 1403 |
maximized windows are detrimental to privacy in this mode. |
| 1261 | 1404 |
|
| 1262 |
- </p></li><li class="listitem">Display Media information |
|
| 1263 |
- <p> |
|
| 1405 |
+ </p></li><li class="listitem"><span class="command"><strong>Display Media information</strong></span><p> |
|
| 1264 | 1406 |
|
| 1265 | 1407 |
Beyond simple resolution information, a large amount of so-called "Media" |
| 1266 | 1408 |
information is also exported to content. Even without Javascript, CSS has |
| ... | ... |
@@ -1286,8 +1428,7 @@ detection of font smoothing on OSX</a>. We also always |
| 1286 | 1428 |
<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&id=e17d60442ab0db92664ff68d90fe7bf737374912" target="_top">report |
| 1287 | 1429 |
landscape-primary</a> for the screen orientation. |
| 1288 | 1430 |
|
| 1289 |
- </p></li><li class="listitem">WebGL |
|
| 1290 |
- <p> |
|
| 1431 |
+ </p></li><li class="listitem"><span class="command"><strong>WebGL</strong></span><p> |
|
| 1291 | 1432 |
|
| 1292 | 1433 |
WebGL is fingerprintable both through information that is exposed about the |
| 1293 | 1434 |
underlying driver and optimizations, as well as through performance |
| ... | ... |
@@ -1312,8 +1453,7 @@ Another option for WebGL might be to use software-only rendering, using a |
| 1312 | 1453 |
library such as <a class="ulink" href="http://www.mesa3d.org/" target="_top">Mesa</a>. The use of |
| 1313 | 1454 |
such a library would avoid hardware-specific rendering differences. |
| 1314 | 1455 |
|
| 1315 |
- </p></li><li class="listitem">User Agent and HTTP Headers |
|
| 1316 |
- <p><span class="command"><strong>Design Goal:</strong></span> |
|
| 1456 |
+ </p></li><li class="listitem"><span class="command"><strong>User Agent and HTTP Headers</strong></span><p><span class="command"><strong>Design Goal:</strong></span> |
|
| 1317 | 1457 |
|
| 1318 | 1458 |
All Tor Browser users MUST provide websites with an identical user agent and |
| 1319 | 1459 |
HTTP header set for a given request type. We omit the Firefox minor revision, |
| ... | ... |
@@ -1327,8 +1467,7 @@ which we leverage. We also set similar prefs for controlling the |
| 1327 | 1467 |
Accept-Language and Accept-Charset headers, which we spoof to English by default. Additionally, we |
| 1328 | 1468 |
<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0esr-4.5-1&id=e9841ee41e7f3f1535be2d605084c41ee9faf6c2" target="_top">remove |
| 1329 | 1469 |
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 |
| 1330 |
-used</a> to fingerprint OS, platform, and Firefox minor version. </p></li><li class="listitem">Locale Fingerprinting |
|
| 1331 |
- <p> |
|
| 1470 |
+used</a> to fingerprint OS, platform, and Firefox minor version. </p></li><li class="listitem"><span class="command"><strong>Locale Fingerprinting</strong></span><p> |
|
| 1332 | 1471 |
|
| 1333 | 1472 |
In Tor Browser, we provide non-English users the option of concealing their OS |
| 1334 | 1473 |
and browser locale from websites. It is debatable if this should be as high of |
| ... | ... |
@@ -1343,8 +1482,7 @@ We set the fallback character set to set to windows-1252 for all locales, via |
| 1343 | 1482 |
the JS engine</a> to use en-US as its internal C locale for all Date, Math, |
| 1344 | 1483 |
and exception handling. |
| 1345 | 1484 |
|
| 1346 |
- </p></li><li class="listitem">Timezone and Clock Offset |
|
| 1347 |
- <p> |
|
| 1485 |
+ </p></li><li class="listitem"><span class="command"><strong>Timezone and Clock Offset</strong></span><p> |
|
| 1348 | 1486 |
|
| 1349 | 1487 |
While the latency in Tor connections varies anywhere from milliseconds to |
| 1350 | 1488 |
a few seconds, it is still possible for the remote site to detect large |
| ... | ... |
@@ -1367,8 +1505,7 @@ the browser can obtain this clock skew via a mechanism similar to that used in |
| 1367 | 1505 |
We set the timezone using the TZ environment variable, which is supported on |
| 1368 | 1506 |
all platforms. |
| 1369 | 1507 |
|
| 1370 |
- </p></li><li class="listitem">Javascript Performance Fingerprinting |
|
| 1371 |
- <p> |
|
| 1508 |
+ </p></li><li class="listitem"><span class="command"><strong>Javascript Performance Fingerprinting</strong></span><p> |
|
| 1372 | 1509 |
|
| 1373 | 1510 |
<a class="ulink" href="http://w2spconf.com/2011/papers/jspriv.pdf" target="_top">Javascript performance |
| 1374 | 1511 |
fingerprinting</a> is the act of profiling the performance |
| ... | ... |
@@ -1396,15 +1533,14 @@ large number of people. |
| 1396 | 1533 |
|
| 1397 | 1534 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
| 1398 | 1535 |
|
| 1399 |
-Currently, the our mitigation against performance fingerprinting is to |
|
| 1536 |
+Currently, our mitigation against performance fingerprinting is to |
|
| 1400 | 1537 |
disable <a class="ulink" href="http://www.w3.org/TR/navigation-timing/" target="_top">Navigation |
| 1401 | 1538 |
Timing</a> through the Firefox preference |
| 1402 | 1539 |
<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 | 1540 |
Video Statistics</a> API extensions via the preference |
| 1404 | 1541 |
<span class="command"><strong>media.video_stats.enabled</strong></span>. |
| 1405 | 1542 |
|
| 1406 |
- </p></li><li class="listitem">Keystroke Fingerprinting |
|
| 1407 |
- <p> |
|
| 1543 |
+ </p></li><li class="listitem"><span class="command"><strong>Keystroke Fingerprinting</strong></span><p> |
|
| 1408 | 1544 |
|
| 1409 | 1545 |
Keystroke fingerprinting is the act of measuring key strike time and key |
| 1410 | 1546 |
flight time. It is seeing increasing use as a biometric. |
| ... | ... |
@@ -1416,8 +1552,7 @@ fingerprinting: timestamp quantization and jitter. |
| 1416 | 1552 |
|
| 1417 | 1553 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
| 1418 | 1554 |
We have no implementation as of yet. |
| 1419 |
- </p></li><li class="listitem">Operating System Type Fingerprinting |
|
| 1420 |
- <p> |
|
| 1555 |
+ </p></li><li class="listitem"><span class="command"><strong>Operating System Type Fingerprinting</strong></span><p> |
|
| 1421 | 1556 |
|
| 1422 | 1557 |
As we mentioned in the introduction of this section, OS type fingerprinting is |
| 1423 | 1558 |
currently considered a lower priority, due simply to the numerous ways that |
| ... | ... |
@@ -1456,11 +1591,11 @@ In order to avoid long-term linkability, we provide a "New Identity" context |
| 1456 | 1591 |
menu option in Torbutton. This context menu option is active if Torbutton can |
| 1457 | 1592 |
read the environment variables $TOR_CONTROL_PASSWD and $TOR_CONTROL_PORT. |
| 1458 | 1593 |
|
| 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"> |
|
| 1594 |
+ </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp66398752"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 1460 | 1595 |
|
| 1461 | 1596 |
All linkable identifiers and browser state MUST be cleared by this feature. |
| 1462 | 1597 |
|
| 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> |
|
| 1598 |
+ </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp66400000"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p> |
|
| 1464 | 1599 |
|
| 1465 | 1600 |
First, Torbutton disables Javascript in all open tabs and windows by using |
| 1466 | 1601 |
both the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIDocShell#Attributes" target="_top">browser.docShell.allowJavascript</a> |
| ... | ... |
@@ -1538,10 +1673,11 @@ video click-to-play via NoScript (<span class="command"><strong>noscript.forbidM |
| 1538 | 1673 |
|
| 1539 | 1674 |
This security level inherits the preferences from the Medium-Low level, and |
| 1540 | 1675 |
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 |
|
| 1676 |
+(<span class="command"><strong>javascript.options.baselinejit.content</strong></span>), disables Graphite |
|
| 1677 |
+(<span class="command"><strong>gfx.font_rendering.graphite.enabled</strong></span>) and SVG OpenType font |
|
| 1678 |
+rendering (<span class="command"><strong>gfx.font_rendering.opentype_svg.enabled</strong></span>) and only |
|
| 1679 |
+allows Javascript to run if it is loaded over HTTPS and the URL bar is HTTPS |
|
| 1680 |
+(by setting <span class="command"><strong>noscript.global</strong></span> to false and |
|
| 1545 | 1681 |
<span class="command"><strong>noscript.globalHttpsWhitelist</strong></span> to true). |
| 1546 | 1682 |
|
| 1547 | 1683 |
</p></li><li class="listitem"><span class="command"><strong>High</strong></span><p> |
| ... | ... |
@@ -1558,7 +1694,7 @@ images (<span class="command"><strong>svg.in-content.enabled</strong></span>). |
| 1558 | 1694 |
Fingerprinting</a> is a statistical attack to attempt to recognize specific |
| 1559 | 1695 |
encrypted website activity. |
| 1560 | 1696 |
|
| 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> |
|
| 1697 |
+ </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp66434336"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p> |
|
| 1562 | 1698 |
|
| 1563 | 1699 |
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 |
| 1564 | 1700 |
for classification. This mechanism would either impact the true and false |
| ... | ... |
@@ -1580,7 +1716,7 @@ Congestion-Sensitive BUFLO</a>. It may be also possible to <a class="ulink" href |
| 1580 | 1716 |
defenses</a> such that they only use existing spare Guard bandwidth capacity in the Tor |
| 1581 | 1717 |
network, making them also effectively no-overhead. |
| 1582 | 1718 |
|
| 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> |
|
| 1719 |
+ </p></blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp66441232"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p> |
|
| 1584 | 1720 |
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&id=20a59cec9886cf2575b1fd8e92b43e31ba053fbd" target="_top">randomize |
| 1585 | 1721 |
pipeline order and depth</a>. Unfortunately, pipelining is very fragile. |
| 1586 | 1722 |
Many sites do not support it, and even sites that advertise support for |
| ... | ... |
@@ -1588,7 +1724,7 @@ pipelining may simply return error codes for successive requests, effectively |
| 1588 | 1724 |
forcing the browser into non-pipelined behavior. Firefox also has code to back |
| 1589 | 1725 |
off and reduce or eliminate the pipeline if this happens. These |
| 1590 | 1726 |
shortcomings and fallback behaviors are the primary reason that Google |
| 1591 |
-developed SPDY as opposed simply extending HTTP to improve pipelining. It |
|
| 1727 |
+developed SPDY as opposed to simply extending HTTP to improve pipelining. It |
|
| 1592 | 1728 |
turns out that we could actually deploy exit-side proxies that allow us to |
| 1593 | 1729 |
<a class="ulink" href="https://gitweb.torproject.org/torspec.git/tree/proposals/ideas/xxx-using-spdy.txt" target="_top">use |
| 1594 | 1730 |
SPDY from the client to the exit node</a>. This would make our defense not |
| ... | ... |
@@ -1645,7 +1781,7 @@ contend with. For this reason, we have deployed a build system |
| 1645 | 1781 |
that allows anyone to use our source code to reproduce byte-for-byte identical |
| 1646 | 1782 |
binary packages to the ones that we distribute. |
| 1647 | 1783 |
|
| 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> |
|
| 1784 |
+ </p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp66457392"></a>5.1. Achieving Binary Reproducibility</h3></div></div></div><p> |
|
| 1649 | 1785 |
|
| 1650 | 1786 |
The GNU toolchain has been working on providing reproducible builds for some |
| 1651 | 1787 |
time, however a large software project such as Firefox typically ends up |
| ... | ... |
@@ -1679,8 +1815,7 @@ the build environment's hostname, username, build path, uname output, |
| 1679 | 1815 |
toolchain versions, and time. On top of what Gitian provides, we also had to |
| 1680 | 1816 |
address the following additional sources of non-determinism: |
| 1681 | 1817 |
|
| 1682 |
- </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">Filesystem and archive reordering |
|
| 1683 |
- <p> |
|
| 1818 |
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Filesystem and archive reordering</strong></span><p> |
|
| 1684 | 1819 |
|
| 1685 | 1820 |
The most prevalent source of non-determinism in the components of Tor Browser |
| 1686 | 1821 |
by far was various ways that archives (such as zip, tar, jar/ja, DMG, and |
| ... | ... |
@@ -1700,8 +1835,7 @@ different locale settings will produce different sort results. We chose the |
| 1700 | 1835 |
and <a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/gitian/build-helpers/ddmg.sh" target="_top">DMG</a> |
| 1701 | 1836 |
to aid in reproducible archive creation. |
| 1702 | 1837 |
|
| 1703 |
- </p></li><li class="listitem">Uninitialized memory in toolchain/archivers |
|
| 1704 |
- <p> |
|
| 1838 |
+ </p></li><li class="listitem"><span class="command"><strong>Uninitialized memory in toolchain/archivers</strong></span><p> |
|
| 1705 | 1839 |
|
| 1706 | 1840 |
We ran into difficulties with both binutils and the DMG archive script using |
| 1707 | 1841 |
uninitialized memory in certain data structures that ended up written to disk. |
| ... | ... |
@@ -1709,18 +1843,16 @@ Our binutils fixes were merged upstream, but the DMG archive fix remains an |
| 1709 | 1843 |
<a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/gitian/patches/libdmg.patch" target="_top">independent |
| 1710 | 1844 |
patch</a>. |
| 1711 | 1845 |
|
| 1712 |
- </p></li><li class="listitem">Fine-grained timestamps and timezone leaks |
|
| 1713 |
- <p> |
|
| 1846 |
+ </p></li><li class="listitem"><span class="command"><strong>Fine-grained timestamps and timezone leaks</strong></span><p> |
|
| 1714 | 1847 |
|
| 1715 | 1848 |
The standard way of controlling timestamps in Gitian is to use libfaketime, |
| 1716 | 1849 |
which hooks time-related library calls to provide a fixed timestamp. However, |
| 1717 | 1850 |
due to our use of wine to run py2exe for python-based pluggable transports, |
| 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 |
|
| 1851 |
+pyc timestamps had to be addressed 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 |
|
| 1719 | 1852 |
script</a>. The timezone leaks were addressed by setting the |
| 1720 | 1853 |
<span class="command"><strong>TZ</strong></span> environment variable to UTC in our descriptors. |
| 1721 | 1854 |
|
| 1722 |
- </p></li><li class="listitem">Deliberately generated entropy |
|
| 1723 |
- <p> |
|
| 1855 |
+ </p></li><li class="listitem"><span class="command"><strong>Deliberately generated entropy</strong></span><p> |
|
| 1724 | 1856 |
|
| 1725 | 1857 |
In two circumstances, deliberately generated entropy was introduced in various |
| 1726 | 1858 |
components of the build process. First, the BuildID Debuginfo identifier |
| ... | ... |
@@ -1744,8 +1876,7 @@ both OS and co-processor assistance. Download package signatures make sense of |
| 1744 | 1876 |
course, but we handle those another way (as mentioned above). |
| 1745 | 1877 |
|
| 1746 | 1878 |
|
| 1747 |
- </p></li><li class="listitem">LXC-specific leaks |
|
| 1748 |
- <p> |
|
| 1879 |
+ </p></li><li class="listitem"><span class="command"><strong>LXC-specific leaks</strong></span><p> |
|
| 1749 | 1880 |
|
| 1750 | 1881 |
Gitian provides an option to use LXC containers instead of full qemu-kvm |
| 1751 | 1882 |
virtualization. Unfortunately, these containers can allow additional details |
| ... | ... |
@@ -1757,14 +1888,13 @@ directly patching the aspects of the Firefox build process that included this |
| 1757 | 1888 |
information into the build. It also turns out that some libraries (in |
| 1758 | 1889 |
particular: libgmp) attempt to detect the current CPU to determine which |
| 1759 | 1890 |
optimizations to compile in. This CPU type is uniform on our KVM instances, |
| 1760 |
-but differs under LXC. We are also investigating currently <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/12239" target="_top">unknown sources of |
|
| 1761 |
-unitialized memory</a> that only appear in LXC mode, as well as |
|
| 1891 |
+but differs under LXC. We are also investigating currently |
|
| 1762 | 1892 |
<a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/12240" target="_top">oddities related to |
| 1763 | 1893 |
time-based dependency tracking</a> that only appear in LXC containers. |
| 1764 | 1894 |
|
| 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> |
|
| 1895 |
+ </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp66479152"></a>5.2. Package Signatures and Verification</h3></div></div></div><p> |
|
| 1766 | 1896 |
|
| 1767 |
-The build process produces a single sha256sums.txt file that contains a sorted |
|
| 1897 |
+The build process generates a single sha256sums.txt file that contains a sorted |
|
| 1768 | 1898 |
list of the SHA-256 hashes of every package produced for that build version. Each |
| 1769 | 1899 |
official builder uploads this file and a GPG signature of it to a directory |
| 1770 | 1900 |
on a Tor Project's web server. The build scripts have an optional matching |
| ... | ... |
@@ -1795,7 +1925,7 @@ In order to verify package integrity, the signature must be stripped off using |
| 1795 | 1925 |
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 | 1926 |
Verification</a> page. |
| 1797 | 1927 |
|
| 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> |
|
| 1928 |
+ </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp66483680"></a>5.3. Anonymous Verification</h3></div></div></div><p> |
|
| 1799 | 1929 |
|
| 1800 | 1930 |
Due to the fact that bit-identical packages can be produced by anyone, the |
| 1801 | 1931 |
security of this build system extends beyond the security of the official |
| ... | ... |
@@ -1817,18 +1947,18 @@ verifier. |
| 1817 | 1947 |
</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 | 1948 |
|
| 1819 | 1949 |
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 |
|
| 1950 |
+users. We make use of certificate pinning to ensure that update checks cannot |
|
| 1821 | 1951 |
be tampered with, and we sign the individual MAR update files with an offline |
| 1822 | 1952 |
signing key. |
| 1823 | 1953 |
|
| 1824 | 1954 |
</p><p> |
| 1825 | 1955 |
|
| 1826 | 1956 |
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 |
|
| 1957 |
+update server to prevent availability attacks, and complains to the user after 48 |
|
| 1828 | 1958 |
hours go by without a successful response from the server. Additionally, we |
| 1829 | 1959 |
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. |
|
| 1960 |
+request to the updater (provided the former got issued more than 10 minutes ago) |
|
| 1961 |
+traverses a separate circuit, to avoid holdback attacks by exit nodes. |
|
| 1832 | 1962 |
|
| 1833 | 1963 |
</p></div></div><div class="appendix"><h2 class="title" style="clear: both"><a id="Transparency"></a>A. Towards Transparency in Navigation Tracking</h2><p> |
| 1834 | 1964 |
|
| ... | ... |
@@ -1862,15 +1992,14 @@ also describe auditable alternatives and promising web draft standards that woul |
| 1862 | 1992 |
preserve this functionality while still providing transparency when tracking is |
| 1863 | 1993 |
occurring. |
| 1864 | 1994 |
|
| 1865 |
-</p><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="deprecate"></a>A.1. Deprecation Wishlist</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">The Referer Header |
|
| 1866 |
- <p> |
|
| 1995 |
+</p><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="deprecate"></a>A.1. Deprecation Wishlist</h2></div></div></div><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>The Referer Header</strong></span><p> |
|
| 1867 | 1996 |
|
| 1868 | 1997 |
We haven't disabled or restricted the Referer ourselves because of the |
| 1869 | 1998 |
non-trivial number of sites that rely on the Referer header to "authenticate" |
| 1870 | 1999 |
image requests and deep-link navigation on their sites. Furthermore, there |
| 1871 | 2000 |
seems to be no real privacy benefit to taking this action by itself in a |
| 1872 | 2001 |
vacuum, because many sites have begun encoding Referer URL information into |
| 1873 |
-GET parameters when they need it to cross http to https scheme transitions. |
|
| 2002 |
+GET parameters when they need it to cross HTTP to HTTPS scheme transitions. |
|
| 1874 | 2003 |
Google's +1 buttons are the best example of this activity. |
| 1875 | 2004 |
|
| 1876 | 2005 |
</p><p> |
| ... | ... |
@@ -1895,8 +2024,7 @@ for the destination URL). This same UI notification can also be used for links |
| 1895 | 2024 |
with the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/HTML/Element/a#Attributes" target="_top">"ping"</a> |
| 1896 | 2025 |
attribute. |
| 1897 | 2026 |
|
| 1898 |
- </p></li><li class="listitem">window.name |
|
| 1899 |
- <p> |
|
| 2027 |
+ </p></li><li class="listitem"><span class="command"><strong>window.name</strong></span><p> |
|
| 1900 | 2028 |
<a class="ulink" href="https://developer.mozilla.org/En/DOM/Window.name" target="_top">window.name</a> is |
| 1901 | 2029 |
a DOM property that for some reason is allowed to retain a persistent value |
| 1902 | 2030 |
for the lifespan of a browser tab. It is possible to utilize this property for |
| ... | ... |
@@ -1908,8 +2036,7 @@ XSRF protection and federated login. |
| 1908 | 2036 |
It's our opinion that the contents of window.name should not be preserved for |
| 1909 | 2037 |
cross-origin navigation, but doing so may break federated login for some sites. |
| 1910 | 2038 |
|
| 1911 |
- </p></li><li class="listitem">Javascript link rewriting |
|
| 1912 |
- <p> |
|
| 2039 |
+ </p></li><li class="listitem"><span class="command"><strong>Javascript link rewriting</strong></span><p> |
|
| 1913 | 2040 |
|
| 1914 | 2041 |
In general, it should not be possible for onclick handlers to alter the |
| 1915 | 2042 |
navigation destination of 'a' tags, silently transform them into POST |
| ... | ... |
@@ -1927,7 +2054,7 @@ possible for us to <a class="ulink" href="https://trac.torproject.org/projects/t |
| 1927 | 2054 |
ourselves</a>, as they are comparatively rare and can be handled with site |
| 1928 | 2055 |
permissions. |
| 1929 | 2056 |
|
| 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> |
|
| 2057 |
+ </p></li></ol></div></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp66520624"></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> |
|
| 1931 | 2058 |
|
| 1932 | 2059 |
Web-Send is a browser-based link sharing and federated login widget that is |
| 1933 | 2060 |
designed to operate without relying on third-party tracking or abusing other |
| 1934 | 2061 |