近日,有网友向“暗网下/AWX”表示,Tor浏览器的网桥WebTunnel存在被审查机构的流量识别的潜在问题,原因是:
一是传输的TLS是Go语言的crypto/tls库。通过测试发现,网桥的TLS Client Hello长度是317字节,而正常浏览器流量的长度是517-650字节。前者相比被普遍认为是正常流量的后者短很多,暴露了Go普遍使用的TLS库不规范的短板。
二是大多数用于WebTunnel网桥的服务器普遍使用Nginx。Nginx服务器未配置的情况下会出现默认页面,并没有任何伪装,很容易被识别。
该网友建议的解决办法是换用比较规范的Rust,其TLS Client Hello长度达到517字节。或直接使用C语言的TLS库,如Chromium的tls.h,以达到伪装浏览器流量的目的。
该网友还建议将crypto/tls库替换为uTLS亦可缓解此TLS指纹。uTLS 是“crypto/tls”的一个分支,它提供了 ClientHello 指纹识别、握手的低级访问、伪造会话票证和一些其他功能。握手仍然由“crypto/tls”执行,该库仅更改其中的 ClientHello 部分并提供低级访问。
tls.go的代码:
package tls
import (
“crypto/tls”
“errors”
“net”
)type Config struct {
ServerName string
}func NewTLSTransport(config *Config) (Transport, error) {
return Transport{kind: “tls”, serverName: config.ServerName}, nil
}type Transport struct {
kind string
serverName string
}func (t Transport) Client(conn net.Conn) (net.Conn, error) {
switch t.kind {
case “tls”:
conf := &tls.Config{ServerName: t.serverName}
return tls.Client(conn, conf), nil
}
return nil, errors.New(“unknown kind”)
}
“暗网下/AWX”希望精通技术的网友帮忙核实下该说法,是否真的可以轻易识别Tor网桥的流量。