HTTP Tunnel 技术
- 网络安全
- 2024-11-06
- 44热度
- 0评论
基本概念:
什么是http暗藏通道?什么是局域网安全,系统管理员怎样才能保障局域网的安全?这是一个不断变化的安全概念,很长的一个时期以来,在局域网与外界互联处放置一个防火墙,严格控制开放的端口,就能在很大程度上掌握安全的主动权,方便的控制网内外用户所能使用的服务。比如,在防火墙上仅仅开放80、53两个端口,那么无论是内部还是外面的恶意人士都将无法使用一些已经证明比较危险的服务。
但要注意一点,防火墙在某种意义上是很愚蠢的,管理员对防火墙的过分依赖以及从而产生的懈怠情绪将不可避免的形成安全上的重大隐患,作为一个证明,“通道”技术就是一个很好的例子,这也是本文要讨论的。
那么什么是通道呢?这里所谓的通道,是指一种绕过防火墙端口屏蔽的通讯方式。防火墙两端的数据包封装在防火墙所允许通过的数据包类型或是端口上,然后穿过防火墙与对端通讯,当封装的数据包到达目的地时,再将数据包还原,并将还原后的数据包交送到相应的服务上。
应用场景:
A主机系统在防火墙之后,受防火墙保护,防火墙配置的访问控制原则是只允许80端口的数据进出,B主机系统在防火墙之外,是开放的。现在假设需要从A系统 telnet到B系统上去,怎么办?使用正常的telnet肯定是不可能了,但我们知道可用的只有80端口,那么这个时候使用Httptunnel通道,就是一个好的办法。
大体流程:
在A机器上起一个tunnel的client端,让它侦听本机的一个不被使用的任意指定端口,如 1234,同时将来自1234端口上的数据指引到远端(B机)的80端口上(注意,是80端口,防火墙允许通过),然后在B机上起一个 server,同样挂接在80端口上,同时指引80端口的来自client的转发到本机的telnet服务端口23,这样就ok了。现在在A机上 telnet本机端口1234,根据刚才的设置数据包会被转发到目标端口为80的B机,因为防火墙允许通过80端口的数据,因此数据包畅通的穿过防火墙,到达B机。此时B机在80端口侦听的进程收到来自A的数据包,会将数据包还原,再交还给telnet进程。当数据包需要由B到A返回时,将由80端口再回送,同样可以顺利的通过防火墙。
实际上tunnel概念已经产生很久了,而且很有可能读者使用过类似的技术,比如下面的网址。它是一个专业提供tunnel服务的公司,通过他们的在线tunnel server,局域网内的用户可以使用被防火墙所屏蔽的ICQ、E-MAIL、pcanywhere、AIM、MSN、Yahoo、Morpheus、Napster等等诸多软件。我们看到,这里有ICQ、Napster等软件,相信我们的读者很多都使用过走proxy的 ICQ、OICQ等等,其实他们的原理是差不多的。
Httptunnel 带来的安全问题:
写到这里,我们可以想象一下,如果管理员完全信赖防火墙,那么在一个有这样隐患的的局域网中,会发生什么样的后果?
我们可以看到,多年以来,对防火墙的依赖也一直列在SANS的Top 10安全问题中。
既然如此,就很自然的会产生一个问题是:这种httptunnel行为能被发现吗??
首先我们想到的是使用入侵检测系统,在目前的网络安全设计中,防火墙加入侵检测系统是一种比较流行的安全联动配置,既然httptunnel绕过了防火墙,那么IDS系统呢?
在测试时我们使用的IDS系统是Snort,版本1.8.2。这可是大名鼎鼎的开放源代码的IDS系统,在它的说明中,被描述为一个轻量级的,可跨平台工作的入侵检测系统,在2001年12月英国的独立测试实验室NSS的评测中,击败了包括商用IDS系统的所有对手,这些商用软件可是包括 ISS,CISCO SECURE IDS,CA ETRUST,CYBERSAFE CENTRAX,NFR。有兴趣的读者还可以看这篇名为Open source mounts IDS challenge 的报道。
这里给出结论,snort对tunnel数据包并没有察觉。
经抓包后作者察觉,经由了三次htc和hts之间的作用后,httptunnel才真正的建立起来,后面的工作才能正常开展,而且很有意思的是,自此以后所有后续的数据包一律没有80端口经常走的GET,PUT,POST之类的内容!这里看来可以想点办法。
上面说过,正常走80端口的数据包应该是web行为,那么就数据包中就应该少不了get等正常的动作内容,如果在80端口经过的数据总是没有这些东东,那么就肯定有问题了。
那么这种问题就有了一种解决方案,就是手工检查通过80端口通过的数据包,如果数据包是明文传送,那么就很容易发现这种行为。但这种行为也只能在理论上可行。在实际上的操作是不可能的,有没有比较成熟的这种产品呢?按照这个思路检索网上的数据,果然发现有种入侵检测e-Gap系统可以察觉及屏蔽 httptunnel等通道软件的存在,它工作在tcp/ip的应用层,在应用层一级检测数据包的确切性,比如,检测80端口的数据包,如果看起来数据包中总是没有有效的数据(URL,get,put等参数),那么e-Gap系统就会报警,并中断连接行为。
需要注意的是,这种侦测方法仅对明文传送的有效,如果数据被加密,那么也就无计可施了。那么再进一步,如果加密了呢?目前作者掌握的情况来看, StealthWatch硬件产品可能是一种比较好的选择,它完全摈弃了基于签名的工作模式,而是采用一种正在申请专利的基于flow-base构架策略,按照几家评测实验室的结果来看,可以有效的察觉已经公开和未公开的各种攻击,Dos,蠕虫,病毒等,甚至包括加密的通讯!但是,它的价钱也远远的超出了普通的商用IDS系统,一套齐备的设施需4万美元!具体效果作者目前没有条件测试。
总结:
在我们的试验中,httptunnel同时逃过了防火墙的屏蔽以及入侵检测系统的追踪,这是值得思考的。我们可以看到,网络安全仅仅依靠某种或某几种手段是不可靠的,尤其是对安全性要求很高的应用系统,同时对安全系统的盲目依赖往往会造成巨大的安全隐患。
其他说明:
将 TCP 流量伪装成 HTTP 流量的目的是通过将其他协议嵌入到 HTTP 请求中,绕过防火墙、代理或其他网络过滤设备的限制。通常,防火墙和代理服务器可能会针对非 HTTP 协议(例如普通的 TCP 连接)进行封锁,而对 HTTP 流量允许通行。通过这种方式,实际的 TCP 数据包被“伪装”成正常的 HTTP 请求或响应,看起来像是一个合法的 HTTP 流量。
常见的技术与方法:
一、使用 HTTP CONNECT 方法
HTTP CONNECT 方法允许客户端通过 HTTP 代理服务器建立与目标服务器的 TCP 连接,绕过防火墙的限制。
- **原理**:
- 客户端发送 HTTP 请求中的 `CONNECT` 方法,告诉代理服务器建立一个与远程服务器的连接。
- 如果代理服务器允许 `CONNECT` 请求,它将建立一个到目标服务器的 TCP 连接并返回响应给客户端。
- 然后,客户端和目标服务器之间的所有数据交换就会通过代理进行,不需要再经过防火墙的限制。
- **步骤**:
1. 客户端向代理服务器发送 `CONNECT` 请求:
```http
CONNECT target.server.com:12345 HTTP/1.1
Host: proxy.server.com:8080
```
2. 代理服务器建立与目标服务器(`target.server.com`)的 TCP 连接。
3. 客户端和目标服务器之间的通信开始,数据通过代理转发。
- **工具**:
1、`curl` 可以使用 `CONNECT` 方法:
```bash
curl -x proxy.server.com:8080 --proxy-anyauth --url "http://target.server.com:12345"
```
2、SSH 隧道:利用 SSH 隧道,也可以通过代理方式绕过 TCP 限制:
```bash
ssh -L 8080:target.server.com:12345 user@proxy.server.com
```
二、使用 HTTP 隧道化(HTTP Tunneling)
**HTTP 隧道化**是通过将其他协议的数据封装到 HTTP 请求中进行传输,这样的流量就看起来像普通的 HTTP 流量。通过隧道化技术,你可以将任何 TCP 数据传输嵌入到 HTTP 请求和响应中,使其不被防火墙检测为非 HTTP 流量。
**常用工具**:
1、HTTPTunnel:通过 HTTP 隧道化实现 TCP 流量的传输。
- **安装**:
```bash
sudo apt-get install httptunnel
```
- **示例**:
```bash
httptunnel -p 8080 -t 127.0.0.1:12345
```
这个命令会将从 HTTP 请求端口(8080)接收到的数据传递到 127.0.0.1:12345,并将从目标端口返回的数据通过 HTTP 隧道发送回客户端。
2、corkscrew:通过 HTTP 代理将任意协议的流量隧道化。
- **安装**:
```bash
sudo apt-get install corkscrew
```
- **示例**:
```bash
corkscrew proxy.server.com 8080 target.server.com 12345
```
三、WebSocket(如果允许 WebSocket 连接)
WebSocket 是一种基于 TCP 的协议,可以通过 HTTP 协议进行握手。某些网络防火墙和代理可能允许 WebSocket 流量,而禁止其他类型的 TCP 流量。利用 WebSocket 协议可以绕过 TCP 限制。
1、使用 WebSocket 进行 TCP 伪装:
如果网络允许 WebSocket 流量,可以通过 WebSocket 进行通信,而 WebSocket 实际上传输的是 TCP 流量。
2、常见的 WebSocket 服务器和客户端工具:
- 使用 `wscat`(一个 WebSocket 命令行客户端工具):
```bash
wscat -c ws://target.server.com:12345
```
四、VPN(虚拟专用网络)
如果可以在受限的网络上配置 VPN 连接,所有的流量(包括 TCP 流量)都可以通过加密隧道进行传输,从而绕过防火墙的限制。
- **使用 VPN 客户端**:
配置 VPN(如 OpenVPN、WireGuard 等)来建立与外部网络的加密连接,所有流量都会通过 VPN 隧道进行传输。
- **示例**:
```bash
openvpn --config client.ovpn
```
五、通过 Proxychains 配合 SOCKS5 代理
Proxychains 是一个将任意流量通过 SOCKS5 或 HTTP 代理转发的工具。通过配置 Proxychains,你可以将原本的 TCP 流量通过代理转发,使其看起来像是合法的 HTTP 流量。
- **安装 Proxychains**:
```bash
sudo apt-get install proxychains
```
- **配置 Proxychains**:
修改 `/etc/proxychains.conf` 文件,配置代理服务器为 SOCKS5 或 HTTP 代理。
- **使用 Proxychains 运行应用程序**:
```bash
proxychains curl http://target.server.com:12345
```
六、注意事项:
1、防火墙和代理的检测机制:一些先进的防火墙和代理不仅仅基于端口或协议限制,还会对流量进行深度包检测(Deep Packet Inspection, DPI)。这种情况下,仅仅将 TCP 流量伪装为 HTTP 或 WebSocket 可能仍然被检测到。如果防火墙非常严格,可能还需要加密流量或者使用其他技术。
2、加密隧道(如 VPN):为了避免流量被 DPI 检测到,可以考虑使用加密隧道(例如使用 VPN 或 Tor)来将所有流量封装并加密,从而隐藏其实际内容。
3、法律与合规问题:绕过防火墙限制的行为可能违反某些网络安全规定或服务条款。在进行此类操作时,请确保遵守相关法律法规和公司政策。
七、总结:
将 TCP 流量伪装为 HTTP 流量是突破防火墙或代理限制的一种有效方法。通过使用 **HTTP CONNECT 方法**、**HTTP 隧道化**、**WebSocket**、**VPN** 或 **代理工具**,你可以使 TCP 流量看起来像是正常的 HTTP 流量,从而绕过防火墙的限制。不过,需要注意的是,防火墙的检测机制可能会更复杂,有时需要结合多种技术手段才能成功突破。

鲁ICP备19063141号
鲁公网安备 37010302000824号