-
Notifications
You must be signed in to change notification settings - Fork 82
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
a new idea of passing GFW (PoC) #123
Comments
Thank you for the link @SekiBetu. Can you write a few sentences saying what is special about this approach? What are you looking for, users to test, comments, code review, new ideas? You can consider setting the censorship-circumvention topic on the repository. |
Based on this description, it sounds similar to the "mask sites" proposed by Conjure. See #18 (comment):
|
The archive of orginal v2ex page |
I haven't checked the code of ShadowTLS, but from the description there is an obvious issue that gives away the TLS parrot. The author claims this can tunnel architrary TCP payload, but if clear text or some form of low entropy data appears in TLS Application Data record, it is obvious that this is a TLS parrot. To fix this, the tunneled data after handshake must appear as a legal TLS Application Data record and conforms to TLS 1.2 or 1.3 depending on the forwarded handshakes. And also it must respond correctly to active probes with forged or replay data designed to verify its behavior with TLS close_notify. I think Conjure maybe also has issue with active probing for behaviors with TLS close_notify, but I haven't checked closely. Anyway it's all about how to be a good TLS parrot and not get spotted. |
Drawing some comparison, Shadow-tls seems to be solving two classes of problems: 1. Adding SNI and certificate authenticity using a mask site, similar to Conjure; 2. TLS-in-TLS double encryption overhead. Mimicking the mask site may make the TLS handshakes more trustworthy, but the Conjure paper did note that it takes careful considerations to select and mimic a mask site. I think in practice this mimicking opens up a lot of space for parrot detecting features (e.g. differences in application servers, TLS stacks, TCP stacks) that takes significant amount of engineering and operational effort to reduce. Removing TLS-in-TLS double encryption is a tempting mistake to pursue. XTLS had report (XTLS/Go#16) that shows TLS 1.2 payload with cleartext GCM nonce gives away the parrot. Conjure does require encryption of TLS application data. I'm not seeing specification for encrypting TLS application data in Shadow-tls. Lastly, both XTLS and Conjure did not discuss in depth (e.g. XTLS/Go#12) what happens when active probes replay or inject invalid data. Conjure did note that it's out of scope for the threat model:
But somehow Conjure is able to claim replay resistance. I do hope there was more discussion here about the definition of replay resistance because it must resist not only invalid data, but also probes that try to distinguish parrots, which means when a certain TLS application data record fails to decrypt, the custom crypto stack must generate appropriate TLS alerts depending on the TLS version of the mask site. The error handling in TLS must be mimicked perfectly, including scenarios that could result in close_notify, unexpected_message, bad_record_mac, record_overflow, etc. The destructive probes would not be the first line ones, but could be used to confirm after the censor has accumulated from other channels a certain degree of confidence about the profile of the parrot. Also, the disruption caused by the probes would not be hugely visible because of retries, so the collateral damage of this is probably overestimated to date. |
https://github.com/ihciah/shadow-tls
https://v2ex.com/t/875975
Translated with www.DeepL.com/Translator (free version)
update:
Full design doc is here.
The text was updated successfully, but these errors were encountered: