-
Notifications
You must be signed in to change notification settings - Fork 2.7k
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
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
[Proposal]Support Restls-V1 | 支持Restls-V1 协议 #442
Comments
简单评价一下(序号对应):
|
To leo:理解有误,第三点的重点不是“极致性能”,而是“加密套娃”特征。另外这里只是进行一些说明和评价,百花齐放当然更好。 |
To 群里:其实在 Golang 中 |
流量整形、流量模仿,应参考先有工作 net4people/bbs#129 (comment) 剧本的包长度应有工具进行现实的采集 net4people/bbs#136 (comment) 剧本的包长度应有定时变换的方法 |
感谢 @RPRX 的评论。
|
This comment was marked as outdated.
This comment was marked as outdated.
@klzgrad 感谢评论
|
用户没有创造足够多熵的能力,当前的参数形式会因为可用性的需求收敛到一些固定的、著名的流量形状。完全可以利用环境因素帮助用户seeding。 指定流量形状不能代替对实际流量形状的记录和审计。实际的流量审计例子见 net4people/bbs#129 (comment) 的图。 模仿著名协议,如果没有足够强的流量审计和对抗分类,完全可能成为下一个不完美鹦鹉。除非做到 net4people/bbs#55 这种流量寄生。所以还是需要一定的随机性。 只有长度还是不够的。在RTT的时间限制下,如果不大量引入延迟,双向的流量特征即是有padding和大包分小包带来的混淆也是有限的,因为包间隔并不是一个显著的信息。当然,不完美的方法也是一种多样性的方法。 |
我再用一个例子来说明这里面的问题: 如果要做TLS内的协议模仿,一种假想的策略叫“协议导言”,即在TLS连接中的第一个应用层请求是真实用户端发起的HTTP请求。例如https://example.com 是代理服务器,那么一个TLS连接创建以后,首先进行一个真实用户端的GET请求(h1或者h2),在完成这个GET请求以后,再开始运载隧道流量。在这种条件下,这个TLS连接的起始段是完全真实的,也不存在进行协议模仿或者采集协议流量形状模型的问题。但是后果是,这个协议导言会凭空增加>3个RTT的延迟。如果是1:1的连接模型,这个增加的延迟是用户不可接受的。如果是1:N的连接模型,即多路复用,这个延迟可以通过预连接进行缓解,如果不能预连接,也会在用户体验上在后续隧道连接中均摊这个延迟。假如1:1的连接模型下又不允许凭空增加>3 RTT延迟,在同一个RTT中把预设的包长度全部发出去,这个混淆作用很有限。这里的关键问题是在用户体验的要求下,在延迟上的变化空间很有限,同一个RTT中间进行大包分小包效果不明显。 |
现阶段确实没有像你给的例子中那样,把流量的收发在时间轴上可视化表现出来,但我们有通过抓包工具进行定性分析。从经验上来讲,普通HTTP请求和内层TLS握手都紧跟在外层TLS握手之后,很难想象Restls出现像obfs4中那样“长达1秒的静默期”的特征。不过,我们认同定量分析的必要性,这将指导我们的后续改进。
这听上去不像是「剧本」存在的问题,因为剧本已经具有增加RT的能力(我们在上文中称之为“打乱收发模式”)。简单把大包拆成小包,或者把小包填充成大包显然不足以混淆,所以我们设计了「要求对方向自己发一定数量的包」的能力。己方会等收到对方的包之后,再向对方继续发送东西,从而凭空制造了RT。由于在制造RT的过程中尽可能使用有效的用户数据,所以可用性也一定程度可以保证。但这些被创造出来的RT往往是连续的,客户端/服务端在发起两个round-trip之间的停顿很短。我们在net4people讨论区看见过一篇论文对这该时间间隔有所定义,但我们暂且称之为RT间隔;或许增加控制RT间隔的能力是一个值得尝试的改进。 |
This issue was moved to a discussion.
You can continue the conversation there. Go to discussion →
Clash.Meta的开发者们,大家好:
相关PR: #441
经过一段时间的开发,我们认为Restls已经具备实用性,因此我们提出向Clash.Meta中合并Restls支持的请求。
Restls-V1具有的以下能力:
www.microsoft.com
,vscode.dev
。伪装成TLS 1.2的能力是Restls独有的——现存的两个TLS伪装协议其中一个在设计上只支持伪装成TLS 1.3网站,另一个的TLS 1.2模式的无法防御重放、重定向等攻击方式。虽然现在距离TLS 1.3的标准化已经过去了5年,但Alexa全球访问量最大的网站中还有40%仅支持TLS 1.2。我们认为TLS 1.2一定会渐渐走入历史舞台。但在这个过程中,伪装成TLS 1.2网站的能力可以帮用户分散风险,并提高GFW的成本,这就是Restls支持TLS 1.2伪装的意义。padding策略已经有所成效,但我们担心这仍然具有流量分析的风险:
基于以上几点观察,我们设计了Restls「剧本」机制。下图是Restls「剧本」和一种可行的padding策略的对比:
相比padding,我们让用户可以直接控制握手后的包的长度和收发模式,一切都按剧本来!
如果数据比剧本规定的短,restls会为其增加padding;如果数据比剧本规定的长,那它就会被截断,从而破坏TLS握手的长度特征。
剧本还能要求对方向自己发送回包,从而破坏了TLS握手的收发模式。
最重要的是,用户可以设计自己的剧本,从而避免形成统一的特征。
Hi there,
After a period of development, we believe that Restls has reached a level of practicality and we propose to merge Restls support into Clash.Meta.
Restls-V1 has the following capabilities:
www.microsoft.com
,vscode.dev
, etc. The ability to disguise itself as a TLS 1.2 server is unique to Restls - one of the two existing TLS impersonation protocols only supports disguising as TLS 1.3 servers, and the other's TLS 1.2 mode cannot defend against replay, redirection, and other attacks. Although it has been five years since the standardization of TLS 1.3, 40% of the world's most visited websites on Alexa still only support TLS 1.2. We believe that TLS 1.2 will gradually fade into history, but in the meantime, the ability to disguise itself as a TLS 1.2 server can help users diversify their choices and increase the cost for the GFW, which is the significance of Restls supporting TLS 1.2. It's worth noting that:Although the padding strategy has been somewhat effective, we are concerned that it still poses a risk of traffic analysis:
Based on the above observations, we have designed the Restls "script" mechanism. The above figure shows a comparison between the Restls "script" mechanism and a feasible padding strategy ⬆️⬆️
Compared to padding, we allow users to directly control the length and transmission pattern of packets after the handshake, everything is done according to the "script"!
If the data is shorter than what the script specifies, Restls will add padding to it; if the data is longer than what the script specifies, it will be truncated, thus destroying the length characteristic of the TLS handshake.
The "script" can also require the other party to send a response packet back to oneself, thereby disrupting the transmission pattern of the TLS handshake.
Most importantly, users can design their own scripts to avoid creating a uniform characteristic.
The text was updated successfully, but these errors were encountered: