Sysmon(System Monitor)是由微软提供的一款轻量级Windows系统监控工具。我们在应急响应、威胁情报、恶意代码分析等多个安全领域都能看到它的身影。通过Sysmon提供的详细事件日志,可以帮助系统管理员和相关安全专业人员更好的检测和响应潜在的安全威胁。
通过监控系统活动Sysmon可以为用户提供详细的日志信息,并以事件的方式将它们完整记录到系统日志中。这些信息对于分析和调查安全事件可以起到非常重要的作用。以下是Sysmon支持的事件类型:
Event ID 1: Process creation Event ID 2: A process changed a file creation time Event ID 3: Network connection Event ID 4: Sysmon service state changed Event ID 5: Process terminated Event ID 6: Driver loaded Event ID 7: Image loaded Event ID 8: CreateRemoteThread Event ID 9: RawAccessRead Event ID 10: ProcessAccess Event ID 11: FileCreate Event ID 12: RegistryEvent (Object create and delete) Event ID 13: RegistryEvent (Value Set) Event ID 14: RegistryEvent (Key and Value Rename) Event ID 15: FileCreateStreamHash Event ID 16: ServiceConfigurationChange Event ID 17: PipeEvent (Pipe Created) Event ID 18: PipeEvent (Pipe Connected) Event ID 19: WmiEvent (WmiEventFilter activity detected) Event ID 20: WmiEvent (WmiEventConsumer activity detected) Event ID 21: WmiEvent (WmiEventConsumerToFilter activity detected) Event ID 22: DNSEvent (DNS query) Event ID 23: FileDelete (File Delete archived) Event ID 24: ClipboardChange (New content in the clipboard) Event ID 25: ProcessTampering (Process image change) Event ID 26: FileDeleteDetected (File Delete logged) Event ID 27: FileBlockExecutable Event ID 28: FileBlockShredding Event ID 29: FileExecutableDetected Event ID 255: Error |
微软分别提供了Sysmon的Windows与Linux版本。用户可以根据系统版本自行到微软官网下载。下载后,使用简单的命令行参数即可在系统上安装或卸载Sysmon。
命令 |
描述 |
-i |
以系统服务和驱动的方式安装Sysmon |
-c |
查看当前配置内容,或指定新的配置内容 |
-m |
事件清单 |
-s |
输出完整配置内容 |
-u |
卸载系统服务和驱动程序,带上“force”参数可以强制卸载 |
安装成功以后,Sysmon会以系统服务和驱动的方式安装在系统上。每次系统启动时它都会第一时间对系统重要活动进行监控,通过该特性我们可以对一些较隐蔽的后门木马等恶意活动进行有效监测。
Sysmon强大的功能实现,离不开可灵活扩展的配置文件。用户可以通过部署自定义的xml配置文件,让事件的捕获和过滤变得更加容易。以下是一个基础配置文件示例:
<Sysmon schemaversion="4.90"> <HashAlgorithms>*</HashAlgorithms> <EventFiltering> <NetworkConnect onmatch="include"> <DestinationPort>443</DestinationPort> <DestinationPort>80</DestinationPort> </NetworkConnect> <NetworkConnect onmatch="exclude"> <Image condition="end with">iexplore.exe</Image> </NetworkConnect> </EventFiltering> </Sysmon> |
以上配置文件主要由两个部分组成,在文件开头指定了配置文件的架构版本(注意:不是软件版本),接下来是第一个重要组成部分“配置条目”,配置条目主要用于指定Sysmon软件的行为,例如:指定Hash算法、域名查询、是否保留被删除的文件等。第二个重要组成部分是“过滤条目”,过滤条目包含在“EventFiltering”标签里。当捕获的事件太多时,可以通过该条目进行过滤。如果想要详细了解配置条目和过滤条目选项,可以执行“Sysmon -s”和“Sysmon -? config”命令。
回到示例文件,如果捕获的事件与配置文件中的过滤条目相匹配,Sysmon首先会检查对应条目的“onmatch”属性,判断属性值是“include”还是“exclude”,然后才会将事件记录到日志中。每个过滤条目都可以包含一个或多个规则。同一条目下的多个同名规则默认使用“OR”运算,不同名称的规则之间则是“AND”运算。
每个规则还可以单独使用不同的条件属性来匹配规则内容。当前支持的条件属性如下所示:
条件 |
描述 |
is |
Default, values are equals |
is any |
The field is one of the ; delimited values |
is not |
Values are different |
contains |
The field contains this value |
contains any |
The field contains any of the ; delimited values |
contains all |
The field contains all of the ; delimited values |
excludes |
The field does not contain this value |
excludes any |
The field does not contain one or more of the ; delimited values |
excludes all |
The field does not contain any of the ; delimited values |
begin with |
The field begins with this value |
end with |
The field ends with this value |
not begin with |
The field does not begin with this value |
not end with |
The field does not end with this value |
less than |
Lexicographical comparison is less than zero |
more than |
Lexicographical comparison is more than zero |
image |
Match an image path (full path or only image name). For example: lsass.exe will match c:\windows\system32\lsass.exe |
下面通过在测试环境中模拟执行Cobalt Strike载荷来演示,如何使用Sysmon发现系统中存在的异常行为。其中会涉及一些Sysmon比较好用的监控事件。例如:进程创建、管道连接、DNS请求、网络连接和保留已删除文件等。这些事件通常与恶意软件常用的功能模块相对应。
首先通过Cobalt Strike生成Windows下的Stager载荷,然后开启Sysmon监控模式并执行。
当Sysmon捕获到相关事件后,会将日志信息记录到事件查看器的“Microsoft-Windows-Sysmon/Operational”路径下。在事件查看器中可以看到所有捕获的事件,你也可以通过事件ID过滤自己感兴趣的事件。
通过进程事件(ID=1)我们可以查看监控期间启动的所有进程,包括进程路径、启动参数、父进程、文件Hash等信息,很多时候我们可以通过父进程逐级找到最初执行的恶意程序,并根据命令行参数找到恶意软件执行的命令。
通过管道事件(ID=17,18),我们可以查看所有创建和连接的Pipe管道。CS载荷在执行初期会通过指定格式的管道名称传递加密的Shellcode指令。在分析检测阶段我们可以通过该事件快速定位恶意进程。
通过DNS事件(ID=22),可以查看主机中所有域名解析操作,该事件同样包含执行请求操作的进程等信息。并且无论查询结果是成功还是失败、或者是否查询缓存都会记录相应事件。
通过网络事件(ID=3),可以完整查看网络通讯进程、协议、源和目的IP,端口等信息。
最后我们通过beacon命令远程删除目标设备上的某个文件,来演示“保留已删除文件”的功能(ID=23)。
在目标设备上释放和删除某些配置文件或后门是恶意软件常用的执行流程,通过该事件Sysmon除了会记录删除日志外还会将被删除的恶意文件备份到指定路径下(默认为根目录下的Sysmon文件夹)。我们可以通过微软的另一款工具PsExec,从备份文件夹中恢复被删除的文件。
除了以上我们演示的事件,Sysmon还有其它非常好用的功能。例如远程线程注入、傀儡进程监控、修改文件时间监控等。感兴趣的师傅可以查看帮助文档自行尝试。
文章最后,再给大家推荐几款非常好用的Sysmon辅助工具。在Github上有个“SysmonTools”项目:
其中“SysmonShell”可以帮助我们更加方便快捷的编写配置文件内容。如果你想快速编写简单的测试用例,推荐使用。并且在“Templates”菜单中还内置了丰富的规则模板供使用:
如需一次分析十万、几十万的日志数据,可以使用“SysmonView”进行分析。它以界面化的方式将海量事件细分为不同的分组,并通过进程GUID进行关联。通过图形化界面可以非常方便的查看某个事件,或者与指定进程关联的所有事件。
如本篇文章所言,Sysmon对于系统安全领域是一个非常重要的工具。它不仅可以帮助管理员及时发现潜在的安全威胁,还能在恶意软件分析、应急溯源等领域起到意想不到的效果。HW将近,蓝队的朋友也可借助Sysmon在发生安全事件时,分析红队攻击路径,识别受影响的系统和资产,及时采取响应措施。