1. 1. 一、工具总览与获取
    1. 1.1. 1.1 获取方式
    2. 1.2. 1.2 IR 工具优先级
    3. 1.3. 1.3 首次运行注意事项
  2. 2. 二、Process Explorer — 进程树分析利器
    1. 2.1. 2.1 基本界面与功能
    2. 2.2. 2.2 颜色编码(Color Coding)
    3. 2.3. 2.3 进程树分析
    4. 2.4. 2.4 DLL 视图与 Handle 视图
    5. 2.5. 2.5 VirusTotal 集成
    6. 2.6. 2.6 替代 Task Manager
    7. 2.7. 2.7 命令行版本 — handle.exe 与 listdlls.exe
  3. 3. 三、Process Monitor — 实时行为监控
    1. 3.1. 3.1 概述
    2. 3.2. 3.2 捕获类型
    3. 3.3. 3.3 Filter 设置(IR 核心技能)
    4. 3.4. 3.4 实战:使用 Procmon 分析恶意软件行为
    5. 3.5. 3.5 Boot Logging(启动日志)
    6. 3.6. 3.6 Procmon 与 Sysmon 的区别
  4. 4. 四、Autoruns — 持久化全面枚举
    1. 4.1. 4.1 概述
    2. 4.2. 4.2 IR 关键功能
    3. 4.3. 4.3 Compare 功能(基线对比)
    4. 4.4. 4.4 命令行版本 autorunsc.exe
    5. 4.5. 4.5 常见恶意持久化条目示例
  5. 5. 五、TCPView — 实时网络连接监控
    1. 5.1. 5.1 基本功能
    2. 5.2. 5.2 IR 使用要点
    3. 5.3. 5.3 命令行替代 — tcpvcon.exe
  6. 6. 六、Strings — 字符串提取
    1. 6.1. 6.1 概述
    2. 6.2. 6.2 使用方法
    3. 6.3. 6.3 IR 中关注的字符串模式
    4. 6.4. 6.4 Process Explorer 内置 Strings 功能
  7. 7. 七、Sigcheck — 签名验证与 VirusTotal 提交
    1. 7.1. 7.1 基本用法
    2. 7.2. 7.2 VirusTotal 集成
    3. 7.3. 7.3 Catalog Signing 检查
    4. 7.4. 7.4 IR 实战场景
  8. 8. 八、Handle — 句柄查询
    1. 8.1. 8.1 基本用法
    2. 8.2. 8.2 IR 场景
  9. 9. 九、ListDLLs — DLL 分析
    1. 9.1. 9.1 基本用法
    2. 9.2. 9.2 检测 DLL 劫持/侧加载
    3. 9.3. 9.3 与 Process Explorer DLL 视图的区别
  10. 10. 十、PsExec / PsLogList / AccessChk
    1. 10.1. 10.1 PsExec — 远程执行
    2. 10.2. 10.2 PsLogList — 远程日志收集
    3. 10.3. 10.3 AccessChk — 权限审计
  11. 11. 十一、完整 IR 工作流示例
    1. 11.1. 11.1 场景:怀疑主机被入侵,使用 Sysinternals 完整排查
    2. 11.2. 11.2 自动化收集脚本
  12. 12. 十二、对比总结与最佳实践
    1. 12.1. 12.1 Sysinternals 工具选择指南
    2. 12.2. 12.2 最佳实践
    3. 12.3. 12.3 与 Linux 工具的对应关系
  13. 13. 参考链接

Windows应急响应 - 31 Sysinternals套件

Sysinternals套件

前置说明

Sysinternals Suite 是 Microsoft(原 Mark Russinovich 开发)提供的一组高级系统工具,是 Windows IR 的”瑞士军刀”

下载地址:https://learn.microsoft.com/en-us/sysinternals/ 或直接访问 \\live.sysinternals.com\tools\

所有工具均为绿色便携,无需安装,适合 IR 场景下从 USB 直接运行

工具都有 GUI 和/或 CLI 版本,本页重点讲解 IR 中最常用的 8 个工具

关联页面:06-进程与网络分析 | 09-注册表持久化审计 | 02-排查命令速查


一、工具总览与获取

1.1 获取方式

方式一:整包下载

1
2
3
4
# 下载 Sysinternals Suite 完整包
Invoke-WebRequest -Uri "https://download.sysinternals.com/files/SysinternalsSuite.zip" `
-OutFile "$env:TEMP\SysinternalsSuite.zip"
Expand-Archive -Path "$env:TEMP\SysinternalsSuite.zip" -DestinationPath "C:\Tools\Sysinternals"

方式二:UNC 实时路径(联网环境)

1
2
3
4
# 直接从 Microsoft Live 路径运行(无需下载)
\\live.sysinternals.com\tools\procexp.exe
\\live.sysinternals.com\tools\procmon.exe
\\live.sysinternals.com\tools\autoruns.exe

方式三:winget 安装

1
2
3
winget install -e --id Microsoft.Sysinternals.ProcessExplorer
winget install -e --id Microsoft.Sysinternals.ProcessMonitor
winget install -e --id Microsoft.Sysinternals.Autoruns

1.2 IR 工具优先级

优先级 工具 主要用途 IR 价值
P0 Process Explorer 进程树分析、DLL 检查 发现可疑进程、注入、伪装
P0 Autoruns 持久化枚举 找出所有 autostart 入口
P0 Process Monitor 实时行为监控 抓取恶意软件行为
P1 TCPView 网络连接分析 发现 C2 通信
P1 Sigcheck 签名验证 识别未签名/异常签名文件
P1 Strings 字符串提取 快速分析可疑二进制
P2 Handle 句柄查询 找被锁定的文件
P2 ListDLLs DLL 分析 未签名 DLL 检测
P2 PsExec 远程执行 远程取证收集
P2 AccessChk 权限审计 检查服务/目录权限

1.3 首次运行注意事项

所有 GUI 工具首次运行会弹出 EULA 对话框,IR 时可用 /accepteula 参数自动接受

1
2
3
4
5
# 批量接受所有 Sysinternals 工具的 EULA(写注册表)
Get-ChildItem "C:\Tools\Sysinternals\*.exe" | ForEach-Object {
$toolName = $_.BaseName
reg add "HKCU\Software\Sysinternals\$toolName" /v EulaAccepted /t REG_DWORD /d 1 /f
}

或者运行时加参数:

1
2
3
procexp.exe /accepteula
procmon.exe /accepteula
autoruns.exe /accepteula

二、Process Explorer — 进程树分析利器

2.1 基本界面与功能

Process Explorer (procexp.exe / procexp64.exe) 是 Task Manager 的超级增强版

核心特性:

进程树视图(父子关系清晰可见)

DLL 和 Handle 视图(底部面板)

实时 CPU/内存/IO 曲线

VirusTotal 集成

数字签名验证

替代系统 Task Manager

启动方式:

1
2
# 以管理员权限运行(推荐,可看到所有进程信息)
Start-Process -FilePath "C:\Tools\Sysinternals\procexp64.exe" -Verb RunAs -ArgumentList "/accepteula"

2.2 颜色编码(Color Coding)

Process Explorer 用颜色区分不同类型的进程,IR 时尤其关键:

颜色 含义 IR 关注点
浅蓝色 自有进程(Same user) 当前用户的进程
粉红色 Services 系统服务,关注异常服务
紫色 Packed Images 高度关注! 可能是加壳恶意软件
深灰色 Suspended 暂停的进程,可能是注入目标
绿色闪烁 新创建的进程 观察动态行为时注意
红色闪烁 即将退出的进程 注意瞬时进程
深蓝色 .NET 进程 关注未签名的 .NET 进程

紫色进程(Packed Images)是 IR 最重要的信号之一

Process Explorer 通过比较磁盘上的 PE 与内存中的映像来判断是否 packed

合法软件也可能使用 packer(如某些游戏),但 system32 下的紫色进程极为可疑

2.3 进程树分析

正常进程树结构(基线认知):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
System (PID 4)
└── smss.exe
├── csrss.exe (Session 0)
├── wininit.exe
│ ├── services.exe
│ │ ├── svchost.exe (多个实例)
│ │ ├── spoolsv.exe
│ │ └── ... 其他服务
│ └── lsass.exe
└── csrss.exe (Session 1)
└── winlogon.exe
└── explorer.exe
├── chrome.exe
└── ... 用户程序

IR 中需要检查的异常:

lsass.exe 不是 wininit.exe 的子进程

svchost.exe 不是 services.exe 的子进程

多个 lsass.exe 实例(正常只有一个)

cmd.exe/powershell.exe 的父进程是 winword.exe/excel.exe(钓鱼攻击)

进程名拼写微妙差异:scvhost.exesvch0st.execsrs.exe

右键 → Properties 查看详情:

Image tab: 完整路径、命令行参数、启动时间、父进程、用户

Threads tab: 线程信息,检查是否有远程线程注入

TCP/IP tab: 该进程的网络连接

Environment tab: 环境变量

Strings tab: 内存中的字符串(对比磁盘字符串,差异可能表明注入)

2.4 DLL 视图与 Handle 视图

底部面板切换(View → Lower Pane View):

Ctrl+D: 显示 DLL 视图

Ctrl+H: 显示 Handle 视图

DLL 视图(IR 用途):

检查进程加载了哪些 DLL

查找未签名的 DLL(可能是 DLL 劫持或 DLL 侧加载)

查找路径异常的 DLL(如从 %TEMP%%AppData% 加载的 DLL)

查找不属于该进程的 DLL(如 svchost.exe 加载了 unknown.dll

Handle 视图(IR 用途):

查看进程打开了哪些文件、注册表键、互斥体(Mutex)

恶意软件通常会创建特定的 Mutex 防止多实例运行

检查进程是否锁定了某些文件(如日志文件被清理工具锁定)

搜索功能(Find → Find Handle or DLL):

1
2
3
4
5
6
# 快捷键 Ctrl+F
# 搜索特定 DLL 被哪些进程加载
搜索: mimikatz
搜索: inject
搜索: payload.dll
搜索: C:\Users\*\AppData\Local\Temp\ (临时目录中的 DLL)

2.5 VirusTotal 集成

启用方式: Options → VirusTotal.com → Check VirusTotal.com

启用后,进程列表中会出现 VT 列,显示检出率(如 0/7245/72

注意事项:

仅提交 hash,不会上传文件(除非手动选择 Submit)

如果显示 Unknown,说明 VT 上没有该文件,可能是定制恶意软件

需要网络连接

结合 Verify Signatures 使用:

Options → Verify Image Signatures

显示每个进程的数字签名状态

未签名(Not Verified)+ VT 检出 = 高度可疑

已签名 ≠ 安全(签名可能被盗用)

2.6 替代 Task Manager

1
2
3
4
5
6
7
# 将 Process Explorer 设置为默认 Task Manager
# 打开 Process Explorer → Options → Replace Task Manager
# 之后 Ctrl+Shift+Esc 会打开 Process Explorer

# 或通过注册表手动设置
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\taskmgr.exe" `
/v Debugger /t REG_SZ /d "C:\Tools\Sysinternals\procexp64.exe" /f

IR 时建议替换,因为 Task Manager 信息量远不如 Process Explorer

2.7 命令行版本 — handle.exe 与 listdlls.exe

Process Explorer 是 GUI 工具,脚本化场景使用 CLI 替代:

1
2
3
4
5
# 列出所有进程及其命令行(类似 procexp 的 Image 列)
Get-CimInstance Win32_Process | Select-Object ProcessId, Name, CommandLine, ParentProcessId

# procexp 也支持命令行参数
procexp.exe /t # 显示进程树

三、Process Monitor — 实时行为监控

3.1 概述

Process Monitor (procmon.exe / procmon64.exe) 实时捕获系统上的所有文件、注册表、网络和进程/线程活动

每秒可能产生数万条事件,必须使用 Filter 才能有效分析

IR 中主要用途:

观察可疑进程的行为(读写了什么文件、修改了哪些注册表、连接了哪些地址)

分析恶意软件的 dropper 行为

排查持久化机制的创建过程

3.2 捕获类型

图标 类型 说明
文件图标 File System 文件创建/读写/删除/重命名
注册表图标 Registry 键值创建/查询/修改/删除
网络图标 Network TCP/UDP 连接和数据传输
进程图标 Process & Thread 进程创建/退出、线程创建、DLL 加载
性能图标 Profiling 性能相关事件

工具栏上对应的 5 个按钮可以快速开关各类型的捕获

3.3 Filter 设置(IR 核心技能)

Filter 是 Procmon 的灵魂,没有好的 Filter,Procmon 就是噪音制造机

打开方式:Filter → Filter… 或 Ctrl+L

Filter 语法: [Column] [Relation] [Value] then [Include/Exclude]

IR 常用 Filter 模板:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 模板一:监控特定可疑进程
Process Name - is - malware.exe - Include

# 模板二:监控某用户所有活动
User - contains - compromised_user - Include

# 模板三:排除系统噪音
Process Name - is - svchost.exe - Exclude
Process Name - is - RuntimeBroker.exe - Exclude
Process Name - is - MsMpEng.exe - Exclude
Process Name - is - SearchIndexer.exe - Exclude
Process Name - is - System - Exclude
Operation - is - RegQueryValue - Exclude
Result - is - NAME NOT FOUND - Exclude
Result - is - BUFFER OVERFLOW - Exclude

# 模板四:关注写操作(恶意软件投放行为)
Operation - contains - Write - Include
Operation - is - CreateFile - Include
Operation - is - SetDispositionInformationEx - Include # 文件删除

# 模板五:关注注册表持久化
Path - contains - \Run - Include
Path - contains - \Services\ - Include
Path - contains - \CurrentVersion\Image File Execution Options - Include
Path - contains - \Schedule\TaskCache - Include

3.4 实战:使用 Procmon 分析恶意软件行为

步骤一:准备环境

1
2
3
# 在隔离 VM 中启动 Procmon
procmon64.exe /accepteula /backingfile C:\Evidence\procmon_capture.pml
# /backingfile 指定日志文件,避免内存耗尽

步骤二:设置 Filter

先清除所有 Filter(Filter → Reset)

添加目标进程 Filter

步骤三:执行可疑样本

运行恶意软件样本

等待 30-60 秒收集行为

步骤四:停止捕获并分析

Ctrl+E 停止捕获

使用 Tools → Process Tree 查看进程创建链

使用 Tools → File Summary 查看文件操作汇总

使用 Tools → Registry Summary 查看注册表操作汇总

使用 Tools → Network Summary 查看网络连接汇总

步骤五:导出关键事件

1
2
# 命令行导出为 CSV(自动化分析)
procmon.exe /openlog C:\Evidence\procmon_capture.pml /saveas C:\Evidence\procmon_output.csv

3.5 Boot Logging(启动日志)

某些恶意软件在系统启动早期运行,普通 Procmon 抓不到

启用 Boot Logging: Options → Enable Boot Logging

重启后 Procmon 会在系统启动时就开始记录

下次打开 Procmon 时会提示合并 Boot Log

这对分析 bootkit、驱动级 rootkit、早期持久化非常有用

3.6 Procmon 与 Sysmon 的区别

特性 Process Monitor Sysmon
运行方式 交互式、按需运行 后台服务、持续运行
日志存储 PML 文件或内存 Windows 事件日志
事件量 极大(每秒数万) 经过规则过滤后适中
适用场景 实时行为分析、调试 长期监控、威胁检测
性能影响 较大 较小(配置得当时)

IR 中两者配合使用:Sysmon 提供长期历史记录,Procmon 用于实时深入分析


四、Autoruns — 持久化全面枚举

4.1 概述

Autoruns 枚举 Windows 系统上几乎所有自动启动位置(比 msconfig 全面得多)

覆盖的自启动类型:

Logon(登录启动项)

Explorer(Shell 扩展)

Internet Explorer / Edge

Scheduled Tasks(计划任务)

Services(服务)

Drivers(驱动程序)

Codecs(编解码器)

Boot Execute

Image Hijacks(映像劫持)

AppInit DLLs

Known DLLs

Winlogon

Winsock Providers(LSP)

Print Monitors

LSA Providers

Network Providers

WMI

Office Addins

Sidebar Gadgets

4.2 IR 关键功能

Hide Microsoft Entries:

Options → Hide Microsoft Entries

过滤掉 Microsoft 签名的合法条目,极大减少噪音

IR 时必开,可以快速聚焦到第三方和未知条目

Verify Code Signatures:

Options → Scan Options → Verify code signatures

检查每个条目的数字签名

未签名的 autostart 条目需要重点关注

Check VirusTotal.com:

Options → Scan Options → Check VirusTotal.com

自动提交 hash 到 VT 检查

标签颜色含义:

粉红色/红色行:条目的映像文件不存在或签名验证失败 → 高度可疑

黄色行:条目指向的映像文件路径异常

绿色行:刚刚发生变化的条目

4.3 Compare 功能(基线对比)

这是 IR 中最强大的功能之一

原理:将当前系统的 autostart 与已知干净基线进行对比

工作流程:

1
2
3
4
5
6
7
8
9
# 步骤一:在干净系统上导出基线
autorunsc.exe /accepteula -a * -h -s -v -vt -c > C:\Baselines\clean_autoruns.csv

# 步骤二:在可疑系统上导出当前状态
autorunsc.exe /accepteula -a * -h -s -v -vt -c > C:\Evidence\suspect_autoruns.csv

# 步骤三:在 GUI 中 Compare
# File → Compare... → 选择 clean_autoruns.csv
# 绿色 = 新增条目(基线中没有)→ 这些是最可疑的

自动化 Compare(PowerShell):

1
2
3
4
5
6
7
8
9
10
# 比较两个 Autoruns CSV,找出差异
$baseline = Import-Csv "C:\Baselines\clean_autoruns.csv"
$current = Import-Csv "C:\Evidence\suspect_autoruns.csv"

# 找出新增的 autostart 条目
$newEntries = Compare-Object -ReferenceObject $baseline -DifferenceObject $current `
-Property "Image Path", "Launch String" -PassThru |
Where-Object { $_.SideIndicator -eq "=>" }

$newEntries | Format-Table "Entry Location", "Image Path", "Launch String" -AutoSize

4.4 命令行版本 autorunsc.exe

IR 脚本化场景必用命令行版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 完整扫描,输出 CSV(含 hash、签名、VT 结果)
autorunsc64.exe /accepteula -a * -h -s -v -vt -c > C:\Evidence\autoruns.csv

# 参数说明:
# -a * 扫描所有类型(logon, services, drivers, codecs, boot, etc.)
# -h 计算文件 hash
# -s 验证数字签名
# -v 验证代码签名
# -vt 提交 VT 检查
# -c CSV 输出
# -m 隐藏 Microsoft 签名条目

# 只扫描特定类型
autorunsc64.exe -a l # 只扫描 Logon
autorunsc64.exe -a s # 只扫描 Services
autorunsc64.exe -a t # 只扫描 Scheduled Tasks
autorunsc64.exe -a d # 只扫描 Drivers

# 只显示未签名的条目(IR 常用)
autorunsc64.exe -accepteula -a * -m -s -v -c |
Select-String -Pattern '"Not Verified"'

4.5 常见恶意持久化条目示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 示例一:Run 键恶意条目
Location: HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
Entry: WindowsUpdate
Image: C:\Users\Public\svchost.exe ← 路径异常!svchost 应在 System32

# 示例二:计划任务持久化
Location: Task Scheduler
Entry: \Microsoft\Windows\UpdateCheck
Image: C:\ProgramData\update.exe ← 伪装成更新

# 示例三:服务持久化
Location: HKLM\System\CurrentControlSet\Services
Entry: WinDefService
Image: C:\Windows\Temp\defender.exe ← Temp 目录中的服务

# 示例四:WMI 事件订阅
Location: WMI
Entry: SCM Event Log Consumer
Image: powershell.exe -enc JABXAGM... ← Base64 编码命令

五、TCPView — 实时网络连接监控

5.1 基本功能

TCPView 实时显示系统上所有 TCP 和 UDP 连接,类似增强版 netstat -anob

优势(对比 netstat):

实时刷新(可配置刷新间隔)

显示进程名和 PID

可以直接关闭连接或终止进程

颜色编码显示新建/关闭的连接

地址解析(Resolve Addresses)

5.2 IR 使用要点

颜色含义:

绿色:新建连接

红色:即将关闭的连接

黄色:连接状态变化

IR 检查要点:

查找连接到非标准端口的进程

查找 ESTABLISHED 状态到外部 IP 的连接(潜在 C2)

查找 LISTENING 在高端口的进程(潜在 backdoor)

查找 svchost.exe 的异常连接目标

查找 powershell.exe/cmd.exe 的网络连接(正常情况不应该有)

右键菜单:

Close Connection:断开指定连接(应急时快速阻断 C2)

End Process:终止进程

Process Properties:查看进程详情

Whois:查询 IP 的 WHOIS 信息

5.3 命令行替代 — tcpvcon.exe

1
2
3
4
5
6
7
8
9
10
11
12
13
# TCPView 的命令行版本
tcpvcon.exe -accepteula -a -c > C:\Evidence\tcpview_output.csv

# 参数:
# -a 显示所有连接(含 LISTENING)
# -c CSV 格式输出
# -n 不解析地址(更快)

# 等效 PowerShell 命令
Get-NetTCPConnection | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State, OwningProcess,
@{N='ProcessName';E={(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).Name}} |
Sort-Object State, RemoteAddress |
Format-Table -AutoSize

六、Strings — 字符串提取

6.1 概述

Strings 从二进制文件中提取可打印字符串,是恶意软件快速分析的第一步

可以发现 URL、IP 地址、文件路径、注册表路径、命令、错误信息等

6.2 使用方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 基本用法:提取 ASCII 字符串
strings64.exe -accepteula C:\Evidence\suspicious.exe

# 提取 Unicode(宽字符)字符串
strings64.exe -accepteula -u C:\Evidence\suspicious.exe

# 同时提取 ASCII 和 Unicode
strings64.exe -accepteula -a C:\Evidence\suspicious.exe

# 指定最小字符串长度(默认 3,建议设为 6 减少噪音)
strings64.exe -accepteula -n 6 C:\Evidence\suspicious.exe

# 输出到文件供后续分析
strings64.exe -accepteula -a -n 6 C:\Evidence\suspicious.exe > C:\Evidence\strings_output.txt

# 搜索特定模式(配合 findstr)
strings64.exe -accepteula -a C:\Evidence\suspicious.exe | findstr /i "http https ftp cmd powershell"
strings64.exe -accepteula -a C:\Evidence\suspicious.exe | findstr /i "password admin login key"
strings64.exe -accepteula -a C:\Evidence\suspicious.exe | findstr /r "[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*"

6.3 IR 中关注的字符串模式

模式 示例 意义
URL/IP http://evil.com/beacon, 192.168.1.100 C2 通信地址
文件路径 C:\Windows\Temp\payload.dll 文件投放路径
注册表路径 SOFTWARE\Microsoft\Windows\CurrentVersion\Run 持久化位置
命令 cmd.exe /c, powershell -enc 命令执行
API 函数名 VirtualAlloc, WriteProcessMemory, CreateRemoteThread 进程注入指标
Base64 长段 A-Za-z0-9+/= 编码的 payload/命令
PDB 路径 C:\Users\attacker\Desktop\project\ 开发者信息泄露
Mutex Global\{GUID} 恶意软件标识

6.4 Process Explorer 内置 Strings 功能

在 Process Explorer 中,双击进程 → Strings tab

可以对比 Image(磁盘文件)和 Memory(内存中)的字符串

如果内存中存在磁盘上没有的字符串(如 URL、命令),可能表明进程被注入

这是检测进程注入的快速方法之一


七、Sigcheck — 签名验证与 VirusTotal 提交

7.1 基本用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 验证单个文件的数字签名
sigcheck64.exe -accepteula C:\Windows\System32\svchost.exe

# 输出示例:
# C:\Windows\System32\svchost.exe:
# Verified: Signed
# Signing date: 2:30 AM 10/6/2023
# Publisher: Microsoft Windows
# Company: Microsoft Corporation
# Description: Host Process for Windows Services
# Product: Microsoft Windows Operating System
# File version: 10.0.22621.2428

# 检查目录下所有 EXE 的签名(递归)
sigcheck64.exe -accepteula -e -s C:\Windows\System32\

# 只显示未签名的文件(IR 最常用!)
sigcheck64.exe -accepteula -e -u -s C:\Windows\System32\
# -e: 只检查 EXE/DLL 等可执行文件(通过 PE header 判断,不靠扩展名)
# -u: 只显示未签名或签名验证失败的
# -s: 递归子目录

7.2 VirusTotal 集成

1
2
3
4
5
6
7
8
9
10
11
12
# 提交文件 hash 到 VirusTotal(不上传文件本身)
sigcheck64.exe -accepteula -v C:\Evidence\suspicious.exe
# -v: VT 检查

# 批量提交目录中所有文件
sigcheck64.exe -accepteula -v -e -s C:\Evidence\

# 提交未签名文件到 VT
sigcheck64.exe -accepteula -v -u -e -s C:\ProgramData\

# CSV 输出(便于后续分析)
sigcheck64.exe -accepteula -v -u -e -s -c C:\Windows\System32\ > C:\Evidence\sigcheck_unsigned.csv

7.3 Catalog Signing 检查

Windows 中有两种签名方式:

Embedded Signature:签名嵌入 PE 文件中

Catalog Signature:签名在 .cat 文件中(许多系统文件使用此方式)

Sigcheck 默认会检查两种签名,确保不会误报 Catalog 签名的文件为未签名

1
2
# 显示详细的签名信息(含 catalog)
sigcheck64.exe -accepteula -i C:\Windows\System32\notepad.exe

7.4 IR 实战场景

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 场景一:检查 System32 中的未签名 DLL(可能是 DLL 劫持)
sigcheck64.exe -accepteula -u -e -s C:\Windows\System32\ 2>nul |
Select-String "Unsigned"

# 场景二:扫描用户 profile 中的可执行文件
sigcheck64.exe -accepteula -v -e -s -c C:\Users\ > C:\Evidence\user_executables.csv

# 场景三:检查 ProgramData 中的可疑文件
sigcheck64.exe -accepteula -v -u -e -s C:\ProgramData\

# 场景四:检查服务对应的二进制文件签名
Get-CimInstance Win32_Service | ForEach-Object {
$path = $_.PathName -replace '"','' -replace '\s+-.*$',''
if (Test-Path $path) {
& sigcheck64.exe -accepteula -nobanner $path
}
}

八、Handle — 句柄查询

8.1 基本用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 查找哪个进程打开了特定文件
handle64.exe -accepteula C:\Windows\System32\config\SAM

# 查找进程打开的所有句柄
handle64.exe -accepteula -p <PID>

# 查找特定类型的句柄
handle64.exe -accepteula -a -p <PID> # 所有类型

# 搜索特定名称的句柄(如 Mutex)
handle64.exe -accepteula -a "Global\evil_mutex"

# 关闭特定句柄(谨慎使用!)
handle64.exe -accepteula -c <handle_value> -p <PID>

8.2 IR 场景

场景一:找出锁定日志文件的进程

恶意软件可能锁定事件日志文件防止读取

1
2
handle64.exe -accepteula Security.evtx
handle64.exe -accepteula "winevt\Logs"

场景二:找恶意软件的 Mutex

1
2
3
4
5
# 列出所有 Mutex
handle64.exe -accepteula -a -s | findstr /i "Mutant"

# 搜索已知恶意 Mutex
handle64.exe -accepteula "Global\{specific-guid}"

场景三:检查谁在访问注册表键

1
handle64.exe -accepteula "\REGISTRY\MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"

九、ListDLLs — DLL 分析

9.1 基本用法

1
2
3
4
5
6
7
8
9
10
11
12
# 列出指定进程的所有 DLL
listdlls64.exe -accepteula <PID>
listdlls64.exe -accepteula <process_name>

# 列出所有进程的未签名 DLL(IR 利器!)
listdlls64.exe -accepteula -u

# 输出格式包含:
# - DLL 完整路径
# - 基地址
# - 大小
# - 签名状态

9.2 检测 DLL 劫持/侧加载

1
2
3
4
5
6
7
8
# 查找从非标准路径加载的 DLL
listdlls64.exe -accepteula -u | findstr /v /i "windows system32 syswow64 winsxs"

# 查找从 Temp 目录加载的 DLL
listdlls64.exe -accepteula -u | findstr /i "temp appdata"

# 查找从 ProgramData 加载的未签名 DLL
listdlls64.exe -accepteula -u | findstr /i "programdata"

9.3 与 Process Explorer DLL 视图的区别

ListDLLs 是命令行工具,适合脚本化批量分析

Process Explorer DLL 视图是交互式的,适合单进程深入分析

IR 中两者配合:ListDLLs 批量扫描 → Process Explorer 深入可疑进程


十、PsExec / PsLogList / AccessChk

10.1 PsExec — 远程执行

PsExec 允许在远程计算机上执行命令,IR 中用于远程取证收集

1
2
3
4
5
6
7
8
9
10
11
12
13
# 在远程计算机上执行命令
psexec64.exe \\target_computer -u domain\admin -p password cmd.exe /c "wmic process list full"

# 复制工具到远程并执行
psexec64.exe \\target_computer -u domain\admin -p password -c C:\Tools\autorunsc64.exe -a * -c
# -c: 将本地文件复制到远程后执行

# 以 SYSTEM 权限运行(本机)
psexec64.exe -i -s cmd.exe
# IR 场景:需要 SYSTEM 权限才能访问某些注册表键或文件

# 批量远程收集(多台机器)
psexec64.exe \\@computer_list.txt -u domain\admin -p password cmd.exe /c "autorunsc64.exe -a * -c > C:\Evidence\autoruns_%COMPUTERNAME%.csv"

注意: PsExec 本身也是攻击者常用的横向移动工具,分析时注意区分正常管理员使用和攻击者滥用

10.2 PsLogList — 远程日志收集

1
2
3
4
5
6
7
8
9
# 导出远程计算机的安全日志
psloglist.exe \\target_computer -u domain\admin -p password Security

# 导出最近 24 小时的日志
psloglist.exe \\target_computer -u domain\admin -p password -n 24 Security
# -n: 最近 N 小时

# 导出为 CSV
psloglist.exe \\target_computer -s -c Security > C:\Evidence\security_log.csv

10.3 AccessChk — 权限审计

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 检查服务的权限(是否有弱权限可被利用)
accesschk64.exe -accepteula -uwcqv "Authenticated Users" * -s
# -u: 抑制错误
# -w: 只显示有写权限的
# -c: 服务
# -q: 省略 banner
# -v: 详细

# 检查目录权限
accesschk64.exe -accepteula -uwdqs "Users" C:\
accesschk64.exe -accepteula -uwdqs "Everyone" C:\

# 检查注册表键权限
accesschk64.exe -accepteula -uwks "Users" HKLM\System\CurrentControlSet\Services

# IR 场景:检查是否有可写的服务(权限提升向量)
accesschk64.exe -accepteula -uwcqv "Authenticated Users" * | findstr /i "rw service_all"

十一、完整 IR 工作流示例

11.1 场景:怀疑主机被入侵,使用 Sysinternals 完整排查

Phase 1: 快速评估(5 分钟)

1
2
3
4
5
6
7
8
9
10
11
# Step 1: 启动 Process Explorer,快速扫描进程树
# - 开启 VirusTotal、Verify Signatures
# - 检查紫色(packed)进程
# - 检查异常父子关系
# - 检查未签名进程
procexp64.exe /accepteula

# Step 2: 启动 TCPView,查看当前网络连接
# - 关注 ESTABLISHED 到外部 IP 的连接
# - 关注 cmd.exe/powershell.exe 的网络活动
tcpview64.exe /accepteula

Phase 2: 持久化检查(10 分钟)

1
2
3
4
5
6
7
8
9
10
11
# Step 3: 运行 Autoruns,导出并分析
autorunsc64.exe /accepteula -a * -m -h -s -v -vt -c > C:\Evidence\autoruns_current.csv

# 如果有基线,进行对比
# Compare-Object (Import-Csv baseline.csv) (Import-Csv autoruns_current.csv) -Property "Image Path"

# Step 4: 启动 Autoruns GUI,重点检查:
# - Hide Microsoft Entries 开启
# - 红色/粉色条目(路径无效或签名异常)
# - Temp/AppData/ProgramData 路径中的条目
autoruns64.exe /accepteula

Phase 3: 深入分析可疑进程(15-30 分钟)

1
2
3
4
5
6
7
8
9
10
11
# Step 5: 对可疑进程使用 Strings 分析
strings64.exe -accepteula -a -n 6 "C:\path\to\suspicious.exe" > C:\Evidence\strings_output.txt

# Step 6: 使用 Sigcheck 验证签名并提交 VT
sigcheck64.exe -accepteula -v "C:\path\to\suspicious.exe"

# Step 7: 使用 ListDLLs 检查可疑进程的 DLL
listdlls64.exe -accepteula <PID>

# Step 8: 使用 Handle 检查可疑进程的句柄
handle64.exe -accepteula -p <PID>

Phase 4: 行为监控(按需)

1
2
3
4
# Step 9: 如果需要观察恶意软件行为,启动 Procmon
procmon64.exe /accepteula /backingfile C:\Evidence\procmon.pml
# 设置 Filter: Process Name is <suspicious> Include
# 观察文件、注册表、网络行为

Phase 5: 全面扫描(时间允许时)

1
2
3
4
5
6
7
# Step 10: 批量签名检查(找隐藏的可疑文件)
sigcheck64.exe -accepteula -v -u -e -s -c C:\Windows\System32\ > C:\Evidence\unsigned_system32.csv
sigcheck64.exe -accepteula -v -u -e -s -c C:\Users\ > C:\Evidence\unsigned_users.csv
sigcheck64.exe -accepteula -v -u -e -s -c C:\ProgramData\ > C:\Evidence\unsigned_programdata.csv

# Step 11: 全面未签名 DLL 检查
listdlls64.exe -accepteula -u > C:\Evidence\unsigned_dlls.txt

11.2 自动化收集脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# Sysinternals IR 自动化收集脚本
param(
[string]$ToolsPath = "C:\Tools\Sysinternals",
[string]$OutputPath = "C:\Evidence\$(Get-Date -Format 'yyyyMMdd_HHmmss')"
)

New-Item -ItemType Directory -Path $OutputPath -Force | Out-Null

Write-Host "[*] Starting Sysinternals IR Collection..." -ForegroundColor Cyan

# 1. Autoruns 导出
Write-Host "[+] Collecting Autoruns data..."
& "$ToolsPath\autorunsc64.exe" /accepteula -a * -m -h -s -v -c > "$OutputPath\autoruns.csv"

# 2. 网络连接快照
Write-Host "[+] Collecting network connections..."
& "$ToolsPath\tcpvcon64.exe" -accepteula -a -c > "$OutputPath\tcpview.csv"

# 3. 未签名 DLL
Write-Host "[+] Scanning for unsigned DLLs..."
& "$ToolsPath\listdlls64.exe" -accepteula -u > "$OutputPath\unsigned_dlls.txt"

# 4. 未签名 EXE in System32
Write-Host "[+] Scanning for unsigned executables in System32..."
& "$ToolsPath\sigcheck64.exe" -accepteula -u -e -s -c C:\Windows\System32\ > "$OutputPath\unsigned_system32.csv"

# 5. 用户目录可执行文件
Write-Host "[+] Scanning user directories..."
& "$ToolsPath\sigcheck64.exe" -accepteula -u -e -s -c C:\Users\ > "$OutputPath\unsigned_users.csv"

# 6. Handles 快照
Write-Host "[+] Collecting handle information..."
& "$ToolsPath\handle64.exe" -accepteula -a > "$OutputPath\handles.txt"

Write-Host "[*] Collection complete. Output: $OutputPath" -ForegroundColor Green
Get-ChildItem $OutputPath | Format-Table Name, Length -AutoSize

十二、对比总结与最佳实践

12.1 Sysinternals 工具选择指南

需求 工具 命令行版本
看进程树和 DLL Process Explorer -
看进程行为 Process Monitor procmon CLI export
看持久化 Autoruns autorunsc
看网络连接 TCPView tcpvcon
验证签名 Sigcheck sigcheck
提取字符串 Strings strings
查句柄 Handle handle
查 DLL ListDLLs listdlls
远程执行 PsExec psexec
权限审计 AccessChk accesschk

12.2 最佳实践

U 盘准备: 将 Sysinternals Suite 预装到 IR U 盘,并预先 /accepteula

基线先行: 在干净系统上预先导出 Autoruns 基线,IR 时对比

管理员权限: 所有工具都应以管理员权限运行,否则信息不完整

先观察后行动: 先用 Process Explorer + TCPView 建立态势感知,再做深入分析

保存证据: 所有输出都应重定向到文件,作为取证记录

不要打草惊蛇: 某些高级恶意软件会检测 Sysinternals 工具并隐藏自身

可以重命名工具文件名绕过简单检测

结合使用: 没有单一工具能发现所有问题,多工具交叉验证

12.3 与 Linux 工具的对应关系

Sysinternals 工具 Linux 对应
Process Explorer htop / ps auxf + lsof
Process Monitor strace / sysdig / bpftrace
Autoruns systemctl list-unit-files + crontab -l + /etc/init.d/ 手动检查
TCPView ss -tlnp / netstat -tlnp
Strings strings (GNU binutils)
Sigcheck rpm -V / dpkg --verify / sha256sum
Handle lsof
ListDLLs ldd / /proc/<pid>/maps
PsExec ssh
AccessChk find / -perm / getfacl

参考链接

Sysinternals 官方文档

Mark Russinovich - Malware Hunting with Sysinternals Tools (视频)

SANS - Sysinternals Poster

关联页面:06-进程与网络分析 | 09-注册表持久化审计 | 32-Sysmon部署与规则编写


上一章 目录 下一章
30-持久化综合Checklist Windows应急响应 32-Sysmon部署与规则编写