-
Notifications
You must be signed in to change notification settings - Fork 482
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
防主动探测问题 #67
Comments
This comment was marked as outdated.
This comment was marked as outdated.
可以测 我把地址换成自己的caddy(开了 experimental_http3 ),正常返回 页面,
而启动tuic监听443端口,curl直接卡死,cpu 100%了,没响应。 |
This comment was marked as outdated.
This comment was marked as outdated.
可以参考下@gfw-report的主动探测测试: 向服务端发送指定大小的数据包,看服务端是否会有所返回,不过我刚刚想了下,这货是UDP啊,服务端响应是不是和TCP完全不一样?不太懂。 |
You are right that the easiest way to figure out if there's an active probing weakness is to send the probes yourself and observe the reactions from the server.
The steps in XTLS/Xray-core#625 (comment) or net4people/bbs#26 (comment) still work here. The only difference is that you need a (python3 -c "print('a' * 50, end='')"; cat) | ncat -v --udp 127.0.0.1 12345
You can open up a The local experiment above will help you will understand the server's reaction to probes of different length. |
若存在主动探测,连接的流程会以如下方式进行:
可以发现,上述流程中,只要 client 无法提供正确的 TUIC 鉴权信息,server 就不会回复任何信息,这一点保证了 TUIC server 不会主动泄漏自己的身份。 但是,尽管 server 不会主动回复,但它可能会在主动切断 QUIC 连接时暴露身份,因为 server 会向 client 报告错误原因。这一点我之前确实没有想到,后续会更新协议。 另外,TUIC 存在下面三个行为:
这三个行为可能会被作为 TUIC 的特有行为被主动探测并识别,因此可能需要引入其它 mimic 正常 HTTP3 或其它基于 QUIC 的大众协议的特性。 我不知道基于上述 3 种行为探测 TUIC 是否可行。这是完善 TUIC 协议很好的切入点,欢迎大家继续讨论这个问题。 |
*ray 的历史经验 成熟的解决方案是把流量导入真正的 HTTP3 服务器 方法有两种 一种是 path 分流 一种是鉴权之后回落 但是两种都需要跟 h2c 类似的 h3c 我之前没看见过 可能将来会有。。 |
我的疑问在于,在client和server第一次建立链接时,是否 alpn和sni信息还是明文的,而主动探测方做DPI拿到这些信息重发http/3请求,又没有得到正常的http响应,是否就能辨别该端口跑了一个quic协议但是不是web server的服务。可能未来这种服务会挺多,但是现在可能quic协议主要承载了http/3流量。 |
对...这其实也是一种重防攻击?不过关于重放攻击,TLS默认应该是防重放攻击的吧? |
让TUIC作为一个正常Http3服务器去工作,除非鉴权成功,不然不会返回和代理协议有关的回应 这一行为改成以下行为似乎会更好?(欢迎讨论)
|
如果鉴权不通过,server是否可以不给任何答复原因,直接掐断?不要以网页的思路去考虑,难到数据库加密的流量,也需要回复鉴权不通过的流量吗?我觉得给答复,总会暴露一些信息,从这些信息又可以判断更多情况,比如域名(如域名不在白名单中,GFW会直接掐断)。 |
最近正在重构,打算按照鉴权失败回落 HTTP/3 的方式处理。从 stream 读取 TUIC header 尝试解析并失败后,交给 HTTP/3 服务的 stream 仍应该包含 header 中的内容,但是目前遇到的问题是上游的 quinn 没有实现 AsyncSeek 相关的 API。我之后打算单独写一个基于 AsyncRead 实现 AsyncSeek 的库,但目前还不确定能否实现。 之后的 TUIC 本身打算以库的形式发布,包含上面所说的解析失败后将 stream 转交的 API。server 与 client 的实现会基于这个库,但我的这个实现追求最小化,因此大概不会在 server 实现内加入 HTTP/3 相关的东西。 |
请问是你的tuic服务器中弹吗?部署tuic之前是否还运行过其他代理程序? |
请问你的tuic是运行在8443上的吗?如果是udp8443,你如何测试的udp 8443被封呢? 我之前的tuic也以为被封了,后来才意识到udp无法使用常规的telnet或者port.ping.pe来测试,再次查看发现只是服务端挂了,重启就好了,运行服务端,观察下是否能收到客户端发来的包。 |
中弹的应该是ray而不是TUIC,这事因为ray的可能性更大,毕竟go的tls握手指纹特征太特别了,而且大流量gotls特征基本上就是跑代理,而vmwss被封又不是啥新鲜事了。 你可以给你的caddy加上 此外建议443的tcp跑caddy-naiveproxy-web 至于*ray跑在h2(http2、grpc)的传输本来就很烂,基本上没有QoS的啥事,QoS一般是限制包速率,或进行主动丢包,确认被QoS请进行严谨对比测试哦 |
目前我所看到的有统计学意义的数据所分析的都是基于 TCP + TLS 的协议,QUIC 是否受到影响还不太清楚。TUIC 受到影响的个例可能只是数据噪声,无法就此得出结论。 我的主观推测是 QUIC 没有收到影响,因为:
综上,我认为 QUIC 流量被分析的可能性不大。 尽管如此,吸取经验,我觉得有必要在行为和数据上(如 CipherSuites)贴近 Chrome 等被大规模使用的 QUIC 实现,但这可能需要修改甚至重新实现上游的 TLS 库,工程量很大。希望后续随着社区的发展可以实现吧。 |
关于检测 UDP 端口:TCP 和 UDP 是两个不同的协议栈,端口号互不影响,可以重叠。可以用 python 创建一个 UDP packet echo server / client 来检测,只需要非常少的代码。 |
不能, tuic服务端需要利用已经建立的quic连接,单纯转发的话是不能得到quic连接的。 而且我不清楚服务端是否能仅通过收集到的udp包,来判定quic握手已经完成。 |
能否借鉴 reality 那样 把探测流量转发给其他网站(如 bing.com),然后自签一个 bing.com 用于代理 |
self-sign certificates can be distinguished from CA certificates, right? |
请问如果把tuic监听在443端口,如果某个支持http/3协议的客户端正常访问会得到什么结果?有特征可循吗?
有无必要提供功能将请求转发到本地80端口?
The text was updated successfully, but these errors were encountered: