文章总结: TCP打洞技术利用NAT设备状态保持特性,通过中继服务器协调使不同NAT后的客户端建立直接P2P连接。红队可将此技术用于隐蔽通信,将中继服务器部署为C2服务器,绕过防火墙限制。防御应从端口维度转向应用行为维度,实施严格的服务器出方向治理、网络流量深度分析和主机进程与行为管控,采用零信任原则,验证每一跳通信。
综合评分: 91
文章分类: 渗透测试,网络安全,安全建设,内网渗透,红队
TCP打洞技术深度解析:网络通信的边界突破与防御
原创
千里
东方隐侠安全团队
2025年11月25日 20:10
江苏
随着企业服务上云和vpn技术的发展,传统的网络边界正加速瓦解。这种背景下,红队利用TCP打洞等常见通信技术建立隐蔽后门,本质上就是利用了网络协议设计的“善意”与“信任假设”,将控制流伪装成数据流,从而实现远程控制。
“道高一尺,魔高一丈”,是攻防对抗的常态,在一招一式之间,安全防护技术似乎注定处于永恒的被动吗?或许是的,因为蓝队必须面面俱到,而攻击者只需找到一个突破口。
接下来,本文来为大家介绍TCP打洞技术和类通信技术在洞穿边界工作中的妙用与防护思路。
01
TCP打洞技术讲解
TCP打洞(TCP Hole Punching)是一种典型的网络穿透技术,其核心目的是使位于不同网络地址转换(NAT)设备后的两个客户端能够建立直接的、点对点(P2P)的TCP连接。
一般来说,现在NAT是非常常见的,主要被广泛用于共享公网IP地址,可以天然地阻止了外部主机主动发起与内部主机的连接。但是,巧妙的是,TCP打洞技术正是巧妙地利用了NAT设备的状态保持特性,从而实现“洞穿”边界的效果。
那么,TCP怎么实现呢?
TCP打洞的实现需要一个公共的、拥有公网IP的中继服务器来协调连接,整体架构为:
通常流程分为以下三步:
- 建立与中继服务器的连接
位于NAT A后的客户端A和位于NAT B后的客户端B,分别主动向公共服务器S发起TCP连接。这一步是关键:客户端主动发起出站连接的行为,会在各自的NAT设备上创建临时的端口映射条目(即“洞”)。这个映射条目将客户端的内部私有地址和端口,映射到NAT设备的外部公网地址和端口。
- 交换外部地址信息
服务器Server获取并记录下客户端A和B各自的外部公网IP地址和端口信息。随后,Server将这些信息互相发送给彼此,即A获得B的外部地址,B获得A的外部地址。
- 尝试直接连接
A和B利用交换来的对方外部地址和端口,同时尝试向对方发起TCP连接。由于两端NAT设备上都已经存在主动出站连接创建的“洞”:
当A的连接请求到达NAT B时,NAT B将其视为与B发起连接对应的返回流量(因为NAT B认为该端口正忙于与S通信,且A的请求与B向外发送的SYN包相似),从而允许数据包通过。
同理,B的连接请求也能穿透NAT A。
如果两端的NAT设备允许这种特殊的连接尝试,则客户端A和B绕过中继服务器,建立了直接的P2P连接。
以ZeroTier为例,这是一款强大的 P2P VPN 工具,它能让你在互联网上搭建属于自己的虚拟局域网。通过它,你可以轻松实现远程访问家中设备的需求 – 比如在公司用手机直接访问家里的 NAS。最重要的是,设备之间是点对点直连的,无需经过中转服务器,既保证了速度,又提升了安全性。
ZeroTier的组网结构如下:
| | |
| — | — |
| 概念 | 说明 |
| PLANET(行星服务器) | ZeroTier 网络的核心根服务器,负责网络发现和初始连接。相当于整个网络的”中枢” |
| MOON(卫星服务器) | 用户可以自建的私有根服务器。它可以作为区域性的代理节点,帮助就近的设备更快地建立连接,提升网络性能 |
| LEAF(叶子节点) | 所有接入 ZeroTier 网络的终端设备,如电脑、手机、服务器等。这些设备通过 PLANET 和 MOON 的协调来相互发现和通信 |
可以参考https://www.cnblogs.com/dyanbk/p/19060621进行部署。安装好PLANET和LEAF机器后,可以查看PLANET端的管理页面:
此时设置LEAF机器的安全组规则,将22端口只对内网开放(或者禁用所有非本机的ssh访问),出方向全开,这也符合现在很多企业敏感服务的保护现状。如下图:
然而此时,通过LEAF B机器访问LEAF A机器仍可以通过虚拟出来的内网ip实现ssh连接,而这两台机器一台在阿里云,一台在腾讯云:
这说明,在云服务器安全组中配置的规则,仅仅封锁了直接访问公网 IP 22 端口的流量。并不能阻止通过ZeroTier完成P2P通信,进而远程ssh登录。
而这也是TCP打洞仍具有生命力的原因。
02
红队的隐蔽性与持久化策略
TCP打洞技术最初的目的是解决位于网络地址转换设备后的客户端之间建立点对点(P2P)连接的难题,它绕过了NAT对外部主动连接的阻断,实现直连通信。但红队可以将中继服务器(Server)部署为C2服务器或跳板。
这样下来,攻击者无需在目标机器(A或B)上开放公网端口。流量表面上是A主动发起的出站连接(连接Server),这是许多企业防火墙默认允许的。
一旦打洞成功,A与B之间的直接连接将不再经过原有的中继服务器Server,流量可能被防火墙或安全组误认为是已建立连接的返回流量,或者根本未被深度检测,从而绕过针对公网IP端口的限制。
除了P2P打洞,红队还会利用其他“合法”的通信机制实现后门:
-
DNS隧道: 将C2指令和数据封装在看似无害的DNS请求和响应中。
-
WebRTC/WebSocket: 利用浏览器技术,通过443/TCP等常见端口建立双向、持久化连接。
-
公有云服务API: 利用如云存储(如S3、OSS存储桶)的API作为C2信道,流量混杂在大量合法的云服务访问中,难以区分。
03
防护与治理,从被动到主动
传统的防御侧重于对入站流量和特定端口的封堵。然而,面对TCP打洞等利用出站通道和合法协议的攻击,防御必须从“端口”维度转向“应用行为”维度。
应用服务器出方向治理(零信任的实践)
这是最关键的一环。大多数后门通信都需要服务器拥有出站连接能力。
原则: 实施严格的应用服务器出方向治理,敏感服务(如CI/CD、Git、内网数据库)应严格禁止访问互联网(即“不出网”)。
实践: 部署私有代码仓库和包管理私仓。对所有出站连接实施白名单策略,而不是黑名单。临时/紧急出网需求必须通过严格审批的NAT网关,并进行精细化策略控制。
网络流量侧的深度分析
单纯依赖防火墙规则不足以应对封装和隧道技术。此时可以依赖如下技术进行增强:
流量分析: 部署网络入侵检测系统(NIDS),并关注网络流量特征。突发的、流向不常见的公网IP、或特定高熵加密流量(可能是隧道)应触发告警。
域名治理: 统一管控VPC内的域名解析请求,监控和识别如 ngrok、frp 等反向代理工具的C2域名,并进行统一防护和解析阻断。
主机侧的进程与行为管控(从网络到终端)
这是因为,后门通信是通过主机上的特定进程实现的。
进程特征识别: 识别进程的异常行为,例如:一个不应该监听的进程突然监听了内网或本机端口(如22端口),或一个看似正常的进程(如ssh)尝试建立与内网无关的异常出站连接。
虚拟网卡治理: 对于ZeroTier这类创建虚拟网卡的工具,实施终端检测与响应(EDR)策略,识别并管控非授权虚拟网卡的创建和使用,在高安全环境中,这是主机安全的一道重要防线。
敏感端口管控: 统一防护层面,识别并重点监控对本地敏感端口(如22、3389等)的进程连接行为。
04
人性、技术与安全的共生
当通信技术被设计用来连接彼此时,它也自然地为隐蔽和控制提供了可能。
安全并非是技术堆叠的产物,而是对信任、授权的谨慎的管理所衍生的手段机制。
要从默认信任的范式中彻底解放出来,将防御的重心从“堵住入口”转移到“管控行为”和“验证每一跳”,才能在与攻击者的对抗中,获得片刻的主动权。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:东方隐侠安全团队 千里《TCP打洞技术深度解析:网络通信的边界突破与防御》