第4章:进程与线程监控:进程创建与终止、线程注入检测、父子进程关系

4.1 进程创建:EDR的第一道防线

进程创建,说白了就是操作系统里“生孩子”的过程。每次你双击一个exe,或者命令行里敲个notepad,背后都是CreateProcess这个API在干活。EDR监控进程创建,其实就是在监控这个API的调用。

我个人习惯把进程创建分成三个阶段:

  • 触发阶段:用户或程序发起创建请求
  • 执行阶段:操作系统分配PID、加载镜像、初始化线程
  • 回调阶段:EDR的驱动层捕获到创建事件,上报给分析引擎

嗯,这里要注意:EDR不是在进程创建完才去查,而是在创建过程中就截获了。为什么?因为一旦进程跑起来,恶意代码可能已经执行了。我在项目中遇到过,有些勒索软件在创建后0.1秒就开始加密文件,等你事后分析,黄花菜都凉了。

核心监控点

  • 进程路径(是不是从临时目录启动的?)
  • 命令行参数(有没有可疑的base64字符串?)
  • 父进程是谁(word.exe启动powershell?这不对劲)
  • 创建时间(半夜三点创建进程?值得怀疑)

4.2 进程终止:不只是“关掉”那么简单

进程终止看起来简单——点个叉就完了。但在安全视角下,终止行为往往藏着猫腻。

你想想看,正常程序退出会走ExitProcess,清理资源、通知父进程。但恶意软件呢?它可能直接调用TerminateProcess强行杀掉自己,或者被EDR干掉后留下一堆内存残骸。

我曾经处理过一个案例:攻击者用taskkill /f /im svchost.exe试图干掉安全进程。结果呢?EDR捕获到了这个异常终止请求,发现目标进程根本不是svchost(真正的svchost有数字签名),而是一个伪装成系统进程的恶意样本。嗯,这就是监控终止行为的意义。

避坑指南:我曾经以为进程终止后就没啥可查了。后来发现,有些恶意软件会在终止前把敏感数据写入注册表或文件。所以,EDR不仅要监控“谁杀了谁”,还要关联终止前后的文件、注册表操作。

4.3 线程注入检测:藏在合法进程里的“幽灵”

线程注入,是攻击者最爱的技术之一。说白了,就是把自己的代码塞进一个合法进程里执行。你想想看,如果恶意代码跑在explorer.exesvchost.exe里,安全软件敢随便杀吗?杀了系统就崩了。

常见的注入手法有这几种:

注入手法 原理 EDR检测方式
DLL注入 CreateRemoteThread加载恶意DLL 监控跨进程的CreateRemoteThread调用
APC注入 把恶意代码塞进线程的APC队列 检测异常的QueueUserAPC调用
进程镂空 把合法进程的内存替换成恶意代码 监控NtUnmapViewOfSectionWriteProcessMemory
反射式DLL注入 不依赖LoadLibrary,自己加载DLL 检测内存中异常的PE头

我个人觉得,最难检测的是APC注入。为什么?因为APC是操作系统正常机制,很多合法程序也会用。我曾经在攻防演练中,攻击者就是用APC注入绕过了某款EDR,直到我们手动分析内存转储才抓到。

注意:不是所有跨进程操作都是恶意的。比如调试器、输入法、杀毒软件本身也会用CreateRemoteThread。EDR需要做白名单和基线学习,否则误报能把你淹死。

4.4 父子进程关系:谁生了谁,很重要

父子进程关系,是EDR分析中最基础也最有效的特征。你想想看,一个正常的word.exe,它的子进程应该是谁?可能是eqnedt32.exe(公式编辑器),但绝不应该是powershell.execmd.exe

我整理了一个常见的“可疑父子关系”清单:

  • Office进程 → PowerShell:大概率是宏病毒
  • 浏览器 → cmd.exe:可能是钓鱼下载
  • PDF阅读器 → 脚本解释器:可能是漏洞利用
  • 系统服务 → 网络连接工具:可能是后门

嗯,这里有个坑:攻击者会通过“进程链混淆”来绕过。比如,先用word启动一个合法的regsvr32.exe,再用regsvr32启动powershell。这样父子关系就变成了word→regsvr32→powershell,看起来没那么可疑。

我的经验:不要只看直接父子关系,要看整个进程链。EDR应该能回溯到最顶层的父进程。我曾经追过一个APT攻击,从powershell一路回溯到钓鱼邮件里的word文档,靠的就是完整的进程树。

4.5 知识体系总览

下面这张图,是我自己梳理的进程与线程监控知识体系。你可以把它当成一张地图,随时回来对照。

进程与线程监控知识体系 进程创建监控 • CreateProcess API拦截 • 命令行参数分析 • 镜像路径校验 • 数字签名验证 • 创建时间异常检测 进程终止监控 • ExitProcess正常退出 • TerminateProcess强制终止 • 异常终止行为检测 • 终止前文件/注册表操作 • 进程残留清理验证 线程注入检测 • DLL注入检测 • APC注入检测 • 进程镂空检测 • 反射式DLL注入检测 • 内存PE头异常扫描 父子进程关系 • 直接父子关系分析 • 进程链回溯 • 可疑组合检测 • 进程链混淆识别 • 顶层父进程溯源 核心目标:构建完整的进程行为画像,识别异常活动

4.6 实战中的避坑指南

最后,分享几个我踩过的坑:

  • 别信进程名svchost.exe不一定是系统进程,notepad.exe也可能是伪装的。一定要校验数字签名和路径。
  • 注意进程链深度:有些攻击者会通过多层跳转来隐藏真实意图。我建议EDR至少保留5层父子关系。
  • 线程注入不只看API:有些高级注入手法不用CreateRemoteThread,而是用SetThreadContextRtlCreateUserThread。监控面要广。
  • 误报是常态:杀毒软件、调试器、系统更新都会产生大量跨进程操作。一定要做好白名单和基线学习。

一句话总结:进程与线程监控,说白了就是回答三个问题——谁生了谁?谁杀了谁?谁在谁的肚子里搞事情?把这三个问题搞清楚了,大部分恶意行为都藏不住。

专注资料整理