commit 8d336aa7bf850567cc0b6f686421682f16ba0d0c Author: Mike Perry mikeperry-git@torproject.org Date: Tue Apr 28 21:25:46 2015 -0700
Add 4.5 TODOs; Fix gitweb links; Remove Cruft. --- design-doc/design.xml | 449 ++++++++----------------------------------------- 1 file changed, 73 insertions(+), 376 deletions(-)
diff --git a/design-doc/design.xml b/design-doc/design.xml index 16007f3..91d64cc 100644 --- a/design-doc/design.xml +++ b/design-doc/design.xml @@ -23,14 +23,9 @@ <address><email>sjmurdoch#torproject org</email></address> </affiliation> </author> - <pubdate>November 6th, 2014</pubdate> + <pubdate>April 30th, 2015</pubdate> </articleinfo>
-<!-- -- Introduction and Threat model: [Mostly Torbutton] - - [Remove the security requirements section] ---> - <sect1> <title>Introduction</title> <para> @@ -40,7 +35,7 @@ This document describes the <link linkend="adversary">adversary model</link>, linkend="Implementation">implementation</link> <!-- and <link linkend="Packaging">packaging</link> and <link linkend="Testing">testing procedures</link> --> of the Tor Browser. It is current as of Tor Browser -4.5-alpha-1. +4.5.
</para> <para> @@ -51,6 +46,8 @@ against active network adversaries, in addition to the passive forensic local adversary currently addressed by the major browsers.
</para> + +<!-- XXX-4.5: Link to hacking document --> <sect2 id="components"> <title>Browser Component Overview</title> <para> @@ -61,10 +58,10 @@ Support Release (ESR) Firefox branch</ulink>. We have a <ulink url="https://gitweb.torproject.org/tor-browser.git">series of patches</ulink> against this browser to enhance privacy and security. Browser behavior is additionally augmented through the <ulink -url="https://gitweb.torproject.org/torbutton.git/tree/master%22%3ETorbutton +url="https://gitweb.torproject.org/torbutton.git/tree/%22%3ETorbutton extension</ulink>, though we are in the process of moving this functionality into direct Firefox patches. We also <ulink -url="https://gitweb.torproject.org/tor-browser.git/blob/refs/heads/tor-browser-31... +url="https://gitweb.torproject.org/tor-browser.git/tree/browser/app/profile/000-t... a number of Firefox preferences</ulink> from their defaults.
</para> @@ -83,7 +80,7 @@ To help protect against potential Tor Exit Node eavesdroppers, we include provide users with optional defense-in-depth against Javascript and other potential exploit vectors, we also include <ulink url="http://noscript.net/">NoScript</ulink>. We also modify <ulink -url="https://gitweb.torproject.org/builders/tor-browser-bundle.git/blob/refs/head... +url="https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/Bundle-Da... extension preferences</ulink> from their defaults.
</para> @@ -93,7 +90,7 @@ To provide censorship circumvention in areas where the public Tor network is blocked either by IP, or by protocol fingerprint, we include several <ulink url="https://trac.torproject.org/projects/tor/wiki/doc/AChildsGardenOfPluggableTransports">Pluggable Transports</ulink> in the distribution. As of this writing, we include <ulink -url="https://gitweb.torproject.org/pluggable-transports/obfsproxy.git/blob/HEAD:/...</ulink>, +url="https://gitweb.torproject.org/pluggable-transports/obfs4.git%22%3EObfs4proxy</ulink>, <ulink url="https://trac.torproject.org/projects/tor/wiki/doc/meek">meek</ulink>, <ulink url="https://fteproxy.org/">FTE</ulink>, and <ulink @@ -215,7 +212,8 @@ it out of scope, and/or leave it to the operating system/platform to implement ephemeral-keyed encrypted swap.
</para></listitem> - + +<!-- XXX-4.5: Now present in 4.5 --> <!-- <listitem><link linkend="update-safety"><command>Update Safety</command></link> @@ -894,7 +892,7 @@ Proxy obedience is assured through the following: <para>
Our <ulink -url="https://gitweb.torproject.org/tor-browser.git/blob/refs/heads/tor-browser-31... +url="https://gitweb.torproject.org/tor-browser.git/tree/browser/app/profile/000-t... preferences file</ulink> sets the Firefox proxy settings to use Tor directly as a SOCKS proxy. It sets <command>network.proxy.socks_remote_dns</command>, <command>network.proxy.socks_version</command>, @@ -913,10 +911,10 @@ as set the pref <command>media.peerconnection.enabled</command> to false.
We also patch Firefox in order to provide several defense-in-depth mechanisms for proxy safety. Notably, we <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/8527bec0ad59fb3d885... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... the DNS service</ulink> to prevent any browser or addon DNS resolution, and we also <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/04c046e11f6622f44ca... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... OCSP and PKIX code</ulink> to prevent any use of the non-proxied command-line tool utility functions from being functional while linked in to the browser. In both cases, we could find no direct paths to these routines in the browser, @@ -926,7 +924,7 @@ but it seemed better safe than sorry. <para>
During every Extended Support Release transition, we perform <ulink -url="https://gitweb.torproject.org/tor-browser-spec.git/tree/HEAD:/audits%22%3Ein... +url="https://gitweb.torproject.org/tor-browser-spec.git/tree/audits%22%3Ein-depth code audits</ulink> to verify that there were no system calls or XPCOM activity in the source tree that did not use the browser proxy settings. </para> @@ -968,8 +966,11 @@ restricted from automatic load through Firefox's click-to-play preference In addition, to reduce any unproxied activity by arbitrary plugins at load time, and to reduce the fingerprintability of the installed plugin list, we also patch the Firefox source code to <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/2ecf6c33618ecee5541... -prevent the load of any plugins except for Flash and Gnash</ulink>. +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... +prevent the load of any plugins except for Flash and Gnash</ulink>. Even for +Flash and Gnash, we also patch Firefox to <ulink url= +"https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... loading them into the +address space</ulink> until they are explicitly enabled.
</para> </listitem> @@ -980,7 +981,7 @@ External apps can be induced to load files that perform network activity. Unfortunately, there are cases where such apps can be launched automatically with little to no user input. In order to prevent this, Torbutton installs a component to <ulink -url="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/... +url="https://gitweb.torproject.org/torbutton.git/tree/src/components/external-app... provide the user with a popup</ulink> whenever the browser attempts to launch a helper app.
@@ -992,7 +993,7 @@ Drop events as soon as the drag is initiated. This download happens independent of the browser's Tor settings, and can be triggered by something as simple as holding the mouse button down for slightly too long while clicking on an image link. We filter drag and drop events events <ulink -url="https://gitweb.torproject.org/torbutton.git/blob_plain/HEAD:/src/components/... +url="https://gitweb.torproject.org/torbutton.git/tree/src/components/external-app... Torbutton</ulink> before the OS downloads the URLs the events contained.
</para> @@ -1049,14 +1050,14 @@ Private Browsing preference Private Browsing Mode is enabled. We need to
<ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/4ebc3cda4b704c0149f... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... the permissions manager from recording HTTPS STS state</ulink>, <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/8904bfc10cd537bd35b... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... intermediate SSL certificates from being recorded</ulink>, <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/86f6bc9dc28b6f8d7ea... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... the clipboard cache from being written to disk for large pastes</ulink>, and <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/d5da6f8b7de089335e4... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... the content preferences service from recording site zoom</ulink>. We also had to disable the media cache with the pref <command>media.cache_size</command>, to prevent HTML5 videos from being written to the OS temporary directory, @@ -1160,6 +1161,8 @@ form history, login values, and so on within a context menu for each site. </caption> </figure> <orderedlist> +<!-- XXX-4.5: SharedWorkers are disabled --> +<!-- XXX-4.5: blob: URIs are isolated --> <listitem>Cookies <para><command>Design Goal:</command>
@@ -1183,6 +1186,7 @@ unlinkability trumps that desire. <listitem>Cache <para>
+<!-- XXX-4.5: We use a C++ patch now --> Cache is isolated to the url bar origin by using a technique pioneered by Colin Jackson et al, via their work on <ulink url="http://www.safecache.com/">SafeCache</ulink>. The technique re-uses the @@ -1232,7 +1236,7 @@ FQDN that was used to source the third party element.
Additionally, because the image cache is a separate entity from the content cache, we had to patch Firefox to also <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/114cd22282f8b3cd6e6... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... this cache per url bar domain</ulink>.
</para> @@ -1241,6 +1245,7 @@ this cache per url bar domain</ulink>. <para>
HTTP authentication tokens are removed for third party elements using the +<!-- XXX-4.5: Changed.. Now use C++ --> <ulink url="https://developer.mozilla.org/en/Setting_HTTP_request_headers#Observers">http-on-modify-request observer</ulink> to remove the Authorization headers to prevent <ulink @@ -1254,7 +1259,7 @@ linkability between domains</ulink>. DOM storage for third party domains MUST be isolated to the url bar origin, to prevent linkability between sites. This functionality is provided through a <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/973468a07fb9e7d9995... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... to Firefox</ulink>.
</para> @@ -1281,6 +1286,7 @@ file on Windows, so Flash remains difficult to enable. <listitem>SSL+TLS session resumption, HTTP Keep-Alive and SPDY <para><command>Design Goal:</command>
+<!-- XXX-4.5: keep-alive is now properly isolated --> TLS session resumption tickets and SSL Session IDs MUST be limited to the url bar origin. HTTP Keep-Alive connections from a third party in one url bar origin MUST NOT be reused for that same third party in another url bar origin. @@ -1292,7 +1298,7 @@ We currently clear SSL Session IDs upon <link linkend="new-identity">New Identity</link>, we disable TLS Session Tickets via the Firefox Pref <command>security.enable_tls_session_tickets</command>. We disable SSL Session IDs via a <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/5524ae43780e4738310... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... to Firefox</ulink>. To compensate for the increased round trip latency from disabling these performance optimizations, we also enable <ulink url="https://tools.ietf.org/html/draft-bmoeller-tls-falsestart-00">TLS @@ -1422,6 +1428,7 @@ url="https://trac.torproject.org/projects/tor/query?keywords=~tbb-linkability&... <title>Cross-Origin Fingerprinting Unlinkability</title> <para>
+<!-- XXX-4.5: Elaborate on level of fingerprinting (from security-group post) --> In order to properly address the fingerprinting adversary on a technical level, we need a metric to measure linkability of the various browser properties beyond any stored origin-related state. <ulink @@ -1482,6 +1489,9 @@ and our <command>Implementation Status</command>.
</para> <orderedlist> +<!-- XXX-4.5: Socks U+P isolation for IP address unlinkability --> +<!-- XXX-4.5: HTML5 mozilla Video stat extensions --> +<!-- XXX-4.5: Sensor APIs are disabled --> <listitem>Plugins <para>
@@ -1510,9 +1520,10 @@ Currently, we entirely disable all plugins in Tor Browser. However, as a compromise due to the popularity of Flash, we allow users to re-enable Flash, and flash objects are blocked behind a click-to-play barrier that is available only after the user has specifically enabled plugins. Flash is the only plugin -available, the rest are <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/1ef32dcf0cc64876f5b... -blocked from loading by a Firefox patch</ulink>. We also set the Firefox +available, the rest are entirely +blocked from loading by the Firefox patches mentioned in the <link +linkend="proxy-obedience">Proxy Obedience +section</link>. We also set the Firefox preference <command>plugin.expose_full_path</command> to false, to avoid leaking plugin installation information.
@@ -1540,15 +1551,13 @@ image can be used almost identically to a tracking cookie by the web server. In some sense, the canvas can be seen as the union of many other fingerprinting vectors. If WebGL is normalized through software rendering, system colors were standardized, and the browser shipped a fixed collection of -fonts (see later points in this list), it might not be necessary -to create a canvas permission. However, until then, to reduce the threat from -this vector, we have patched Firefox to <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/3b53f525cfb68880e67... -before returning valid image data</ulink> to the Canvas APIs, and for <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/fb9f463fe3a69499d68... -to isPointInPath and related functions</ulink>. If the user hasn't previously -allowed the site in the URL bar to access Canvas image data, pure white image -data is returned to the Javascript APIs. +fonts (see later points in this list), it might not be necessary to create a +canvas permission. However, until then, to reduce the threat from this vector, +we have patched Firefox to <ulink +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... +before returning valid image data</ulink> to the Canvas APIs. If the user +hasn't previously allowed the site in the URL bar to access Canvas image data, +pure white image data is returned to the Javascript APIs.
</para> <para> @@ -1647,7 +1656,7 @@ In the meantime while we investigate shipping our own fonts, we disable plugins, which prevents font name enumeration. Additionally, we limit both the number of font queries from CSS, as well as the total number of fonts that can be used in a document <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/d515c79ffd115b132ca... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... a Firefox patch</ulink>. We create two prefs, <command>browser.display.max_font_attempts</command> and <command>browser.display.max_font_count</command> for this purpose. Once these @@ -1665,6 +1674,7 @@ font (in any order), we use that font instead of any of the named local fonts. </para> </listitem> <listitem>Monitor, Widget, and OS Desktop Resolution +<!-- XXX-4.5: window.devicePixelRatio --> <para>
Both CSS and Javascript have access to a lot of information about the screen @@ -1696,15 +1706,15 @@ this scheme.
</para> <para><command>Implementation Status:</command> - +<!-- XXX-4.5: Explain 1000px max, warning, and maybe also resize/zoom defenses -->
We have implemented the above strategy using a window observer to <ulink -url="https://gitweb.torproject.org/torbutton.git/blob/HEAD:/src/chrome/content/to... +url="https://gitweb.torproject.org/torbutton.git/tree/src/chrome/content/torbutto... new windows based on desktop resolution</ulink>. Additionally, we patch Firefox to use the client content window size <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/8fc2421becd0ab0cfb5... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... window.screen</ulink>. Similarly, we <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/81e7fc3a10d27b1d8f0... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... DOM events to return content window relative points</ulink>. We also force popups to open in new tabs (via <command>browser.link.open_newwindow.restriction</command>), to avoid @@ -1741,12 +1751,12 @@ details such as screen orientation or type.
We patch Firefox to <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/30dc2c4290698af81ce... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... a fixed set of system colors to content window CSS</ulink>, and <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/8f6e979d30598569dea... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... detection of font smoothing on OSX</ulink>. We also always <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/09561f0e5452305b9ef... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... landscape-primary</ulink> for the screen orientation.
</para> @@ -1797,7 +1807,7 @@ Firefox provides several options for controlling the browser user agent string which we leverage. We also set similar prefs for controlling the Accept-Language and Accept-Charset headers, which we spoof to English by default. Additionally, we <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/95cd0e8071aa1fe3f49... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... content script access</ulink> to Components.interfaces, which <ulink url="http://pseudo-flaw.net/tor/torbutton/fingerprint-firefox.html">can be used</ulink> to fingerprint OS, platform, and Firefox minor version. </para> @@ -1814,10 +1824,11 @@ completeness, we attempt to maintain this property. </para> <para><command>Implementation Status:</command>
+<!-- XXX-4.5: Locale fingerprinting fixes? Probably covered --> We set the fallback character set to set to windows-1252 for all locales, via <command>intl.charset.default</command>. We also patch Firefox to allow us to <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/fe42a78575df7f460fa... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... the JS engine</ulink> to use en-US as its internal C locale for all Date, Math, and exception handling.
@@ -1977,6 +1988,7 @@ All linkable identifiers and browser state MUST be cleared by this feature. <title>Implementation Status:</title> <blockquote> <para> +<!-- XXX-4.5: Blob URIs are cleared by forcing garbage collection -->
First, Torbutton disables Javascript in all open tabs and windows by using both the <ulink @@ -2063,6 +2075,8 @@ features should be disabled at which security levels. </para> <para>
+<!-- XXX-4.5: These values have changed slightly.. Also SVG and MathML prefs --> + The Security Slider consists of four positions. At the lowest security level (the default), we disable <command>gfx.font_rendering.graphite.enabled</command> for Latin locales, as @@ -2135,7 +2149,7 @@ network, making them also effectively no-overhead. <blockquote> <para> Currently, we patch Firefox to <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/27ef32d509ed1c9eeb2... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... pipeline order and depth</ulink>. Unfortunately, pipelining is very fragile. Many sites do not support it, and even sites that advertise support for pipelining may simply return error codes for successive requests, effectively @@ -2145,7 +2159,7 @@ shortcomings and fallback behaviors are the primary reason that Google developed SPDY as opposed simply extending HTTP to improve pipelining. It turns out that we could actually deploy exit-side proxies that allow us to <ulink -url="https://gitweb.torproject.org/torspec.git/blob/HEAD:/proposals/ideas/xxx-usi... +url="https://gitweb.torproject.org/torspec.git/tree/proposals/ideas/xxx-using-spd... SPDY from the client to the exit node</ulink>. This would make our defense not only free, but one that actually <emphasis>improves</emphasis> performance.
@@ -2200,7 +2214,7 @@ date. <para>
We also make use of the in-browser Mozilla updater, and have <ulink -url="https://gitweb.torproject.org/tor-browser.git/commitdiff/777695d09e3cff4c79c... +url="https://gitweb.torproject.org/tor-browser.git/commit/?h=tor-browser-31.6.0es... the updater</ulink> to avoid sending OS and Kernel version information as part of its update pings.
@@ -2209,325 +2223,6 @@ of its update pings.
</orderedlist> </sect2> - -<!-- - <sect2 id="firefox-patches"> - <title>Description of Firefox Patches</title> - <para> - -The set of patches we have against Firefox can be found in the <ulink -url="https://gitweb.torproject.org/torbrowser.git/tree/maint-2.4:/src/current-pat... directory of the torbrowser git repository</ulink>. They are: - - </para> - <orderedlist> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... -Components.interfaces</ulink> - <para> - -In order to reduce fingerprinting, we block access to this interface from -content script. Components.interfaces can be used for fingerprinting the -platform, OS, and Firebox version, but not much else. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... -Permissions Manager memory only</ulink> - <para> - -This patch exposes a pref 'permissions.memory_only' that properly isolates the -permissions manager to memory, which is responsible for all user specified -site permissions, as well as stored <ulink -url="https://secure.wikimedia.org/wikipedia/en/wiki/HTTP_Strict_Transport_Securit...</ulink> -policy from visited sites. - -The pref does successfully clear the permissions manager memory if toggled. It -does not need to be set in prefs.js, and can be handled by Torbutton. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... -Intermediate Cert Store memory-only</ulink> - <para> - -The intermediate certificate store records the intermediate SSL certificates -the browser has seen to date. Because these intermediate certificates are used -by a limited number of domains (and in some cases, only a single domain), -the intermediate certificate store can serve as a low-resolution record of -browsing history. - - </para> - <para><command>Design Goal:</command> - -As an additional design goal, we would like to later alter this patch to allow this -information to be cleared from memory. The implementation does not currently -allow this. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... -a string-based cacheKey property for domain isolation</ulink> - <para> - -To <ulink -url="https://trac.torproject.org/projects/tor/ticket/3666%22%3Eincrease the -security of cache isolation</ulink> and to <ulink -url="https://trac.torproject.org/projects/tor/ticket/3754%22%3Esolve strange and -unknown conflicts with OCSP</ulink>, we had to patch -Firefox to provide a cacheDomain cache attribute. We use the url bar -FQDN as input to this field. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... -all plugins except flash</ulink> - <para> -We cannot use the <ulink -url="http://www.oxymoronical.com/experiments/xpcomref/applications/Firefox/3.5/co... -@mozilla.org/extensions/blocklist;1</ulink> service, because we -actually want to stop plugins from ever entering the browser's process space -and/or executing code (for example, AV plugins that collect statistics/analyze -URLs, magical toolbars that phone home or "help" the user, Skype buttons that -ruin our day, and censorship filters). Hence we rolled our own. - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... content-prefs service memory only</ulink> - <para> -This patch prevents random URLs from being inserted into content-prefs.sqlite in -the profile directory as content prefs change (includes site-zoom and perhaps -other site prefs?). - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... Tor Browser exit when not launched from Vidalia</ulink> - <para> - -It turns out that on Windows 7 and later systems, the Taskbar attempts to -automatically learn the most frequent apps used by the user, and it recognizes -Tor Browser as a separate app from Vidalia. This can cause users to try to -launch Tor Browser without Vidalia or a Tor instance running. Worse, the Tor -Browser will automatically find their default Firefox profile, and properly -connect directly without using Tor. This patch is a simple hack to cause Tor -Browser to immediately exit in this case. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... SSL Session ID tracking</ulink> - <para> - -This patch is a simple 1-line hack to prevent SSL connections from caching -(and then later transmitting) their Session IDs. There was no preference to -govern this behavior, so we had to hack it by altering the SSL new connection -defaults. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... an observer event to close persistent connections</ulink> - <para> - -This patch creates an observer event in the HTTP connection manager to close -all keep-alive connections that still happen to be open. This event is emitted -by the <link linkend="new-identity">New Identity</link> button. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... Device and System Specific Media Queries</ulink> - <para> - -<ulink url="https://developer.mozilla.org/en-US/docs/CSS/Media_queries">CSS -Media Queries</ulink> have a fingerprinting capability approaching that of -Javascript. This patch causes such Media Queries to evaluate as if the device -resolution was equal to the content window resolution. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... the number of fonts per document</ulink> - <para> - -Font availability can be <ulink url="http://flippingtypical.com/">queried by -CSS and Javascript</ulink> and is a fingerprinting vector. This patch limits -the number of times CSS and Javascript can cause font-family rules to -evaluate. Remote @font-face fonts are exempt from the limits imposed by this -patch, and remote fonts are given priority over local fonts whenever both -appear in the same font-family rule. We do this by explicitly altering the -nsRuleNode rule represenation itself to remove the local font families before -the rule hits the font renderer. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... Firefox to Tor Browser</ulink> - <para> - -This patch updates our branding in compliance with Mozilla's trademark policy. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... Download Manager Memory Only</ulink> - <para> - -This patch prevents disk leaks from the download manager. The original -behavior is to write the download history to disk and then delete it, even if -you disable download history from your Firefox preferences. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... DDG and StartPage to Omnibox</ulink> - <para> - -This patch adds DuckDuckGo and StartPage to the Search Box, and sets our -default search engine to StartPage. We deployed this patch due to excessive -Captchas and complete 403 bans from Google. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... nsICacheService.EvictEntries() Synchronous</ulink> - <para> - -This patch eliminates a race condition with "New Identity". Without it, -cache-based Evercookies survive for up to a minute after clearing the cache -on some platforms. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... WebSockets DNS Leak</ulink> - <para> - -This patch prevents a DNS leak when using WebSockets. It also prevents other -similar types of DNS leaks. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... HTTP pipeline order and depth</ulink> - <para> -As an -<ulink -url="https://blog.torproject.org/blog/experimental-defense-website-traffic-finger... -defense against Website Traffic Fingerprinting</ulink>, we patch the standard -HTTP pipelining code to randomize the number of requests in a -pipeline, as well as their order. - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... -an observer event to filter the Drag and Drop URL list</ulink> - <para> - -This patch allows us to block external Drag and Drop events from Torbutton. -We need to block Drag and Drop because Mac OS and Ubuntu both immediately load -any URLs they find in your drag buffer before you even drop them (without -using your browser's proxy settings, of course). This can lead to proxy bypass -during user activity that is as basic as holding down the mouse button for -slightly too long while clicking on an image link. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... mozIThirdPartyUtil.getFirstPartyURI() API</ulink> - <para> - -This patch provides an API that allows us to more easily isolate identifiers -to the URL bar domain. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... canvas image extraction prompt</ulink> - <para> - -This patch prompts the user before returning canvas image data. Canvas image -data can be used to create an extremely stable, high-entropy fingerprint based -on the unique rendering behavior of video cards, OpenGL behavior, -system fonts, and supporting library versions. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... client window coordinates for mouse events</ulink> - <para> - -This patch causes mouse events to return coordinates relative to the content -window instead of the desktop. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... not expose physical screen info to window.screen</ulink> - <para> - -This patch causes window.screen to return the display resolution size of the -content window instead of the desktop resolution size. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... not expose system colors to CSS or canvas</ulink> - <para> - -This patch prevents CSS and Javascript from discovering your desktop color -scheme and/or theme. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... the Image Cache per url bar domain</ulink> - <para> - -This patch prevents cached images from being used to store third party tracking -identifiers. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat...) API</ulink> - <para> - -This patch provides HTTPS-Everywhere with an API to perform redirections more -securely and without addon conflicts. - - </para> - </listitem> - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... DOM Storage to first party URI</ulink> - <para> - -This patch prevents DOM Storage from being used to store third party tracking -identifiers. - - </para> - </listitem> - - <listitem><ulink -url="https://gitweb.torproject.org/torbrowser.git/blob/maint-2.4:/src/current-pat... -"This plugin is disabled" barrier</ulink> - - <para> - -This patch removes a barrier that was informing users that plugins were -disabled and providing them with a link to enable them. We felt this was poor -user experience, especially since the barrier was displayed even for sites -with dual Flash+HTML5 video players, such as YouTube. - - </para> - </listitem> - - </orderedlist> - </sect2> ---> </sect1>
<!-- @@ -2553,6 +2248,7 @@ with dual Flash+HTML5 video players, such as YouTube. <sect1 id="BuildSecurity"> <title>Build Security and Package Integrity</title> <para> +<!-- XXX-4.5: signatures of MARs and exes are reproducibly removable -->
In the age of state-sponsored malware, <ulink url="https://blog.torproject.org/blog/deterministic-builds-part-one-cyberwar-and-global-compromise">we @@ -2629,11 +2325,11 @@ for archives, but care must be taken to instruct libc and other sorting routines to use a fixed locale to determine lexicographic ordering, or machines with different locale settings will produce different sort results. We chose the 'C' locale for this purpose. We created wrapper scripts for <ulink -url="https://gitweb.torproject.org/builders/tor-browser-bundle.git/blob/HEAD:/git...</ulink>, +url="https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/gitian/bu...</ulink>, <ulink -url="https://gitweb.torproject.org/builders/tor-browser-bundle.git/blob/HEAD:/git...</ulink>, +url="https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/gitian/bu...</ulink>, and <ulink -url="https://gitweb.torproject.org/builders/tor-browser-bundle.git/blob/HEAD:/git...</ulink> +url="https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/gitian/bu...</ulink> to aid in reproducible archive creation.
</para> @@ -2646,7 +2342,7 @@ We ran into difficulties with both binutils and the DMG archive script using uninitialized memory in certain data structures that ended up written to disk. Our binutils fixes were merged upstream, but the DMG archive fix remains an <ulink -url="https://gitweb.torproject.org/builders/tor-browser-bundle.git/blob/HEAD:/git... +url="https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/gitian/pa... patch</ulink>.
</para> @@ -2658,7 +2354,7 @@ The standard way of controlling timestamps in Gitian is to use libfaketime, which hooks time-related library calls to provide a fixed timestamp. However, due to our use of wine to run py2exe for python-based pluggable transports, pyc timestamps had to be address with an additional <ulink -url="https://gitweb.torproject.org/builders/tor-browser-bundle.git/blob/HEAD:/git... +url="https://gitweb.torproject.org/builders/tor-browser-bundle.git/tree/gitian/bu... script</ulink>. The timezone leaks were addressed by setting the <command>TZ</command> environment variable to UTC in our descriptors.
@@ -2717,6 +2413,7 @@ time-based dependency tracking</ulink> that only appear in LXC containers. </sect2>
<sect2> +<!-- XXX-4.5: unsigning --> <title>Package Signatures and Verification</title> <para>
tor-commits@lists.torproject.org