Sybil Attack Countermeasures

Roger Dingledine arma at
Sun Mar 11 09:28:54 UTC 2007

On Fri, Mar 09, 2007 at 04:28:34PM -0700, Kevin Bauer wrote:
> Overview:
> 	This document describes a solution to a Sybil attack
>     vulnerability in the directory servers. Currently, it 
>     is possible for a single IP address to host an arbitrarily 
>     high number of Tor routers.

An extra sentence to add here: "While Tor never uses more than one
server from a given /16 in the same circuit, an attacker with multiple
servers in the same place is still dangerous because he can get around
the per-server bandwidth cap that is designed to prevent a single server
from attracting too much of the overall traffic."

>     We propose that the directory
>     servers limit the number of Tor routers that may be registered
>     at a particular IP address to some small (fixed) number, perhaps
>     just one Tor router per IP address.
> Motivation:
> 	Since it is possible for an attacker to register an arbitrarily large
>     number of Tor routers, it is possible for malicious parties to 
>     do this to as part of a traffic analysis attack.
> Security implications:
> 	This countermeasure will increase the number of IP addresses that an
>     attacker must control in order to carry out traffic analysis.

Should we consider enforcing this on /16 networks rather than /32, like
we already do for servers-in-the-same-circuit? In many cases being next
door too isn't so much harder.

Also, if we're trying to avoid letting the adversary attract too much
bandwidth, should we be thinking "no more than 5MB/s advertised bandwidth
total" rather than "no more than 5 servers total"? On the other hand,
there are a very few cases where we choose a random node without regard
for advertised bandwidth, so maybe number-of-servers would be good too.

In any case, this is tricky -- there's a tradeoff between letting people
volunteer to help grow the network and keeping ourselves secure from
potential attackers. Since the Tor network is so strapped for bandwidth
these days, I'm hesitant to add in anything that will turn away real

Here are some cases where we might see multiple Tor servers on the same
IP address:
  * Testing. moria1, moria2, peacetime, and other morias all run on
    my computer at MIT, because that way we get testing. Some are
    run by me, and peacetime is run by Nick.
  * NAT. If there are several servers but they port-forward through the
    same IP address, ... then I guess we can hope that the operators
    coordinate with each other. Also, we should recognize that while
    they help the network in terms of increased capacity, they don't
    help as much as they could in terms of location diversity. But our
    approach so far has been to take what we can get.
  * People who have more than 1.5MB/s and want to help out more. For
    example, for a while Tonga was offering 10MB/s and its Tor server
    would only make use of a bit of it. So I suggested that he run
    two Tor servers, to use more.

None of these are super compelling, other than the first, and I guess we
could make an 'exceptions' list, though that would be code bloat. I'd be
more comfortable putting the limit pretty high though (say, 5 servers
or 5MB/s to start), because that will still block Sybils yet give us
some flexibility to see how Tor use evolves.

> Specification:
> 	We propose that the directory servers check if an incoming Tor router
>     IP address is already registered under another router. If this is 
>     the case, then prevent this router from joining the network.

By "registered", do you mean "Named"? Or just "Running"? Or just "in the
network status"?

My first thought is that we can let him join, but just not declare him
Valid if there are too many in a given location. But this still lets the
attacker sign up a thousand nodes that will be used only in the middle
hop, which doesn't seem so dangerous but probably would turn out to be.
My second thought is to just not declare him Running, then.

[Digression: is there a DoS opportunity if the attacker signs up a
bazillion non-working nodes with intent to bloat the networkstatuses?
Yes, probably; we should not list non-running servers if there are
too many. But that's for another proposal I guess.]

We should pick Named servers to keep first, and among those sort by
bandwidth, so we keep the "best" available servers usable.

> Compatibility:
> 	Upon inspection of a directory server, we found that the following
>     IP addresses have more than one Tor router:
> 	Scruples     443
> 	WiseUp     9001
> 	Unnamed  9001
> 	Unnamed  9001
> 	Unnamed  9001
> 	aurel     9001
> 	sokrates     9001

Probably only one of these two was listed as Running, right? I hope? :)
And similarly, only one of the Unnameds above?

> 	moria1   9001
> 	peacetime   9100

moria2 is secretly running on the same host as these two, but it's
using a different IP address. See comments above about /16. :)

> 	There may exist compatibility issues with this proposed fix. It is unclear
>     why more than one router would need to be on the same IP address.


More information about the tor-dev mailing list