[tor-dev] Introducing a Conjure PT for Tor

Cecylia Bocovich cohosh at torproject.org
Wed Aug 31 16:14:54 UTC 2022


Conjure[0] is an anti-censorship tool in the refraction networking 
(a.k.a. decoy routing) lineage of circumvention systems. The key 
innovation of Conjure is to turn the unused IP address space of 
deploying ISPs into a large pool of "phantom" proxies that users appear 
to connect to. Due to the size of unused IPv6 address space and the 
potential for collateral damage against real websites hosted by the 
deploying ISPs, Conjure provides a possible solution to the problem of 
censors enumerating and blocking deployed bridges or proxies.

I've been working with Jack Wampler and Eric Wustrow at the University 
of Colorado to implement a Conjure PT for Tor that uses the existing 
deployed Conjure stations[1].

# How it works

Conjure clients first perform a registration step with the Conjure 
station to negotiate a phantom IP address to connect through. The idea 
of a registration phase that precedes the proxied connection is common 
among anti-censorship tools, including Snowflake. Like Snowflake, there 
are a few options for making the registration process 
censorship-resistant. Conjure currently offers unidirectional 
registration via Tapdance[2] decoy routing, and bidirectional 
registration via domain fronting.

Once the client and station have negotiated a phantom IP address, the 
client makes a connection to the phantom address. The Conjure station 
sees this connection and instead proxies traffic using the haproxy[3] 
protocol to a client-specified destination. Conjure currently supports 3 
different transport options for the connection between the client and 
the phantom proxy: a minimal SSH-based transport, obfs4, and webrtc.

The Tor conjure pluggable transport[4] uses the gotapdance library[5] to 
register and connect to the production Conjure station through the 
negotiated phantom IP address. We have a deployed Tor bridge (named 
Haunt) that accepts haproxy connections from an allowlist of known 
Conjure stations. You can see details and usage metrics on Relay Search: 
https://metrics.torproject.org/rs.html#details/A84C946BF4E14E63A3C92E140532A4594F2C24CD

# Next steps

This PT is currently in development and only recommended for testing.

We still have some work to do before the Tor Conjure PT can be rolled 
out to a large user base. The PT in its current form is very minimal in 
its features. We're reaching out to the development community now for 
initial feedback and testing. We are planning a slow ramp of client 
traffic to avoid placing stress on the stations and improve the 
reliability and censorship resistance of our setup. Immediate planned 
work includes:

- securing the haproxy connection between the Conjure station and the bridge
- making the registration connection censorship resistant
- ongoing testing and development of the obfs4 transport integration
- usability improvements and resilience in the event of overloaded 
Conjure stations
- reproducible builds for Tor Browser

For more details, check out the issue tracker for this project[6].

We have a milestone for shipping conjure support in alpha version of Tor 
Browser[7], which is the next major step in the rollout process.

# Try it out yourself

Instructions for cloning and building this PT are in the repository[4]. 
In the client/ directory there are two provided torrc files. For testing 
the production Conjure deployment, you may use the one named `torrc`. 
The other file, `torrc-testing` is for use with the libvirt-based 
testing and development environment[8].

Successful bootstrapping can take a few tries due to high load at the 
station. More detailed log messages will be written out to a log file 
conjure.log by default. This can be changed by modifying the -log 
argument in the ClientTransportPlugin line of the torrc file.  If the 
station is overloaded, you will see a message like the following in 
conjure.log:

```
[11:32:12] [1-d9b572] failed to dial phantom [scrubbed]: dial tcp 
[scrubbed]: i/o timeout
```

Please try it out, open issues, ask questions, provide feedback!

# Thanks!

Thanks again to Jack and Eric for their efforts on this project, and to 
whole team of Conjure researchers, developers, and admins for their work 
on deploying Conjure and making it available for use.

[0] https://censorbib.nymity.ch/pdf/Frolov2019b.pdf
[1] https://censorbib.nymity.ch/pdf/Frolov2017a.pdf
[2] https://censorbib.nymity.ch/pdf/Wustrow2014a.pdf
[3] https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt
[4] 
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/conjure
[5] https://github.com/refraction-networking/gotapdance
[6] 
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/conjure/-/issues
[7] 
https://gitlab.torproject.org/tpo/anti-censorship/pluggable-transports/conjure/-/milestones/1
[8] https://gitlab.torproject.org/cohosh/phantombox


More information about the tor-dev mailing list