[tor-talk] Flashproxys' impact on Tors' fingerprint

Matt Joyce toradmin at mttjocy.co.uk
Sun Oct 14 18:17:03 UTC 2012


On 14/10/12 17:44, David Fifield wrote:
> On Sun, Oct 14, 2012 at 02:50:21PM +0100, Matt Joyce wrote:
>> On 13/10/12 10:18, David Fifield wrote:
>>> Unfortunately, though TLS-wrapped WebSocket is standard, we can't easily
>>> use it because the clients that the flash proxy connects to do not have
>>> CA-issued certs.
>> I have to admit I've followed the thread but it's the first time I
>> heard of the flashproxy project but from what I picked up with a
>> quick google session I wouldn't have thought that problem
>> insurmountable though depending on exactly how you would want the
>> TLS-wrapper to work would be different challenges.
>>
>> If you are simply looking to for obfuscation then it seems to me
>> utilizing a wrapper from client to proxy and a separate one from the
>> proxy to the origin server of course that would not protect the
>> contents from the proxy itself but when you speak of obfuscation it
>> sounds to me like we are talking about avoiding blocks and/or
>> passive eavesdropping in the path or at the origin server as of
>> course the proxy already knows it's a flash proxy packet whatever
>> it's wrapped in.   In this case though it would not be necessary for
>> the clients to have a CA issued cert as they would only be using it
>> for the cypher from them to the proxy and you therefore define the
>> certificate acceptability if it is just for encryption even a snake
>> oil cert would be good enough, if it is intended to authenticate the
>> client to the proxy then the proxy could itself be the CA using
>> openssl, or have a central one so the client could use one cert for
>> all the proxies in the system rather than each generating a new one.
> Thank you for your reply. I think you have a misunderstanding of how the
> system works. Check https://crypto.stanford.edu/flashproxy/#tech-details;
> the client doesn't connect to the proxy; rather the proxy connects to
> the client. We don't have control of certificate verification--that's
> built into the browsers running the proxies. Every censored client would
> need a CA cert recognized by the major browsers, and a domain to attach
> it to.
>
> For example, the flash proxy JavaScript contacts the facilitator and
> gets back a reply stating "your relay is "relay.example.com:9901 and
> your client is 1.2.3.4:9000." The JavaScript opens two WebSockets:
> 	ws://relay.example.com:9901/
> 	ws://1.2.3.4:9000/
> For the first of these, we actually could use TLS (using a wss:// URL
> rather than ws://) between the proxy and the relay. It would cost the
> relay operators money, and it's also kind of pointless, because the
> proxy–relay path is not the one being censored. It's the path between
> the proxy and 1.2.3.4 what we want to obfuscate. As far as I know there's
> no way from JavaScript to say, "don't do certificate verification for
> this one WebSocket connection."
>
> If we had full control of all participants in the communication, we
> could of course do all sorts of fancy things, but we're limited on the
> proxy to what we can do in JavaScript.
>
> David Fifield
> _______________________________________________
> tor-talk mailing list
> tor-talk at lists.torproject.org
> https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-talk
Thanks for the link helps a lot was the sort of thing I was looking for 
earlier but didn't have a lot of time to work on it and didn't help with 
the large number of conflicting results that show up on google for 
similar terms.  In particular there are a lot of hits mostly academic re 
some system for remote executing flash applets on proxy machines on 
behalf of embedded devices like phones all neatly interspersed with the 
usual suspects that appear en mass for any search term with the 
sub-string proxy or similar. Having just read over that though I do see 
how it doesn't work now, as for the no check certificate situation I 
would strongly suspect that there is no such option, it is one thing to 
permit that for some local software on the host quite another for 
remotely sourced JS code.

If there were any workaround in that regard my suspicion would be that 
it would likely require some plugin running at a high privilege level 
than JS to initate the call locally, a signed java applet or something 
similar would possibly have that level of access though I don't know 
when it comes to most coding it is in the I wish I could category my 
best is usually more limited to hacking minor modifications into code 
that someone far more skilled kindly made available.  I am aware that 
signed applets do have significant access in most browsers at the same 
time a signed applet can open raw sockets anyway so they would have no 
real need for such control over the websocket interface, that said if 
applets etc were limited to what they actually *need* or was sane to 
provide there would be a lot less issues with them.  It may be worth 
checking as if the ability is there is may only take a tiny function 
inside a signed container provided the user grants permission.

Concerns me some that JS is able to do even this much without the 
browser prompting for permission, this is a use I can approve of but at 
the same time it once again makes me glad of my noscript while browsing 
the rest of the internet I don't think too much of the wisdom of 
allowing arbitrary pages to open connections completely at will without 
even so much as an alert to the user. Something I need to find some time 
to read up on find out what, if any sanity checks these websockets have 
the outbound connecting only thing doesn't give me confidence that it 
was well thought out, a connection once open is bidirectional so the 
limitation makes no sense to me but the only reason I can see for having 
it is a misguided security mechanism that is asking for trouble.


More information about the tor-talk mailing list