-
Notifications
You must be signed in to change notification settings - Fork 14
Description
Need to post here because shadowban on /r/vpn.
Original post on reddit:
Hi,
some comments:
Are you aware of TLS fingerprinting? Does your application protect against this ? See https://www.net.in.tum.de/fileadmin/TUM/NET/NET-2020-04-1/NET-2020-04-1_04.pdf for some small overview or take a look at https://github.com/p4gefau1t/trojan-go which is tunnel application that should not be (TLS) fingerprintable.
Relevant library is: https://github.com/refraction-networking/utls
From your website:
to hide the true destination of the traffic, but since domain fronting relied on an undocumented feature of major CDNs, it no longer works.
Domain fronting still does work for Azure and Cloudfront to some extend. The provider will know about it though and the question is if it if will still work in the future. It should probably be not relied upon too much.
This is accomplished by responding as a proxy if and only if a valid key is provided and falling back to some default behaviour otherwise.
What is default behavior? I guess, ideally it should look like one commonly used server e.g. nginx
There is a option to disable TLS 1.3 as it could be blocked by some nation-state firewalls.
afaik (as the website states) only with esni. TLS 1.3 alone is not a problem.
The server will automatically provision a TLS certificate from LetsEncrypt and the client pins LetsEncrypt’s root by default.
A self signed cert should also be an option.
The delta I measured between providing a 32 byte key and not providing a key is 29ns (on an AMD Ryzen 3700X). Since network requests have a latency in the milliseconds, I assume this attack is practically infeasible.
For a single measurement. But what about lots of measurements? Also, is providing a key itself visible from other patterns like traffic size?
A simpler attack is to look at the static files that the HTTPS server responds with. If the user does not replace the default files with their own, an easy distinguishing attack is possible.
That's difficult. The attacker in theory should not be able to enumerate all files/urls because they are encrypted. Even if he accesses the domain himself he just sees the main website but does not automatically know what other content is there. Providing your own files might make you more fingerprintable. Instead you could just keep the default ones of nginx.
The cover protocol uses the standard library implementation of HTTPS which should be widely used by many different applications in various contexts.
Still the handshake might look different than a common app like chrome.
To handle these attacks, the protocol could use some kind of random padding, limit the size and frequency of round trips, or replace the static decoy handler with a custom one that has different traffic characteristics.
I think, if you tunnel normal web browsing traffic through a tunnel going to some domain it should not look different to the same traffic without a tunnel. As long as you don't do special stuff which a normal browser - website connection does not do. If you tunnel all of your traffic through it it might be more suspicious. If some residential ip connects to some foreign IP and to nowhere else and uses a lot of traffic it might stick out. If you tunnel you will have some overhead. But as long as the adversary does not know the exact endpoints/urls he would not know if the client accessed some legitimate url or tunneled its way to the next hop which then fetches the real content.
Currently the client waits a random interval between 0 and 100ms before polling the server for data. This choice was made to minimise latency but it is not typical of an ordinary website.
Then why do this? You linked a paper for traffic analysis, but don't really tell what was the reason for that specific choice.
Maybe you already know about it: https://github.com/net4people/bbs/issues