On 10 Sep 2015, at 17:01, isis <isis@torproject.org> wrote:Hey all,
I have a working implementation of proposal #188, [0] which specifies a
mechanism by which tor's (rather accidental) loose-source routing feature is
utilised by Bridges in order to transparently inject a Bridge Guard into all
client circuits. (See #7144. [1])
Currently, I am updating the text in proposal #188 to match my implementation,
and I am trying to decide what to do about the two types of Bridge ORPort
reachability testing. Here's the text I've written so far to explain the
issues:
(In the following, "Alice" is an OP, "Bob" is a Bridge, "Guillaume" is
Bob's chosen Entry Guard, and "Charlie" is a random Middle node.)4.4. Bridge Reachability Testing
Currently, a Bridge's reachability is tested both by the Bridge
itself (called "self-testing") and by the BridgeAuthority.
4.4.1. Bridge Reachability Self-Testing
Before a Bridge uploads its descriptors to the BridgeAuthority, it
creates a special type of testing circuit which ends at itself:
Bob -> Guillaume -> Charlie -> Bob
Thus, going to all this trouble to later use loose-source routing in
order to relay Alice's traffic through Guillaume (rather than
connecting directly to Charlie, as Alice intended) is diminished by
the fact that Charlie can still passively enumerate Bridges by
waiting to be asked to connect to a node which is not
contained within the consensus.
We could get around this option by disabling self-testing for bridges
entirely, by automatically setting "AssumeReachable 1" for all Bridge
relays… although I am not sure if this is wise.
4.4.2. Bridge Reachability Testing by the BridgeAuthority
After receiving Bob's descriptors, the BridgeAuthority attempts to
connect to Bob's ORPort by making a direct TLS connection to the
Bridge's advertised ORPort.
Should we change this behaviour? One the one hand, at least this
does not enable any random OR in the entire network to enumerate
Bridges. On the other hand, any adversary who can observe packets
from the BridgeAuthority is capable of enumeration.
So, my current questions are:
1. Bridges only do reachability self-testing in order to warn their operators
that the Bridge (or firewall or whatever) might be misconfigured, correct?
Is there any other reason (or future reason) why self-testing is
important/useful?
2. How should the self-testing be changed?
2.a. First, if there aren't any other reasons for self-testing: Is Bridge
reachability self-testing actually helpful to Bridge operators in
practice? Don't most Bridge operators just try to connect, as a
client, to their own Bridge to see if it's working correctly? (This
is what I usually do, at least…)
If it's not useful to most Bridge operators, can we just disable
self-testing for all Bridges? (And, should we disable it only for
Bridges who are using Bridge Guards, or all of Bridges regardless?)
2.b. If it is useful to people, then the best way I can think of so far to
keep it, but refactor it to be safer, would be to create a circuit
like:
Bridge → Guard → Middle → OtherMiddle → Guard → Bridge
Clearly, that circuit is just a little bit insane… but we can't do:
Bridge → Guard → Middle → Guard → Bridge
because the Middle would refuse to extend back to the previous node
(all ORs follow this rule). Similarly, it would be stupid to do:
Bridge → Guard → Middle → OtherMiddle → Bridge
because, obviously, that merely shifts the problem and accomplishes
nothing. But is there something smarter I could do?
3. Should we change how the BridgeAuthority tests Bridge ORPort reachability?
If so, how?
4. If I'm going to refactor all of this, are there other (future) things I
should take into account?
For example, if self-testing is disabled for Bridges, and, due to #7349,
[2] the BridgeAuthority isn't testing reachability either, then how will
the BridgeAuthority know if (any of) the Bridge's PTs are reachable?
(One solution might be to, in that case, have the BridgeAuthority lie and
tell BridgeDB that such Bridges were reachable, letting BridgeDB do the PT
reachability testing.)
Please help me brainstorm a way out of this mess!
[0]: https://gitweb.torproject.org/torspec.git/tree/proposals/188-bridge-guards.txt
[1]: https://bugs.torproject.org/7144
[2]: https://bugs.torproject.org/7349
Best Regards,
--
♥Ⓐ isis agora lovecruft
_________________________________________________________
OpenPGP: 4096R/0A6A58A14B5946ABDE18E207A3ADB67A2CDB8B35
Current Keys: https://blog.patternsinthevoid.net/isis.txt
_______________________________________________
tor-dev mailing list
tor-dev@lists.torproject.org
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-dev