端口碰撞技术(Port knocking):
从安全管理的角度来说,开启的服务端口越多,就越不安全,有道是“明枪易躲,暗箭难防”,因此“系统安全加固服务”中,最常用的方式,就是先关闭无用端口,再对提供服务的端口做访问控制。而作为远程管理与维护的人员通常需要开启一些服务端口,如FTP和SSH,这些服务使用大家熟悉的一些端口,长时间开启这些端口,往往是“严重”的安全隐患。所以能在“需要”的时候才开启服务,并只对特定的人提供服务,服务完毕端口有恢复关闭状态,攻击者就难以利用这个“安全隐患”了,端口碰撞技术提供了比较理想的解决方案。
端口碰撞技术是一种允许服务设备在用户按照约定的序列碰撞后,打开一个约定的服务端口提供服务的技术。所谓碰撞是由一个尝试访问系统中关闭端口的序列组成,也就是特定端口的连接请求。
说起来,端口碰撞技术的实现很简单:
1、
开启固定的端口服务。
如在服务器上设置为:服务器接收到同一个用户的对端口2048、2049、2055、2058连接序列尝试后,则服务器打开TCP服务端口号28,该用户可以通过该端口进行远程工作,连接结束后自动关闭该服务端口。若是防火墙等网关类设备,则在截获该序列的尝试后,在访问列表中增加一条规则来放行该用户的TCP28数据包,使该连接可以通过防火墙。收到连接关闭命令后,再删除该规则,恢复对该端口的拒绝服务。
2、
动态开启端口服务
若需要使用端口碰撞技术打开的服务端口有多个,或者动态变化服务的端口,在设计服务器上的碰撞序列时,可以采用在序列中“指定”端口,在序列某个位置上“告之”希望打开的服务端口。如设定规则为,最后的一个端口减2000为服务端口好,则碰撞序列为2048、2049、2055、2058、2443时,就是希望开启443端口的服务。
端口碰撞技术看起来不复杂,对于使用者了说,在正常的连接建立前,又增加了一层“密码”验证,可以做个小工具软件来自动化你每次的碰撞过程,把碰撞序列作为密码一样顺序发出,就可以直接工作了。并且不仅在防火墙上可以实现(此时服务器上可以默认打开该服务端口),而且在服务器上也可以直接实现。在实现的设备上增加了一个匹配的缓冲池,以状态机的方式跟踪进入匹配的用户(源IP),从匹配第一个端口包,开始启动状态机,该用户后来的包逐个匹配序列,完成一个进入下一个状态,直到整个序列匹配,若有一个包不匹配,则回到初试状态。
端口碰撞技术的安全性:
既然,端口碰撞技术实现起来不麻烦,对于工作人员(使用人少的服务合适,若大量用户的功能显然不适合)的“特殊”服务需求的开启就很方便,那它的安全性有问题吗?
“密码”类的防护有两种“天敌”,一是密码简单,很容易猜测,因为帐号一般不是保密的,即使是系统默认的一些系统管理的高级帐号,所以容易破解。二是暴力破解,目前128位的密码破解的时间已经缩短到小时级别,所以密码类防护技术,目前的方式大多的增加长度与组合。
端口碰撞采用端口号的组合方式,有些类似密码,但首先端口序列本身没有含义,是使用者自己设置的,所以不容易猜测,端口号理论上有六万多个,没有开启服务的都可以拿来做碰撞使用,组合数量也很庞大。其次,碰撞序列的长度不固定,这让扫描类的破解工具很“头痛”,因为不知道何时为猜测的结束。再次,也是最重要的一点,碰撞可以采用与连接的初始包一样包做碰撞,也可以不一样,如采用特殊标记的SYN包等。端口碰撞是探测服务器没有开启的服务端口,服务器的回复(很多是不理睬)不能说明你现在是否是匹配的,即使你“有幸”找到了碰撞序列,但下一个数据包应该是你开始正常连接的数据包,而这时若选错了,前边的“匹配”立即“归零”,因此,该技术抗扫描的能力是很强的。
碰撞技术的扩展:
端口碰撞技术最理想的应用应该是远程设备管理,因为这是使用不频繁,而威胁很大的需求,也是网络维护人员最需要的功能。另外,应用到一些保密文档的远程获取,也是不错的选择,也就是说可以在FTP服务上增加动态共享保密文件的功能,碰撞的方式可以不再是端口,而是FTP普通服务命令的特殊组合序列,匹配时临时为该用户开通保密文档的下载功能,使用完后可以立即取消。
本文转自 zhaisj 51CTO博客,原文链接:http://blog.51cto.com/zhaisj/86182,如需转载请自行联系原作者