Mike Perry commited on 2011-10-05 07:48:34
Zeige 2 geänderte Dateien mit 230 Einfügungen und 160 Löschungen.
| ... | ... |
@@ -1,18 +1,19 @@ |
| 1 | 1 |
<?xml version="1.0" encoding="UTF-8"?> |
| 2 | 2 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| 3 |
-<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The Design and Implementation of the Tor Browser [DRAFT]</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /></head><body><div class="article" title="The Design and Implementation of the Tor Browser [DRAFT]"><div class="titlepage"><div><div><h2 class="title"><a id="design"></a>The Design and Implementation of the Tor Browser [DRAFT]</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Mike</span> <span class="surname">Perry</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:mikeperry#torproject org">mikeperry#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Erinn</span> <span class="surname">Clark</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:erinn_torproject\org">erinn_torproject\org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Steven</span> <span class="surname">Murdoch</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:sjmurdoch#torproject\org">sjmurdoch#torproject\org</a>></code></p></div></div></div></div><div><p class="pubdate">Sep 29 2011</p></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="#id2974058">1. Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="#adversary">1.1. Adversary Model</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="#Implementation">3. Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="#proxy-obedience">3.1. Proxy Obedience</a></span></dt><dt><span class="sect2"><a href="#state-separation">3.2. State Separation</a></span></dt><dt><span class="sect2"><a href="#disk-avoidance">3.3. Disk Avoidance</a></span></dt><dt><span class="sect2"><a href="#app-data-isolation">3.4. Application Data Isolation</a></span></dt><dt><span class="sect2"><a href="#identifier-linkability">3.5. Cross-Domain Identifier Unlinkability</a></span></dt><dt><span class="sect2"><a href="#fingerprinting-linkability">3.6. Cross-Domain Fingerprinting Unlinkability</a></span></dt><dt><span class="sect2"><a href="#new-identity">3.7. Long-Term Unlinkability via "New Identity" button</a></span></dt><dt><span class="sect2"><a href="#click-to-play">3.8. Click-to-play for plugins and invasive content</a></span></dt><dt><span class="sect2"><a href="#firefox-patches">3.9. Description of Firefox Patches</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Packaging">4. Packaging</a></span></dt><dd><dl><dt><span class="sect2"><a href="#build-security">4.1. Build Process Security</a></span></dt><dt><span class="sect2"><a href="#addons">4.2. External Addons</a></span></dt><dt><span class="sect2"><a href="#prefs">4.3. Pref Changes</a></span></dt><dt><span class="sect2"><a href="#update-mechanism">4.4. Update Security</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Testing">5. Testing</a></span></dt><dd><dl><dt><span class="sect2"><a href="#SingleStateTesting">5.1. Single state testing</a></span></dt></dl></dd></dl></div><div class="sect1" title="1. Introduction"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2974058"></a>1. Introduction</h2></div></div></div><p> |
|
| 3 |
+<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The Design and Implementation of the Tor Browser [DRAFT]</title><meta name="generator" content="DocBook XSL Stylesheets V1.75.2" /></head><body><div class="article" title="The Design and Implementation of the Tor Browser [DRAFT]"><div class="titlepage"><div><div><h2 class="title"><a id="design"></a>The Design and Implementation of the Tor Browser [DRAFT]</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Mike</span> <span class="surname">Perry</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:mikeperry#torproject org">mikeperry#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Erinn</span> <span class="surname">Clark</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:erinn#torproject org">erinn#torproject org</a>></code></p></div></div></div></div><div><div class="author"><h3 class="author"><span class="firstname">Steven</span> <span class="surname">Murdoch</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<a class="email" href="mailto:sjmurdoch#torproject org">sjmurdoch#torproject org</a>></code></p></div></div></div></div><div><p class="pubdate">Oct 4 2011</p></div></div><hr /></div><div class="toc"><p><b>Table of Contents</b></p><dl><dt><span class="sect1"><a href="#id2748505">1. Introduction</a></span></dt><dd><dl><dt><span class="sect2"><a href="#adversary">1.1. Adversary Model</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="#Implementation">3. Implementation</a></span></dt><dd><dl><dt><span class="sect2"><a href="#proxy-obedience">3.1. Proxy Obedience</a></span></dt><dt><span class="sect2"><a href="#state-separation">3.2. State Separation</a></span></dt><dt><span class="sect2"><a href="#disk-avoidance">3.3. Disk Avoidance</a></span></dt><dt><span class="sect2"><a href="#app-data-isolation">3.4. Application Data Isolation</a></span></dt><dt><span class="sect2"><a href="#identifier-linkability">3.5. Cross-Origin Identifier Unlinkability</a></span></dt><dt><span class="sect2"><a href="#fingerprinting-linkability">3.6. Cross-Origin Fingerprinting Unlinkability</a></span></dt><dt><span class="sect2"><a href="#new-identity">3.7. Long-Term Unlinkability via "New Identity" button</a></span></dt><dt><span class="sect2"><a href="#click-to-play">3.8. Click-to-play for plugins and invasive content</a></span></dt><dt><span class="sect2"><a href="#firefox-patches">3.9. Description of Firefox Patches</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Packaging">4. Packaging</a></span></dt><dd><dl><dt><span class="sect2"><a href="#build-security">4.1. Build Process Security</a></span></dt><dt><span class="sect2"><a href="#addons">4.2. External Addons</a></span></dt><dt><span class="sect2"><a href="#prefs">4.3. Pref Changes</a></span></dt><dt><span class="sect2"><a href="#update-mechanism">4.4. Update Security</a></span></dt></dl></dd><dt><span class="sect1"><a href="#Testing">5. Testing</a></span></dt><dd><dl><dt><span class="sect2"><a href="#SingleStateTesting">5.1. Single state testing</a></span></dt></dl></dd></dl></div><div class="sect1" title="1. Introduction"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="id2748505"></a>1. Introduction</h2></div></div></div><p> |
|
| 4 | 4 |
|
| 5 | 5 |
This document describes the <a class="link" href="#adversary" title="1.1. Adversary Model">adversary model</a>, |
| 6 | 6 |
<a class="link" href="#DesignRequirements" title="2. Design Requirements and Philosophy">design requirements</a>, |
| 7 | 7 |
<a class="link" href="#Implementation" title="3. Implementation">implementation</a>, <a class="link" href="#Packaging" title="4. Packaging">packaging</a> and <a class="link" href="#Testing" title="5. Testing">testing |
| 8 | 8 |
procedures</a> of the Tor Browser. It is |
| 9 |
-current as of Tor Browser 2.2.32-4. |
|
| 9 |
+current as of Tor Browser 2.2.33-3. |
|
| 10 | 10 |
|
| 11 | 11 |
</p><p> |
| 12 | 12 |
|
| 13 | 13 |
This document is also meant to serve as a set of design requirements and to |
| 14 | 14 |
describe a reference implementation of a Private Browsing Mode that defends |
| 15 |
-against both local and network adversaries. |
|
| 15 |
+against active network adversaries, in addition to the passive forensic local |
|
| 16 |
+adversary currently addressed by the major browsers. |
|
| 16 | 17 |
|
| 17 | 18 |
</p><div class="sect2" title="1.1. Adversary Model"><div class="titlepage"><div><div><h3 class="title"><a id="adversary"></a>1.1. Adversary Model</h3></div></div></div><p> |
| 18 | 19 |
|
| ... | ... |
@@ -83,82 +84,95 @@ CSS elements, and plugins. Others are performed by adservers seeking to |
| 83 | 84 |
correlate users' activity across different IP addresses, and still others are |
| 84 | 85 |
performed by malicious agents on the Tor network and at national firewalls. |
| 85 | 86 |
|
| 86 |
- </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Inserting Javascript</strong></span><p> |
|
| 87 |
-If not properly disabled, Javascript event handlers and timers |
|
| 88 |
-can cause the browser to perform network activity after Tor has been disabled, |
|
| 89 |
-thus allowing the adversary to correlate Tor and Non-Tor activity and reveal |
|
| 90 |
-a user's non-Tor IP address. Javascript |
|
| 91 |
-also allows the adversary to execute <a class="ulink" href="http://whattheinternetknowsaboutyou.com/" target="_top">history disclosure attacks</a>: |
|
| 92 |
-to query the history via the different attributes of 'visited' links to search |
|
| 93 |
-for particular Google queries, sites, or even to <a class="ulink" href="http://www.mikeonads.com/2008/07/13/using-your-browser-url-history-estimate-gender/" target="_top">profile |
|
| 94 |
-users based on gender and other classifications</a>. Finally, |
|
| 95 |
-Javascript can be used to query the user's timezone via the |
|
| 96 |
-<code class="function">Date()</code> object, and to reduce the anonymity set by querying |
|
| 97 |
-the <code class="function">navigator</code> object for operating system, CPU, locale, |
|
| 98 |
-and user agent information. |
|
| 99 |
- </p></li><li class="listitem"><span class="command"><strong>Inserting Plugins</strong></span><p> |
|
| 100 |
- |
|
| 101 |
-Plugins are abysmal at obeying the proxy settings of the browser. Every plugin |
|
| 102 |
-capable of performing network activity that the author has |
|
| 103 |
-investigated is also capable of performing network activity independent of |
|
| 104 |
-browser proxy settings - and often independent of its own proxy settings. |
|
| 105 |
-Sites that have plugin content don't even have to be malicious to obtain a |
|
| 106 |
-user's |
|
| 107 |
-Non-Tor IP (it usually leaks by itself), though <a class="ulink" href="http://decloak.net" target="_top">plenty of active |
|
| 108 |
-exploits</a> are possible as well. In addition, plugins can be used to store unique identifiers that are more |
|
| 109 |
-difficult to clear than standard cookies. |
|
| 110 |
-<a class="ulink" href="http://epic.org/privacy/cookies/flash.html" target="_top">Flash-based |
|
| 111 |
-cookies</a> fall into this category, but there are likely numerous other |
|
| 112 |
-examples. |
|
| 87 |
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Read and insert identifiers</strong></span><p> |
|
| 113 | 88 |
|
| 114 |
- </p></li><li class="listitem"><span class="command"><strong>Inserting CSS</strong></span><p> |
|
| 89 |
+The browser contains multiple facilities for storing identifiers that the |
|
| 90 |
+adversary creates for the purposes of tracking users. These identifiers are |
|
| 91 |
+most obviously cookies, but also include HTTP auth, DOM storage, cached |
|
| 92 |
+scripts and other elements with embedded identifiers, client certificates, and |
|
| 93 |
+even TLS Session IDs. |
|
| 115 | 94 |
|
| 116 |
-CSS can also be used to correlate Tor and Non-Tor activity and reveal a user's |
|
| 117 |
-Non-Tor IP address, via the usage of |
|
| 118 |
-<a class="ulink" href="http://www.tjkdesign.com/articles/css%20pop%20ups/" target="_top">CSS |
|
| 119 |
-popups</a> - essentially CSS-based event handlers that fetch content via |
|
| 120 |
-CSS's onmouseover attribute. If these popups are allowed to perform network |
|
| 121 |
-activity in a different Tor state than they were loaded in, they can easily |
|
| 122 |
-correlate Tor and Non-Tor activity and reveal a user's IP address. In |
|
| 123 |
-addition, CSS can also be used without Javascript to perform <a class="ulink" href="http://ha.ckers.org/weird/CSS-history.cgi" target="_top">CSS-only history disclosure |
|
| 124 |
-attacks</a>. |
|
| 125 |
- </p></li><li class="listitem"><span class="command"><strong>Read and insert cookies</strong></span><p> |
|
| 95 |
+ </p><p> |
|
| 126 | 96 |
|
| 127 | 97 |
An adversary in a position to perform MITM content alteration can inject |
| 128 | 98 |
document content elements to both read and inject cookies for arbitrary |
| 129 |
-domains. In fact, many "SSL secured" websites are vulnerable to this sort of |
|
| 99 |
+domains. In fact, even many "SSL secured" websites are vulnerable to this sort of |
|
| 130 | 100 |
<a class="ulink" href="http://seclists.org/bugtraq/2007/Aug/0070.html" target="_top">active |
| 131 | 101 |
sidejacking</a>. In addition, the ad networks of course perform tracking |
| 132 | 102 |
with cookies as well. |
| 133 | 103 |
|
| 134 |
- </p></li><li class="listitem"><span class="command"><strong>Create arbitrary cached content</strong></span><p> |
|
| 135 |
- |
|
| 136 |
-Likewise, the browser cache can also be used to <a class="ulink" href="http://crypto.stanford.edu/sameorigin/safecachetest.html" target="_top">store unique |
|
| 137 |
-identifiers</a>. Since by default the cache has no same-origin policy, |
|
| 138 |
-these identifiers can be read by any domain, making them an ideal target for |
|
| 139 |
-ad network-class adversaries. |
|
| 140 |
- |
|
| 141 | 104 |
</p></li><li class="listitem"><a id="fingerprinting"></a><span class="command"><strong>Fingerprint users based on browser |
| 142 | 105 |
attributes</strong></span><p> |
| 143 | 106 |
|
| 144 | 107 |
There is an absurd amount of information available to websites via attributes |
| 145 | 108 |
of the browser. This information can be used to reduce anonymity set, or even |
| 146 |
-<a class="ulink" href="http://mandark.fr/0x000000/articles/Total_Recall_On_Firefox..html" target="_top">uniquely |
|
| 147 |
-fingerprint individual users</a>. </p><p> |
|
| 109 |
+uniquely fingerprint individual users. Fingerprinting is an intimidating |
|
| 110 |
+problem to attempt to tackle, especially without a metric to determine or at |
|
| 111 |
+least intuitively understand and estimate which features will most contribute |
|
| 112 |
+to linkability between visits. |
|
| 148 | 113 |
|
| 149 |
-The <a class="ulink" href="https://wiki.mozilla.org/Fingerprinting#Data" target="_top">Panopticlick study |
|
| 150 |
-done</a> by the EFF attempts to measure the actual entropy - the number of |
|
| 151 |
-identifying bits of information encoded in browser properties. Their result |
|
| 152 |
-data is definitely useful, and the metric is probably the appropriate one for |
|
| 114 |
+</p><p> |
|
| 115 |
+ |
|
| 116 |
+The <a class="ulink" href="https://panopticlick.eff.org/about.php" target="_top">Panopticlick study |
|
| 117 |
+done</a> by the EFF uses the actual entropy - the number of identifying |
|
| 118 |
+bits of information encoded in browser properties - as this metric. Their |
|
| 119 |
+<a class="ulink" href="https://wiki.mozilla.org/Fingerprinting#Data" target="_top">result data</a> |
|
| 120 |
+is definitely useful, and the metric is probably the appropriate one for |
|
| 153 | 121 |
determining how identifying a particular browser property is. However, some |
| 154 | 122 |
quirks of their study means that they do not extract as much information as |
| 155 | 123 |
they could from display information: they only use desktop resolution (which |
| 156 | 124 |
Torbutton reports as the window resolution) and do not attempt to infer the |
| 157 |
-size of toolbars. |
|
| 125 |
+size of toolbars. In the other direction, they may be over-counting in some |
|
| 126 |
+areas, as they did not compute joint entropy over multiple attributes that may |
|
| 127 |
+exhibit a high degree of correlation. Also, new browser features are added |
|
| 128 |
+regularly, so the data should not be taken as final. |
|
| 129 |
+ |
|
| 130 |
+ </p><p> |
|
| 131 |
+ |
|
| 132 |
+Despite the uncertainty, all fingerprinting attacks leverage the following |
|
| 133 |
+attack vectors: |
|
| 134 |
+ |
|
| 135 |
+ </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><span class="command"><strong>Observing Request Behavior</strong></span><p> |
|
| 136 |
+ |
|
| 137 |
+Properties of the user's request behavior comprise the bulk of low-hanging |
|
| 138 |
+fingerprinting targets. These include: User agent, Accept-* headers, pipeline |
|
| 139 |
+usage, and request ordering. Additionally, the use of custom filters such as |
|
| 140 |
+AdBlock and other privacy filters can be used to fingerprint request patterns |
|
| 141 |
+(as an extreme example). |
|
| 142 |
+ |
|
| 143 |
+ </p></li><li class="listitem"><span class="command"><strong>Inserting Javascript</strong></span><p> |
|
| 158 | 144 |
|
| 145 |
+Javascript can reveal a lot of fingerprinting information. It provides DOM |
|
| 146 |
+objects, just as window.screen and window.navigator to extract information |
|
| 147 |
+about the useragent. Also, Javascript can be used to query the user's timezone |
|
| 148 |
+via the <code class="function">Date()</code> object, and to use timing information to |
|
| 149 |
+<a class="ulink" href="http://w2spconf.com/2011/papers/jspriv.pdf" target="_top">fingerprint the CPU |
|
| 150 |
+and interpreter speed</a>. |
|
| 159 | 151 |
|
| 160 | 152 |
|
| 161 |
-</p></li><li class="listitem"><span class="command"><strong>Remotely or locally exploit browser and/or |
|
| 153 |
+ |
|
| 154 |
+ </p></li><li class="listitem"><span class="command"><strong>Inserting Plugins</strong></span><p> |
|
| 155 |
+ |
|
| 156 |
+The Panopticlick project found that the mere list of installed plugins (in |
|
| 157 |
+navigator.plugins) was sufficient to provide a large degree of |
|
| 158 |
+fingerprintability. Additionally, plugins are capable of extracting font lists, |
|
| 159 |
+interface addresses, and other machine information that is beyond what the |
|
| 160 |
+browser would normally provide to content. In addition, plugins can be used to |
|
| 161 |
+store unique identifiers that are more difficult to clear than standard |
|
| 162 |
+cookies. <a class="ulink" href="http://epic.org/privacy/cookies/flash.html" target="_top">Flash-based |
|
| 163 |
+cookies</a> fall into this category, but there are likely numerous other |
|
| 164 |
+examples. Beyond fingerprinting, plugins are also abysmal at obeying the proxy |
|
| 165 |
+settings of the browser. |
|
| 166 |
+ |
|
| 167 |
+ |
|
| 168 |
+ </p></li><li class="listitem"><span class="command"><strong>Inserting CSS</strong></span><p> |
|
| 169 |
+ |
|
| 170 |
+<a class="ulink" href="https://developer.mozilla.org/En/CSS/Media_queries" target="_top">CSS media |
|
| 171 |
+queries</a> can be inserted to gather information about the desktop size, |
|
| 172 |
+widget size, display type, DPI, user agent type, and other information that |
|
| 173 |
+was formerly available only to Javascript. |
|
| 174 |
+ |
|
| 175 |
+ </p></li></ol></div></li><li class="listitem"><span class="command"><strong>Remotely or locally exploit browser and/or |
|
| 162 | 176 |
OS</strong></span><p> |
| 163 | 177 |
|
| 164 | 178 |
Last, but definitely not least, the adversary can exploit either general |
| ... | ... |
@@ -173,19 +187,27 @@ adversary. |
| 173 | 187 |
</p></li></ol></div></div></div></div><div class="sect1" title="2. Design Requirements and Philosophy"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="DesignRequirements"></a>2. Design Requirements and Philosophy</h2></div></div></div><p> |
| 174 | 188 |
|
| 175 | 189 |
The Tor Browser Design Requirements are meant to describe the properties of a |
| 176 |
-Private Browsing Mode that defends against both network and local adversaries. |
|
| 190 |
+Private Browsing Mode that defends against both network and forensic adversaries. |
|
| 177 | 191 |
|
| 178 | 192 |
</p><p> |
| 179 | 193 |
|
| 180 | 194 |
There are two main categories of requirements: <a class="link" href="#security" title="2.1. Security Requirements">Security Requirements</a>, and <a class="link" href="#privacy" title="2.2. Privacy Requirements">Privacy Requirements</a>. Security Requirements are the |
| 181 |
-minimum properties in order for a web client platform to be able to support |
|
| 182 |
-Tor. Privacy requirements are the set of properties that cause us to prefer |
|
| 183 |
-one platform over another. |
|
| 195 |
+minimum properties in order for a browser to be able to support Tor and |
|
| 196 |
+similar privacy proxies safely. Privacy requirements are the set of properties |
|
| 197 |
+that cause us to prefer one browser platform over another. |
|
| 198 |
+ |
|
| 199 |
+ </p><p> |
|
| 200 |
+ |
|
| 201 |
+While we will endorse the use of browsers that meet the security requirements, |
|
| 202 |
+it is primarily the privacy requirements that cause us to maintain our own |
|
| 203 |
+browser distribution. |
|
| 184 | 204 |
|
| 185 | 205 |
</p><p> |
| 186 | 206 |
|
| 187 |
-We will maintain an alternate distribution of the web client in order to |
|
| 188 |
-maintain and/or restore privacy properties to our users. |
|
| 207 |
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL |
|
| 208 |
+ NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and |
|
| 209 |
+ "OPTIONAL" in this document are to be interpreted as described in |
|
| 210 |
+ <a class="ulink" href="https://www.ietf.org/rfc/rfc2119.txt" target="_top">RFC 2119</a>. |
|
| 189 | 211 |
|
| 190 | 212 |
</p><div class="sect2" title="2.1. Security Requirements"><div class="titlepage"><div><div><h3 class="title"><a id="security"></a>2.1. Security Requirements</h3></div></div></div><p> |
| 191 | 213 |
|
| ... | ... |
@@ -199,15 +221,23 @@ in order for Tor to support the use of a web client platform. |
| 199 | 221 |
MUST NOT bypass Tor proxy settings for any content.</p></li><li class="listitem"><span class="command"><strong>State Separation</strong></span><p>The browser MUST NOT provide any stored state to the content window |
| 200 | 222 |
from other browsers or other browsing modes, including shared state from |
| 201 | 223 |
plugins, machine identifiers, and TLS session state. |
| 202 |
-</p></li><li class="listitem"><span class="command"><strong>Disk Avoidance</strong></span><p>The |
|
| 203 |
-browser SHOULD NOT write any browsing history information to disk, or store it |
|
| 204 |
-in memory beyond the duration of one Tor session, unless the user has |
|
| 205 |
-explicitly opted to store their browsing history information to |
|
| 206 |
-disk.</p></li><li class="listitem"><span class="command"><strong>Application Data Isolation</strong></span><p>The browser |
|
| 207 |
-MUST NOT write or cause the operating system to |
|
| 208 |
-write <span class="emphasis"><em>any information</em></span> to disk outside of the application |
|
| 209 |
-directory. All exceptions and shortcomings due to operating system behavior |
|
| 210 |
-MUST BE documented. |
|
| 224 |
+</p></li><li class="listitem"><span class="command"><strong>Disk Avoidance</strong></span><p> |
|
| 225 |
+ |
|
| 226 |
+The browser MUST NOT write any information that is derived from or that |
|
| 227 |
+reveals browsing activity to the disk, or store it in memory beyond the |
|
| 228 |
+duration of one browsing session, unless the user has explicitly opted to |
|
| 229 |
+store their browsing history information to disk. |
|
| 230 |
+ |
|
| 231 |
+</p></li><li class="listitem"><span class="command"><strong>Application Data Isolation</strong></span><p> |
|
| 232 |
+ |
|
| 233 |
+The components involved in providing private browsing MUST BE self-contained, |
|
| 234 |
+or MUST provide a mechanism for rapid, complete removal of all evidence of the |
|
| 235 |
+use of the mode. In other words, the browser MUST NOT write or cause the |
|
| 236 |
+operating system to write <span class="emphasis"><em>any information</em></span> about the use |
|
| 237 |
+of private browsing to disk outside of the application's control. The user |
|
| 238 |
+must be able to ensure that secure removal of the software is sufficient to |
|
| 239 |
+remove evidence of the use of the software. All exceptions and shortcomings |
|
| 240 |
+due to operating system behavior MUST BE wiped by an uninstaller. |
|
| 211 | 241 |
|
| 212 | 242 |
</p></li><li class="listitem"><span class="command"><strong>Update Safety</strong></span><p>The browser SHOULD NOT perform unsafe updates or upgrades.</p></li></ol></div></div><div class="sect2" title="2.2. Privacy Requirements"><div class="titlepage"><div><div><h3 class="title"><a id="privacy"></a>2.2. Privacy Requirements</h3></div></div></div><p> |
| 213 | 243 |
|
| ... | ... |
@@ -217,25 +247,35 @@ on another site without their knowledge or explicit consent. With respect to |
| 217 | 247 |
platform support, privacy requirements are the set of properties that cause us |
| 218 | 248 |
to prefer one platform over another. |
| 219 | 249 |
|
| 220 |
- </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Cross-Domain Identifier Unlinkability</strong></span><p> |
|
| 250 |
+ </p><p> |
|
| 251 |
+ |
|
| 252 |
+For the purposes of the unlinkability requirements of this section as well as |
|
| 253 |
+the descriptions in the <a class="link" href="#Implementation" title="3. Implementation">implementation |
|
| 254 |
+section</a>, a <span class="command"><strong>url bar origin</strong></span> means at least the |
|
| 255 |
+second-level DNS name. For example, for mail.google.com, the origin would be |
|
| 256 |
+google.com. Implementations MAY, at their option, restrict the url bar origin |
|
| 257 |
+to be the entire fully qualified domain name |
|
| 221 | 258 |
|
| 222 |
-User activity on one url bar domain MUST NOT be linkable to their activity in |
|
| 223 |
-any other domain by any third party. This property specifically applies to |
|
| 259 |
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><span class="command"><strong>Cross-Origin Identifier Unlinkability</strong></span><p> |
|
| 260 |
+ |
|
| 261 |
+User activity on one url bar origin MUST NOT be linkable to their activity in |
|
| 262 |
+any other url bar origin by any third party. This property specifically applies to |
|
| 224 | 263 |
linkability from stored browser identifiers, authentication tokens, and shared |
| 225 | 264 |
state. This functionality SHOULD NOT interfere with federated login in a |
| 226 | 265 |
substantial way. |
| 227 | 266 |
|
| 228 |
- </p></li><li class="listitem"><span class="command"><strong>Cross-Domain Fingerprinting Unlinkability</strong></span><p> |
|
| 267 |
+ </p></li><li class="listitem"><span class="command"><strong>Cross-Origin Fingerprinting Unlinkability</strong></span><p> |
|
| 229 | 268 |
|
| 230 |
-User activity on one url bar domain MUST NOT be linkable to their activity in |
|
| 231 |
-any other domain by any third party. This property specifically applies to |
|
| 269 |
+User activity on one url bar origin MUST NOT be linkable to their activity in |
|
| 270 |
+any other url bar origin by any third party. This property specifically applies to |
|
| 232 | 271 |
linkability from fingerprinting browser behavior. |
| 233 | 272 |
|
| 234 | 273 |
</p></li><li class="listitem"><span class="command"><strong>Long-Term Unlinkability</strong></span><p> |
| 235 | 274 |
|
| 236 |
-The browser SHOULD provide an obvious, easy way to remove all of their authentication |
|
| 237 |
-tokens and browser state and obtain a fresh identity. Additionally, this |
|
| 238 |
-should happen by default automatically upon browser restart. |
|
| 275 |
+The browser SHOULD provide an obvious, easy way to remove all of their |
|
| 276 |
+authentication tokens and browser state and obtain a fresh identity. |
|
| 277 |
+Additionally, the browser SHOULD clear linkable state by default automatically |
|
| 278 |
+upon browser restart, except at user option. |
|
| 239 | 279 |
|
| 240 | 280 |
</p></li></ol></div></div><div class="sect2" title="2.3. Philosophy"><div class="titlepage"><div><div><h3 class="title"><a id="philosophy"></a>2.3. Philosophy</h3></div></div></div><p> |
| 241 | 281 |
|
| ... | ... |
@@ -288,17 +328,17 @@ to reduce linkability. |
| 288 | 328 |
<a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3100" target="_top">Another |
| 289 | 329 |
failure of Torbutton</a> was (and still is) the options panel. Each option |
| 290 | 330 |
that detectably alters browser behavior can be used as a fingerprinting tool. |
| 291 |
-Similarly, all extensions <a class="ulink" href="http://blog.chromium.org/2010/06/extensions-in-incognito.html" target="_top">should be |
|
| 331 |
+Similarly, all extensions <a class="ulink" href="http://blog.chromium.org/2010/06/extensions-in-incognito.html" target="_top">SHOULD be |
|
| 292 | 332 |
disabled in the mode</a> except as an opt-in basis. We should not load |
| 293 | 333 |
system-wide addons or plugins. |
| 294 | 334 |
|
| 295 | 335 |
</p><p> |
| 296 |
-Instead of global browser privacy options, privacy decisions should be made |
|
| 336 |
+Instead of global browser privacy options, privacy decisions SHOULD be made |
|
| 297 | 337 |
<a class="ulink" href="https://wiki.mozilla.org/Privacy/Features/Site-based_data_management_UI" target="_top">per |
| 298 |
-top-level url-bar domain</a> to eliminate the possibility of linkability |
|
| 338 |
+url bar origin</a> to eliminate the possibility of linkability |
|
| 299 | 339 |
between domains. For example, when a plugin object (or a Javascript access of |
| 300 | 340 |
window.plugins) is present in a page, the user should be given the choice of |
| 301 |
-allowing that plugin object for that top-level url-bar domain only. The same |
|
| 341 |
+allowing that plugin object for that url bar origin only. The same |
|
| 302 | 342 |
goes for exemptions to third party cookie policy, geo-location, and any other |
| 303 | 343 |
privacy permissions. |
| 304 | 344 |
</p><p> |
| ... | ... |
@@ -344,8 +384,8 @@ SOCKS proxy. It sets <span class="command"><strong>network.proxy.socks_remote_dn |
| 344 | 384 |
<span class="command"><strong>network.proxy.socks_version</strong></span>, and |
| 345 | 385 |
<span class="command"><strong>network.proxy.socks_port</strong></span>. |
| 346 | 386 |
</p></li><li class="listitem">Disabling plugins |
| 347 |
- <p> |
|
| 348 |
- Plugins have the ability to make arbitrary OS system calls. This includes |
|
| 387 |
+ |
|
| 388 |
+ <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 |
|
| 349 | 389 |
the ability to make UDP sockets and send arbitrary data independent of the |
| 350 | 390 |
browser proxy settings. |
| 351 | 391 |
</p><p> |
| ... | ... |
@@ -359,6 +399,12 @@ In addition, to prevent any unproxied activity by plugins at load time, we |
| 359 | 399 |
also patch the Firefox source code to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/refs/heads/maint-2.2:/src/current-patches/0007-Block-all-plugins-except-flash.patch" target="_top">prevent the load of any plugins except |
| 360 | 400 |
for Flash and Gnash</a>. |
| 361 | 401 |
|
| 402 |
+ </p><p> |
|
| 403 |
+ |
|
| 404 |
+Finally, even if the user alters their browser settings to re-enable the Flash |
|
| 405 |
+plugin, we have configured NoScript to provide click-to-play placeholders, so |
|
| 406 |
+that only desired objects will be loaded, and only after user confirmation. |
|
| 407 |
+ |
|
| 362 | 408 |
</p></li><li class="listitem">External App Blocking |
| 363 | 409 |
<p> |
| 364 | 410 |
External apps, if launched automatically, can be induced to load files that |
| ... | ... |
@@ -371,13 +417,13 @@ launch a helper app. |
| 371 | 417 |
Tor Browser State is separated from existing browser state through use of a |
| 372 | 418 |
custom Firefox profile. Furthermore, plugins are disabled, which prevents |
| 373 | 419 |
Flash cookies from leaking from a pre-existing Flash directory. |
| 374 |
- </p></div><div class="sect2" title="3.3. Disk Avoidance"><div class="titlepage"><div><div><h3 class="title"><a id="disk-avoidance"></a>3.3. Disk Avoidance</h3></div></div></div><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="id2980587"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 375 |
-Tor Browser should optionally prevent all disk records of browser activity. |
|
| 420 |
+ </p></div><div class="sect2" title="3.3. Disk Avoidance"><div class="titlepage"><div><div><h3 class="title"><a id="disk-avoidance"></a>3.3. Disk Avoidance</h3></div></div></div><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="id2777452"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 421 |
+Tor Browser MUST (at user option) prevent all disk records of browser activity. |
|
| 376 | 422 |
The user should be able to optionally enable URL history and other history |
| 377 | 423 |
features if they so desire. Once we <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3100" target="_top">simplify the |
| 378 | 424 |
preferences interface</a>, we will likely just enable Private Browsing |
| 379 | 425 |
mode by default to handle this goal. |
| 380 |
- </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="id3006806"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 426 |
+ </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="id2765334"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 381 | 427 |
For now, Tor Browser blocks write access to the disk through Torbutton |
| 382 | 428 |
using several Firefox preferences. |
| 383 | 429 |
|
| ... | ... |
@@ -416,9 +462,9 @@ bundle directory. This is to ensure that the user is able to completely and |
| 416 | 462 |
safely remove the bundle without leaving other traces of Tor usage on their |
| 417 | 463 |
computer. |
| 418 | 464 |
|
| 419 |
- </p><p>XXX: sjmurdoch, Erinn: explain what magic we do to satisfy this, |
|
| 465 |
+ </p><p>FIXME: sjmurdoch, Erinn: explain what magic we do to satisfy this, |
|
| 420 | 466 |
and/or what additional work or auditing needs to be done. |
| 421 |
- </p></div><div class="sect2" title="3.5. Cross-Domain Identifier Unlinkability"><div class="titlepage"><div><div><h3 class="title"><a id="identifier-linkability"></a>3.5. Cross-Domain Identifier Unlinkability</h3></div></div></div><p> |
|
| 467 |
+ </p></div><div class="sect2" title="3.5. Cross-Origin Identifier Unlinkability"><div class="titlepage"><div><div><h3 class="title"><a id="identifier-linkability"></a>3.5. Cross-Origin Identifier Unlinkability</h3></div></div></div><p> |
|
| 422 | 468 |
|
| 423 | 469 |
The Tor Browser MUST prevent a user's activity on one site from being linked |
| 424 | 470 |
to their activity on another site. When this goal cannot yet be met with an |
| ... | ... |
@@ -435,20 +481,19 @@ consent. |
| 435 | 481 |
|
| 436 | 482 |
The benefit of this approach comes not only in the form of reduced |
| 437 | 483 |
linkability, but also in terms of simplified privacy UI. If all stored browser |
| 438 |
-state and permissions become associated with the top-level url-bar domain, the |
|
| 439 |
-six or seven different pieces of privacy UI governing these identifiers and |
|
| 484 |
+state and permissions become associated with the url bar origin, the six or |
|
| 485 |
+seven different pieces of privacy UI governing these identifiers and |
|
| 440 | 486 |
permissions can become just one piece of UI. For instance, a window that lists |
| 441 |
-the top-level url bar domains for which browser state exists with the ability |
|
| 442 |
-to clear and/or block them, possibly with a context-menu option to drill down |
|
| 443 |
-into specific types of state. An exmaple of this simplifcation can be seen in |
|
| 444 |
-Figure 1. |
|
| 487 |
+the url bar origin for which browser state exists, possibly with a |
|
| 488 |
+context-menu option to drill down into specific types of state or permissions. |
|
| 489 |
+An example of this simplification can be seen in Figure 1. |
|
| 445 | 490 |
|
| 446 |
- </p><div class="figure"><a id="id2962771"></a><p class="title"><b>Figure 1. Improving the Privacy UI</b></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="CookieManagers.png" align="middle" alt="Improving the Privacy UI" /></div><div class="caption"><p></p> |
|
| 491 |
+ </p><div class="figure"><a id="id2758612"></a><p class="title"><b>Figure 1. Improving the Privacy UI</b></p><div class="figure-contents"><div class="mediaobject" align="center"><img src="CookieManagers.png" align="middle" alt="Improving the Privacy UI" /></div><div class="caption"><p></p> |
|
| 447 | 492 |
|
| 448 | 493 |
On the left is the standard Firefox cookie manager. On the right is a mock-up |
| 449 |
-of how isolating identifiers to the URL bar domain might simplify the privacy |
|
| 494 |
+of how isolating identifiers to the URL bar origin might simplify the privacy |
|
| 450 | 495 |
UI for all data - not just cookies. Both windows represent the set of |
| 451 |
-Cookies accomulated after visiting just five sites, but the window on the |
|
| 496 |
+Cookies accumulated after visiting just five sites, but the window on the |
|
| 452 | 497 |
right has the option of also representing history, DOM Storage, HTTP Auth, |
| 453 | 498 |
search form history, login values, and so on within a context menu for each |
| 454 | 499 |
site. |
| ... | ... |
@@ -456,10 +501,10 @@ site. |
| 456 | 501 |
</div></div></div><br class="figure-break" /><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">Cookies |
| 457 | 502 |
<p><span class="command"><strong>Design Goal:</strong></span> |
| 458 | 503 |
|
| 459 |
-All cookies should be double-keyed to the top-level domain. There exists a |
|
| 460 |
-<a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=565965" target="_top">Mozilla |
|
| 461 |
-bug</a> that contains a prototype patch, but it lacks UI, and does not |
|
| 462 |
-apply to modern Firefoxes. |
|
| 504 |
+All cookies MUST be double-keyed to the url bar origin and third-party |
|
| 505 |
+origin. There exists a <a class="ulink" href="https://bugzilla.mozilla.org/show_bug.cgi?id=565965" target="_top">Mozilla bug</a> |
|
| 506 |
+that contains a prototype patch, but it lacks UI, and does not apply to modern |
|
| 507 |
+Firefoxes. |
|
| 463 | 508 |
|
| 464 | 509 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
| 465 | 510 |
|
| ... | ... |
@@ -471,32 +516,40 @@ unlinkability trumps that desire. |
| 471 | 516 |
|
| 472 | 517 |
</p></li><li class="listitem">Cache |
| 473 | 518 |
<p> |
| 474 |
-Cache is isolated to the top-level url bar domain by using a technique |
|
| 475 |
-pioneered by Colin Jackson et al, via their work on <a class="ulink" href="http://www.safecache.com/" target="_top">SafeCache</a>. The technique re-uses the |
|
| 519 |
+ |
|
| 520 |
+Cache is isolated to the url bar origin by using a technique pioneered by |
|
| 521 |
+Colin Jackson et al, via their work on <a class="ulink" href="http://www.safecache.com/" target="_top">SafeCache</a>. The technique re-uses the |
|
| 476 | 522 |
<a class="ulink" href="https://developer.mozilla.org/en/XPCOM_Interface_Reference/nsICachingChannel" target="_top">nsICachingChannel.cacheKey</a> |
| 477 |
-attribute that Firefox uses internally to prevent improper caching of HTTP POST data. |
|
| 523 |
+attribute that Firefox uses internally to prevent improper caching and reuse |
|
| 524 |
+of HTTP POST data. |
|
| 525 |
+ |
|
| 478 | 526 |
</p><p> |
| 527 |
+ |
|
| 479 | 528 |
However, to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3666" target="_top">increase the |
| 480 |
-security of the isolation</a> and to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3754" target="_top">solve strange and |
|
| 481 |
-unknown conflicts with OCSP</a>, we had to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/refs/heads/maint-2.2:/src/current-patches/0005-Add-a-string-based-cacheKey.patch" target="_top">patch |
|
| 482 |
-Firefox to provide a cacheDomain cache attribute</a>. We use the full |
|
| 483 |
-url bar domain as input to this field. |
|
| 529 |
+security of the isolation</a> and to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3754" target="_top">solve conflicts |
|
| 530 |
+with OCSP relying the cacheKey property for reuse of POST requests</a>, we |
|
| 531 |
+had to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/refs/heads/maint-2.2:/src/current-patches/0005-Add-a-string-based-cacheKey.patch" target="_top">patch |
|
| 532 |
+Firefox to provide a cacheDomain cache attribute</a>. We use the fully |
|
| 533 |
+qualified url bar domain as input to this field. |
|
| 534 |
+ |
|
| 484 | 535 |
</p><p> |
| 485 | 536 |
|
| 537 |
+ Furthermore, we chose a different |
|
| 538 |
+isolation scheme than the Stanford implementation. First, we decoupled the |
|
| 539 |
+cache isolation from the third party cookie attribute. Second, we use several |
|
| 540 |
+mechanisms to attempt to determine the actual location attribute of the |
|
| 541 |
+top-level window (to obtain the url bar FQDN) used to load the page, as |
|
| 542 |
+opposed to relying solely on the referer property. |
|
| 486 | 543 |
|
| 487 |
-Furthermore, we chose a different isolation scheme than the Stanford |
|
| 488 |
-implementation. First, we decoupled the cache isolation from the third party |
|
| 489 |
-cookie attribute. Second, we use several mechanisms to attempt to determine |
|
| 490 |
-the actual location attribute of the top-level window (the url bar domain) |
|
| 491 |
-used to load the page, as opposed to relying solely on the referer property. |
|
| 492 | 544 |
</p><p> |
| 545 |
+ |
|
| 493 | 546 |
Therefore, <a class="ulink" href="http://crypto.stanford.edu/sameorigin/safecachetest.html" target="_top">the original |
| 494 |
-Stanford test |
|
| 495 |
-cases</a> are expected to fail. Functionality can still be verified by |
|
| 496 |
-navigating to <a class="ulink" href="about:cache" target="_top">about:cache</a> and viewing the key |
|
| 497 |
-used for each cache entry. Each third party element should have an additional |
|
| 498 |
-"domain=string" property prepended, which will list the top-level urlbar |
|
| 499 |
-domain that was used to source the third party element. |
|
| 547 |
+Stanford test cases</a> are expected to fail. Functionality can still be |
|
| 548 |
+verified by navigating to <a class="ulink" href="about:cache" target="_top">about:cache</a> and |
|
| 549 |
+viewing the key used for each cache entry. Each third party element should |
|
| 550 |
+have an additional "domain=string" property prepended, which will list the |
|
| 551 |
+FQDN that was used to source the third party element. |
|
| 552 |
+ |
|
| 500 | 553 |
</p></li><li class="listitem">HTTP Auth |
| 501 | 554 |
<p> |
| 502 | 555 |
|
| ... | ... |
@@ -510,30 +563,52 @@ observer to modify it. |
| 510 | 563 |
</p></li><li class="listitem">DOM Storage |
| 511 | 564 |
<p><span class="command"><strong>Design Goal:</strong></span> |
| 512 | 565 |
|
| 513 |
-DOM storage for third party domains MUST BE isolated to the url bar domain, |
|
| 566 |
+DOM storage for third party domains MUST BE isolated to the url bar origin, |
|
| 514 | 567 |
to prevent linkability between sites. |
| 515 | 568 |
|
| 516 | 569 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
| 517 | 570 |
|
| 518 | 571 |
Because it is isolated to third party domain as opposed to top level url bar |
| 519 |
-domain, we entirely disable DOM storage as a stopgap to ensure unlinkability. |
|
| 572 |
+origin, we entirely disable DOM storage as a stopgap to ensure unlinkability. |
|
| 520 | 573 |
|
| 521 | 574 |
</p></li><li class="listitem">TLS session resumption and HTTP Keep-Alive |
| 522 | 575 |
<p> |
| 523 |
-TLS session resumption and HTTP Keep-Alive must not allow third party origins |
|
| 576 |
+TLS session resumption and HTTP Keep-Alive MUST NOT allow third party origins |
|
| 524 | 577 |
to track users via either TLS session IDs, or the fact that different requests |
| 525 | 578 |
arrive on the same TCP connection. |
| 526 | 579 |
</p><p><span class="command"><strong>Design Goal:</strong></span> |
| 527 | 580 |
|
| 528 |
-TLS session resumption IDs must be limited to the top-level url bar domain. |
|
| 529 |
-HTTP Keep-Alive connections from a third party in one top-level domain must |
|
| 530 |
-not be reused for that same third party in another top-level domain. |
|
| 581 |
+TLS session resumption IDs MUST be limited to the url bar origin. |
|
| 582 |
+HTTP Keep-Alive connections from a third party in one url bar origin must |
|
| 583 |
+not be reused for that same third party in another url bar origin. |
|
| 531 | 584 |
|
| 532 | 585 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
| 533 | 586 |
|
| 534 | 587 |
We <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/4099" target="_top">plan to |
| 535 | 588 |
disable</a> TLS session resumption, and limit HTTP Keep-alive duration. |
| 536 | 589 |
|
| 590 |
+ </p></li><li class="listitem">User confirmation for cross-origin redirects |
|
| 591 |
+ <p><span class="command"><strong>Design Goal:</strong></span> |
|
| 592 |
+ |
|
| 593 |
+To prevent attacks aimed at subverting the Cross-Origin Identifier |
|
| 594 |
+Unlinkability <a class="link" href="#privacy" title="2.2. Privacy Requirements">privacy requirement</a>, the browser |
|
| 595 |
+MUST prompt users before following redirects that would cause the user to |
|
| 596 |
+automatically navigate between two different url bar origins. |
|
| 597 |
+ |
|
| 598 |
+ </p><p><span class="command"><strong>Implementation status:</strong></span> |
|
| 599 |
+ |
|
| 600 |
+There are numerous ways for the user to be redirected, and the Firefox API |
|
| 601 |
+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 |
|
| 602 |
+open</a> to implement what we can. |
|
| 603 |
+ |
|
| 604 |
+ </p><p> |
|
| 605 |
+ |
|
| 606 |
+We are not concerned with linkability due to explicit user action (either by |
|
| 607 |
+accepting cross-origin redirects, or by clicking normal links) because it is |
|
| 608 |
+assumed that private browsing sessions will be relatively short-lived, |
|
| 609 |
+especially with frequent use of the <a class="link" href="#new-identity" title="3.7. Long-Term Unlinkability via "New Identity" button">New |
|
| 610 |
+Identity</a> button. |
|
| 611 |
+ |
|
| 537 | 612 |
</p></li><li class="listitem">window.name |
| 538 | 613 |
<p> |
| 539 | 614 |
|
| ... | ... |
@@ -565,11 +640,11 @@ series. <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3 |
| 565 | 640 |
#3455</a> is the Torbutton ticket to make use of the new Tor |
| 566 | 641 |
functionality. |
| 567 | 642 |
|
| 568 |
- </p></li></ol></div></div><div class="sect2" title="3.6. Cross-Domain Fingerprinting Unlinkability"><div class="titlepage"><div><div><h3 class="title"><a id="fingerprinting-linkability"></a>3.6. Cross-Domain Fingerprinting Unlinkability</h3></div></div></div><p> |
|
| 643 |
+ </p></li></ol></div></div><div class="sect2" title="3.6. Cross-Origin Fingerprinting Unlinkability"><div class="titlepage"><div><div><h3 class="title"><a id="fingerprinting-linkability"></a>3.6. Cross-Origin Fingerprinting Unlinkability</h3></div></div></div><p> |
|
| 569 | 644 |
|
| 570 | 645 |
In order to properly address the fingerprinting adversary on a technical |
| 571 | 646 |
level, we need a metric to measure linkability of the various browser |
| 572 |
-properties that extend beyond any stored origin-related state. <a class="ulink" href="https://panopticlick.eff.org/about.php" target="_top">The Panopticlick Project</a> |
|
| 647 |
+properties beyond any stored origin-related state. <a class="ulink" href="https://panopticlick.eff.org/about.php" target="_top">The Panopticlick Project</a> |
|
| 573 | 648 |
by the EFF provides us with exactly this metric. The researchers conducted a |
| 574 | 649 |
survey of volunteers who were asked to visit an experiment page that harvested |
| 575 | 650 |
many of the above components. They then computed the Shannon Entropy of the |
| ... | ... |
@@ -601,7 +676,7 @@ window.navigator.plugins, as well as their internal functionality. |
| 601 | 676 |
|
| 602 | 677 |
</p><p><span class="command"><strong>Design Goal:</strong></span> |
| 603 | 678 |
|
| 604 |
-All plugins that have not been specifically audited or sandboxed must be |
|
| 679 |
+All plugins that have not been specifically audited or sandboxed MUST be |
|
| 605 | 680 |
disabled. To reduce linkability potential, even sandboxed plugins should not |
| 606 | 681 |
be allowed to load objects until the user has clicked through a click-to-play |
| 607 | 682 |
barrier. Additionally, version information should be reduced or obfuscated |
| ... | ... |
@@ -641,7 +716,7 @@ implemented any defense against CSS or Javascript fonts. |
| 641 | 716 |
</p></li><li class="listitem">User Agent and HTTP Headers |
| 642 | 717 |
<p><span class="command"><strong>Design Goal:</strong></span> |
| 643 | 718 |
|
| 644 |
-All Tor Browser users should provide websites with an identical user agent and |
|
| 719 |
+All Tor Browser users MUST provide websites with an identical user agent and |
|
| 645 | 720 |
HTTP header set for a given request type. We omit the Firefox minor revision, |
| 646 | 721 |
and report a popular Windows platform. If the software is kept up to date, |
| 647 | 722 |
these headers should remain identical across the population even when updated. |
| ... | ... |
@@ -683,13 +758,13 @@ to be dealt with</a>. |
| 683 | 758 |
</p></li><li class="listitem">Timezone and clock offset |
| 684 | 759 |
<p><span class="command"><strong>Design Goal:</strong></span> |
| 685 | 760 |
|
| 686 |
-All Tor Browser users should report the same timezone to websites. Currently, |
|
| 687 |
-we choose UTC for this purpose, although an equally valid argument could be |
|
| 688 |
-made for EDT/EST due to the large English-speaking population density. |
|
| 689 |
-Additionally, the Tor software should detect if the users clock is |
|
| 690 |
-significantly divergent from the clocks of the relays that it connects to, and |
|
| 691 |
-use this to reset the clock values used in Tor Browser to something reasonably |
|
| 692 |
-accurate. |
|
| 761 |
+All Tor Browser users MUST report the same timezone to websites. Currently, we |
|
| 762 |
+choose UTC for this purpose, although an equally valid argument could be made |
|
| 763 |
+for EDT/EST due to the large English-speaking population density (coupled with |
|
| 764 |
+the fact that we spoof a US English user agent). Additionally, the Tor |
|
| 765 |
+software should detect if the users clock is significantly divergent from the |
|
| 766 |
+clocks of the relays that it connects to, and use this to reset the clock |
|
| 767 |
+values used in Tor Browser to something reasonably accurate. |
|
| 693 | 768 |
|
| 694 | 769 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
| 695 | 770 |
|
| ... | ... |
@@ -764,11 +839,11 @@ Currently we simply disable WebGL. |
| 764 | 839 |
</p></li></ol></div></div><div class="sect2" title="3.7. Long-Term Unlinkability via "New Identity" button"><div class="titlepage"><div><div><h3 class="title"><a id="new-identity"></a>3.7. Long-Term Unlinkability via "New Identity" button</h3></div></div></div><p> |
| 765 | 840 |
In order to avoid long-term linkability, we provide a "New Identity" context |
| 766 | 841 |
menu option in Torbutton. |
| 767 |
- </p><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="id2991890"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 842 |
+ </p><div class="sect3" title="Design Goal:"><div class="titlepage"><div><div><h4 class="title"><a id="id2751206"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 768 | 843 |
|
| 769 |
-All linkable identifiers and browser state should be cleared by this feature. |
|
| 844 |
+All linkable identifiers and browser state MUST be cleared by this feature. |
|
| 770 | 845 |
|
| 771 |
- </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="id3007443"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 846 |
+ </blockquote></div></div><div class="sect3" title="Implementation Status:"><div class="titlepage"><div><div><h4 class="title"><a id="id2756691"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 772 | 847 |
First, Torbutton disables |
| 773 | 848 |
all open tabs and windows via nsIContentPolicy blocking, and then closes each |
| 774 | 849 |
tab and window. The extra step for blocking tabs is done as a precaution to |
| ... | ... |
@@ -812,19 +887,14 @@ site permissions, as well as stored HTTPS STS policy from visited sites. |
| 812 | 887 |
The pref does successfully clear the permissions manager memory if toggled. It |
| 813 | 888 |
does not need to be set in prefs.js, and can be handled by Torbutton. |
| 814 | 889 |
|
| 815 |
- </p><p><span class="command"><strong>Design Goal:</strong></span> |
|
| 816 |
- |
|
| 817 |
-As an additional design goal, we would like to later alter this patch to allow this |
|
| 818 |
-information to be cleared from memory. The implementation does not currently |
|
| 819 |
-allow this. |
|
| 820 |
- |
|
| 821 | 890 |
</p></li><li class="listitem">Make Intermediate Cert Store memory-only |
| 822 | 891 |
<p> |
| 823 | 892 |
|
| 824 |
-The intermediate certificate store holds information about SSL certificates |
|
| 825 |
-that may only be used by a limited number of domains. In some cases |
|
| 826 |
-effectively recording on disk the fact that a website owned by a certain |
|
| 827 |
-organization was viewed. |
|
| 893 |
+The intermediate certificate store records the intermediate SSL certificates |
|
| 894 |
+the browser has seen to date. Because these intermediate certificates are used |
|
| 895 |
+by a limited number of domains (and in some cases, only a single domain), |
|
| 896 |
+the intermediate certificate store can serve as a low-resolution record of |
|
| 897 |
+browsing history. |
|
| 828 | 898 |
|
| 829 | 899 |
</p><p><span class="command"><strong>Design Goal:</strong></span> |
| 830 | 900 |
|
| ... | ... |
@@ -846,8 +916,8 @@ auth to silently track users between domains</a>. |
| 846 | 916 |
To <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3666" target="_top">increase the |
| 847 | 917 |
security of cache isolation</a> and to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3754" target="_top">solve strange and |
| 848 | 918 |
unknown conflicts with OCSP</a>, we had to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/refs/heads/maint-2.2:/src/current-patches/0005-Add-a-string-based-cacheKey.patch" target="_top">patch |
| 849 |
-Firefox to provide a cacheDomain cache attribute</a>. We use the full |
|
| 850 |
-url bar domain as input to this field. |
|
| 919 |
+Firefox to provide a cacheDomain cache attribute</a>. We use the url bar |
|
| 920 |
+FQDN as input to this field. |
|
| 851 | 921 |
|
| 852 | 922 |
</p></li><li class="listitem">Randomize HTTP pipeline order and depth |
| 853 | 923 |
<p> |
| ... | ... |
@@ -869,7 +939,7 @@ ruin our day, and censorship filters). Hence we rolled our own. |
| 869 | 939 |
This patch prevents random URLs from being inserted into content-prefs.sqllite in |
| 870 | 940 |
the profile directory as content prefs change (includes site-zoom and perhaps |
| 871 | 941 |
other site prefs?). |
| 872 |
- </p></li></ol></div></div></div><div class="sect1" title="4. Packaging"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Packaging"></a>4. Packaging</h2></div></div></div><p> </p><div class="sect2" title="4.1. Build Process Security"><div class="titlepage"><div><div><h3 class="title"><a id="build-security"></a>4.1. Build Process Security</h3></div></div></div><p> </p></div><div class="sect2" title="4.2. External Addons"><div class="titlepage"><div><div><h3 class="title"><a id="addons"></a>4.2. External Addons</h3></div></div></div><p> </p><div class="sect3" title="Included Addons"><div class="titlepage"><div><div><h4 class="title"><a id="id2974027"></a>Included Addons</h4></div></div></div></div><div class="sect3" title="Excluded Addons"><div class="titlepage"><div><div><h4 class="title"><a id="id2999979"></a>Excluded Addons</h4></div></div></div></div><div class="sect3" title="Dangerous Addons"><div class="titlepage"><div><div><h4 class="title"><a id="id3006218"></a>Dangerous Addons</h4></div></div></div></div></div><div class="sect2" title="4.3. Pref Changes"><div class="titlepage"><div><div><h3 class="title"><a id="prefs"></a>4.3. Pref Changes</h3></div></div></div><p> </p></div><div class="sect2" title="4.4. Update Security"><div class="titlepage"><div><div><h3 class="title"><a id="update-mechanism"></a>4.4. Update Security</h3></div></div></div><p> </p></div></div><div class="sect1" title="5. Testing"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Testing"></a>5. Testing</h2></div></div></div><p> |
|
| 942 |
+ </p></li></ol></div></div></div><div class="sect1" title="4. Packaging"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Packaging"></a>4. Packaging</h2></div></div></div><p> </p><div class="sect2" title="4.1. Build Process Security"><div class="titlepage"><div><div><h3 class="title"><a id="build-security"></a>4.1. Build Process Security</h3></div></div></div><p> </p></div><div class="sect2" title="4.2. External Addons"><div class="titlepage"><div><div><h3 class="title"><a id="addons"></a>4.2. External Addons</h3></div></div></div><p> </p><div class="sect3" title="Included Addons"><div class="titlepage"><div><div><h4 class="title"><a id="id2757442"></a>Included Addons</h4></div></div></div></div><div class="sect3" title="Excluded Addons"><div class="titlepage"><div><div><h4 class="title"><a id="id2782047"></a>Excluded Addons</h4></div></div></div></div><div class="sect3" title="Dangerous Addons"><div class="titlepage"><div><div><h4 class="title"><a id="id2771088"></a>Dangerous Addons</h4></div></div></div></div></div><div class="sect2" title="4.3. Pref Changes"><div class="titlepage"><div><div><h3 class="title"><a id="prefs"></a>4.3. Pref Changes</h3></div></div></div><p> </p></div><div class="sect2" title="4.4. Update Security"><div class="titlepage"><div><div><h3 class="title"><a id="update-mechanism"></a>4.4. Update Security</h3></div></div></div><p> </p></div></div><div class="sect1" title="5. Testing"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="Testing"></a>5. Testing</h2></div></div></div><p> |
|
| 873 | 943 |
|
| 874 | 944 |
The purpose of this section is to cover all the known ways that Tor browser |
| 875 | 945 |
security can be subverted from a penetration testing perspective. The hope |
| ... | ... |
@@ -904,11 +973,11 @@ and other information disclosure vulnerabilities. It is maintained by Kyle |
| 904 | 973 |
Williams, the author of <a class="ulink" href="http://www.janusvm.com/" target="_top">JanusVM</a> |
| 905 | 974 |
and <a class="ulink" href="http://www.januspa.com/" target="_top">JanusPA</a>. |
| 906 | 975 |
|
| 907 |
- </p></li><li class="listitem"><a class="ulink" href="https://www.jondos.de/en/anontest" target="_top">JonDos |
|
| 976 |
+ </p></li><li class="listitem"><a class="ulink" href="https://ip-check.info" target="_top">JonDos |
|
| 908 | 977 |
AnonTest</a><p> |
| 909 | 978 |
|
| 910 |
-The <a class="ulink" href="https://www.jondos.de" target="_top">JonDos people</a> also provide an |
|
| 911 |
-anonymity tester. It is more focused on HTTP headers than plugin bypass, and |
|
| 979 |
+The <a class="ulink" href="https://anonymous-proxy-servers.net/" target="_top">JonDos people</a> also provide an |
|
| 980 |
+anonymity tester. It is more focused on HTTP headers and behaviors than plugin bypass, and |
|
| 912 | 981 |
points out a couple of headers Torbutton could do a better job with |
| 913 | 982 |
obfuscating. |
| 914 | 983 |
|
| ... | ... |
@@ -923,7 +992,7 @@ the test results. |
| 923 | 992 |
Analyzer</a><p> |
| 924 | 993 |
|
| 925 | 994 |
The Privacy Analyzer provides a dump of all sorts of browser attributes and |
| 926 |
-settings that it detects, including some information on your origin IP |
|
| 995 |
+settings that it detects, including some information on your original IP |
|
| 927 | 996 |
address. Its page layout and lack of good vs bad test result feedback makes it |
| 928 | 997 |
not as useful as a user-facing testing tool, but it does provide some |
| 929 | 998 |
interesting checks in a single page. |
| 930 | 999 |