大家好,我们是 NOP Team,书接上回,我们给大家讲述了如何在 Linux 上找到 ICMP/DNS 隧道,但是现在工具都是全平台的,只有 Linux 似乎还不足以帮助蓝队兄弟们全面地解决问题
在学习这部分的时候,我找到了一篇文章 《如何找到发送异常ICMP流量的进程?》
https://www.anquanke.com/post/id/281835
这是一篇绿盟cert写的,发表在安全客上的文章,其中介绍了 Windows 和 Linux 下如何找到异常icmp 包的发包程序,这里提供了一个通过监控进程间通信,确定时间,之后通过时间和 Wireshark 抓包做对比的方法,可能有一丢丢误报,这是一种很巧的方法,不见得有多妙,但是很巧
今天给大家带来一种确切的,不会产生误报的方法
微软官方曾经出过一款类似 Wireshark 的网络协议分析工具 —— Microsoft Message Analyzer(MMA),旨在帮助用户在Windows操作系统中监控、截获、分析网络流量,并对系统或应用程序产生的事件和消息进行深入诊断。它是之前Windows平台上的网络抓包工具Network Monitor的后续产品,功能更为强大和全面。以下是MMA的主要用途:
尽管Microsoft Message Analyzer在功能上非常强大,但需要注意的是,Microsoft在2017/18年停止了对该工具的开发和支持,并且于 2019年11月25日从官网删除了该软件包
https://learn.microsoft.com/en-us/openspecs/blog/ms-winintbloglp/dd98b93c-0a75-4eb0-b92e-e760c502394f
下载后安装使用
https://github.com/esrrhs/pingtunnel/releases/download/2.8/pingtunnel_windows_amd64.zip
还是使用 pingtunnel 来模拟攻击者搭建的 icmp 隧道,其中攻击者控制服务器端为 192.168.31.83
攻击者的服务端启动 pingtunnel 服务器
wget https://github.com/esrrhs/pingtunnel/releases/download/2.8/pingtunnel_linux_amd64.zip
unzip pingtunnel_linux_amd64.zip# 启动服务端,设置 key 为 1234
sudo ./pingtunnel -type server -key 1234
客户端 windows 11 下载 pingtunnel 后启动
# 连接服务端
pingtunnel.exe -type client -l :4445 -s 192.168.31.83 -t 192.168.31.83:4444 -tcp 1 -key 1234
输入过滤条件后,可以直接筛选出相关的流量,这个 Wireshark 也可以做到,现在我们看看能不能找到进程id
默认好像看不出什么,就是分析了 ICMP 数据包,我们点击上方的 Tools 调出其他 details 界面
成功找到进程id以及对应的启动命令
我们使用 system informer 验证一下
成功找到 icmp 隧道进程的 pid
Netsh(Network Shell)是Windows操作系统中一个强大的命令行工具,主要用于配置和管理网络设置。这个工具允许用户通过命令行界面或脚本文件来查看、修改和故障排查各种网络相关的配置,包括但不限于以下几个方面:
此外,Netsh支持上下文切换,这意味着用户可以进入特定的网络配置上下文(如netsh interface
, netsh wlan
, netsh firewall
等),以便于更精确地操作相关领域的网络配置。它还提供脚本功能,意味着可以编写脚本文件来批量执行一系列网络配置命令,这对于自动化网络部署和维护非常有用
更多 netsh 的使用参考下面的官方文档
https://learn.microsoft.com/zh-cn/windows-server/networking/technologies/netsh/netsh-contexts
并不是所有场景都允许我们上传工具,而且这还是一个已经被放弃的工具,以后不兼容的可能性也很大,所以今天的重点是利用 Windows 自带的工具 netsh 来帮助我们找出 Windows 上的 icmp 隧道
直接使用上面的隧道就好,攻击者的服务端为 192.168.31.83
启动网络追踪功能(以管理员权限运行)
netsh trace start persistent=yes capture=yes tracefile=.\icmp_capture.etl
此时开启抓包,配合流量设备,我们觉得抓到了相关数据包后,停止抓包
netsh trace stop
我们需要将 .etl
格式的包转化为 Wireshark
能够解析的包,这需要 etl2pcapng.exe
https://github.com/microsoft/etl2pcapng
命令非常简单
etl2pcapng.exe in.etl out.pcapng
将上述文件拿回本地,使用 Wireshark 打开
此时通过过滤可以看到这些通信流量,可能大家会想,这不就是抓包嘛,也没看出什么区别呀
大家看这个包的最上面有一个 Packet comments
,我们点击看一下内容是什么
这里面备注了发送给请求数据包的 pid 以及 tid,这样我们就找到了恶意进程,使用 system informer 验证一下
就是这个进程起的隧道
至于 DNS 或者其他协议的隧道或者恶意程序其实都是一样的处置方法,icmp 比较有挑战性和代表性