端口敲门

2020-05-15 09:20:01

跳转到导航跳转搜索在计算机网络中,端口敲门是一种通过在一组预先指定的关闭端口上生成连接尝试来从外部打开防火墙上的端口的方法。一旦接收到正确的连接尝试序列,就会动态修改防火墙规则,以允许发送连接尝试的主机通过特定端口进行连接。存在一种称为单包授权(SPA)的变体,其中只需要由加密的包组成的单个敲门。[1][2][3][4]。

端口敲门的主要目的是防止攻击者通过执行端口扫描来扫描系统以查找潜在可利用的服务,因为除非攻击者发送正确的敲门序列,否则受保护的端口将显示为关闭状态。

端口敲门通常是通过配置守护程序来监视防火墙日志文件以查看某些点的连接尝试,然后相应地修改防火墙配置来实现的。它还可以在内核级别(使用内核级别的数据包过滤器,如iptables[5])执行,或通过在更高级别检查数据包的用户空间进程(使用数据包捕获接口,如pcap)执行,从而允许在敲门序列中使用已经打开的TCP端口。

端口";敲门";本身类似于秘密握手,可以由任意数量的TCP、UDP,有时甚至包括发往目标机器上编号端口的ICMP和其它协议数据包组成。敲门的复杂性可以是从简单的有序列表(例如,TCP端口1000、TCP端口2000、UDP端口3000)到复杂的依赖于时间、基于源IP和基于其他因素的加密散列。

防火墙机器上的端口敲门守护程序侦听特定端口上的数据包(通过防火墙日志或通过数据包捕获)。客户端用户将携带一个额外的实用程序,该实用程序可以像Netcat或修改后的ping程序一样简单,也可以像完整的散列生成器一样复杂,并且在他们尝试以通常的方式连接到机器之前使用该实用程序。

大多数端口敲门都是有状态的系统,因为如果成功接收到敲门的第一部分,则不正确的第二部分将不允许远程用户继续,实际上,也不会让远程用户知道他们在序列中失败了多远。通常,故障的唯一指示是在敲门序列的末尾,预期打开的端口没有打开。任何时候都不会向远程用户发送任何数据包。

虽然这种用于保护对远程网络守护程序的访问的技术尚未被安全社区广泛采用,但它甚至在2000年之前就已在许多rootkit中积极使用。

击败端口敲门保护需要大规模的暴力攻击,才能发现甚至简单的序列。针对三次敲门tcp序列(例如端口1000、2000、3000)的匿名暴力攻击需要攻击者测试1-65535范围内的每三个端口组合,然后在两次攻击之间扫描每个端口,以发现目标系统上端口访问的任何更改。由于端口敲门根据定义是有状态的,因此请求的端口不会打开,直到以正确的顺序接收到正确的三端口号序列,并且没有接收到来自源的任何其它中间数据包。平均情况下,需要大约141万亿(65535 3/2)个数据包才能确定正确的三端口号。此技术与敲门尝试限制、更长或更复杂的序列和加密散列相结合,使得成功的端口访问尝试变得极其困难。

一旦提供成功的端口敲门序列来打开端口,防火墙规则通常只向提供正确敲门的IP地址开放端口,从而为防火墙行为添加动态功能。与在防火墙上使用预先配置的静态IP白名单不同,世界上任何地方的授权用户都可以在没有服务器管理员帮助的情况下打开任何必要的端口。还可以将系统配置为允许认证用户在会话结束后手动关闭端口,或者使用超时机制自动关闭端口。要建立新会话,远程用户需要使用正确的序列重新进行身份验证。

端口敲门的有状态行为允许来自不同源IP地址的几个用户同时处于不同级别的端口敲门验证,从而允许具有正确敲门序列的合法用户通过防火墙,而防火墙本身正处于来自多个IP地址的端口攻击之中(假设防火墙的带宽没有完全消耗)。从任何其他攻击IP地址来看,防火墙上的端口仍将显示为关闭状态。

在端口敲门序列内使用加密散列可防御源和目标机器之间的数据包嗅探,从而防止发现端口敲门序列或使用该信息创建通信量重放攻击以重复先前的端口敲门序列。

港口敲门是纵深防御战略的一部分。即使攻击者成功获得端口访问权限,其他端口安全机制以及在打开的端口上分配的服务身份验证机制仍然存在。

该技术的实现非常简单,在服务器上至少使用一个shell脚本,在客户机上使用一个Windows批处理文件或命令行实用程序。服务器和客户端在流量、CPU和内存消耗方面的开销都很小。端口敲门守护程序对于代码来说并不复杂;代码中的任何类型的漏洞都是显而易见且可审计的。

在诸如SSH之类的端口上实施的端口敲门系统可以避免对登录进行暴力密码攻击的问题。在使用SSH的情况下,如果没有正确的端口敲门,SSH守护程序将无法激活,并且攻击将由TCP/IP堆栈过滤,而不是使用SSH身份验证资源。在提供正确的端口敲门之前,攻击者无法访问该守护程序。

端口敲门是一个灵活的、可自定义的系统附加模块。如果管理员选择将敲门序列链接到活动(如运行shell脚本),则可以轻松地将其它更改(如实施其他防火墙规则以打开特定IP地址的端口)合并到脚本中。同时进行的会议很容易容纳。

除了减轻暴力密码攻击和与进程守护程序相关的日志不可避免的增长之外,端口敲门还可以防止协议漏洞利用。如果发现可能危害默认配置中的守护程序的利用漏洞攻击,则在更新软件或进程之前,使用端口敲击侦听端口可以降低危害的可能性。一旦授权用户提供了正确的敲门顺序,他们将继续得到服务,而随机访问尝试将被忽略。

端口敲门只应被视为提供针对随机和目标攻击的保护的整体网络防御战略的一部分,而不应被视为完整的独立解决方案。

过去,网络安全专业人员在很大程度上忽略了端口敲门作为解决方案,因为早期的实施完全依赖于提供正确的端口组合来实现访问。现代敲门系统集成了安全密码散列、黑名单、白名单和动态攻击响应等功能,以进一步提高系统容量。在面向Internet的网络中,端口敲门是最大化服务器资源的有效手段。

正确实施端口敲门不会降低系统的整体安全性。它是以最小的服务器资源开销提供额外安全层的有效措施。在最坏的情况下,像敲门这样的系统通过糟糕的实施引入了新的安全问题,或者通过风险补偿等情况暴露了矛盾的管理态度。

端口敲门完全依赖于端口敲门守护进程的健壮性。守护进程的故障将拒绝所有用户的端口访问,从可用性和安全性的角度来看,这是一个不受欢迎的单点故障。现代端口敲门实现通过提供进程监视守护进程来缓解此问题,该守护进程将重新启动出现故障或停滞的端口敲门守护进程。

不使用加密哈希的系统容易受到IP地址欺骗攻击。这些攻击是拒绝服务的一种形式,它们使用端口敲门功能,通过将带有欺骗IP地址的数据包发送到随机端口来锁定已知IP地址(例如管理员管理站)。使用静态寻址的服务器特别容易受到这些类型的拒绝服务的攻击,因为它们的地址是众所周知的。

端口敲门在表现出高延迟的网络上可能会出现问题。端口敲门取决于数据包以正确的顺序到达才能访问其设计的功能。另一方面,TCP/IP被设计为通过将无序的分组组装成一致的消息来起作用。在这些情况下,唯一的解决方案是客户端继续定期重新发送正确的数据包序列,直到服务器确认该序列。

端口敲门不能用作服务器的唯一身份验证机制。从安全的角度来看,简单的端口敲门依赖于模糊的安全性;敲门序列的意外发布会导致所有支持该序列的设备受到危害。此外,未加密的端口敲门容易受到数据包嗅探的攻击。适当长度的网络跟踪可以从单个IP地址检测正确的敲门序列,并且因此提供未经授权访问服务器并由此扩展到所连接的网络的机制。一旦遭到破坏,设备上的日志文件就会成为其他有效敲打序列的来源,从而揭示另一个故障点。诸如将每个敲门序列视为一次性密码的解决方案违背了简化管理的目标。在实践中,端口敲门必须与其他形式的身份验证相结合,这些身份验证形式不容易受到重播或中间人攻击,整个系统才能有效。

贾斯汀·艾林伍德(2014-01-17)。如何在Ubuntu VPS";上仅使用iptables配置端口敲门。DigitalOcean网站。