Sysmon介绍
Sysmon是微软的一款免费的轻量级系统监控工具,最开始是由Sysinternals开发的,后来Sysinternals被微软收购,现在属于Sysinternals系列工具(带有微软代码签名)。它通过系统服务和驱动程序实现记录进程创建,网络连接以及文件创建时间更改的详细信息,并把相关的信息写入并展示在windows的日志事件里。
Sysmon安装后分为用户态系统服务,驱动两部分,用户态通过ETW(Event Tracing for Windows)实现对网络数据记录,通过EventLog对驱动返回的数据进行解析,驱动部分则通过进、线程,模块的回调函数收集进程相关的信息,通过Minifilter文件过滤驱动和注册表回调函数记录访问文件、奇热注册表的数据。
未知防,焉知攻
从功能上来讲,Sysmon是一款优秀的HIDS、EDR的主机入侵检测引擎,其依托于Windows内核层进、线程,模块,注册表回调,及文件过滤驱动针对相应的行为进行实时的增、删、改信息收集并通过ETW存储并展示于Windows日志。
稳定性方面超过大部分自研的驱动,功能完善,对性能影响较小,虽然功能强大但却有很多监控盲区。若加以自研Agent与其配之,便可弥补自身监控盲区及非查询功能等其他需求。
强大的功能和微软官方的稳定性加成,让很多人对这款免费的入侵检测引擎钟爱有加,但免费并不意味着开源,很多人在安装Sysmon的过程中直接使用默认配置,不更改文件名、服务名、驱动名,没有关注过安装后会留下哪些痕迹,这样则会让红队对Sysmon服务及日志产生影响。
如果不更改默认配置而直接默认安装,就无法避免红队侦测Sysmon存在而针对其进行规则绕过及信息输出阻断,我确信当红队如果知晓目标机安装Sysmon,则会对红队的TTP产生影响。
(安装UI产生的信息)
红队视角:
ATT&CK Defense Evasion(TA0005)
检测Sysmon是否存在:
1. 进程名 Sysmon.exe
(Sysmon进程名)
2. 服务名 Sysmon
(服务名称及服务描述图)
3. 驱动名 Sysmondrv
(文件过滤驱动名称及属性)
(注册表中对应Sysmon驱动键及其子键)
4. 驱动所在目录 C:\Windows\
(驱动所在目录中Sysmon详情)
5. 服务描述 System Monitor service
(Get-CimInstancewin32_service -Filter "Description = 'System Monitor service'" 或者 Get-Service | where-object {$_.DisplayName -like "*sysm*"})
(图同2.服务名)
6. 注册表
(HKCU\Software\Sysinternals)
(HKLM\SYSTEM\CurrentControlSet\Control\WMI\Autologger\EventLog-Microsoft-Windows-Sysmon-Operational\{5770385f-c22a-43e0-bf4c-06f5698ffbd9})
(HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\Microsoft-Windows-Sysmon/Operational)
(HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{5770385f-c22a-43e0-bf4c-06f5698ffbd9})
(HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{5770385f-c22a-43e0-bf4c-06f5698ffbd9}\ChannelReferences\0)
7. GUID 5770385f-c22a-43e0-bf4c-06f5698ffbd9
(图同6注册表)
8. 日志名 Microsoft-Windows-Sysmon
(注册的Windows日志事件类名)
9. Atitude值
SysmonDrv的Altitude高度385201
PROCMON24的Altitude高度385200
方式一:fltMC查看
(图同3驱动名)
方式二:注册表查找
(注册表中查找Altitude)
10. 日志产生关键字 日志名及日志内容特征
(findstr /si'
11. 在%SystemRoot%目录下查找Sysmon程序特征字符
绕过Sysmon:
1. 通过Powershell(Posh-Sysmon)获取Sysmon注册表中的Rules值并解析为规则,寻找监控盲区进行绕过。
2. 通过APC实现Dll注入,可绕过 Sysmon对CreateRemoteThread行为监控,进而执行ShellCode
阻断Sysmon:
1. 管理员权限CMD执行fltMC.exe upload SysmonDrv直接卸载。
(卸载SysmonDrv驱动后会导致SIEM产生服务变更告警)
优劣短评:简单粗暴,且重合Atomic APT组织的TTP,使用该战术动静过大,会在Sysmon日志项中产生服务变更告警。
2. 删除Sysmon注册表项中的规则项,Sysmon在发现注册表被更改后,它将自动重新加载配置。由于此时没有任何安全检测规则存在,它将暂时失去防护能力
优劣短评:简单粗暴,但动静过大,会在Sysmon日志项中产生服务变更告警。
3.SC stop SysmonDrv停止驱动(也通过Windows SCM库实现)。
优劣短评:简单粗暴,但动静过大,会在Sysmon日志项中产生服务变更告警。
4.结束Sysmon日志句柄的对应进程可间接停止Windows EventLog服务
(通过句柄查找Sysmon对应进程)
优劣短评:简单粗暴, Sysmon日志不会产生任何告警,但Windows系统日志会产生一条错误日志,相对1.2.3方式隐蔽。
5. 使用Mimikatz中Event::Drop使日志服务暂停,对wevtsvc.dll链接库劫持,使所有日志失效从而使Sysmon日志无法打印。
(使用Mimikatz暂停日志打印)
优劣短评:不会产生任意日志,但Windows不再产生任何日志,可能会触发SIEM告警。在Windows日志服务重启后(重启主机后),在系统日志产生大量EventID:7036日志。
红队总结:以上绕过及阻断方式可组合使用以达到让Sysmon变成哑巴的效果。在红队发现Windows有安装Sysmon后,通过对现有规则及对蓝队环境分析,结合具体情境使用组合技术,可轻松突破Sysmon日志记录。红队是否能检测到Sysmon对红蓝双方都有不可避免地影响,可对红队的TTP造成直接影响,对蓝队能否顺利有效检测到入侵行为也至关重要。综上,隐藏Sysmon是有一定的必要性且对红蓝双方意义重大。
未知攻,焉知防
蓝队视角:
隐藏Sysmon的安装及使用痕迹
1. 进程名更改:
将Sysmon.exe安装程序重命名即可实现进程进程名更改。
2. 服务名更改:
方式同1,进程名与服务名一致。
3. 驱动名更改:
通过Sysmon自带参数d更改
(通过参数定义驱动名)
4. 驱动所在目录:
通过修改Sysmon释放的资源文件修改路径。
(临时释放的资源文件MANXXXX.tmp)
5. 服务描述:
可通过Windows API、注册表、Windows服务管理器直接修改。
(服务描述修改)
6. 注册表:
(HKCU\Software\Sysinternals可在安装结束后删除相关项)
(HKLM\SYSTEM\CurrentControlSet\Control\WMI\Autologger\EventLog-Microsoft-Windows-Sysmon-Operational\{5770385f-c22a-43e0-bf4c-06f5698ffbd9}可通过修改Sysmon.exe文件的方式修改Guid)
(HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\Microsoft-Windows-Sysmon/Operational修改Sysmon关键字即可)
(HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{5770385f-c22a-43e0-bf4c-06f5698ffbd9}方法与修改Guid一致)
(HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{5770385f-c22a-43e0-bf4c-06f5698ffbd9}\ChannelReferences\0方法与修改Guid一致)
7. Guid:
方法同上
8. 日志名:
通过修改Sysmon.exe程序内关键字即可
(修改日志名)
9. Atitude值:
(伪装MSDN中已注册的Atitude注册表及驱动名称)
(通过安装前修改Sysmon文件或者安装后修改重启驱动对应注册表)
10.日志关键字及日志内容关键字:
(通过修改Sysmon释放的MANXXX.TMP Manifest 文件替换内容关键字)
(修改后的日志内容,修改Driver->DDiver)
针对Sysmon绕过及阻断的防护:
SIEM策略:
1. 事件产生基线,单位时间内若无日志产生则产生告警。
2. 基于机器学习的事件动态频次检测,根据一个周期生成的事件数量建立基线检查,可通过Splunk等SIEM平台的机器学习工具库实现。
日志审计:
1. 非Sysmon程序对Rule键的读取审计。
2. 对Sysmon服务变更信息及系统事件错误(EventID:7036)等进行审计。
3. 对fltMC的unload行为进行审计。
4. 针对任何形式的Mimikatz进行行为检测并告警,针对不同环境制定Windows主机Debug权限基线并行为审计(EventID:4672)。
GPO:
定期强制更新对应策略
5. 其他