轻松逃脱某防火墙对ss的探测

时间:2022-01-29 12:52:03

ss里面有些诡异的日志(我用的是ss-go)

2017/10/1* 1*:5*:19 error getting request  ***:***  ***:*** EOF

这种日志不多,一般新开一个端口使用之后,一天之内会出现一个这样的记录。看着像有人主动发了一个错误的包,因为我不可能主动发了一个错误的包,而且大小还不对。头包本来就很小,一个数据包就可以了,不需要两个包,所以也不可能在读取请求时候就出现EOF中断的情况。所以这很可能是防火墙对ss的主动探测。

其实防火墙对ss的探测原理很简单,因为aes这些加密算法,字节都是一一对应的。就是说,加密之后,虽然内容发生了变换,但是位置不变。所以我们可以根据ss协议,修改其中一些字节,发个包看看,服务器有没有主动断开,如果断开,那么很可能是ss服务器。

具体原理可以看破娃的一篇文章,标题大概是为什么要弃用一次性验证。

那么问题来了,如果检测到错误,很长时间才断开呢,是否能逃避探测?我将ss-go代码加入如下修改:

轻松逃脱某防火墙对ss的探测

修改之后,重新编译上传至vps,起一个新端口,目前没有出现端口被f的情况。之前曾经新开端口,但是很快被f了,说明这次改动的确有效。

这样改动的坏处是遭到攻击,会造成资源泄漏的问题,可以考虑加个逻辑,把发起大量无意义链接的ip关了。禁止的上限可以是上万,链接在服务器里面是很cheap的,有内存就行。

改动很简单,而且这样改之后,防火墙无法根据sleep这种行为来判断是否是ss服务器。很多基于tcp的协议,到一段时间之后,也会主动把链接关了,所以防火墙根本分不清究竟是不是改动之后的ss。