0x01 简介
大家好,我们是 NOP Team,书接上回,我们给大家讲述了如何在 Linux 上找到 ICMP/DNS 隧道,但是现在工具都是全平台的,只有 Linux 似乎还不足以帮助蓝队兄弟们全面地解决问题
在学习这部分的时候,我找到了一篇文章 《如何找到发送异常ICMP流量的进程?》
https://www.anquanke.com/post/id/281835
这是一篇绿盟cert写的,发表在安全客上的文章,其中介绍了 Windows 和 Linux 下如何找到异常icmp 包的发包程序,这里提供了一个通过监控进程间通信,确定时间,之后通过时间和 Wireshark 抓包做对比的方法,可能有一丢丢误报,这是一种很巧的方法,不见得有多妙,但是很巧
今天给大家带来一种确切的,不会产生误报的方法
0x02 Microsoft Message Analyzer
1. MMA 简介
微软官方曾经出过一款类似 Wireshark 的网络协议分析工具 —— Microsoft Message Analyzer(MMA),旨在帮助用户在Windows操作系统中监控、截获、分析网络流量,并对系统或应用程序产生的事件和消息进行深入诊断。它是之前Windows平台上的网络抓包工具Network Monitor的后续产品,功能更为强大和全面。以下是MMA的主要用途:
-
网络流量分析:MMA能够捕获网络数据包,帮助用户分析网络通信中的细节,包括不同协议层级的数据,这对于识别网络瓶颈、故障排除和安全审计至关重要。 -
协议解析:支持广泛的网络协议,能够解码并展示各种网络协议的详细信息,便于理解数据包的内容和结构。 -
事件和日志分析:除了网络数据包,MMA还可以分析系统和应用程序事件日志,将网络行为与系统事件关联起来,为问题诊断提供更全面的视角。 -
灵活的数据视图:提供多种查看数据的方式,包括表格视图、图表视图等,以及强大的筛选和搜索功能,帮助用户快速定位关键信息。 -
脚本和扩展性:支持使用脚本和APIs自定义分析场景,用户可以根据需要创建或调整分析方案,提高工作效率。 -
跨平台支持:虽然主要是针对Windows平台设计,但MMA在一定程度上也支持跨平台网络分析,增强了其在多环境下的适用性。 -
诊断和故障排除:特别是在解决复杂的网络和应用程序交互问题时,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
下载后安装使用
2. 模拟 icmp 隧道
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
3. 使用 MMA 追踪 ICMP 隧道
输入过滤条件后,可以直接筛选出相关的流量,这个 Wireshark 也可以做到,现在我们看看能不能找到进程id
默认好像看不出什么,就是分析了 ICMP 数据包,我们点击上方的 Tools 调出其他 details 界面
成功找到进程id以及对应的启动命令
4. 成功找到恶意进程 pid
我们使用 system informer 验证一下
成功找到 icmp 隧道进程的 pid
0x03 netsh
1. netsh 简介
Netsh(Network Shell)是Windows操作系统中一个强大的命令行工具,主要用于配置和管理网络设置。这个工具允许用户通过命令行界面或脚本文件来查看、修改和故障排查各种网络相关的配置,包括但不限于以下几个方面:
-
网络接口配置:可以用来配置网络接口卡(NIC)的IP地址、子网掩码、默认网关、DNS服务器等参数。 -
Windows防火墙管理:允许用户创建、修改或删除防火墙规则,以及查看防火墙的状态和配置。 -
IPSec配置:支持配置IPSec策略,用于保护网络通信的安全。 -
无线网络管理:可以用来管理无线网络的配置,包括连接到无线网络、设置首选网络列表等。 -
路由和远程访问服务(RRAS):配置和监控路由表、拨号连接、VPN等。 -
HTTP代理和监听配置:在支持的Windows版本中,可以配置HTTP代理设置和监听器,用于应用层的网络请求处理。 -
网络诊断和故障排除:提供命令来帮助诊断网络连接问题,比如重置网络设置、查看网络堆栈状态等。
此外,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 隧道
2. 隧道模拟
直接使用上面的隧道就好,攻击者的服务端为 192.168.31.83
3. netsh 追踪网络行为
启动网络追踪功能(以管理员权限运行)
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
4. 找出恶意进程
将上述文件拿回本地,使用 Wireshark 打开
此时通过过滤可以看到这些通信流量,可能大家会想,这不就是抓包嘛,也没看出什么区别呀
大家看这个包的最上面有一个 Packet comments
,我们点击看一下内容是什么
这里面备注了发送给请求数据包的 pid 以及 tid,这样我们就找到了恶意进程,使用 system informer 验证一下
就是这个进程起的隧道
至于 DNS 或者其他协议的隧道或者恶意程序其实都是一样的处置方法,icmp 比较有挑战性和代表性
往期文章
原文始发于微信公众号(NOP Team):ICMP/DNS 隧道处置方法 | Windows 应急响应