文章总结: 这篇文章介绍了fragtunnel工具,它通过将应用数据分片并通过多个独立TCP会话传输来绕过下一代防火墙的检测。文章解释了NGFW的工作原理,特别是它们需要检查几个数据包才能确定应用类型,这为绕过提供了机会。作者提供了安装和使用说明,并在技术点评中讨论了该工具的优缺点,指出其思路新颖但实用性有限,不支持SSL/TLS且特征明显。
综合评分: 84
文章分类: 渗透测试,红队,网络安全,安全工具,漏洞分析
绕过下一代防火墙的方法 — fragtunnel
原创
一个不正经的黑客
一个不正经的黑客
2025年6月30日 12:44
广东
前言
防火墙是网络安全中的关键组件,它作为受信任的内部网络与不受信任的外部网络(如互联网)之间的屏障。它能够依据预设的安全规则,监控并控制进出网络的流量 。
防火墙可以以硬件设备、软件应用程序,或两者结合的方式来实现。它们可发挥多种功能:
- 1. 访问控制:防火墙通过配置的规则决定哪些网络连接被允许或阻止。
- 2. 威胁防护:防火墙可以抵御各种外部威胁,包括恶意软件、病毒,以及潜在的黑客攻击。
- 3. 流量过滤:防火墙可以基于多种标准控制特定类型的网络流量,包括:
- • 源和目的 IP 地址;
- • 端口号;
- • 协议类型;
- • 应用层数据。
- 4. 日志记录与监控:许多防火墙提供详尽的网络活动日志,供安全团队检测并应对潜在威胁。
- 5. 网络地址转换(NAT):一些防火墙执行 NAT,将内部网络地址隐藏到外部网络,增加一层安全防护。
现代防火墙超越了简单的数据包过滤,它们集成了 深度包检测(DPI) 与 应用层过滤 等高级功能,以提供更全面的防护能力。
在本文中,我们将重点关注运行在 OSI 模型第七层(应用层) 的防火墙,也即“应用层防火墙”。
工作流程
当我们观察 下一代防火墙(NGFW) 的工作方式时,会发现一条有趣的现象。
假设防火墙的规则是“只有 A 组才能使用 Web 端口(80 和 443)”。
使用 nmap 进行初步端口扫描时,许多端口可能会被显示为“开放”,这可能误导观察者认为防火墙配置存在漏洞或形同虚设。
然而,当尝试连接这些看似“开放”的端口时,连接会在意外的短时间内被终止。
例如,在 Cisco Firepower Threat Defense (FTD) 中存在这种行为,它使用 Snort 引擎执行深度包检测。根据 Cisco 官方文档的说明:
“为了让 Snort 引擎确定正在使用的应用,它必须检查一些数据包(通常为 3–10 个,具体数量取决于应用解码器)。因此,有少量数据包会被 FTD 允许通过,并抵达目标。即便如此,被允许的数据包仍然要经过 ‘访问策略 > 高级 > 在访问控制规则确定之前使用的入侵策略’ 的检查。”
这意味着,即便连接初步建立,看似“开放”,防火墙仍有可能在解析完这些包之后,将连接阻断。这种策略让防火墙检测更精准,但同时也可能造成“开放端口”只是错觉的情况
要理解这是如何发生的,了解 TCP 连接的工作原理会很有帮助。
TCP 连接建立(三次握手):
- 1. SYN:客户端发送一个带有随机序列号 A 的 SYN 数据包。
- 2. SYN-ACK:服务器响应一个 SYN-ACK 数据包,确认号为 A + 1,并设置自己的序列号为 B。
- 3. ACK:客户端发送一个 ACK 数据包,序列号为 A + 1,确认号为 B + 1。
此时,应用层就可以开始通过已建立的会话进行通信和数据传输了。若要关闭连接,想要终止通信的一方会主动发起连接终止流程:
TCP 连接终止(四次挥手):
- 1. FIN:其中一方主机发送一个 FIN 数据包,开始关闭连接。
- 2. ACK:另一方主机对该 FIN 进行确认。
- 3. FIN:第二方主机在准备好关闭时,也发送自己的 FIN 数据包。
- 4. ACK:第一方主机发送最后一个 ACK 进行确认。
回归基础原理
到目前为止,我们已经了解到 IPS/IDS 引擎在判断某段流量是否为恶意或异常流量之前,会先允许部分数据包通过。
因此,我们可以改变常规的编程模式,借助这一特性进行利用。
套接字编程的一般架构如下所示:
我们可以建立连接、发送数据、接收响应、关闭套接字,然后重复这一过程。
这种方式有助于规避 IDS/IPS 系统的检测,因为这些系统在尚未识别出恶意行为之前,可能不会立即阻断连接。
这正是 Fragtunnel 所做的事情!
Fragtunnel
这款基于 Python 的 TCP 隧道工具,提供了一种独特的方法来绕过下一代防火墙(NGFW):
关键特性:
- • 有别于传统代理或标准隧道。
- • 支持将应用流量进行隧道传输到目标服务器,从而规避 NGFW 的检测。
工作机制:
- • 数据分片:将传入的应用数据拆分成更小的片段。
- • 多会话传输:每个数据片段通过独立的 TCP 会话单独发送。
- • 数据重组:在目的端将这些片段重新组合,恢复成原始数据。
- • 最终转发:重组后的数据被转发到目标服务器。
安装说明
要开始使用,只需从 GitHub 下载脚本并运行即可。
但请注意,脚本正常运行需要同时部署隧道服务器(tunnel server)和隧道客户端(tunnel client)。
服务器端操作步骤:
server> git clone https://github.com/efeali/fragtunnel.git
server> cd fragtunnel/
server> sudo python3 fragtunnel.py -b 127.0.0.1:80 -v
参数说明:
- • -b, –bind:指定隧道服务器监听的 IP 地址和端口,用于接收传入连接。
- • -v, –verbose:启用详细模式,执行时输出更丰富的日志信息。
客户端操作步骤:
kali> sudo python fragtunnel.py -p 1234 -t <target_IP>:80 -T <server_IP>:80 -v
参数说明:
- • -p, –port:指定本地应用监听的端口,用以建立连接。
- • -t, –target:指定本地应用希望连接的目标服务器或服务的 IP 地址和端口。
- • -T, –Tunnel:指定隧道服务器的 IP 地址和端口,负责转发本地应用和目标服务器之间的通信。
- • -v, –verbose:启用详细模式。
当隧道客户端启动并连接到隧道服务器后,你就可以像直接在本机访问目标服务器一样与其交互。
如果我们运行 tcpdump 抓包,会发现所有通信都是与服务器进行的,在本例中即是 AWS。
总结
在许多侦察阶段,我们常常发现能够扫描服务器并获取端口信息,但尝试连接时却被防火墙阻断。了解下一代防火墙的工作原理,可以帮助我们绕过这些限制。
大多数下一代防火墙所使用的 IDS/IPS 引擎会允许部分数据包通过,直到收集到足够信息来判断是否允许或阻断流量。
这一设计缺陷可以被利用,例如通过 fragtunnel 这类工具,实现对服务器的自由访问。
thanks for:
技术点评
对抗基于会话的检测: 传统的防火墙或入侵检测系统(IDS)很擅长分析和记录TCP长连接。而这种“一触即离”的模式会产生大量、短暂、看似毫无关联的TCP会话,极大地增加了流量分析的难度。
隐藏真实流量: 每个数据包都非常小(1KB),可能看起来更像是心跳包、DNS查询或其他普通系统流量,从而将真实的、较大的数据传输(如文件下载、网页浏览)隐藏在海量的碎片化连接中。
它不是一个普通的端口转发或代理工具,而是一个精心设计的、以规避网络监控和侦测为主要目标的隐蔽通信隧道。
其最大的创新点在于将数据流打散成极小的碎片,并通过大量“阅后即焚”式的短暂连接来传输,从而让网络流量变得难以分析和追踪。
相比于它的优点,我也比较关注其实用性,其中作者提到:目前,它不支持 SSL/TLS, 以及12年前相关技术也已经被讨论,时至今日,依然还存在相关问题。
针对IDS/IPS的安全水位,以前出现过类似利用TCP分组的绕过思路,逻辑原理是安全设备流式检测逻辑细粒度可能是每一个TCP分片来匹配关键字,如果你通过TCP拆开分组,打散关键字那么就绕过检测。
最后,个人觉得此工具的思路与设计虽然新颖,但实际应用可能并不广泛,因为攻击者都能在防火墙内部建立驻点,那么程序能够自学习模拟正常应用流量或许比这个切分思路会更加实用一些,特征也没有那么明显!
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:一个不正经的黑客 一个不正经的黑客《绕过下一代防火墙的方法 — fragtunnel》