[tor-commits] [torspec/master] Add 241-suspicious-guard-turnover.txt

nickm at torproject.org nickm at torproject.org
Mon Feb 2 13:36:42 UTC 2015


commit fb7c47262f60f1c75108512305e37c89b0418fa1
Author: Nick Mathewson <nickm at torproject.org>
Date:   Mon Feb 2 08:36:39 2015 -0500

    Add 241-suspicious-guard-turnover.txt
---
 proposals/000-index.txt                     |    2 +
 proposals/241-suspicious-guard-turnover.txt |  174 +++++++++++++++++++++++++++
 2 files changed, 176 insertions(+)

diff --git a/proposals/000-index.txt b/proposals/000-index.txt
index b8d4490..b6c7415 100644
--- a/proposals/000-index.txt
+++ b/proposals/000-index.txt
@@ -161,6 +161,7 @@ Proposals by number:
 238  Better hidden service stats from Tor relays [DRAFT]
 239  Consensus Hash Chaining [DRAFT]
 240  Early signing key revocation for directory authorities [DRAFT]
+241  Resisting guard-turnover attacks [DRAFT]
 
 
 Proposals by status:
@@ -186,6 +187,7 @@ Proposals by status:
    238  Better hidden service stats from Tor relays
    239  Consensus Hash Chaining
    240  Early signing key revocation for directory authorities
+   241  Resisting guard-turnover attacks
  NEEDS-REVISION:
    131  Help users to verify they are using Tor
    190  Bridge Client Authorization Based on a Shared Secret
diff --git a/proposals/241-suspicious-guard-turnover.txt b/proposals/241-suspicious-guard-turnover.txt
new file mode 100644
index 0000000..a0313b2
--- /dev/null
+++ b/proposals/241-suspicious-guard-turnover.txt
@@ -0,0 +1,174 @@
+Filename: 241-suspicious-guard-turnover.txt
+Title: Resisting guard-turnover attacks
+Author: Aaron Johnson, Nick Mathewson
+Created: 2015-01-27
+Status: Draft
+
+1. Introduction
+
+  Tor uses entry guards to prevent an attacker who controls some
+  fraction of the network from observing a fraction of every user's
+  traffic. If users chose their entries and exits uniformly at
+  random from the list of servers every time they build a circuit,
+  then an adversary who had (k/N) of the network would deanonymize
+  F=(k/N)^2 of all circuits... and after a given user had built C
+  circuits, the attacker would see them at least once with
+  probability 1-(1-F)^C.  With large C, the attacker would get a
+  sample of every user's traffic with probability 1.
+
+  To prevent this from happening, Tor clients choose a small number
+  of guard nodes (currently 1: see proposal 236).  These guard nodes
+  are the only nodes that the client will connect to directly.  If
+  they are not compromised, the user's paths are not compromised.
+
+  But attacks remain.  Consider an attacker who can run a firewall
+  between a target user and the Tor network, and make
+  many of the guards they don't control appear to be unreachable.
+  Or consider an attacker who can identify a user's guards, and mount
+  denial-of-service attacks on them until the user picks a guard
+  that the attacker controls.
+
+  In the presence of these attacks, we can't continue to connect to
+  the Tor network unconditionally.  Doing so would eventually result
+  in the user chosing a hostile node as their guard, and losing
+  anonymity.
+
+
+
+
+2. Proposed behavior
+
+   Keep a record of all the guards we've tried to connect to,
+   connected to, or extended circuits through in the last PERIOD
+   days.
+
+   (We have connected to a guard if we authenticate its identity.
+   We have extended a circuit through a guard if we built a
+   multi-hop circuit with it.)
+
+   If the number of guards we have *tried* to connect to in the last
+   PERIOD days is greater than CANDIDATE_THRESHOLD, do not attempt
+   to connect to any other guards; only attempt the ones we have
+   previously *tried* to connect to.
+
+   If the number of guards we *have* connected to in the last PERIOD
+   days is greater than CONNECTED_THRESHOLD, do not attempt to
+   connect to any other guards; only attempt ones we have already
+   *successfully* connected to.
+
+   If we fail to connect to NET_THRESHOLD guards in a row, conclude
+   that the network is likely down. Stop/notify the user; retry
+   later; add no new guards for consideration.
+
+ [[ optional
+   If we notice that USE_THRESHOLD guards that we *used for
+   circuits* in the last FAST_REACT_PERIOD days are not working, but
+   some other guards are, assume that an attack is in progress, and
+   stop/notify the user.
+  ]]
+
+2.1. Suggested parameter thresholds.
+
+  PERIOD -- 60 days
+
+  FAST_REACT_PERIOD -- 10 days
+
+  CONNECTED_THRESHOLD -- 8
+
+  CANDIDATE_THRESHOLD -- 20
+
+  NET_THRESHOLD -- 10 (< CANDIDATE_THRESHOLD)
+
+ [[ optional
+  USE_THRESHOLD -- 3 (< CONNECTED_THRESHOLD)
+ ]]
+  (Each of the above should have a corresponding consensus parameter.)
+
+2.2. What do we mean by "Stop/warn"?
+
+  By default, we should probably give warnings in most of the above
+  cases for the first version that deploys them.  We can have an
+  on/off/auto setting for whether we will build circuits at all if we're
+  in a "stopped" mode.  Default should be auto, meaning off for now.
+
+  The warning needs to be carefully chosen, and suggest a workaround
+  better than "get a better network" or "clear your state file".
+
+2.3. What's with making USE_THRESHOLD optional?
+
+  Aaron thinks that getting rid of it might help in the fascistfirewall
+  case.  I'm a little unclear whether that makes any of the attacks
+  easier.
+
+3. State storage requirements
+
+Right now, we save for each guard that we have made contact with:
+
+   ID
+   Added
+   is dircache?
+   down-since
+   last-attempted
+   bad-since
+   chosen-on-date, chosen-by-version
+   path bias info (circ_attempts, successes, close_success)
+
+To implement the above proposal, we'll need to add, for each guard
+*or guard candidate*:
+   when did we first decide to try connecting to it?
+   when did we last do one of:
+       decide to try connecting to it?
+       connect to it?
+       build a multihop circuit through it?
+   which one was it?
+
+Probably round these to the nearest day or so.
+
+4. Future work
+
+   We need to make this play nicely with mobility.  When a user has
+   three guards on port 9001 and they move to a firewall that only
+   allows 80/443, we'd prefer that they not simply grind to a halt.  If
+   nodes are configured to stop when too many of their guards have gone
+   away, this will confuse them.
+
+   If people need to turn FascistFirewall on and off, great.  But if
+   they just clear their state file as a workaround, that's not so good.
+
+
+   If we could tie guard choice to location, that would help a great
+   deal, but we'd need to answer the question, "Where am I on the
+   network", which is not so easy to do passively if you're behind a
+   NAT.
+
+
+
+Appendix A. Scenario analysis
+
+A.1. Example attacks
+
+ * Filter Alice's connection so they can only talk to your guards.
+
+ * Whenever Alice is using a guard you don't control, DOS it.
+
+A.2. Example non-attacks
+
+ * Alice's guard goes down.
+
+ * Alice is on a laptop that is sometimes behind a firewall that
+   blocks a guard, and sometimes is not.
+
+ * Alice is on a laptop that's behind a firewall that blocks a lot
+   of the tor network, (like, everything not on 80/443).
+
+ * Alice has a network connection that sometimes turns off and turns
+   on again.
+
+ * Alice reboots her computer periodically, and tor starts a little
+   while before the network is live.
+
+Appendix B. Acknowledgements
+
+  Thanks to Rob Jansen and David Goulet for comments on earlier versions of
+  this draft.
+



More information about the tor-commits mailing list