Win32_Process 进程画像
PowerShell 下查看进程有两条路:Get-Process 输出简洁但不含命令行;Get-CimInstance 查 Win32_Process 能一次拿到进程号、父进程号、可执行路径、完整命令行、启动时间与会话号,是排查时信息量最大的一档。应急现场尤其看重命令行,因为下载地址、编码脚本、目标路径这些关键内容都只出现在参数里,只看进程名等于什么都没看到。
基本信息
| 核心类 | Win32_Process(Get-CimInstance 查询) |
|---|---|
| 关键字段 | ProcessId、ParentProcessId、Name、ExecutablePath、CommandLine、CreationDate |
| 排序方式 | 按 CreationDate 降序,最快看到最近启动的进程 |
| 补充字段 | SessionId 判断是否为远程桌面会话,GetOwner 方法取运行账号 |
| 签名核对 | Get-AuthenticodeSignature 检查可执行文件签名状态 |
| 权限要求 | 读取全量命令行需要管理员权限 |
典型使用场景
- 按启动时间找入侵时间窗内新起的进程
- 还原可疑进程的完整命令行,提取下载地址与参数
- 核对进程的父进程关系,判断是人工执行还是服务拉起
- 确认可执行文件路径与签名状态,识别放在临时目录的无签名程序
- 与网络连接结果结合,把连接归属到具体进程
查进程与父子关系
查进程与父子关系
Get-CimInstance Win32_Process | Select-Object ProcessId,ParentProcessId,Name,ExecutablePath,CreationDate | Sort-Object CreationDate -Descending | Select-Object -First 25
Get-CimInstance Win32_Process -Filter "Name='powershell.exe'" | Select-Object ProcessId,CommandLine
Get-CimInstance Win32_Process | Where-Object { $_.ExecutablePath -like '*\\Temp\\*' -or $_.ExecutablePath -like '*\\AppData\\*' } | Select-Object ProcessId,Name,ExecutablePath
Get-CimInstance Win32_Process -Filter 'ProcessId=1234' | Invoke-CimMethod -MethodName GetOwner | Select-Object User,Domain
Get-AuthenticodeSignature 'C:\路径\程序.exe' | Select-Object Status,SignerCertificate关键属性读法
| 属性 | 含义 | 异常信号 |
|---|---|---|
| ProcessId | 进程号 | 短时间内在同一名称下反复变化,说明有守护重启 |
| ParentProcessId | 父进程号 | 父进程是 Office、浏览器或 wscript,属于钓鱼典型链条 |
| Name | 进程名 | 仿冒系统进程名但路径不在 System32 |
| ExecutablePath | 可执行文件路径 | 位于 Temp、AppData、ProgramData 下的随机目录 |
| CommandLine | 完整命令行 | 含下载地址、编码内容、隐藏窗口参数 |
| CreationDate | 启动时间 | 与告警、文件落地时间吻合 |
| SessionId | 会话号 | 在无人使用的服务器上出现非零会话值得追查 |
父进程号不等于父进程还在:父进程早已退出时,该 PPID 可能已被系统复用给其他进程。判断父子关系时要看两者的创建时间是否可比,否则容易把无关进程串成一条链。
命令行里的编码内容不要直接执行去复现:把它解码成文本查看即可,直接运行可能触发二次载荷。解码后看到的地址与路径要作为 IOC 留存,并横向检索其他主机。
命令行与启动时间是易失信息:进程一退出就再也取不到。所以采集顺序上,先导出全量 Win32_Process(含 CommandLine)到证据文件,再谈终止进程。