[tor-bugs] #24367 [Core Tor/Tor]: Changing pluggable transports (during start-up) in Tor Browser is broken
Tor Bug Tracker & Wiki
blackhole at torproject.org
Thu Dec 14 14:33:51 UTC 2017
#24367: Changing pluggable transports (during start-up) in Tor Browser is broken
-------------------------------------------------+-------------------------
Reporter: gk | Owner: (none)
Type: defect | Status:
| needs_information
Priority: Medium | Milestone: Tor:
| 0.3.2.x-final
Component: Core Tor/Tor | Version: Tor:
| 0.3.0.1-alpha
Severity: Normal | Resolution:
Keywords: 030-backport, 031-backport, | Actual Points:
regression, tor-bridge-client, s8-errors, |
tbb-wants |
Parent ID: | Points: 0.5
Reviewer: | Sponsor:
| Sponsor8-can
-------------------------------------------------+-------------------------
Comment (by nickm):
Okay! Let's look through these logs to see what happens to our favorite
bridge, A09D536DD1752D542E1FBB3C9CE4449D51298239, at 82.212.101.3.
{{{
Dec 14 11:46:18.000 [info] get_transport_by_bridge_addrport(): Looked up
transport for 83.212.101.3:80: found obfs3.
...
Dec 14 11:46:19.000 [info] make_guard_confirmed(): Marking [bridge]
($A09D536DD1752D542E1FBB3C9CE4449D51298239) at 83.212.101.3:80 as a
confirmed guard (index 0)
Dec 14 11:46:19.000 [info] entry_guards_update_primary(): Primary entry
guards have changed. New primary guard list is:
Dec 14 11:46:19.000 [info] entry_guards_update_primary(): 1/3: [bridge]
($A09D536DD1752D542E1FBB3C9CE4449D51298239) at 83.212.101.3:80 (confirmed)
Dec 14 11:46:19.000 [info] entry_guards_update_primary(): 2/3: [bridge]
($4C331FA9B3D1D6D8FB0D8FBBF0C259C360D97E6A) at 109.105.109.163:47779
Dec 14 11:46:19.000 [info] entry_guards_update_primary(): 3/3: [bridge]
($1E05F577A0EC0213F971D81BF4D86A9E4E8229ED) at 109.105.109.163:38980
...
Dec 14 11:46:19.000 [notice] new bridge descriptor 'LeifEricson' (fresh):
$A09D536DD1752D542E1FBB3C9CE4449D51298239~LeifEricson at 83.212.101.3
... (time passes; tor bootstraps; we change the options) ...
Dec 14 11:46:31.000 [info] options_act(): Changed to using entry guards or
bridges, or changed preferred or excluded node lists. Abandoning previous
circuits.
Dec 14 11:46:31.000 [info] sampled_guards_update_from_consensus():
Updating sampled guard status based on received consensus.
...
Dec 14 11:46:31.000 [info] sampled_guards_update_from_consensus(): Sampled
guard [bridge] ($A09D536DD1752D542E1FBB3C9CE4449D51298239) at
83.212.101.3:80 is now unlisted.
...
Dec 14 11:46:31.000 [info] entry_guards_update_primary(): Primary entry
guards have changed. New primary guard list is:
Dec 14 11:46:31.000 [info] entry_guards_update_primary(): 1/3: [bridge]
($91A6354697E6B02A386312F68D82CF86824D3606) at 85.31.186.26:443
Dec 14 11:46:31.000 [info] entry_guards_update_primary(): 2/3: [bridge]
($C73ADBAC8ADFDBF0FC0F3F4E8091C0107D093716) at 154.35.22.9:12166
Dec 14 11:46:31.000 [info] entry_guards_update_primary(): 3/3: [bridge]
($A832D176ECD5C7C6B58825AE22FC4C90FA249637) at 154.35.22.11:80
...
Dec 14 11:46:33.000 [info] sample_reachable_filtered_entry_guards():
Trying to sample a reachable guard: We know of 20 in the USABLE_FILTERED
set.
Dec 14 11:46:33.000 [info] sample_reachable_filtered_entry_guards():
(After filters [17], we have 1 guards to consider.)
Dec 14 11:46:33.000 [info] sample_reachable_filtered_entry_guards():
(Selected [bridge] ($A09D536DD1752D542E1FBB3C9CE4449D51298239) at
83.212.101.3:50002.)
Dec 14 11:46:33.000 [info] select_entry_guard_for_circuit(): No primary or
confirmed guards available. Selected random guard [bridge]
($A09D536DD1752D542E1FBB3C9CE4449D51298239) at 83.212.101.3:50002 for
circuit. Will try other guards before using this circuit.
Dec 14 11:46:33.000 [info] get_transport_by_bridge_addrport(): Looked up
transport for 83.212.101.3:80: no such bridge found.
...
Dec 14 11:46:33.000 [info] connection_or_note_state_when_broken():
Connection died in state 'handshaking (TLS) with SSL state SSLv3/TLS write
client hello in HANDSHAKE'
Dec 14 11:46:33.000 [warn] Problem bootstrapping. Stuck at 85%: Finishing
handshake with first hop. (DONE; DONE; count 1; recommendation warn; host
A09D536DD1752D542E1FBB3C9CE4449D51298239 at 83.212.101.3:80)
}}}
So, two interesting things here:
1. Why did we pick LeifEricson for our connection the second time, after
we had chosen 3 other primary guards? The line `After filters [17], we
have 1 guards to consider.` is suggestive here. Note that 17 is hex here,
so we are setting every SAMPLE_EXCLUDE_CONFIRMED, SAMPLE_EXCLUDE_PRIMARY,
SAMPLE_EXCLUDE_PENDING, and SAMPLE_EXCLUDE_NO_DESCRIPTOR. This means
we're calling `sample_reachable_filtered_entry_guards()` from
select_entry_guard_for_circuit with GUARD_USAGE_TRAFFIC set. But we have
no descriptors for any of our primary guards, so we're not using any of
them. Whoops!
2. When we connect to LeifEricson, we decide that it doesn't have a
transport. But look what's happening here. We say that we've selected
`83.212.101.3:50002` for the circuit, but when we look up the transport,
we say `Looked up transport for 83.212.101.3:80`. So we're looking up the
wrong transport entirely.
--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/24367#comment:29>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online
More information about the tor-bugs
mailing list