如何配置Sysmon捕获Windows系统中CMD内置命令的执行?
检测CMD内置命令的Sysmon配置方案
CMD内置命令(如dir、cd、set等)运行时不会创建新进程,因此无法触发Sysmon的Event ID 1(进程创建)日志。需根据命令的执行场景,通过以下两种方式配置Sysmon实现检测:
一、捕获非交互执行的内置命令(如cmd.exe /c dir)
这类场景中,cmd.exe会以新进程启动并携带内置命令参数,可通过过滤cmd.exe的命令行参数触发Event ID 1日志:
- 编辑Sysmon配置文件(例如
sysmonconfig.xml),添加以下规则组:
<RuleGroup name="Capture CMD Non-Interactive Built-ins" groupRelation="or"> <ProcessCreate onmatch="include"> <Image condition="is">C:\Windows\System32\cmd.exe</Image> <CommandLine condition="contains">dir</CommandLine> <CommandLine condition="contains">cd</CommandLine> <CommandLine condition="contains">md</CommandLine> <CommandLine condition="contains">rd</CommandLine> <CommandLine condition="contains">copy</CommandLine> <CommandLine condition="contains">del</CommandLine> <CommandLine condition="contains">set</CommandLine> <!-- 按需添加其他内置命令关键词 --> </ProcessCreate> </RuleGroup>
- 重新加载配置:
sysmon -c sysmonconfig.xml
执行cmd /c dir这类命令时,Sysmon会生成Event ID 1日志,其中CommandLine字段会包含对应的内置命令。
二、捕获交互模式下的内置命令(如CMD窗口中输入dir)
交互模式下的内置命令在现有cmd.exe进程内执行,无新进程生成,无法通过Event ID 1直接捕获。可通过监控cmd.exe的行为特征间接检测:
方法1:监控文件系统访问行为
内置命令如dir、copy会触发文件系统访问,可通过Sysmon的Event ID 11(文件创建)或Event ID 10(进程访问)捕获:
在配置文件中添加:
<RuleGroup name="CMD File System Activity for Built-ins" groupRelation="or"> <FileCreate onmatch="include"> <Image condition="is">C:\Windows\System32\cmd.exe</Image> <TargetFilename condition="contains">C:\Users\</TargetFilename> <!-- 可添加敏感目录路径缩小监控范围 --> </FileCreate> <ProcessAccess onmatch="include"> <SourceImage condition="is">C:\Windows\System32\cmd.exe</Image> <GrantedAccess condition="contains">0x1000</GrantedAccess> <!-- 匹配读取权限 --> </ProcessAccess> </RuleGroup>
该方法可间接推断cmd.exe执行了文件操作类内置命令,但无法直接获取具体命令内容。
方法2:结合Windows命令行审计(补充方案)
若需精准捕获交互模式下的命令内容,需启用Windows的命令提示符日志(通过组策略或注册表配置),再通过Sysmon监控该日志的生成事件。但此方案需依赖Windows原生审计功能,并非Sysmon直接实现。
注意事项
- 命令行关键词过滤可能存在误报,需结合
Image为cmd.exe的条件缩小范围。 - 交互模式下的内置命令无法通过Sysmon直接捕获具体命令内容,仅能通过行为特征间接检测,如需精准审计建议搭配Windows原生的命令行审计功能。
内容的提问来源于stack exchange,提问作者explorer
相关产品推荐
相关产品推荐

