Mike Perry commited on 2014-11-07 00:47:53
Zeige 1 geänderte Dateien mit 133 Einfügungen und 103 Löschungen.
Also include 4.5-alpha-1 items.
| ... | ... |
@@ -1,9 +1,9 @@ |
| 1 | 1 |
<?xml version="1.0" encoding="UTF-8"?> |
| 2 |
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>The Design and Implementation of the Tor Browser [DRAFT]</title><meta name="generator" content="DocBook XSL Stylesheets V1.78.1" /></head><body><div class="article"><div class="titlepage"><div><div><h2 class="title"><a id="design"></a>The Design and Implementation of the Tor Browser [DRAFT]</h2></div><div><div class="author"><h3 class="author"><span class="firstname">Mike</span> <span class="surname">Perry</span></h3><div class="affiliation"><div class="address"><p><code class="email"><<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">October 30th, 2014</p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="#idp33097664">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="#idp39143984">5.1. Achieving Binary Reproducibility</a></span></dt><dt><span class="sect2"><a href="#idp39178848">5.2. Package Signatures and Verification</a></span></dt><dt><span class="sect2"><a href="#idp39182784">5.3. Anonymous Verification</a></span></dt></dl></dd><dt><span class="appendix"><a href="#Transparency">A. Towards Transparency in Navigation Tracking</a></span></dt><dd><dl><dt><span class="sect1"><a href="#deprecate">A.1. Deprecation Wishlist</a></span></dt><dt><span class="sect1"><a href="#idp39214016">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="idp33097664"></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">November 6th, 2014</p></div></div><hr /></div><div class="toc"><p><strong>Table of Contents</strong></p><dl class="toc"><dt><span class="sect1"><a href="#idp59241696">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="#idp60746000">5.1. Achieving Binary Reproducibility</a></span></dt><dt><span class="sect2"><a href="#idp60781056">5.2. Package Signatures and Verification</a></span></dt><dt><span class="sect2"><a href="#idp60784992">5.3. Anonymous Verification</a></span></dt></dl></dd><dt><span class="appendix"><a href="#Transparency">A. Towards Transparency in Navigation Tracking</a></span></dt><dd><dl><dt><span class="sect1"><a href="#deprecate">A.1. Deprecation Wishlist</a></span></dt><dt><span class="sect1"><a href="#idp60816992">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="idp59241696"></a>1. Introduction</h2></div></div></div><p> |
|
| 3 | 3 |
|
| 4 | 4 |
This document describes the <a class="link" href="#adversary" title="3. Adversary Model">adversary model</a>, |
| 5 | 5 |
<a class="link" href="#DesignRequirements" title="2. Design Requirements and Philosophy">design requirements</a>, and <a class="link" href="#Implementation" title="4. Implementation">implementation</a> of the Tor Browser. It is current as of Tor Browser |
| 6 |
-4.0. |
|
| 6 |
+4.5-alpha-1. |
|
| 7 | 7 |
|
| 8 | 8 |
</p><p> |
| 9 | 9 |
|
| ... | ... |
@@ -26,7 +26,7 @@ a number of Firefox preferences</a> from their defaults. |
| 26 | 26 |
Tor process management and configuration is accomplished through the <a class="ulink" href="https://gitweb.torproject.org/tor-launcher.git" target="_top">Tor Launcher</a> |
| 27 | 27 |
addon, which provides the initial Tor configuration splash screen and |
| 28 | 28 |
bootstrap progress bar. Tor Launcher is also compatible with Thunderbird, |
| 29 |
-InstantBird, and XULRunner. |
|
| 29 |
+Instantbird, and XULRunner. |
|
| 30 | 30 |
|
| 31 | 31 |
</p><p> |
| 32 | 32 |
|
| ... | ... |
@@ -85,7 +85,7 @@ Separation</strong></span></a><p> |
| 85 | 85 |
|
| 86 | 86 |
The browser MUST NOT provide the content window with any state from any other |
| 87 | 87 |
browsers or any non-Tor browsing modes. This includes shared state from |
| 88 |
-independent plugins, and shared state from Operating System implementations of |
|
| 88 |
+independent plugins, and shared state from operating system implementations of |
|
| 89 | 89 |
TLS and other support libraries. |
| 90 | 90 |
|
| 91 | 91 |
</p></li><li class="listitem"><a class="link" href="#disk-avoidance" title="4.3. Disk Avoidance"><span class="command"><strong>Disk |
| ... | ... |
@@ -108,7 +108,7 @@ must be able to ensure that secure deletion of the software is sufficient to |
| 108 | 108 |
remove evidence of the use of the software. All exceptions and shortcomings |
| 109 | 109 |
due to operating system behavior MUST be wiped by an uninstaller. However, due |
| 110 | 110 |
to permissions issues with access to swap, implementations MAY choose to leave |
| 111 |
-it out of scope, and/or leave it to the Operating System/platform to implement |
|
| 111 |
+it out of scope, and/or leave it to the operating system/platform to implement |
|
| 112 | 112 |
ephemeral-keyed encrypted swap. |
| 113 | 113 |
|
| 114 | 114 |
</p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="privacy"></a>2.2. Privacy Requirements</h3></div></div></div><p> |
| ... | ... |
@@ -209,7 +209,7 @@ failure of Torbutton</a> was the options panel. Each option |
| 209 | 209 |
that detectably alters browser behavior can be used as a fingerprinting tool. |
| 210 | 210 |
Similarly, all extensions <a class="ulink" href="http://blog.chromium.org/2010/06/extensions-in-incognito.html" target="_top">should be |
| 211 | 211 |
disabled in the mode</a> except as an opt-in basis. We should not load |
| 212 |
-system-wide and/or Operating System provided addons or plugins. |
|
| 212 |
+system-wide and/or operating system provided addons or plugins. |
|
| 213 | 213 |
|
| 214 | 214 |
</p><p> |
| 215 | 215 |
Instead of global browser privacy options, privacy decisions should be made |
| ... | ... |
@@ -292,7 +293,10 @@ information</strong></span><p> |
| 292 | 293 |
In some cases, the adversary may opt for a heavy-handed approach, such as |
| 293 | 294 |
seizing the computers of all Tor users in an area (especially after narrowing |
| 294 | 295 |
the field by the above two pieces of information). History records and cache |
| 295 |
-data are the primary goals here. |
|
| 296 |
+data are the primary goals here. Secondary goals may include confirming |
|
| 297 |
+on-disk identifiers (such as hostname and disk-logged spoofed MAC adddress |
|
| 298 |
+history) obtained by other means. |
|
| 299 |
+ |
|
| 296 | 300 |
</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> |
| 297 | 301 |
The adversary can position themselves at a number of different locations in |
| 298 | 302 |
order to execute their attacks. |
| ... | ... |
@@ -588,11 +592,6 @@ connections are not attempted, through the proxy or otherwise (Tor does not |
| 588 | 592 |
yet support IPv6). We have also verified that external protocol helpers, such |
| 589 | 593 |
as smb urls and other custom protocol handlers are all blocked. |
| 590 | 594 |
|
| 591 |
- </p><p> |
|
| 592 |
- |
|
| 593 |
-Numerous other third parties have also reviewed and tested the proxy settings |
|
| 594 |
-and have provided test cases based on their work. See in particular <a class="ulink" href="http://decloak.net/" target="_top">decloak.net</a>. |
|
| 595 |
- |
|
| 596 | 595 |
</p></li><li class="listitem">Disabling plugins |
| 597 | 596 |
|
| 598 | 597 |
<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 |
| ... | ... |
@@ -655,13 +654,13 @@ system-wide extensions (through the use of |
| 655 | 654 |
disabled, which prevents Flash cookies from leaking from a pre-existing Flash |
| 656 | 655 |
directory. |
| 657 | 656 |
|
| 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="idp38917584"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 657 |
+ </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="disk-avoidance"></a>4.3. Disk Avoidance</h3></div></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60523824"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 659 | 658 |
|
| 660 | 659 |
The User Agent MUST (at user option) prevent all disk records of browser activity. |
| 661 | 660 |
The user should be able to optionally enable URL history and other history |
| 662 | 661 |
features if they so desire. |
| 663 | 662 |
|
| 664 |
- </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp38918944"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 663 |
+ </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60525184"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 665 | 664 |
|
| 666 | 665 |
We achieve this goal through several mechanisms. First, we set the Firefox |
| 667 | 666 |
Private Browsing preference |
| ... | ... |
@@ -735,7 +734,7 @@ the url bar origin for which browser state exists, possibly with a |
| 735 | 734 |
context-menu option to drill down into specific types of state or permissions. |
| 736 | 735 |
An example of this simplification can be seen in Figure 1. |
| 737 | 736 |
|
| 738 |
- </p><div class="figure"><a id="idp38941648"></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> |
|
| 737 |
+ </p><div class="figure"><a id="idp60547888"></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> |
|
| 739 | 738 |
|
| 740 | 739 |
This example UI is a mock-up of how isolating identifiers to the URL bar |
| 741 | 740 |
origin can simplify the privacy UI for all data - not just cookies. Once |
| ... | ... |
@@ -773,7 +772,7 @@ of HTTP POST data. |
| 773 | 772 |
However, to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3666" target="_top">increase the |
| 774 | 773 |
security of the isolation</a> and to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3754" target="_top">solve conflicts |
| 775 | 774 |
with OCSP relying the cacheKey property for reuse of POST requests</a>, we |
| 776 |
-had to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0004-Add-a-string-based-cacheKey.patch" target="_top">patch |
|
| 775 |
+had to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/18dfd3064aff23a402fec248aab797036a9ba615" target="_top">patch |
|
| 777 | 776 |
Firefox to provide a cacheDomain cache attribute</a>. We use the fully |
| 778 | 777 |
qualified url bar domain as input to this field, to avoid the complexities |
| 779 | 778 |
of heuristically determining the second-level DNS name. |
| ... | ... |
@@ -799,7 +798,7 @@ FQDN that was used to source the third party element. |
| 799 | 798 |
</p><p> |
| 800 | 799 |
|
| 801 | 800 |
Additionally, because the image cache is a separate entity from the content |
| 802 |
-cache, we had to patch Firefox to also <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0024-Isolate-the-Image-Cache-per-url-bar-domain.patch" target="_top">isolate |
|
| 801 |
+cache, we had to patch Firefox to also <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/114cd22282f8b3cd6e6a5c29de8a8c396a79acc0" target="_top">isolate |
|
| 803 | 802 |
this cache per url bar domain</a>. |
| 804 | 803 |
|
| 805 | 804 |
</p></li><li class="listitem">HTTP Auth |
| ... | ... |
@@ -814,7 +813,7 @@ linkability between domains</a>. |
| 814 | 813 |
|
| 815 | 814 |
DOM storage for third party domains MUST be isolated to the url bar origin, |
| 816 | 815 |
to prevent linkability between sites. This functionality is provided through a |
| 817 |
-<a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0026-Isolate-DOM-storage-to-first-party-URI.patch" target="_top">patch |
|
| 816 |
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/973468a07fb9e7d9995d01b250223a8df16d6cfd" target="_top">patch |
|
| 818 | 817 |
to Firefox</a>. |
| 819 | 818 |
|
| 820 | 819 |
</p></li><li class="listitem">Flash cookies |
| ... | ... |
@@ -843,7 +842,7 @@ origin MUST NOT be reused for that same third party in another url bar origin. |
| 843 | 842 |
We currently clear SSL Session IDs upon <a class="link" href="#new-identity" title="4.7. Long-Term Unlinkability via "New Identity" button">New |
| 844 | 843 |
Identity</a>, we disable TLS Session Tickets via the Firefox Pref |
| 845 | 844 |
<span class="command"><strong>security.enable_tls_session_tickets</strong></span>. We disable SSL Session |
| 846 |
-IDs via a <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0008-Disable-SSL-Session-ID-tracking.patch" target="_top">patch |
|
| 845 |
+IDs via a <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/5524ae43780e4738310852cc2a0b7c5d25aa69ed" target="_top">patch |
|
| 847 | 846 |
to Firefox</a>. To compensate for the increased round trip latency from disabling |
| 848 | 847 |
these performance optimizations, we also enable |
| 849 | 848 |
<a class="ulink" href="https://tools.ietf.org/html/draft-bmoeller-tls-falsestart-00" target="_top">TLS |
| ... | ... |
@@ -934,18 +933,11 @@ cleared by <a class="link" href="#new-identity" title="4.7. Long-Term Unlinkabi |
| 934 | 933 |
defend against the creation of these cookies between <span class="command"><strong>New |
| 935 | 934 |
Identity</strong></span> invocations. |
| 936 | 935 |
</p></li><li class="listitem">Exit node usage |
| 937 |
- <p><span class="command"><strong>Design Goal:</strong></span> |
|
| 938 |
- |
|
| 939 |
-Every distinct navigation session (as defined by a non-blank Referer header) |
|
| 940 |
-MUST exit through a fresh Tor circuit in Tor Browser to prevent exit node |
|
| 941 |
-observers from linking concurrent browsing activity. |
|
| 942 |
- |
|
| 943 |
- </p><p><span class="command"><strong>Implementation Status:</strong></span> |
|
| 936 |
+ <p> |
|
| 944 | 937 |
|
| 945 |
-The Tor feature that supports this ability only exists in the 0.2.3.x-alpha |
|
| 946 |
-series. <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3455" target="_top">Ticket |
|
| 947 |
-#3455</a> is the Torbutton ticket to make use of the new Tor |
|
| 948 |
-functionality. |
|
| 938 |
+All content elements associated with a given URL bar domain (including the |
|
| 939 |
+main page) are given a SOCKS username and password for this domain, which |
|
| 940 |
+causes Tor to isolate all of these requests on their own set of Tor circuits. |
|
| 949 | 941 |
|
| 950 | 942 |
</p></li></ol></div><p> |
| 951 | 943 |
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> |
| ... | ... |
@@ -962,14 +954,11 @@ determine how many bits of identifying information each attribute provided. |
| 962 | 954 |
|
| 963 | 955 |
</p><p> |
| 964 | 956 |
|
| 965 |
-Because fingerprinting is problem that potentially touches every aspect of the |
|
| 966 |
-browser, we reduce the efforts for fingerprinting resistance by only |
|
| 957 |
+Because fingerprinting is a problem that potentially touches every aspect of |
|
| 958 |
+the browser, we reduce the efforts for fingerprinting resistance by only |
|
| 967 | 959 |
concerning ourselves with reducing the fingerprintable differences |
| 968 | 960 |
<span class="emphasis"><em>among</em></span> Tor Browser users. We do not believe it is possible |
| 969 |
-to solve cross-browser fingerprinting issues. Similarly, we prioritize issues |
|
| 970 |
-that differentiate only MacOS, Windows, and Linux lower than those that |
|
| 971 |
-differentiate aspects of the hardware, third party installed software, and |
|
| 972 |
-configuration differences in those operating systems. |
|
| 961 |
+to solve cross-browser fingerprinting issues. |
|
| 973 | 962 |
|
| 974 | 963 |
</p><p> |
| 975 | 964 |
|
| ... | ... |
@@ -1017,7 +1006,7 @@ Currently, we entirely disable all plugins in Tor Browser. However, as a |
| 1017 | 1006 |
compromise due to the popularity of Flash, we allow users to re-enable Flash, |
| 1018 | 1007 |
and flash objects are blocked behind a click-to-play barrier that is available |
| 1019 | 1008 |
only after the user has specifically enabled plugins. Flash is the only plugin |
| 1020 |
-available, the rest are <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0005-Block-all-plugins-except-flash.patch" target="_top">entirely |
|
| 1009 |
+available, the rest are <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/1ef32dcf0cc64876f5b92a583b788dc921f22c5d" target="_top">entirely |
|
| 1021 | 1010 |
blocked from loading by a Firefox patch</a>. We also set the Firefox |
| 1022 | 1011 |
preference <span class="command"><strong>plugin.expose_full_path</strong></span> to false, to avoid |
| 1023 | 1012 |
leaking plugin installation information. |
| ... | ... |
@@ -1130,7 +1119,7 @@ and <a class="ulink" href="https://fedorahosted.org/lohit/" target="_top">Lohit |
| 1130 | 1119 |
font set is fairly complete by itself, but Nanum and Lohit have smaller |
| 1131 | 1120 |
versions of many South Asian languages. When combined in a way that chooses the |
| 1132 | 1121 |
smallest font implementations for each locale, these three font sets provide |
| 1133 |
-which provide coverage for the all languages used on Wikipedia with more than |
|
| 1122 |
+poverage for the all languages used on Wikipedia with more than |
|
| 1134 | 1123 |
10,000 articles, and several others as well, in approximately 3MB of compressed |
| 1135 | 1124 |
overhead. The <a class="ulink" href="https://www.google.com/get/noto/" target="_top">Noto font |
| 1136 | 1125 |
set</a> is another font set that aims for complete coverage, but is |
| ... | ... |
@@ -1138,9 +1128,9 @@ considerably larger than the combination of the Droid, Nanum, and Lohit fonts. |
| 1138 | 1128 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
| 1139 | 1129 |
|
| 1140 | 1130 |
In the meantime while we investigate shipping our own fonts, we disable |
| 1141 |
-plugins, which prevents font enumeration. Additionally, we limit both the |
|
| 1131 |
+plugins, which prevents font name enumeration. Additionally, we limit both the |
|
| 1142 | 1132 |
number of font queries from CSS, as well as the total number of fonts that can |
| 1143 |
-be used in a document <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0011-Limit-the-number-of-fonts-per-document.patch" target="_top">with |
|
| 1133 |
+be used in a document <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/d515c79ffd115b132caade7f881e5b467448964d" target="_top">with |
|
| 1144 | 1134 |
a Firefox patch</a>. We create two prefs, |
| 1145 | 1135 |
<span class="command"><strong>browser.display.max_font_attempts</strong></span> and |
| 1146 | 1136 |
<span class="command"><strong>browser.display.max_font_count</strong></span> for this purpose. Once these |
| ... | ... |
@@ -1153,13 +1143,13 @@ To improve rendering, we exempt remote <a class="ulink" href="https://developer. |
| 1153 | 1143 |
fonts</a> from these counts, and if a font-family CSS rule lists a remote |
| 1154 | 1144 |
font (in any order), we use that font instead of any of the named local fonts. |
| 1155 | 1145 |
|
| 1156 |
- </p></li><li class="listitem">Monitor and Desktop resolution |
|
| 1146 |
+ </p></li><li class="listitem">Monitor and OS Desktop resolution |
|
| 1157 | 1147 |
<p> |
| 1158 | 1148 |
|
| 1159 | 1149 |
Both CSS and Javascript have access to a lot of information about the screen |
| 1160 | 1150 |
resolution, usable desktop size, OS widget size, toolbar size, title bar size, |
| 1161 |
-screen orientation, and other desktop features that are not at all relevant |
|
| 1162 |
-to rendering and serve only to provide information for fingerprinting. |
|
| 1151 |
+and OS desktop widget sizing information that are not at all relevant to |
|
| 1152 |
+rendering and serve only to provide information for fingerprinting. |
|
| 1163 | 1153 |
|
| 1164 | 1154 |
</p><p><span class="command"><strong>Design Goal:</strong></span> |
| 1165 | 1155 |
|
| ... | ... |
@@ -1193,20 +1183,23 @@ addition, we prevent auto-maximizing on browser start, and are investigating a |
| 1193 | 1183 |
user-friendly way of informing users that maximized windows are detrimental |
| 1194 | 1184 |
to privacy in this mode. |
| 1195 | 1185 |
|
| 1196 |
- </p></li><li class="listitem">CSS Media Queries |
|
| 1186 |
+ </p></li><li class="listitem">Display Media information |
|
| 1197 | 1187 |
<p> |
| 1198 | 1188 |
|
| 1199 |
-Even without Javascript, CSS has access to a lot of information about the screen |
|
| 1200 |
-resolution, usable desktop size, OS widget size, toolbar size, title bar size, |
|
| 1201 |
-system theme colors, and other desktop features that are not at all relevant |
|
| 1202 |
-to rendering and serve only to provide information for fingerprinting. Most of this information comes from |
|
| 1203 |
-<a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Media_queries" target="_top">CSS Media Queries</a>, but |
|
| 1204 |
-Mozilla has exposed <a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#System_Colors" target="_top">several user and OS theme defined color values</a> to CSS as well. |
|
| 1189 |
+Beyond simple resolution information, a large amount of so-called "Media" |
|
| 1190 |
+information is also exported to content. Even without Javascript, CSS has |
|
| 1191 |
+access to a lot of information about the device orientation, system theme |
|
| 1192 |
+colors, and other desktop features that are not at all relevant to rendering |
|
| 1193 |
+and serve only to provide information for fingerprinting. Most of this |
|
| 1194 |
+information comes from <a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Media_queries" target="_top">CSS |
|
| 1195 |
+Media Queries</a>, but Mozilla has exposed <a class="ulink" href="https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#System_Colors" target="_top">several |
|
| 1196 |
+user and OS theme defined color values</a> to CSS as well. |
|
| 1205 | 1197 |
|
| 1206 | 1198 |
</p><p><span class="command"><strong>Design Goal:</strong></span> |
| 1207 |
-In Private Browsing Mode, CSS should not be able infer anything that the user |
|
| 1208 |
-has configured about their computer. Additionally, it should not be able to |
|
| 1209 |
-infer machine-specific details such as screen orientation or type. |
|
| 1199 |
+ |
|
| 1200 |
+CSS should not be able infer anything that the user has configured about their |
|
| 1201 |
+computer. Additionally, it should not be able to infer machine-specific |
|
| 1202 |
+details such as screen orientation or type. |
|
| 1210 | 1203 |
|
| 1211 | 1204 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
| 1212 | 1205 |
|
| ... | ... |
@@ -1230,7 +1223,7 @@ these headers should remain identical across the population even when updated. |
| 1230 | 1223 |
Firefox provides several options for controlling the browser user agent string |
| 1231 | 1224 |
which we leverage. We also set similar prefs for controlling the |
| 1232 | 1225 |
Accept-Language and Accept-Charset headers, which we spoof to English by default. Additionally, we |
| 1233 |
-<a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0001-Block-Components.interfaces-from-content.patch" target="_top">remove |
|
| 1226 |
+<a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/95cd0e8071aa1fe3f4914331d4036f218007e31d" target="_top">remove |
|
| 1234 | 1227 |
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 |
| 1235 | 1228 |
used</a> to fingerprint OS, platform, and Firefox minor version. </p></li><li class="listitem">Locale Fingerprinting |
| 1236 | 1229 |
<p> |
| ... | ... |
@@ -1264,14 +1257,12 @@ software should detect if the users clock is significantly divergent from the |
| 1264 | 1257 |
clocks of the relays that it connects to, and use this to reset the clock |
| 1265 | 1258 |
values used in Tor Browser to something reasonably accurate. Alternatively, |
| 1266 | 1259 |
the browser can obtain this clock skew via a mechanism similar to that used in |
| 1267 |
-<a class="ulink" href="" target="_top">tlsdate</a>. |
|
| 1260 |
+<a class="ulink" href="https://github.com/ioerror/tlsdate" target="_top">tlsdate</a>. |
|
| 1268 | 1261 |
|
| 1269 | 1262 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
| 1270 | 1263 |
|
| 1271 | 1264 |
We set the timezone using the TZ environment variable, which is supported on |
| 1272 |
-all platforms. Additionally, we plan to <a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/3652" target="_top">obtain a clock |
|
| 1273 |
-offset from Tor</a>, but this won't be available until Tor 0.2.3.x is in |
|
| 1274 |
-use. |
|
| 1265 |
+all platforms. |
|
| 1275 | 1266 |
|
| 1276 | 1267 |
</p></li><li class="listitem">Javascript performance fingerprinting |
| 1277 | 1268 |
<p> |
| ... | ... |
@@ -1325,12 +1316,12 @@ fingerprinting: timestamp quantization and jitter. |
| 1325 | 1316 |
|
| 1326 | 1317 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
| 1327 | 1318 |
We have no implementation as of yet. |
| 1328 |
- </p></li><li class="listitem">Operating System type fingerprinting |
|
| 1319 |
+ </p></li><li class="listitem">Operating system type fingerprinting |
|
| 1329 | 1320 |
<p> |
| 1330 | 1321 |
|
| 1331 | 1322 |
As we mentioned in the introduction of this section, OS type fingerprinting is |
| 1332 | 1323 |
currently considered a lower priority, due simply to the numerous ways that |
| 1333 |
-characteristics of the Operating System type may leak into content, and the |
|
| 1324 |
+characteristics of the operating system type may leak into content, and the |
|
| 1334 | 1325 |
comparatively low contribution of OS to overall entropy. In particular, there |
| 1335 | 1326 |
are likely to be many ways to measure the differences in widget size, |
| 1336 | 1327 |
scrollbar size, and other rendered details on a page. Also, directly exported |
| ... | ... |
@@ -1348,25 +1339,25 @@ fingerprint configuration and user-specific information. |
| 1348 | 1339 |
|
| 1349 | 1340 |
</p><p><span class="command"><strong>Implementation Status:</strong></span> |
| 1350 | 1341 |
|
| 1351 |
-We have no defenses deployed that address OS type fingerprinting, but nothing |
|
| 1352 |
-else. Several defenses may help also mitigate it, in addition to reducing a |
|
| 1353 |
-lot more entropy elsewhere. You can see the major areas of OS fingerprinting |
|
| 1354 |
-we're aware of using the tag <a class="ulink" href="https://trac.torproject.org/projects/tor/query?keywords=~tbb-fingerprinting-os" target="_top">tbb-fingerprinting-os |
|
| 1355 |
-on our bugtracker</a>. |
|
| 1342 |
+We have no defenses deployed that address OS type fingerprinting by itself. |
|
| 1343 |
+Several defenses may help also mitigate it, in addition to reducing a lot more |
|
| 1344 |
+entropy elsewhere. You can see the major areas of OS fingerprinting we're |
|
| 1345 |
+aware of using the <a class="ulink" href="https://trac.torproject.org/projects/tor/query?keywords=~tbb-fingerprinting-os" target="_top">tbb-fingerprinting-os |
|
| 1346 |
+tag on our bugtracker</a>. |
|
| 1356 | 1347 |
|
| 1357 | 1348 |
</p></li></ol></div></div><p> |
| 1358 |
-For more details on identifier linkability bugs and enhancements, see the <a class="ulink" href="https://trac.torproject.org/projects/tor/query?keywords=~tbb-fingerprinting&status=!closed" target="_top">tbb-fingerprinting tag in our bugtracker</a> |
|
| 1349 |
+For more details on fingerprinting bugs and enhancements, see the <a class="ulink" href="https://trac.torproject.org/projects/tor/query?keywords=~tbb-fingerprinting&status=!closed" target="_top">tbb-fingerprinting tag in our bugtracker</a> |
|
| 1359 | 1350 |
</p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="new-identity"></a>4.7. Long-Term Unlinkability via "New Identity" button</h3></div></div></div><p> |
| 1360 | 1351 |
|
| 1361 | 1352 |
In order to avoid long-term linkability, we provide a "New Identity" context |
| 1362 | 1353 |
menu option in Torbutton. This context menu option is active if Torbutton can |
| 1363 | 1354 |
read the environment variables $TOR_CONTROL_PASSWD and $TOR_CONTROL_PORT. |
| 1364 | 1355 |
|
| 1365 |
- </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp39106608"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 1356 |
+ </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60693264"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"> |
|
| 1366 | 1357 |
|
| 1367 | 1358 |
All linkable identifiers and browser state MUST be cleared by this feature. |
| 1368 | 1359 |
|
| 1369 |
- </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp39107856"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p> |
|
| 1360 |
+ </blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60694512"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p> |
|
| 1370 | 1361 |
|
| 1371 | 1362 |
First, Torbutton disables Javascript in all open tabs and windows by using |
| 1372 | 1363 |
both the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIDocShell#Attributes" target="_top">browser.docShell.allowJavascript</a> |
| ... | ... |
@@ -1383,10 +1374,10 @@ After closing all tabs, we then emit "<a class="ulink" href="https://developer.m |
| 1383 | 1374 |
(which instructs addons and various Firefox components to clear their session |
| 1384 | 1375 |
state), and then manually clear the following state: searchbox and findbox |
| 1385 | 1376 |
text, HTTP auth, SSL state, OCSP state, site-specific content preferences |
| 1386 |
-(including HSTS state), content and image cache, offline cache, Cookies, DOM |
|
| 1387 |
-storage, crypto tokens, DOM local storage, the safe browsing key, and the |
|
| 1377 |
+(including HSTS state), content and image cache, offline cache, offline |
|
| 1378 |
+storage, Cookies, crypto tokens, DOM storage, the safe browsing key, and the |
|
| 1388 | 1379 |
Google wifi geolocation token (if it exists). We also clear NoScript's site |
| 1389 |
-and temporary permissions. |
|
| 1380 |
+and temporary permissions, and all other browser site permissions. |
|
| 1390 | 1381 |
|
| 1391 | 1382 |
</p><p> |
| 1392 | 1383 |
|
| ... | ... |
@@ -1405,13 +1396,48 @@ In addition to the above mechanisms that are devoted to preserving privacy |
| 1405 | 1396 |
while browsing, we also have a number of technical mechanisms to address other |
| 1406 | 1397 |
privacy and security issues. |
| 1407 | 1398 |
|
| 1408 |
- </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a id="traffic-fingerprinting-defenses"></a><span class="command"><strong>Website Traffic Fingerprinting Defenses</strong></span><p> |
|
| 1399 |
+ </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><a id="security-slider"></a><span class="command"><strong>Security Slider</strong></span><p> |
|
| 1400 |
+ |
|
| 1401 |
+In order to provide vulnerability surface reduction for users that need high |
|
| 1402 |
+security, we have implemented a "Security Slider" that essentially represents a |
|
| 1403 |
+tradeoff between usability and security. Using metrics collected from |
|
| 1404 |
+Mozilla's bugtracker, we analyzed the vulnerability counts of core components, |
|
| 1405 |
+and used <a class="ulink" href="https://github.com/iSECPartners/publications/tree/master/reports/Tor%20Browser%20Bundle" target="_top">information |
|
| 1406 |
+gathered from a study performed by iSec Partners</a> to inform which |
|
| 1407 |
+features should be disabled at which security levels. |
|
| 1408 |
+ |
|
| 1409 |
+ </p><p> |
|
| 1410 |
+ |
|
| 1411 |
+The Security Slider consists of four positions. At the lowest security level |
|
| 1412 |
+(the default), we disable |
|
| 1413 |
+<span class="command"><strong>gfx.font_rendering.graphite.enabled</strong></span> for Latin locales, as |
|
| 1414 |
+well as <span class="command"><strong>gfx.font_rendering.graphite.enabled</strong></span>. At the |
|
| 1415 |
+medium-low level, we disable most Javascript JIT and related optimizations |
|
| 1416 |
+(<span class="command"><strong>javascript.options.ion.content</strong></span>, |
|
| 1417 |
+<span class="command"><strong>javascript.options.typeinference</strong></span>, |
|
| 1418 |
+<span class="command"><strong>javascript.options.asmjs</strong></span>). We also make HTML5 media |
|
| 1419 |
+click-to-play (<span class="command"><strong>noscript.forbidMedia</strong></span>), and disable WebAudio |
|
| 1420 |
+(<span class="command"><strong>media.webaudio.enabled</strong></span>). At the medium-high level, we |
|
| 1421 |
+disable the baseline JIT |
|
| 1422 |
+(<span class="command"><strong>javascript.options.baselinejit.content</strong></span>), disable |
|
| 1423 |
+Javascript entirely all elements that are loaded when the URL bar is not |
|
| 1424 |
+HTTPS (<span class="command"><strong>noscript.globalHttpsWhitelist</strong></span>), and fully disable |
|
| 1425 |
+graphite font rendering for all locales |
|
| 1426 |
+(<span class="command"><strong>gfx.font_rendering.graphite.enable</strong></span>). At the highest level, |
|
| 1427 |
+Javascript is fully disabled (<span class="command"><strong>noscript.global</strong></span>), as well as |
|
| 1428 |
+all non-WebM HTML5 codecs (<span class="command"><strong>media.ogg.enabled</strong></span>, |
|
| 1429 |
+<span class="command"><strong>media.opus.enabled</strong></span>, <span class="command"><strong>media.opus.enabled</strong></span>, |
|
| 1430 |
+<span class="command"><strong>media.DirectShow.enabled</strong></span>, |
|
| 1431 |
+<span class="command"><strong>media.wave.enabled</strong></span>, and |
|
| 1432 |
+<span class="command"><strong>media.apple.mp3.enabled</strong></span>). |
|
| 1433 |
+ |
|
| 1434 |
+ </p></li><li class="listitem"><a id="traffic-fingerprinting-defenses"></a><span class="command"><strong>Website Traffic Fingerprinting Defenses</strong></span><p> |
|
| 1409 | 1435 |
|
| 1410 | 1436 |
<a class="link" href="#website-traffic-fingerprinting">Website Traffic |
| 1411 | 1437 |
Fingerprinting</a> is a statistical attack to attempt to recognize specific |
| 1412 | 1438 |
encrypted website activity. |
| 1413 | 1439 |
|
| 1414 |
- </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp39122096"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p> |
|
| 1440 |
+ </p><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60722880"></a>Design Goal:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p> |
|
| 1415 | 1441 |
|
| 1416 | 1442 |
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 |
| 1417 | 1443 |
for classification. This mechanism would either impact the true and false |
| ... | ... |
@@ -1433,8 +1459,8 @@ Congestion-Sensitive BUFLO</a>. It may be also possible to <a class="ulink" href |
| 1433 | 1459 |
defenses</a> such that they only use existing spare Guard bandwidth capacity in the Tor |
| 1434 | 1460 |
network, making them also effectively no-overhead. |
| 1435 | 1461 |
|
| 1436 |
- </p></blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp39128912"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p> |
|
| 1437 |
-Currently, we patch Firefox to <a class="ulink" href="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-patches/firefox/0017-Randomize-HTTP-request-order-and-pipeline-depth.patch" target="_top">randomize |
|
| 1462 |
+ </p></blockquote></div></div><div class="sect3"><div class="titlepage"><div><div><h4 class="title"><a id="idp60729776"></a>Implementation Status:</h4></div></div></div><div class="blockquote"><blockquote class="blockquote"><p> |
|
| 1463 |
+Currently, we patch Firefox to <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/27ef32d509ed1c9eeb28f7affee0f9ba11773f72" target="_top">randomize |
|
| 1438 | 1464 |
pipeline order and depth</a>. Unfortunately, pipelining is very fragile. |
| 1439 | 1465 |
Many sites do not support it, and even sites that advertise support for |
| 1440 | 1466 |
pipelining may simply return error codes for successive requests, effectively |
| ... | ... |
@@ -1483,6 +1509,12 @@ homepage to point to a <a class="ulink" href="https://check.torproject.org/?lang |
| 1483 | 1509 |
informs the user</a> that their browser is out of |
| 1484 | 1510 |
date. |
| 1485 | 1511 |
|
| 1512 |
+ </p><p> |
|
| 1513 |
+ |
|
| 1514 |
+We also make use of the in-browser Mozilla updater, and have <a class="ulink" href="https://gitweb.torproject.org/tor-browser.git/commitdiff/777695d09e3cff4c79c48839e1c9d5102b772d6f" target="_top">patched |
|
| 1515 |
+the updater</a> to avoid sending OS and Kernel version information as part |
|
| 1516 |
+of its update pings. |
|
| 1517 |
+ |
|
| 1486 | 1518 |
</p></li></ol></div></div></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="BuildSecurity"></a>5. Build Security and Package Integrity</h2></div></div></div><p> |
| 1487 | 1519 |
|
| 1488 | 1520 |
In the age of state-sponsored malware, <a class="ulink" href="https://blog.torproject.org/blog/deterministic-builds-part-one-cyberwar-and-global-compromise" target="_top">we |
| ... | ... |
@@ -1492,7 +1524,7 @@ contend with. For this reason, we have deployed a build system |
| 1492 | 1524 |
that allows anyone to use our source code to reproduce byte-for-byte identical |
| 1493 | 1525 |
binary packages to the ones that we distribute. |
| 1494 | 1526 |
|
| 1495 |
- </p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp39143984"></a>5.1. Achieving Binary Reproducibility</h3></div></div></div><p> |
|
| 1527 |
+ </p><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp60746000"></a>5.1. Achieving Binary Reproducibility</h3></div></div></div><p> |
|
| 1496 | 1528 |
|
| 1497 | 1529 |
The GNU toolchain has been working on providing reproducible builds for some |
| 1498 | 1530 |
time, however a large software project such as Firefox typically ends up |
| ... | ... |
@@ -1516,7 +1548,7 @@ authentication, as well as transfer intermediate build outputs between the |
| 1516 | 1548 |
stages of the build process. Because Gitian creates an Ubuntu build |
| 1517 | 1549 |
environment, we must use cross-compilation to create packages for Windows and |
| 1518 | 1550 |
Mac OS. For Windows, we use mingw-w64 as our cross compiler. For Mac OS, we |
| 1519 |
-use toolchain4 in combination with a binary redistribution of the Mac OS 10.6 |
|
| 1551 |
+use crosstools-ng in combination with a binary redistribution of the Mac OS 10.6 |
|
| 1520 | 1552 |
SDK. |
| 1521 | 1553 |
|
| 1522 | 1554 |
</p><p> |
| ... | ... |
@@ -1561,19 +1593,10 @@ patch</a>. |
| 1561 | 1593 |
|
| 1562 | 1594 |
The standard way of controlling timestamps in Gitian is to use libfaketime, |
| 1563 | 1595 |
which hooks time-related library calls to provide a fixed timestamp. However, |
| 1564 |
-libfaketime does not spoof the millisecond and microsecond components of |
|
| 1565 |
-timestamps, which found their way into pyc files and also in explicit Firefox |
|
| 1566 |
-build process timestamp embedding. |
|
| 1567 |
- </p><p> |
|
| 1568 |
- |
|
| 1569 |
-We addressed the Firefox issues with direct patches to their build process, |
|
| 1570 |
-which have since been merged. However, pyc timestamps had to be address with |
|
| 1571 |
-an additional <a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/blob/HEAD:/gitian/build-helpers/pyc-timestamp.sh" target="_top">helper |
|
| 1572 |
-script</a>. |
|
| 1573 |
- </p><p> |
|
| 1574 |
- |
|
| 1575 |
-The timezone leaks were addressed by setting the <span class="command"><strong>TZ</strong></span> |
|
| 1576 |
-environment variable to UTC in our descriptors. |
|
| 1596 |
+due to our use of wine to run py2exe for python-based pluggable transports, |
|
| 1597 |
+pyc timestamps had to be address with an additional <a class="ulink" href="https://gitweb.torproject.org/builders/tor-browser-bundle.git/blob/HEAD:/gitian/build-helpers/pyc-timestamp.sh" target="_top">helper |
|
| 1598 |
+script</a>. The timezone leaks were addressed by setting the |
|
| 1599 |
+<span class="command"><strong>TZ</strong></span> environment variable to UTC in our descriptors. |
|
| 1577 | 1600 |
|
| 1578 | 1601 |
</p></li><li class="listitem">Deliberately generated entropy |
| 1579 | 1602 |
<p> |
| ... | ... |
@@ -1610,11 +1633,18 @@ hostname and Linux kernel version can leak from the host OS into the LXC |
| 1610 | 1633 |
container. We addressed umask by setting it explicitly in our Gitian |
| 1611 | 1634 |
descriptor scriptlet, and addressed the hostname and kernel version leaks by |
| 1612 | 1635 |
directly patching the aspects of the Firefox build process that included this |
| 1613 |
-information into the build. |
|
| 1614 |
- </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp39178848"></a>5.2. Package Signatures and Verification</h3></div></div></div><p> |
|
| 1636 |
+information into the build. It also turns out that some libraries (in |
|
| 1637 |
+particular: libgmp) attempt to detect the current CPU to determine which |
|
| 1638 |
+optimizations to compile in. This CPU type is uniform on our KVM instances, |
|
| 1639 |
+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 |
|
| 1640 |
+unitialized memory</a> that only appear in LXC mode, as well as |
|
| 1641 |
+<a class="ulink" href="https://trac.torproject.org/projects/tor/ticket/12240" target="_top">oddities related to |
|
| 1642 |
+time-based dependency tracking</a> that only appear in LXC containers. |
|
| 1643 |
+ |
|
| 1644 |
+ </p></li></ol></div></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp60781056"></a>5.2. Package Signatures and Verification</h3></div></div></div><p> |
|
| 1615 | 1645 |
|
| 1616 | 1646 |
The build process produces a single sha256sums.txt file that contains a sorted |
| 1617 |
-list the SHA-256 hashes of every package produced for that build version. Each |
|
| 1647 |
+list of the SHA-256 hashes of every package produced for that build version. Each |
|
| 1618 | 1648 |
official builder uploads this file and a GPG signature of it to a directory |
| 1619 | 1649 |
on a Tor Project's web server. The build scripts have an optional matching |
| 1620 | 1650 |
step that downloads these signatures, verifies them, and ensures that the |
| ... | ... |
@@ -1645,7 +1675,7 @@ and by their nature are based on non-public key material, providing native |
| 1645 | 1675 |
code-signed packages while still preserving ease of reproducibility |
| 1646 | 1676 |
verification has not yet been achieved. |
| 1647 | 1677 |
|
| 1648 |
- </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp39182784"></a>5.3. Anonymous Verification</h3></div></div></div><p> |
|
| 1678 |
+ </p></div><div class="sect2"><div class="titlepage"><div><div><h3 class="title"><a id="idp60784992"></a>5.3. Anonymous Verification</h3></div></div></div><p> |
|
| 1649 | 1679 |
|
| 1650 | 1680 |
Due to the fact that bit-identical packages can be produced by anyone, the |
| 1651 | 1681 |
security of this build system extends beyond the security of the official |
| ... | ... |
@@ -1717,14 +1747,16 @@ source URL parameters. |
| 1717 | 1747 |
|
| 1718 | 1748 |
</p><p> |
| 1719 | 1749 |
|
| 1720 |
-We believe the Referer header should be made explicit. If a site wishes to |
|
| 1721 |
-transmit its URL to third party content elements during load or during |
|
| 1722 |
-link-click, it should have to specify this as a property of the associated HTML |
|
| 1723 |
-tag. With an explicit property, it would then be possible for the user agent to |
|
| 1724 |
-inform the user if they are about to click on a link that will transmit Referer |
|
| 1725 |
-information (perhaps through something as subtle as a different color in the |
|
| 1726 |
-lower toolbar for the destination URL). This same UI notification can also be |
|
| 1727 |
-used for links with the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/HTML/Element/a#Attributes" target="_top">"ping"</a> |
|
| 1750 |
+We believe the Referer header should be made explicit, and believe that CSP |
|
| 1751 |
+2.0 provides a <a class="ulink" href="http://www.w3.org/TR/CSP11/#directive-referrer" target="_top">decent step in this |
|
| 1752 |
+direction</a>. If a site wishes to transmit its URL to third party content |
|
| 1753 |
+elements during load or during link-click, it should have to specify this as a |
|
| 1754 |
+property of the associated HTML tag or CSP policy. With an explicit property |
|
| 1755 |
+or policy, it would then be possible for the user agent to inform the user if |
|
| 1756 |
+they are about to click on a link that will transmit Referer information |
|
| 1757 |
+(perhaps through something as subtle as a different color in the lower toolbar |
|
| 1758 |
+for the destination URL). This same UI notification can also be used for links |
|
| 1759 |
+with the <a class="ulink" href="https://developer.mozilla.org/en-US/docs/HTML/Element/a#Attributes" target="_top">"ping"</a> |
|
| 1728 | 1760 |
attribute. |
| 1729 | 1761 |
|
| 1730 | 1762 |
</p></li><li class="listitem">window.name |
| ... | ... |
@@ -1759,7 +1791,7 @@ possible for us to <a class="ulink" href="https://trac.torproject.org/projects/t |
| 1759 | 1791 |
ourselves</a>, as they are comparatively rare and can be handled with site |
| 1760 | 1792 |
permissions. |
| 1761 | 1793 |
|
| 1762 |
- </p></li></ol></div></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp39214016"></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> |
|
| 1794 |
+ </p></li></ol></div></div><div class="sect1"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a id="idp60816992"></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> |
|
| 1763 | 1795 |
|
| 1764 | 1796 |
Web-Send is a browser-based link sharing and federated login widget that is |
| 1765 | 1797 |
designed to operate without relying on third-party tracking or abusing other |
| 1766 | 1798 |