资讯动态

Sysinternals三件套实战:Windows恶意软件分析与持久化排查指南

发布时间:2026/10/8 22:12:08 来源:尧图企业网站定制
1. 为什么偏偏是这三件套组合逻辑先说清楚做恶意软件分析这行的人工具箱里多少都攒过一堆所谓“神器”。可真正到了应急响应现场你会发现大部分花里胡哨的扫描器根本救不了你反而微软官方这套免费的 Sysinternals 工具才是被反复验证过的硬通货。尤其当你把 Process Monitor、Autoruns、Process Explorer 这三样组合起来用几乎可以覆盖 Windows 恶意样本分析 80% 以上的日常需求。这篇文章就是我整理 Sysinternals 学习笔记和实战复盘时觉得最值得先讲透的几个核心思路。先别急着下工具我们把“恶意软件分析”这五个字拆开看。一个样本落地到 Windows 系统上无非要回答三个问题它是什么它干了什么它靠什么活下来静态工具比如杀软引擎、PE 分析器能回答第一个问题但行为层面的“干了什么”和持久化层面的“怎么活下来”恰恰是静态分析很难触及的盲区。Sysinternals 三件套的价值就在这里它们分别盯着行为、启动项和运行中进程这三个维度正好把“干了什么”和“怎么活下来”补全了。有朋友可能会说个把工具不也能看行为吗确实很多终端产品自带行为监控但它们的问题是“黑盒输出”——告诉你发现了可疑行为却不告诉你为什么。Sysinternals 的工具全部是“白盒”的你能看到每一次文件操作、注册表写入、网络连接、线程栈调用甚至可以精确到哪个进程拉起了哪个进程、哪个 DLL 被加载到了哪块内存。对一个想把样本分析明白、而不是只想知道“中没中毒”的人来说这种颗粒度的信息几乎是不可替代的。组合使用还有一个容易被忽略的好处互证。单独看 Process Monitor 抓到的注册表写入你可能无法判断这是样本行为还是正常软件行为但把 Autoruns 的启动项列表拉出来对照发现 Run 键下多了一条指向 Temp 目录的可执行文件证据链就闭环了。这就是我理解的“组合拳”含义不是三个工具轮流用一遍而是让它们互相补充、互相验证。这一篇笔记我会按“先看行为、再查持久化、最后深挖进程”的顺序来写每个工具讲清楚关键配置、读数据的思路和容易踩坑的地方最后用一个完整流程把三件套串起来。2. Process Monitor给恶意程序装一个行车记录仪2.1 学会的第一件事过滤规则先于捕获Process Monitor简称 Procmon的底层原理是借助内核态驱动实时监听文件系统、注册表、网络、进程与线程的活动。它的强项不是“记录得多”而是“让你能在海量事件里快速锁定一条可疑链路”。很多初学者第一次打开 Procmon点一下 Capture几十秒就能攒下几十万条事件然后整个人就懵了。这是 Procmon 最经典的新手陷阱。正确做法是先设计过滤规则再开始捕获。比如我拿到一个可疑样本通常会先把进程名和路径写进过滤条件。操作路径在菜单栏的 Filter - Filter弹出的对话框里可以组合多条条件。我常用的第一组规则是Process Name 是 样本进程名或者 Path 包含样本所在目录Operation 是 CreateFile、RegSetValue、RegCreateKey、TCP Send、TCP Receive 这类能反映“行为意图”的操作Result 排除 SUCCESS只看 ACCESS DENIED 和 BUFFER OVERFLOW 这类失败事件为什么不直接全量抓因为捕获事件数量太大会导致 Procmon 在内存里丢事件尤其是高 IO 场景下丢的往往正是关键操作。过滤之后的日志量小一个数量级分析起来轻松得多。Procmon 还有个细节我每次都会提醒自己系统自带的 svchost.exe、lsass.exe 这类进程在捕获里会大量制造噪音。如果样本没有明显的进程注入行为可以先在过滤里把这几个进程名排除掉等主线跑完再针对性补看。2.2 读日志的三个重要字段和两个细微线索一旦捕获完成Procmon 主界面就是一个实时刷新的表格默认列包括 Time of Day、Process Name、PID、Operation、Path、Result、Detail。分析时我最关注三个字段Operation、Path、Result。Path 是灵魂。如果看到 CreateFile 指向 C:\Users\Public\Temp\a.exe紧接着 RegSetValue 写到 HKCU\Software\Microsoft\Windows\CurrentVersion\Run那么行为路径已经很清楚释放文件、写自启动典型的恶意软件执行链。Result 也很有讲究。很多人只看 SUCCESS忽略 ACCESS DENIED。实际上恶意软件经常会在不拥有管理员权限时尝试写入只读位置然后降级到用户目录继续写。这种“尝试-失败-换路径”的过程往往能揭示样本的权限判断逻辑对判断样本是否尝试提权或者是否具备 UAC 绕过意图很有帮助。两个细微线索容易被忽略。第一个是 Detail 列里的 Stack 按钮选中任意事件后工具栏的 Stack 按钮会亮起点击后可以看到这个操作是由哪个模块发起的。如果 CreateFile 的调用栈里出现了一个非系统 DLL那就说明这个“文件操作”不是进程主程序发起的而是某个被注入的模块在操作这是一个非常强烈的可疑信号。第二个是进程树视图Procmon 菜单栏里 Tools - Process Tree快捷键 CtrlT这个视图会按父子关系展示所有进程并且左侧可以直接缩放到某条事件链对应的进程和父进程。2.3 Boot Logging捕获开机早期的行为有些恶意软件存活在系统启动早期普通登录后再开 Procmon 已经来不及。Procmon 内置的 Boot Logging 功能就是为这种场景准备的。勾选 Options - Enable Boot Logging设置好日志路径重启后 Procmon 驱动程序会在系统启动阶段就开始记录事件再次登录后 Procmon 会提示你保存本轮启动日志。这里我要特别说一个实际经验Boot Logging 生成的日志文件默认放在 C:\Windows\System32 下文件格式是 .pml通常体积非常巨大。分析这类日志时别忘了先用过滤把系统 PID 4System 进程产生的初始化噪音去掉。很多恶意服务在启动阶段的动作在过滤掉 System 噪音后剩下的条目其实非常有限一眼就能看出异常。另外Procmon 有一个偏向实操的选项Options - Filter - 启用 “Enable Advanced Output”。打开之后日志会额外记录操作发生时的线程 ID、会话 ID、用户名称和加载图片路径等信息取证分析阶段这些字段能帮你快速定位样本是在哪个用户会话下执行的。3. Autoruns揪出恶意软件的“起床闹钟”3.1 别只盯 Run 键Autoruns 到底扫了哪些位置持久化机制是恶意软件能不能在重启后存活的关键。很多人第一反应是看注册表 Run 键但真实世界的恶意软件早就不满足于只写 Run 键了。Autoruns 这个工具的价值在于它把所有可能的自启动位置全部枚举出来并且按类型分页签展示。全量扫描后你会看到这些页签我按实际排查频率排个序Logon登录相关的启动项包括 HKLM/HKCU 下的 Run、RunOnce、启动文件夹以及 Winlogon Shell、Userinit 等位置Services服务注册和当前加载的服务恶意驱动和服务大多藏在这里Scheduled Tasks计划任务越来越多的攻击者选择这种方式因为计划任务可以指定系统启动时或特定时间触发Explorer资源管理器相关扩展包括 Context Menu Handlers、Toolbars、Shell Execute Hooks 等Drivers内核驱动加载Rootkit 最常出没的位置WMIWMI 事件订阅这个位置隐蔽性极强常规杀软扫描很少覆盖Autoruns 默认启动后会做一次全量扫描主界面按“Everything”页签聚合展示。实际分析时我很少直接在 Everything 里翻更习惯一个个页签看过去尤其是 Logon、Services、Scheduled Tasks 这三个页签是九成恶意软件持久化的重灾区。3.2 如何“一眼”揪出异常项排序、签名与 VT 校验Autoruns 每一条启动项的旁边都有几个关键列Publisher签名发布者、Description描述、Image Path映像路径、Launch String启动字符串。我的排查顺序是这样的第一步先把官方签名项过滤掉。Autoruns 顶部的 Options 里勾上 “Hide Microsoft Entries”和“Hide Windows Entries”。这两个选项开启后微软和 Windows 自带条目会直接隐藏。剩下的条目数量通常能降到两位数以内这才是真正需要逐条人工审核的部分。第二步看 Image Path 和 Launch String 的路径位置。如果启动项指向的是 %AppData%、%Temp%、C:\ProgramData、Public 目录下的随机命名 exe基本可以判定问题如果路径写的是 %systemroot%\system32\config\systemprofile 这种绕弯子写法更要提高警惕。第三步右键可疑条目选择 Check VirusTotal。Autoruns 会把该文件的哈希值提交给 VirusTotal 查询并在 Last VT Detection 列显示查杀率。查杀率高不一定代表它是恶意样本但结合路径和行为日志已经足够支撑判断。实际排查时我会把 VT 检测率 5 的条目全部导出到 CSV 里作为后续分析的候选清单。这里有个细节如果 Autoruns 扫描时提示某个条目“File not found”映像路径文件不存在这也是重要线索。很多恶意软件清理工具会删除文件但遗留启动项这种残留痕迹往往是攻击发生过的直接证据我在应急报告里经常拿它作为“历史入侵痕迹”的依据。3.3 Autorunsc以后做批量排查我更常用它Autoruns 图形界面虽好但批量排查多台机器时效率太低。Sysinternals 还提供了命令行版本 Autorunsc它的输出可以导出成 CSV配合脚本做批量分析非常方便。我在处置多台服务器同时中招的场景下基本不打开 GUI而是直接执行autorunsc.exe -a * -c -h -s -v | Out-File autoruns_report.csv这里的参数含义-a 指定扫描所有启动位置-c 输出为 CSV 格式-h 显示文件哈希值-s 验证签名-v 包含 VirusTotal 查询结果。导出的 CSV 可以直接用 Excel 透视也可以交给脚本二次匹配。但有一点必须提醒Autorunsc 的 -v 参数是每一条都要发起 VT 查询全量扫描时速度很慢还会受 VirusTotal API 频率限制。建议先用 -s 做签名过滤把剩下的可疑条目再用 -v 做逐条查询。4. Process Explorer解剖当前正在运行的嫌疑人4.1 从进程树看父子关系谁拉起了谁如果说 Procmon 告诉你“恶意软件做过什么”那么 Process Explorer简称 Procexp告诉你“恶意软件正在干什么”。它的主界面默认按进程树展示父进程在上、子进程在下这比单纯的进程列表有用得多因为“谁拉起了谁”是判断攻击链最直接的信息。分析时我首先看的是父子关系是否异常。举个例子正常的 explorer.exe 双击运行程序子进程是用户程序合理。但如果你看到 svchost.exe 下面挂着一个 cmd.execmd.exe 又拉起了 powershell.exe这个链条就非常可疑因为系统服务宿主进程通常不会主动拉起交互式命令行。这种父子关系异常是 Process Explorer 给我印象最深的能力之一比任何 hash 匹配都更快暴露问题。Process Explorer 每一行默认显示的列包括进程名、PID、CPU、私有字节、用户名、Session 等。右键任意进程选择 Properties可以看到更详细的属性页。我重点看的几个页签是Image可执行文件路径、版本信息、签名验证状态TCP/IP该进程的所有活动网络连接连接目标 IP 和端口一目了然Strings进程内存中可打印的 ASCII 和 Unicode 字符串不需要拆内存文件就能快速浏览其中 Image 页签里的 “Verified Signer” 字段特别重要。如果签名为 “无法验证”或者显示未知发布者这个进程优先级会立刻提高到最前。4.2 线程栈、句柄与 DLL三个勾连线索进程属性页的 Threads 页签里有一个 Stack 按钮点击后能看到该线程当前的内核态和用户态调用栈。恶意软件在运行过程中往往会在某个线程里执行核心恶意逻辑线程栈里出现的模块名和函数名经常会直接指向注入来源。我见过不少混淆得很好的样本PE 文件本身看不出任何恶意特征但线程栈里某个模块路径是在 Temp 目录下释放的 DLL问题一下子就暴露了。Process Explorer 的句柄视图CtrlH也很值得养成习惯。切换到 handle 模式后能看到进程当前打开的每一个文件、注册表键、事件对象等。恶意软件为了反分析经常会独占某个日志文件或者互斥体Mutex这些句柄信息在排查“某个文件为什么删不掉”“某个服务为什么停不下来”时非常管用。DLL 视图CtrlD则展示进程加载的所有 DLL 列表配合 “Verified Signer” 列可以快速筛出无签名且路径异常的模块。实际分析时我会按“模块路径不含 Windows 目录 无签名”这两个条件做筛选命中项几乎全是问题点。另外如果发现某个 DLL 位于 Temp、Public、Downloads 这类目录基本可以断定存在 DLL 劫持或者反射式注入。4.3 直接转储内存为后续逆向留证据Process Explorer 有一个经常被低估的功能进程内存转储。右键进程 - Create Dump - 选择 Create Full Dump它会生成一个包含进程完整虚拟内存的 .dmp 文件。这个文件可以交给后续的逆向工具比如 Volatility、Mimikatz 提取、Ghidra 导入做更深入的分析。我的习惯是分析一个可疑进程前先做一次全量转储再做其他操作。因为很多行为是有时间窗口的进程一结束内存证据就没了。转储文件虽然大一般几百 MB 到几个 GB但硬盘空间换取证时机的价值这笔账怎么算都划算。另一个实用小技巧如果恶意进程持续运行但你已经通过 Procmon 锁定了它写入了某个恶意 DLL不要急着结束进程先在 Process Explorer 中右键进程选择 Restart重启进程让它在你的监控环境下重新跑一遍完整启动链往往能把静态分析漏掉的步骤重新补捉一遍。5. 实战串场三个工具如何打一套组合拳5.1 一个真实的告警场景从接入到定位纸上谈兵没意思我举个例子。某次处置一台 Windows Server值班同事反馈服务器 CPU 偶发飙高终端防护弹了两次可疑 PowerShell 执行告警但连续两次全盘扫描都没有检出威胁。我的接入流程是这样的先打开 Process Explorer按 CPU 使用率排序观察哪个进程在飙高的瞬间占据 CPU。抓到一个 PowerShell 进程父进程却是 WmiPrvSE.exe——这就是典型的 WMI 远程调用或者 WMI 事件订阅触发。继续看这个 PowerShell 的启动参数和当前目录确认它在执行一段经过 Base64 编码的脚本。随后切到 AutorunsWMI 页签下果然看到一条指向这段脚本的事件订阅CommandLine 是 powershell -enc 开头的编码指令。这时候恶意软件为什么要编码执行、为什么会重启后持续存活答案已经拼上了一半。5.2 联动排查的步骤拆解不要急着删除 WMI 订阅就收工。完整流程是先把 Process Explorer 里那个 PowerShell 进程做全量内存转储再把 Autoruns 里命中的恶意启动项导出接着用 Process Monitor 挂上过滤条件只监控该 PowerShell 进程及其子进程的活动让它再跑一轮捕获它写入文件、修改注册表、外联地址的完整行为链路。Procmon 跑完一轮之后日志里出现了两次关键操作一次是 CreateFile 写入 C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\s.dll另一次是 TCP Connect 到一个境外 IP 的 443 端口。到这一步整个“WMI 订阅 - PowerShell 拉取载荷 - 释放 DLL - 外联回连”的链条已经闭环。到这里三个工具的配合已经有了清晰的分工Process Explorer 定位“正在执行的恶意进程是谁”Autoruns 回答“恶意进程靠什么活下来的”Process Monitor 还原“恶意进程这段时间到底干了什么”5.3 三个工具的“互相印证”环节这种联动分析里最有价值的部分是“互相印证”。比如 Autoruns 里出现的启动项单独看可能是误报但当 Procmon 日志里出现了与之完全一致的注册表写入和文件释放动作时证据链就不再依赖单一信息来源了。我习惯在最后把三个工具的关键发现拼成一个时间线表格Process Explorer 记录的是进程诞生时间和父进程Autoruns 记录的是持久化注册时间和触发条件Procmon 记录的是每一次文件、注册表、网络操作的发生顺序。时间线一出来恶意软件从落地到存活到外联的完整攻击路径就全部可视化了。6. 走过的弯路常见问题与排查心得6.1 高频问题与排查速查症状可能原因排查方向Procmon 日志量太大关键事件丢失过滤条件设置过晚或过宽先设过滤再启动捕获按进程名 关键 Operation 过滤Autoruns 里找不到异常启动项恶意软件以服务或无文件方式运行单独检查 Services、Scheduled Tasks、WMI 三个页签Process Explorer 无法查看某个进程的详情权限不足进程属于 SYSTEM 或其他用户用管理员权限重新启动 Process Explorer转储文件过大分析工具无法打开全量转储包含大量共享内存页改用 Create Mini Dump或对特定进程页做针对性转储VT 查询显示 0 检测但行为异常刚出现的新样本或高度混淆不要依赖查杀率结合行为证据链判断Procmon 捕获不到网络连接默认操作集未包含网络事件确认 Options 里选中了网络监控选项必要时按 TCP Connect 过滤排查的时候永远不要只盯着一个工具下结论。单点线索可能是巧合、可能是误报但多个工具指向同一个模式时误判的概率会大幅下降。6.2 三条我在实战中沉淀的个人心得第一条先把系统快照做出来再动手清理。Sysinternals 工具全都打开并收集一轮信息之后无论结论多明显先把这个“三件套证据包”完整留存归档。很多时候你以为找到的 root cause 并不是全貌后面复盘时如果没有一手数据所有分析都得推倒重来。第二条不要在客户环境里直接用 Procmon 全量捕获。生产服务器上跑全量 Procmon日志量大到能瞬间把磁盘写满既影响业务又可能破坏证据。实战中我都是先用小过滤集跑 30 秒快速定位确认进程后再精准跟进而不是一上来就开着大网到处捞。第三条三件套以外的 Sysinternals 工具别急着学。很多新人喜欢把整个工具包背一遍但真正形成战斗力的是先把核心工具练到形成本能。我的建议是用 Process Monitor、Autoruns、Process Explorer 这三个工具反复分析同一个干净系统和同一个测试样本直到你不看文档也能说出每个按钮的位置和每个核心视图的含义再去接触 TCPView、Strings、Sigcheck 这些周边工具这样基础会扎实得多。从 Sysinternals 工具本身来说这套三件套面世已经很多年但至今仍然是我处理恶意软件事件时的第一选择。不是因为它们有什么高深莫测的黑科技而是因为它们足够底层、足够真实、足够克制——没有令人胆寒的误报率没有隐藏判断逻辑的黑盒决策也不会三天两头改版到让你怀疑人生。分析恶意软件这行最怕的不是工具不够多而是数据不够真。Sysinternals 给你的恰恰就是最原始、最真实、可追溯的系统行为数据。把这三件套用透你的恶意软件分析之路就已经站在一个非常坚实的起点上了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑