一:背景

1. 讲故事

前几天高级调试训练营里的一位学员找到我,说他们的程序句柄爆高,经过自己分析之后发现是几百万的 process 句柄,截图如下:

说实话,第一眼看到有这么多的 process 句柄还是挺震惊的,在我的400+dump分析之旅中还是从未见过,这也给了我很大的好奇心,接下来我们就来分析下到底是何方神圣导致的问题。

二:WinDbg 分析

1. process 句柄真的爆高吗

dump分析的一个重要原则就是相信数据而不是人言,即使是我的学员。。。所以我让学员用 procdump 给我抓一个 minidump,我要亲自用 !handle 洞察 process 句柄个数,参考命令如下:


0:000> !handle
...
Handle 000000000000c398
Type Process
Handle 000000000000c39c
Type Process
Handle 000000000000c3a0
Type Process
Handle 000000000000c3a4
Type Process
Handle 000000000000c3a8
Type Process
Handle 000000000000c3ac
Type Process
Handle 000000000000c3b0
Type Process
Handle 000000000000c3b4
Type Process
Handle 000000000000c3b8
Type Process
Handle 000000000000c3bc
...

由于process句柄太多,没法全部刷出来,不过从满篇的Process来看,确实是这样,接下来的问题是如何知道 process 句柄是谁创建的?

2. Process 句柄是谁创建的

哈哈,学员就是学员,精髓都学到了,知道这种问题应该用什么工具,对,就是 perfview,学员用 perfview 追踪了 3分钟多,有些人可能要问,这个时间是怎么看出来的,可以打开 TraceInfo 选项就知道了,截图如下:

有了 etl 文件之后,打开 Windows Handle Ref Count Stacks 选项卡,可以看到 3分多时间内 追踪到了 5756 个句柄,截图如下:

接下来就是双击 Handle Type Process 行,展开这 5756 个句柄详情,然后多次点击具体的句柄观察特征,结果发现大量的 process 的上游都挂了 halcon 的 ReadImage() 方法,截图如下:

从调用栈来看,ReadImage() 会涉及到文件IO,所以在内核层自然会和文件系统驱动 fltmgr.sys 打交道,但在调用栈的末端被一个 dcfafilter.sys 驱动给拦截了,从名字上来看不像是windows自带的,而且也正是它创建的 process 句柄,类似 OpenProcess 操作。

到这里我的疑心越来越重,让朋友到 C:\Windows\System32\drivers 目录中看下这个驱动是干什么的?是哪个程序引用着这个驱动。可以用类似的命令查看。


sc queryex type= driver
sc qc DCFAFilter

经过朋友的一顿猛如虎的操作,终于给找到了,原来是 ManageEngine Unified Endpoint Security - Agent 服务,截图如下;

拿着这个信息到网上一搜,我去,还真是第三方的运维监控软件,截图如下:

到这里就真相大白了,然来是 ManageEngine 捣的鬼。。。无语了。。。朋友关闭了这个服务之后,句柄恢复了正常,截图如下;

三:总结

我见过太多的安全软件导致程序出现各种故障,但那些都是在用户态层面进行的干扰,而这次生产故障是我第一次见到有安全软件在内核态干扰应用程序,长见识啦!

记一次 .NET 某智能视觉软件 句柄爆高分析的更多相关文章

  1. 记一次 .NET 某工控软件 内存泄露分析

    一:背景 1.讲故事 上个月 .NET调试训练营 里的一位老朋友给我发了一个 8G 的dump文件,说他的程序内存泄露了,一时也没找出来是哪里的问题,让我帮忙看下到底是怎么回事,毕竟有了一些调试功底也 ...

  2. 记一次 .NET 某医保平台 CPU 爆高分析

    一:背景 1. 讲故事 一直在追这个系列的朋友应该能感受到,我给这个行业中无数的陌生人分析过各种dump,终于在上周有位老同学找到我,还是个大妹子,必须有求必应 . 妹子公司的系统最近在某次升级之后, ...

  3. 记一次 .NET游戏站程序的 CPU 爆高分析

    一:背景 1. 讲故事 上个月有个老朋友找到我,说他的站点晚高峰 CPU 会突然爆高,发了两份 dump 文件过来,如下图: 又是经典的 CPU 爆高问题,到目前为止,对这种我还是有一些经验可循的. ...

  4. 记一次 .NET 某医院HIS系统 CPU爆高分析

    一:背景 1. 讲故事 前几天有位朋友加 wx 抱怨他的程序在高峰期总是莫名其妙的cpu爆高,求助如何分析? 和这位朋友沟通下来,据说这问题困扰了他们几年,还请了微软的工程师过来解决,无疾而终,应该还 ...

  5. 记一次 .NET 某旅行社Web站 CPU爆高分析

    一:背景 1. 讲故事 前几天有位朋友wx求助,它的程序内存经常飙升,cpu 偶尔飙升,没找到原因,希望帮忙看一下. 可惜发过来的 dump 只有区区2G,能在这里面找到内存泄漏那真有两把刷子..., ...

  6. 记一次 .NET 某流媒体独角兽 API 句柄泄漏分析

    一:背景 1. 讲故事 上上周有位朋友找到我,说他的程序CPU和句柄都在不断的增长,无回头趋势,查了好些天也没什么进展,特加wx寻求帮助,截图如下: 看的出来这位朋友也是非常郁闷,出问题还出两个,气人 ...

  7. 记一次 .NET 某电商交易平台Web站 CPU爆高分析

    一:背景 1. 讲故事 已经连续写了几篇关于内存暴涨的真实案例,有点麻木了,这篇换个口味,分享一个 CPU爆高 的案例,前段时间有位朋友在 wx 上找到我,说他的一个老项目经常收到 CPU > ...

  8. 智能电视软件安装(WIFI上网)

    智能电视软件上网(电视可连接无线网的称之为:智能电视) 1.安装当贝市场 链接:http://www.dangbei.com/ 2.安装电视家浏览器 链接:http://www.tvapk.net/f ...

  9. 【DSP开发】【计算机视觉】TI 视觉软件开发套件ADAS

    关键字:TI  视觉软件开发套件  ADAS 日前,德州仪器 (TI) 宣布推出其视觉软件开发套件(SDK),从而为开发人员提供了一款灵活的框架.一组丰富齐全的硬件设备驱动程序和一套适用的开发工具,可 ...

  10. 新一代视频AI服务 —— 阿里云智能视觉重磅发布

    3月27日下午,第51期阿里云产品发布会-智能视觉产品隆重发布,本次产品发布会首次面向全网用户深入的解读了智能视觉的前世今生. 行业背景 随着人工智能的技术不断成熟,AI逐渐在各行业内落地.在新零售领 ...

随机推荐

  1. sympy简明用法

    系统学习Sympy 什么是Sympy Sympy 是一个可以进行符号运算的第三方科学计算库,数学对象可以被精确的表达,而不是近似值,这也意味着带有未计算的未知量可以以符号的形式留在数学表达式中. im ...

  2. 1、Java相关工具下载及准备

    相关准备 oracle jdk8:oracle官网. IDEA:官网 Maven:官网,下第二个 Redis:windows, MySQL:官网归档, RabbitMQ:csdn Java环境配置 变 ...

  3. 会用 AI 的工程师,效率已经拉开差距了 - “ 我们曾经引以为傲的编码能力,正在被改写。”

    最近尝试用Cursor做了几个内部业务系统,发现一个越来越明显的趋势 真正会用 AI 的工程师,效率已经拉开差距了. 做了十几年 Java, 这波 AI 编程浪潮来得快,一开始我也没太当回事,以为这波 ...

  4. Httprunner 文件上传场景

    使用Httprunner在做接口自动化的时候,经常会遇到需要上传文件的场景,下面讲一下关于Httpruner文件上传的用例编写. 1. 建项目 首先我们使用httprunner的脚手架快速搭建一个工程 ...

  5. Spring 注解之 @MapperScan 和 @Mapper

    @Mapper注解 为了让别的类能够引用UserMapper,需要在UserMapper类上添加@Mapper注解: @Mapper public interface UserMapper { pub ...

  6. Redis异常 Invalid argument during startup: unknown conf file parameter

    问题提出 设置 redis 过期事件监听时,需将 notify-keyspace-events的值设置为Ex,故去掉了 notify-keyspace-events Ex'之前的注释符.然而,启动re ...

  7. 推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

    推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化 ...

  8. Visual Studio 2022 中的 EF Core 反向工程和模型可视化扩展插件

    前言 在 EF 6 及其之前的版本数据库优先模式(Database First)是可以在 Visual Studio 中通过可视化界面来操作完成的,但是到了 EF Core 之后就不再支持了(因为模型 ...

  9. 【图书预售】清华大学出版社出版的《JMeter核心技术、性能测试与性能分析》开始预售了

    <JMeter核心技术.性能测试与性能分析>是一本由清华大学出版社出版的图书,JMeter是一款基于Java的压力测试工具,可用于对服务器.网络或对象模拟巨大的负载,在不同压力类别下测试它 ...

  10. 100条常用SQL语句

    一.基本查询语句 查询所有数据: SELECT * FROM 表名; 查询特定列: SELECT 列名1, 列名2 FROM 表名; 条件查询: SELECT * FROM 表名 WHERE 条件; ...