[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Out-of-date Tors (was Re: 25 tbreg relays in directory)

On Mon, Apr 27, 2009 at 11:57:17PM -0500, Scott Bennett wrote:
>      That brings up something that has bothered me for a long time.  When
> tor discovers that its version doesn't match any in either client-versions
> or server-versions, it currently writes complaints about it to the log(s),
> but seems to do nothing further about it.

Right. Actually, we've recently taught Vidalia how to pop up a box
telling you you're out of date. For those using Thandy, the eventual
goal is for Vidalia and Thandy to automatically fetch the new versions
and check their sigs, which should make it a lot easier to upgrade.

But you're right, this is a real problem. Some of our users use Linux
packaging systems that keep them mostly up to date. But some are on Ubuntu
(...insert expletives here). And some are on BSD, which either provides
no easy upgrades, or the users don't use them.

> 	   invalid-client-versions -- if tor detects that its version matches
> 	   one in this list, it will only allow streams to connect to the
> 	   tor project's web site.  That will allow the user to connect with
> 	   at least a pretense of anonymity and concealment in order to obtain
> 	   an up-to-date version of tor.  Matching a version in this list will
> 	   not affect tor's ability to operate as a relay.

That's a better idea than our long-ago strategy of "if Tor sees that its
version is not listed as recommended, it emits a warning log entry and
then exits". That old idea had two problems: a) some people ran their
Tors in a while(1) loop to restart after crashes, which caused them to
pull down a new consensus, exit, repeat, which beat up the directories. b)
people fretted that we had implemented a "remote kill switch" for clients.

So your idea above would solve (a), but it would still leave (b), which
was ultimately the reason why we took that "feature" out in

> 	   invalid-server-versions -- if tor detects that its version matches
> 	   one on this list, it will refuse to run as a relay, but will not
> 	   prevent tor's operation as a client.  tor clients will not choose
> 	   routes that include relays whose versions match versions in this
> 	   list for building circuits.  This client behavior could be
> 	   implemented as additional code in circuitbuild.c, or it might be
> 	   more simply by having the authorities refuse to give a "Valid" flag
> 	   to such relays.

Two thoughts here.

First, this decision is probably better made at the directory
authorities. They can decide which relays to list in their votes. Check
out dirserv_get_status_impl() in dirserv.c:

  /* was the first version that claimed to be stable, * doesn't
   * crash and drop circuits all the time, and is even vaguely
   * compatible with
   * the current network */
  if (platform && !tor_version_as_new_as(platform,"")) {
    if (msg)
      *msg = "Tor version is far too old to work.";
    return FP_REJECT;

So we could easily bump up that "minimum version" number.

The second thought: these Tor versions aren't *so* bad, compared to the
wide variety of other applications out there. Why are we singling out
Tor versions? Should we check if you're running a new enough patch-level
of Windows, and lock you out otherwise? Should we port-scan the relays
and look for sketchy daemons?

On the one hand, "yes, do everything reasonable to make sure clients
will avoid dangerous relays." But on the other hand, Tor gains security
from diversity and dispersal of relays, and an active attack is more work
(and more risk) than various large-scale passive threats. So I'm
hesitant to cut out too many relays.

And at the same time, when the Tor network is way overloaded and all
the users are crying for more performance, should we really be removing
relays from the list? :)

> 	   invalid-exit-versions -- if tor detects that its version matches
> 	   one in this list, it will not allow exits if it is running as a
> 	   relay.  tor clients will not build circuits to exits whose versions
> 	   match one in this list.

Again, this is better done by setting FP_BADEXIT at the directory

> 	b) tor clients will not choose relays whose versions do not match a
> 	   version listed in server-versions when choosing routes for circuits.
> 	   This could be implemented as additional code in circuitbuild.c or
> 	   it might be implemented more simply by having the authorities refuse
> 	   to give a "Valid" flag to such relays.

Actually, you don't want to do this with Valid. Well, you might not. Tor
clients will still use non-Valid relays for middle hops and rendezvous
hops. Check out AllowInvalidNodes in the man page.

>      My preference of the two alternatives above would be the former because
> it allows not only more flexibility, but also enables a distinction between
> versions that are merely old and versions that are known to be very unsafe
> (e.g., the LINUX openssl key generation problem of some months ago, the bug
> that allowed exits to get confused about which streams were to be fed data
> coming back from exit connections) that should be avoided at all costs.

Actually, the authorities have an enormous list of bad keys, so they can
recognize most relays that show up using a weak key. That's important,
since you could conceivably run a modern Tor with a weak key, so it's
not a matter of Tor version.

But yes, there is definitely a tradeoff here. I'm not sure where the
right point in the tradeoff is. But my intuition is that cutting 0.1.2.x
relays out of the network would hurt more than help at this point. But
for the few remaining 0.1.1.x relays? Hm.