首页
社区
课程
招聘
[求助]windows平台抓包,并获取进程、线程信息
发表于: 2025-2-12 17:41 3046

[求助]windows平台抓包,并获取进程、线程信息

2025-2-12 17:41
3046

需求场景

系统上有恶意程序外联,例如频繁发起DNS请求。需要定位发起这个DNS请求的进程和线程。
之所以想要获取线程信息,是因为有时获取到的是系统进程system(PID=4),但是实际上是其中的某个线程发起的DNS请求。

考虑到的解决方案

现有的工具是有办法定位的,但是要么需要多个工具配合比较麻烦,要么工具比较复杂,太重了。因此想写一个小程序实现定位DNS请求进程、线程信息。
但是本人对windows开发不太熟悉,参考网上资料和询问大模型的获取的信息,找到了以下几个方案:

1. ETW监控

使用ETW 追踪 MS-Windows-DNS-Client 相关的事件

优点:

  • 可以获取到进程信息
  • 开发难度低

缺点:

  • 不依赖操作系统解析的应用程序不受 ETW 追踪 MS-Windows-DNS-Client 影响
  • 可能会出现 PID=4 (System 伪进程) 的 DNS 解析
  • 只能获取到进程信息,获取不到线程信息

2. 使用gopacket抓包

优点:

  • 开发难度低

缺点:

  • gopacket本身不带进程信息,先抓到包再获取进程、线程信息又存在时间窗口的问题,可能获取不到。

3. WFP

编写 WFP Callout 驱动,注册到 FWPM_LAYER_ALE_FLOW_ESTABLISHED_V4 层,捕获 DNS 流量。

优点:

  • 可以获取全部的流量信息

缺点:

  • 开发难度大
  • ALE好像只能获取到PID信息?获取不到线程信息?同时,也存在无法穿透系统进程(system,PID=4)伪装的问题?

问题

以上哪种实现方式比较好?还有没有其他更好的方案?
谢谢


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 649
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
windows 平台当然建议WFP啦,跟着微软走就好了。
2025-2-20 09:38
0
雪    币: 1022
活跃值: (143)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
即便用wfp,抓到的dns发包进程也是svchost,因为这个进程是一个dnscache服务,系统绝大多数的dns发送都通过他,基本流程是其他进程投递lpc消息给这个进程,然后等待应答,svc发包执行解析,获得结果后应答lpc,所以要拿到正确的dns解析进程必须在查询到有dns发包时快速检索svc全部线程中有lpc等待回复的那个,基本就能拿到,当然也有极个别拿不到。实测可行
2025-2-22 10:20
0
雪    币: 25
活跃值: (400)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
hook dnscache可以拿到一部分进程信息,但也仅限于一部分
2025-3-7 14:16
0
游客
登录 | 注册 方可回帖
返回