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 |