H4NM/WhoYouCalling

GitHub: H4NM/WhoYouCalling

基于 ETW 的 Windows 进程网络监控工具,实现按进程粒度的完整数据包捕获与 DNS 关联分析。

Stars: 456 | Forks: 21

WhoYouCalling 📞

一款 Windows 命令行工具,利用 Windows API 和事件跟踪 (ETW) 监控进程的 TCPIP 和 DNS 活动。可根据记录的 TCPIP 活动生成并过滤数据包捕获文件 (.pcap),从而实现对每个进程的完整数据包捕获。

该工具适用于任何想要了解 Windows 中进程产生何种网络流量的用户: - **安全研究人员**:分析应用程序并识别漏洞。 - **游戏黑客**:理解游戏流量以进行可能的数据包篡改。 - **红队成员**:创建 Payload 以测试检测能力。 - **蓝队成员**:事件响应和受控恶意软件分析。 - **系统管理员**:在迁移前了解主机或进程所需的流量。 - **好奇/多疑的人**:只想弄清楚进程正在与谁通信。 ## 部分功能: - 生成每个进程的完整数据包捕获 (.pcap) 文件。 - 基于 DNS 响应创建 Wireshark (DFL) 过滤器。 - 生成每个进程的网络过滤器 (BPF & DFL)。 - 用于自动监控的计时器。 - 输出 JSON 和简化文本格式的结果。 - 获取与进程相关的二进制文件的元数据。 - 使用网络图可视化进程、IP 和域名。 - 对 VirusTotal 和 AbuseIPDB 执行 API 查询。 ## 用法: WhoYouCalling 可以以 **三种** 不同的模式运行: - **Machine**:记录来自机器的传出 TCPIP 和 DNS 流量。 ``` wyc.exe --machine ``` - **Executable**:执行指定的二进制文件,并监控该进程及其子进程的 TCPIP 和 DNS 活动。 ``` wyc.exe --executable C:\Users\H4NM\Desktop\TestApplication.exe ``` - **PID**:监控指定 PID 的进程及其子进程的 TCPIP 和 DNS 活动。 ``` wyc.exe --pid 24037 ``` 要进行完整的数据包捕获,您需要 [下载并安装 npcap 驱动程序](https://npcap.com/#download)。之后,您可以使用 `--getinterfaces` 或简写 `-g` 列出可供监控的可用接口: ``` wyc.exe --getinterfaces [*] Available interfaces: 0) WAN Miniport (Network Monitor) 1) WAN Miniport (IPv6) ... 8) Realtek USB GbE Family Controller IPv4: 192.168.1.10 IPv6: fd12:3456:789a:1::2 ``` 要选择一个接口,您可以提供左侧列表中的编号,或者提供该接口分配的 IP 或其部分。例如, ``` # 使用 main mode machine 指定的接口编号 wyc.exe --machine -i 4 # 使用 main mode machine 的完整分配 IP wyc.exe -M -i 192.168.1.45 # 使用 main mode machine 的部分分配 IP wyc.exe -M -i 192.168 ``` *如果多个接口包含提供的部分 IP,它将选择遇到的第一个接口。* ## 分析结果 为了分析结果,本项目包含 **CallMapper**,这是一个 Python 和 JavaScript 解决方案,用于读取 WhoYouCalling 的 JSON 输出,并托管所有进程及其相关网络活动的网络图。**CallMapper** 支持可视化、过滤和搜索进程、IP 和域名,以及对相关值执行 API 查询。 ![CallmapperUsage](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/0dfe9b48fa050839.png) **简单用法**: ``` python callmapper.py -r ./Result.json ``` 更多信息请参阅 [CallMapper README.md](https://github.com/H4NM/WhoYouCalling/blob/main/CallMapper/README.md)。 ### 限制 - **DNS**:在 ETW 中,`Microsoft-Windows-DNS-Client` 仅记录 A 和 AAAA 查询,忽略了其他 DNS 查询类型,如 PTR、TXT、MX、SOA 等。它确实会捕获 CNAME 及其各自的地址,这些是 DNS 响应的一部分。但是,通过 FPC,无论如何都会捕获请求,只是不会在应用程序注册的 DNS 流量中显示。FPC 和注册的 TCPIP 活动有助于识别未使用 **Windows DNS Client Service**(例如 `nslookup`)的进程,因为它们不会记录在 DNS ETW 中。 - **执行完整性**:由于 WhoYouCalling 需要提升的权限才能运行 (*ETW + FPC*),因此生成的进程自然会继承安全令牌。但是,为了允许以较低的权限执行二进制文件,交互式登录中桌面 shell (explorer.exe) 的令牌会被复制并添加到启动的进程中。 在某些用例中,WhoYouCalling 可能通过远程管理工具(如 PowerShell、SSH 或 PsExec)执行,而此时没有桌面 shell 实例,在这些情况下,您需要提供可能执行该程序的用户名和密码。目前也无法将执行 elevated 状态下的应用程序的权限委托给其他用户,这意味着如果您想使用 WYC 以 elevated 状态启动另一个应用程序,则需要以具有管理员权限的用户身份登录,并提供以 elevated 状态运行的标志。 ### 依赖项 Nuget 包: - [SharpCap](https://github.com/dotpcap/sharppcap) - [Microsoft.Diagnostics.Tracing.TraceEvent](https://www.nuget.org/packages/Microsoft.Diagnostics.Tracing.TraceEvent/) 网络驱动程序 (*可选 - 如果需要完整的数据包捕获*): - [npcap](https://npcap.com/#download) ### 安装/编译说明 请按照以下步骤从源代码编译: 1. **安装 .NET 8** 确保您的系统上已安装 [.NET 8](https://learn.microsoft.com/en-us/dotnet/core/install/windows)。 2. **(可选) 安装 Npcap** 下载并安装 [Npcap](https://npcap.com/#download) 以在 Windows 中启用数据包捕获。 3. **克隆仓库** 通过克隆此仓库下载源代码: ``` git clone https://github.com/H4NM/WhoYouCalling.git ``` 4. **进入项目** ``` cd WhoYouCalling ``` 5. **安装相关包 (SharpCap 和 TraceEvent)。** ``` dotnet restore ``` 6. **构建项目** ``` dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -p:DebugSymbols=false ``` 7. **运行它** ``` bin\Release\net8.0\win-x64\publish\wyc.exe [arguments]... ``` ## 那么 ProcMon、TCPView 和 Pktmon 呢?? 在 Windows 中监控进程网络活动的一些最佳方法是使用 Sysinternal 工具 [ProcMon](https://learn.microsoft.com/sv-se/sysinternals/downloads/procmon) 或 [TCPView](https://learn.microsoft.com/en-us/sysinternals/downloads/tcpview)。 还有原生 Windows 应用程序 [Pktmon](https://learn.microsoft.com/en-us/windows-server/networking/technologies/pktmon/pktmon),它非常擅长在不同的网络堆栈中捕获数据包以及进行事件关联。 这些工具及其提供的功能: - **ProcMon**:对进程进行 连续 TCPIP 流量监控。 - **TCPView**:获取进程的 活动 TCPIP 连接。 - **Pktmon**:从不同的网络堆栈收集数据包。 ProcMon 和 TCPView 都不捕获 DNS 流量,也不提供数据包捕获。Pktmon 不会记录网络数据包来自哪个 PID 或进程名称,除非与其他日志源结合使用。而且它不会为此过滤数据包捕获文件。 WhoYouCalling 解决的主要缺点: 1. **手工工作**:要获取每个进程的完整数据包捕获 (FPC),您需要使用 Wireshark/Tshark 等工具手动启动数据包捕获,并根据 ProcMon 或 TCPView 的结果创建端点过滤器,这可能非常耗时,而且如果流程未自动化,可能会因人为错误而遗漏潜在的端点。Pktmon 仍然需要与来自其他日志源的事件进行手动映射。 2. **子进程**:维护所有可能生成的子进程及其通信端点的跟踪记录可能非常繁琐。 3. **DNS 查询**:ProcMon 和 TCPView 均不支持捕获 DNS 查询。它们确实提供发送到端口 53 的 UDP/TCP 洞察,但没有提供查询的实际域名或给定的地址响应。 简而言之,WhoYouCalling 是这些工具的组合,并解决了上述缺点以及更多问题。 我仍然强烈推荐列出的其他工具,因为它们可能适合其他用例。例如,ProcMon 可以提供文件系统活动和访问权限调用的信息,而这是 WhoYouCalling 无法做到的。 WhoYouCalling 严格用于进程的网络活动分析。 # 🐛 Bugs 或请求? ✨ 创建一个 issue! 🚀 ### 待办事项: - 重构。有很多东西需要重构和整理 :) ### 期望拥有 - Linux 移植
标签:AbuseIPDB, Ask搜索, BPF过滤器, DAST, DNS监控, ETW, Mr. Robot, PCAP, VirusTotal, Wireshark, 句柄查看, 后渗透, 威胁情报, 开发者工具, 恶意软件分析, 数据可视化, 数据展示, 无线安全, 流量嗅探, 流量捕获, 红队, 网络安全, 网络安全审计, 网络拓扑, 网络流量分析, 逆向工具, 隐私保护