隧道事件
0x00 简介¶
隧道事件的事件来源一般有以下几种:
- 流量设备发现存在网络隧道
- 主机安全程序发现存在网络隧道或相关文件、进程
- 排查过程中发现存在跳板机痕迹等,进而发现隧道
- 运维相关人员发现异常端口等
其实大家可以发现,处理隧道与处理远控后门没有太大的区别,因为隧道本身就是后门大概念中的一部分,所以也是通过各种特征找到 PID
,进而处理
大多数协议隧道都包含两点特征:
- 存在短时间、单一目标、频繁请求的该协议的数据包
- 可能出现额外本地到本地的连接 (127.0.0.1:xx -> 127.0.0.1:xx)
大家需要明白一点,发现隧道并不是应急人员要做的,验证处理才是,现在隧道程序五花八门,尝试去记住特征并识别意义并不大,下面的部分也仅仅是介绍一些隧道技术与正常网络连接的差异,如果隧道程序想做,完全可以做到和正常网络连接没区别
这里给大家推荐一篇总结内网代理工具与检测方法研究的文章,下面部分内容参考该文章
https://mp.weixin.qq.com/s?__biz=MzkzNjMxNDM0Mg==&mid=2247483876&idx=1&sn=b71f016be9f345699efcbffdc27b626f&chksm=c2a1d56df5d65c7bbee6e1052d0405eab5cb6dbb98bd549459b83b5a2ab6b530cd078ca5398e&token=229680544&lang=zh_CN#rd
0x01 固定证据¶
在发生任何安全事件时,确定安全事件真实存在以后,第一步都建议固定证据,固定证据一般有以下几种类型,受害单位可以根据实际需求选择
- 系统快照 - 一般云环境比较方便这么做
- 磁盘取证
- 针对性取证 - 例如日志文件、网络信息、数据库等
- 内存取证
系统快照¶
这种主要是云环境或虚拟化环境比较方便,目前似乎这类方式取证出来的内容都会丢失内存信息,属于是关机-快照-导出
虚拟机软件似乎支持例如暂停、冻结等功能,具体根据实际情况决定
磁盘取证¶
磁盘取证有很多工具可以考虑
dd
FTK Imager
针对性取证¶
这部分推荐我们自己的 NOPTrace-Collector
https://github.com/Just-Hack-For-Fun/NOPTrace-Collector
我们还推出了一套数字取证和应急响应规范,可以根据此规范自己开发取证程序
https://github.com/Just-Hack-For-Fun/OpenForensicRules
内存取证¶
DumpIt
FTK Imager
取证后,对证据进行分析时,需要先单独复制一份,保持所有安全人员分析的基础是相同的
0x02 DNS 隧道¶
1. 原理¶
DNS隧道是一种利用域名系统(DNS)协议来传输数据的技术。它的原理是通过将数据编码为DNS查询或响应的有效载荷来传输数据,从而绕过了网络防火墙和安全设备对传统数据流量的检测和限制。
DNS隧道的工作原理如下:
-
数据编码:要传输的数据被编码为DNS查询或响应的有效载荷。通常,数据会被分割成较小的块,并将其编码为域名或其他DNS字段的一部分。编码方法可以是基于文本的编码(如Base64)或其他自定义编码方案。
-
DNS查询/响应:编码后的数据被放置在DNS查询或响应中的有效载荷部分。对于查询类型的DNS隧道,客户端发送DNS查询请求到DNS服务器,有效载荷中包含了编码后的数据。对于响应类型的DNS隧道,DNS服务器将数据编码后包含在DNS响应中返回给客户端。
-
DNS解析与提取:接收方接收到DNS查询或响应后,会解析其中的有效载荷,并提取出编码的数据。解析和提取过程通常是通过特定的DNS隧道工具或脚本来完成的。
-
数据重组和处理:接收方将提取到的数据进行解码和重组,以还原原始数据。这些数据可以是任何类型的,例如文件、命令、消息等。接收方根据应用程序的需要对数据进行处理。
2. 常见工具¶
常见的 DNS 隧道工具
- dnscat2 已经至少两年没有更新
- dnscat2 (Powershell 版) 目前已经归档
- iodine
- DNS_Tunneling
- CobaltStrike
- Metasploit-Framework
DNS 隧道工具演示可以参考知识点附录 -> 0x06 CobaltStrike DNS 隧道演示
3. 常见特征¶
- 可能会在受害端创建一块新的网卡
- DNS 流量会有明显增加
- 请求域名较为单一
- 请求频繁
-
可能会出现不常用的解析记录的DNS数据包
TXT
记录AAAA
记录
-
可能会出现长度较长的请求
- 可能出现内容明显加密的请求
更多特征可以学习以下文章
https://zhuanlan.zhihu.com/p/143220945
0x03 ICMP 隧道¶
1. 原理¶
ICMP隧道(ICMP Tunneling)是一种将其他协议的数据封装在ICMP报文中进行传输的技术。它通过利用ICMP协议的特性,将非ICMP流量伪装成ICMP报文,以达到绕过防火墙或过滤器的目的。
ICMP是Internet控制消息协议,通常用于网络设备之间传递控制、错误和诊断信息。ICMP报文通常包含有关网络连接性和状态的信息,例如ping命令所使用的回显请求和回显应答消息。
ICMP隧道的技术原理如下:
-
封装:在发送端,非ICMP流量(例如TCP、UDP或其他协议的数据包)被封装在ICMP报文的数据字段中。ICMP报文的类型和代码字段通常被设置为合法的值,以使其看起来像是合法的ICMP消息。
-
传输:经过封装后的ICMP报文被发送到目标主机。由于ICMP通常允许通过防火墙或过滤器,因此可以使用ICMP隧道绕过这些网络安全设备。
-
解封装:在接收端,目标主机接收到ICMP报文,然后解析出封装的非ICMP流量。解封装后的数据被递交给相应的协议栈进行处理,如TCP或UDP。
2. 常见工具¶
3. 常见特征¶
Windows 上常见的 icmp
包主要就是 ping
, 我们尝试 ping
一下百度,只一下
可以看到,默认的 ping
包大小一定时内部内容是固定的,简单来说就是使用小写字母填充,而隧道正是利用数据段,下面看一段 ICMP
隧道的数据包
主要特征如下:
- 向单一目标发
ICMP
包频率高 ICMP
数据包一般大于Windows
平台默认的长度- 发送内容可以看出非
Windows
平台默认的ping
请求
ICMP 隧道演示可以查看 知识点附录 -> 0x07 Pingtunnel ICMP隧道演示
0x04 TCP 隧道¶
这里不再单独设置SSL/TLS 隧道,都放在
TCP
隧道里
1. 原理¶
TCP隧道是一种将TCP流量封装在另一个协议的数据包中进行传输的技术。它的原理可以简单概括为以下几个步骤:
-
建立隧道端点:在隧道的源端和目的端分别建立隧道的端点。源端是发送方,目的端是接收方。
-
封装数据包:在源端,将要通过隧道传输的TCP数据包封装在另一个协议的数据包中。封装后的数据包中,原始的TCP数据包成为内部数据,称为"payload"。
-
发送数据包:封装后的数据包通过底层网络传输到目的端。通常,封装后的数据包会经过一系列的路由器、交换机等网络设备。
-
解封数据包:在目的端,接收到封装后的数据包后,进行解封操作。将内部的TCP数据包提取出来,恢复原始的数据。
-
传递数据:解封后的TCP数据包可以被目的端的应用程序处理,正常地进行TCP通信。
通过这种方式,TCP隧道可以在不同网络环境中传输TCP流量,绕过网络限制、防火墙或过滤器等。它可以用于建立安全连接(如VPN隧道),进行远程访问,或在特殊需求下隐藏真实的TCP流量。
需要注意的是,TCP隧道的实现可能涉及加密、认证和数据完整性等安全机制,以确保隧道中的数据传输的安全性和可靠性
2. 常见工具¶
-
socat (官网不知为何清空了内容)
-
earthworm 在很早以前就已经清空了项目,但是现在使用的还是不少
-
Udp2raw 这个工具是将UDP伪装成
TCP/ICMP
,这里也算是一种TCP
隧道吧,用来绕过禁止UDP协议的防火墙
TCP 隧道的工具太多了,基于原版魔改的也多
3. 常见特征¶
整个网络世界几乎都是基于 TCP 的了,如果想从其中找到什么特征是比较困难的
- 这些工具中部分是带有代理功能的,从端口监听上可能发现异常端口
- 部分工具流量有特征字符,尤其是首次连接的时候,但是应急的时间基本不会在首次连接时,所以得依靠流量设备
- 部分工具存在配置文件,当然这是可以魔改的
- 没有配置文件的工具启动参数都有明显异常,当然这也是可以魔改的
这里就要吐槽一下了,设计一款像 CobaltStrike
这种可以配置后生成二进制程序的多好,说不定可以直接做免杀
0x05 UDP 隧道¶
以前大家对 UDP
的评价是快但不稳,但是现在 HTTP/3
都是使用基于 UDP
的协议的 QUIC
协议来完成了,所以基于 UDP
协议的隧道也可能会越来越成熟,当然这可能需要开发者自己进行一些实现
1. 原理¶
UDP(User Datagram Protocol)隧道是一种将其他协议的数据包通过UDP封装并在UDP数据报中进行传输的技术。UDP隧道的原理可以简要概括如下:
-
封装:在发送端,原始数据包(例如TCP数据包、IP数据包等)被封装在UDP数据报中。UDP数据报的格式通常包括源IP地址、目标IP地址、源端口号、目标端口号以及封装的原始数据。
-
传输:封装后的UDP数据报通过网络传输。由于UDP是一种无连接的协议,它不会像TCP那样保证可靠的数据传输。UDP隧道可能会面临丢包、乱序等传输问题。
-
解封装:在接收端,UDP数据报被接收并解封装,以还原原始数据包。解封装后的数据可以被传递给相应的协议栈进行处理。
UDP隧道的使用场景包括以下几个方面:
- 穿越防火墙和NAT:由于UDP协议相对于TCP协议更容易穿越防火墙和NAT设备,UDP隧道可以用于在防火墙或NAT之间建立通信通道,以便绕过网络限制。
- 加密和隐匿通信:通过在UDP数据报中封装其他协议的数据,可以实现对通信内容的加密和隐匿,从而提供一定程度的安全性和隐私保护。
- 绕过流量限制:某些网络环境可能对特定协议或端口的流量进行限制,通过将流量封装在UDP数据报中,可以绕过这种限制。
- VoIP和实时流媒体:UDP隧道在VoIP和实时流媒体应用中常用,因为UDP协议适合传输对实时性要求较高的数据,如音频和视频。
2. 常见工具¶
3. 常见特征¶
-
短时间出现
UDP
流量激增 -
部分工具可能会创建网卡
0x06 KCP 隧道¶
KCP
协议就是一种基于 UDP
协议的可靠实现,部分游戏采用 KCP
来提高流畅性,做网络加速
1. 原理¶
KCP(KCP Protocol)隧道的原理基于KCP协议本身,它使用UDP作为传输层协议,并通过KCP协议进行数据的封装和传输。以下是KCP隧道的基本原理:
- KCP协议封装: KCP隧道首先将要传输的数据进行封装。KCP协议对数据进行分段,并为每个数据段添加序列号、时间戳等信息。这些信息用于保证数据传输的可靠性和顺序性。
- UDP传输: 封装后的数据通过UDP协议进行传输。UDP是一种无连接的传输协议,它提供了较低的传输延迟和更好的性能,适用于实时通信和快速数据传输。
- 接收端解封装: 接收端收到UDP数据包后,进行KCP协议的解封装。它解析数据段的序列号和时间戳信息,并根据KCP协议的机制进行数据包的排序、丢包检测和重传处理。
- 重传和拥塞控制: 如果接收端检测到数据包丢失或乱序,KCP协议会触发重传机制,发送端会重新发送丢失的数据包。同时,KCP还实现了拥塞控制机制,根据网络状况动态调整发送窗口和拥塞窗口大小,以避免过度拥塞。
- 应用层处理: 解封装后的数据交给上层应用进行处理。这可能涉及数据的解密、解压缩以及应用特定的处理逻辑。
通过KCP隧道,可以在不可靠的UDP传输上实现可靠的数据传输,提供较低的延迟和较高的吞吐量。KCP隧道通常用于加密、加速和稳定UDP流量的传输,适用于游戏、实时流媒体、远程访问等各种应用场景。
2. 常见工具¶
更多
KCP
实现大家可以参考以下文档https://github.com/skywind3000/kcp
3. 常见特征¶
KCP
隧道最大的特征就是使用了 KCP
协议,目前KCP
协议没有应用的那么广,当然了,如果你是游戏服务器,那还是有可能的,但这并不是最大的问题
目前 KCP
隧道比较严重的问题还是 Wireshark
无法很好地识别 KCP
协议
KCP 隧道演示部分可以查看 知识点附录 -> 0x08 kcptun KCP隧道演示
0x07 QUIC 隧道¶
1. 原理¶
QUIC(Quick UDP Internet Connections)隧道是一种基于UDP的传输协议,用于提供安全、可靠和高效的通信。QUIC隧道的原理如下:
- 建立连接: QUIC隧道的建立是通过客户端和服务器之间的握手过程完成的。客户端和服务器之间首先通过UDP通信建立初始连接。在初始连接中,双方交换握手数据包,包括加密信息、协议版本、连接参数等。
- 加密和鉴权: QUIC隧道使用TLS(Transport Layer Security)进行加密和鉴权。在握手过程中,客户端和服务器会协商密钥和加密算法,并进行身份验证。这确保了通信的机密性和完整性。
- 多路复用: QUIC隧道支持多路复用,即在同一个UDP连接上可以同时传输多个数据流。这意味着多个应用程序或服务可以共享同一个QUIC连接,提高了网络利用率和性能。
- 拥塞控制: QUIC隧道内置了拥塞控制机制,用于监测网络的拥塞程度,并相应地调整数据传输的速率。通过动态调整发送速率和接收确认,QUIC可以在网络拥塞情况下保持良好的性能。
- 快速重传和重传控制: QUIC隧道具有快速重传和重传控制机制,用于处理丢包和数据传输错误。当发生丢包时,QUIC会快速重传丢失的数据包,而无需等待超时。此外,QUIC还使用前向纠错和ECN(Explicit Congestion Notification)等技术来提高数据传输的可靠性。
- 流量控制: QUIC隧道支持流量控制,以确保发送方和接收方之间的数据传输平衡。通过动态调整数据发送速率和接收窗口大小,QUIC可以避免发送方过载和接收方溢出。
总体而言,QUIC隧道通过使用UDP协议和内置的机制,如加密、多路复用、拥塞控制和快速重传等,提供了快速、高效、安全和可靠的通信。它在网络环境不稳定或存在阻塞的情况下表现出色,并被广泛用于提供实时通信、流媒体传输和移动应用等场景。
2. 常用工具¶
3. 特征¶
由于目前 HTTP/3
还应用的不是很广泛,所以主要特征为短时间、单一目标、大量 QUIC
协议数据包(可能还包含UDP协议包)以,除此之外就是工具的特征了
QUIC 隧道演示部分可以查看 知识点附录 -> 0x09 gost QUIC隧道演示
0x08 Web 隧道¶
这里 Web 隧道是指基于网页脚本的隧道以及通过web相关协议搭建隧道,至于端口复用、篡改web服务器那种不在此范围内
1. 原理¶
Web隧道是一种通过HTTP或HTTPS协议在网络上建立起隧道连接的技术,允许通过隧道将其他协议的流量(如TCP、UDP等)封装在HTTP或HTTPS请求中进行传输。Web隧道的原理如下:
- 建立HTTP/HTTPS连接: Web隧道的第一步是建立HTTP或HTTPS连接。客户端通过发送HTTP请求或HTTPS握手请求与服务器建立起连接。这个连接通常是基于标准的HTTP或HTTPS协议,使用TCP作为传输协议。
- 封装其他协议的流量: 一旦HTTP/HTTPS连接建立成功,客户端可以将其他协议的数据封装在HTTP请求的正文(body)中。可以使用不同的封装方式,如将原始数据直接作为HTTP请求的内容传输,或者将数据进行分割和编码后再传输。
- 请求转发和响应解析: 客户端将封装好的数据发送给服务器,服务器接收到请求后解析HTTP请求,提取出封装的数据。服务器可以根据数据的类型和目标协议进行相应的处理,例如将TCP数据转发给指定的TCP服务器。
- 数据传输和转发: 服务器收到封装的数据后,根据目标协议进行相应的数据传输。对于TCP数据,服务器可以将数据转发给指定的TCP服务器;对于UDP数据,服务器可以将数据封装成UDP包并发送给指定的UDP服务器。这样,通过HTTP/HTTPS请求和响应,客户端和服务器之间可以进行数据传输。
- 响应返回和解封装: 服务器收到目标协议的响应后,将响应数据封装在HTTP响应的正文中,并将响应发送给客户端。客户端收到响应后,解析HTTP响应,提取出封装的数据,并根据需要进行解封装,恢复为原始的协议数据。
总体而言,Web隧道利用HTTP或HTTPS协议作为载体,在网络上建立起隧道连接,将其他协议的流量封装在HTTP请求和响应中进行传输。这种技术可以绕过网络防火墙或代理的限制,提供一种灵活的方式来传输不同协议的数据。但是请注意,Web隧道可能会面临一些安全和性能方面的考虑,因此在使用时需要进行适当的配置和评估。
2. 常见工具¶
3. 常见特征¶
- web 目录存在异常文件
- 文件中存在关键字
- 流量中存在部分关键字
可以通过各种 webshell
检测工具进行检测
0x09 隧道处置流程¶
上面的内容介绍了隧道的特征、工具等,处理隧道最难的部分就是找到隧道的进程,尤其是 ICMP/DNS 这类隧道,我们既然来处理隧道,至少我们应该知道的是隧道对端的IP地址
所以接下来的处置就是根据IP地址,找出与该IP地址通信的进程,推荐两种方法:
- Microsoft Message Analyzer
- Netsh + Wireshark
详细实验可以参照我们公众号的文章
https://mp.weixin.qq.com/s/iDT1NfkLHjkkpywGx_QiXQ
1. MMA¶
MMA 是微软官方开发的,已经停止开发了,但依旧可以使用
点击开始本地追踪
输入过滤条件后,可以直接筛选出相关的流量,现在我们看看能不能找到进程id
默认好像看不出什么,就是分析了 ICMP 数据包,我们点击上方的 Tools 调出其他 details 界面
成功找到进程id以及对应的启动命令
2. Netsh¶
Netsh(Network Shell)是Windows操作系统中一个强大的命令行工具,主要用于配置和管理网络设置。这个工具允许用户通过命令行界面或脚本文件来查看、修改和故障排查各种网络相关的配置
启动网络追踪功能(以管理员权限运行)
此时开启抓包,配合流量设备,我们觉得抓到了相关数据包后,停止抓包
我们需要将 .etl
格式的包转化为 Wireshark
能够解析的包,这需要 etl2pcapng.exe
https://github.com/microsoft/etl2pcapng
命令非常简单
将上述文件拿回本地,使用 Wireshark 打开
此时通过过滤可以看到这些通信流量,包的最上面有一个 Packet comments
,我们点击看一下内容是什么
这里面备注了发送给请求数据包的 pid 以及 tid,这样我们就找到了恶意进程
3. 常规处置¶
接下来的处置就按照挖矿病毒或者远控后门章节的处置办法进行处置就好