powershell可实现进程行为监控与自动终止,关键在于实时扫描、多维可信验证(签名/路径/父进程/模块)、安全终止(本地stop-process或远程wmi)及闭环日志记录,并通过计划任务无人值守运行。
powershell 能直接监控进程行为并自动终止可疑实例,关键在于结合实时采集、多维特征判断和安全执行机制,而不是简单按名称杀进程。
实时进程扫描与资源异常识别
持续获取高资源占用进程是最基础的防线。使用 Get-Process 配合筛选条件,可快速定位异常:
- CPU 占用超阈值(如连续两次 >85%):
Get-Process | Where-Object { $_.CPU -gt 85 } - 内存增长异常(对比前一次采样):记录 PrivateMemorySize64 和 WorkingSet64,计算 2 分钟内增幅超过 300MB 的进程
- 无响应且句柄数激增(>5000):
Where-Object { $_.Responding -eq $false -and $_.HandleCount -gt 5000 }
进程可信度验证(防误杀核心)
仅看资源容易误伤合法程序,必须叠加签名、路径、父进程等维度交叉验证:
- 检查数字签名有效性:
(Get-AuthenticodeSignature $process.Path).Status -eq 'Valid' - 验证映像路径是否在可信目录(如
C:\Program Files\、C:\Windows\System32\),排除%TEMP%、AppData\Local\等高危路径 - 确认父进程是否为系统关键进程(如
svchost.exe、services.exe),避免子进程被恶意注入后伪装 - 比对模块加载列表,警惕非系统 DLL(如陌生 .dll 名称、无版本信息、无公司签名)
安全终止与闭环日志记录
终止动作需留痕、可追溯,并规避权限或远程限制问题:
- 本地终止优先用 Stop-Process -Id $pid -Force,比
Kill()更稳定 - 若需远程操作,必须改用 WMI:
Get-WmiObject Win32_Process -ComputerName $target -Filter "Name='malware.exe'" | ForEach-Object { $_.Terminate() } - 每次终止前写入结构化日志(CSV 或 XML),包含时间、PID、进程名、路径、CPU/内存快照、验证失败项
- 可选联动:终止后自动导出该进程的完整模块列表和网络连接(
netstat -ano | findstr $pid),供进一步分析
自动化部署建议
把检测逻辑封装为可调度任务,才能真正实现无人值守防御:
- 用 Register-ScheduledJob 设置每 2 分钟运行一次监控脚本,避免 while 循环阻塞终端
- 脚本开头加入执行策略绕过检查(仅限受信环境):
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force - 告警不只发邮件,也可写入 Windows 事件日志(
Write-EventLog),便于与 SIEM 工具对接 - 首次部署前,在测试机上启用 -WhatIf 参数模拟终止动作,确认匹配逻辑准确











