v10.4:对Sysmon(安全事件监视服务)的主要更新,为规则组添加了嵌套规则支持,并添加“contains any”和“contains all”规则条件,以进行更灵活的过滤以及修复了几个错误。
v10.41:修复10.4的语法配置问题。
v10.42:解决了Sysmon的大量内存泄露问题,引入“Excludes Any”和“Excludes all”过滤条件,修复一些错误。
v11.0:添加了删除文件监控事件和文件备份功能,帮助威胁检测人员捕获攻击者的工具,减少反向DNS查找噪音,将空字段替换为“-”以解决WEF错误,并修复了导致某些ProcessAccess事件发生的问题。
v11.1:创建文件流哈希事件新增了Contents属性,可以将捕获到的小于1000字节的可替换数据流内容也记录到日志中,这对于调查带有“网络标记”(MOTW)流的下载非常有用,引入了“is-any”过滤条件,并修复了几个错误。
对升级功能进行整理后发现,较重要的更新包括三个方面:一是新增删除文件监控事件、二是新增过滤条件、三是新增Contents属性。
二、帮助信息及文件架构描述2.1 查看帮助信息
使用“sysmon64 -? config”命令查看帮助信息,能找到下面的介绍,看到在事件过滤器中增加了ID为23的File Delete事件:
图:监控的事件范围
同时在帮助文档中包含了一个配置项的说明,列出了可能在规则中使用的一些二级标签,但是经过测试发现并不是所有的配置项都能使用。帮助信息中给出的配置项如下:
图:config 帮助信息中列出的配置条目
实际经过测试发现,可以在配置文件中使用的配置项包括5项,具体在第四部分内容中介绍。2.2 查看文件架构描述
对比v10.0和v11.1的文件架构信息,发现有7处不同:文件架构版本升级到4.32
命令行开关增加“DnsLookup”和“a”两个开关参数,分别用于禁用反向DnsLookup查询和设置文件的存档目录
增加5个规则过滤条件
去掉了文件创建时间更改事件的默认开启状态,版本从4升级为5
去掉了驱动加载事件的默认开启状态,版本从3升级为4
ID为15的创建文件流哈希事件增加Contents属性
增加一类FileDelete事件
三、删除文件监控事件从文件架构中看到,FileDelete事件ID为23,共有7个属性:
UtcTime(UTC 时间)以通用协调时(UTC)形式记录的删除文件的日期和时间,格式为:yyyy-MM-dd HH:mm:ss.000。
ProcessGuid(进程GUID)Sysmon创建的一种GUID值,具备全局唯一性,可用于区分删除文件的进程实例。
ProcessId(进程ID)删除文件的进程PID。
User(用户名)运行该进程的用户账户,将显示为DOMAIN\USER的格式。
Image(查询状态)执行删除文件操作进程的主可执行映像文件的完整路径。
TargetFilename(目标文件名)被删除文件的全路径。
Hashes(哈希)被删除文件的哈希值。
IsExecutable(是否为可执行文件)布尔值,被删除的文件是否为可执行文件。
Archived(存档)布尔值,被删除的文件是否备份到相应目录中。
<Sysmon schemaversion="4.32"> <HashAlgorithms>MD5HashAlgorithms> <EventFiltering> <ProcessCreate onmatch="include"/> <FileCreateTime onmatch="include"/> <NetworkConnect onmatch="include"/> <ProcessTerminate onmatch="include"/> <DriverLoad onmatch="include"/> <ImageLoad onmatch="include"/> <CreateRemoteThread onmatch="include"/> <RawAccessRead onmatch="include"/> <ProcessAccess onmatch="include"/> <FileCreate onmatch="include"/> <RegistryEvent onmatch="include"/> <FileCreateStreamHash onmatch="include"/> <PipeEvent onmatch="include"/> <WmiEvent onmatch="include"/> <DnsQuery onmatch="include"/> <FileDelete onmatch="include"> <IsExecutable condition="is">TrueIsExecutable> FileDelete> EventFiltering>Sysmon>
图:删除文件日志还可以在搜索中使用“IsExecutable: true”来搜索匹配的日志图:使用IsExecutable属性搜索日志
但是测试发现,使用系统自带的文件资源管理器、cmd.exe或者Total commander删除文件时,均不能产生相应的日志。说明该版本Sysmon还存在一些问题。
图:CMD中删除文件
标签名 | 值类型 | 功能 |
ArchiveDirectory | 字符串 | 卷根目录下的目录名,删除时复制的文件将移动到其中。该目录由系统ACL保护。(您可以使用Sysinternals中的PsExec来使用' PsExec -sid cmd'访问该目录)。 默认:Sysmon目录 |
CheckRevocation | 布尔值 | 控制签名撤销检查。 默认:真 |
CopyOnDeletePE | 布尔值 | 保留已删除的可执行映像文件。 默认:假 |
CopyOnDeleteSIDs | 字符串 | 将保留删除文件的帐户sid的逗号分隔列表。 |
CopyOnDeleteExtensions | 字符串 | 在删除时保存的文件扩展名。 |
CopyOnDeleteProcesses | 字符串 | 将保留删除的文件的进程名称。 |
DnsLookup | 布尔值 | 控制是否禁用反向DNS查找。 默认:真 |
DriverName | 字符串 | 为驱动程序映像和服务映像使用指定的名称。 |
HashAlgorithms | 字符串 | 计算哈希的算法。支持MD5、SHA1、SHA256、IMPHASH和* (all)。 默认:空 |
4.2 条目测试
ArchiveDirectory
DnsLookup
DriverName
HashAlgorithms
帮助信息给出的条目 | 错误提示中给出的条目 | 用于命令行 | 用于配置文件 | 作用 |
ArchiveDirectory | ArchiveDirectory | 是 | 指定文件备份目录 | |
CheckRevocation | CheckRevocation | 未知 | ||
CopyOnDeletePE | 是 | 开启/关闭文件备份 | ||
CopyOnDeleteSIDs | 是 | 未知 | ||
CopyOnDeleteExtensions | 是 | 未知 | ||
CopyOnDeleteProcesses | 是 | 未知 | ||
DnsLookup | DnsLookup | 是 | 开启/关闭DNS反向查询 | |
DriverName | DriverName | 是 | 驱动名称标签 | |
HashAlgorithms | HashAlgorithms | 是 | 哈希算法标签 | |
EventFiltering | 是 | 事件过滤器标签 | ||
PipeMonitoringConfig | 是 | 未知 | ||
ProcessAccessConfig | 是 | 未知 |
ArchiveDirectory标签的作用是指定Sysmon监控到删除文件事件后,将被删除的文件备份到的目录。该目录必须位于分区的根目录下,不允许使用多层子目录。安装后默认的备份文件夹名称为“Sysmon”,同时会在每个分区根目录下生成一个“Sysmon”文件夹。可以使用ArchiveDirectory指定一个其它名称的文件夹,例如testmon,避免恶意程序检测到运行环境中安装的Sysmon。配置规则如下:
<Sysmon schemaversion="4.32"> <HashAlgorithms>MD5HashAlgorithms> <ArchiveDirectory>testmonArchiveDirectory> <EventFiltering> <FileDelete onmatch="exclude">FileDelete> EventFiltering>Sysmon>
图:备份文件夹该目录默认需要使用system权限访问,在资源管理器中无法打开。图:拒绝访问要访问该文件夹需要以管理员权限调用psexec来访问,命令如下:图:psexec命令执行后弹出高权限的命令行窗口,切换到相应目录下即可访问备份文件夹中的内容。图:CMD访问备份文件夹的方式该目录下的所有文件都是以哈希值为文件名进行保存的,并非删除前的原始文件名。要想复制某个文件到其它目录下,可以使用“COPY”命令图:备份文件夹中的文件
4.2.2 CopyOnDeletePE命令行开关CopyOnDeletePE的作用是开启或关闭文件备份的功能,默认情况下在配置文件中启用FileDelete事件后,自动将删除的文件备份至指定的目录下,如果在命令行中传递CopyOnDeletePE参数,那么Sysmon会只记录日志,不再对文件执行备份操作。图:命令行传递CopyOnDeletePE参数图:开启删除文件监控的配置规则图:删除文件监控生成的日志进入备份文件目录,并未保存任何文件,说明CopyOnDeletePE就是用来设置开启和关闭文件备份的命令行开关。图:文件备份目录
同时测试发现,通过CopyOnDeletePE关闭备份文件的操作后,无法再次恢复备份功能,只能通过重新安装Sysmon来启用文件备份的功能。4.2.3 测试三个CopyOnDelete***配置条目通过测试发现CopyOnDeleteSIDs、CopyOnDeleteExtensions和CopyOnDeleteProcesses都可在命令行中使用,但并没有达到预期效果,暂不清楚其功能。
图:命令行开启CopyOnDeleteSIDs
根据帮助信息的内容,CopyOnDeleteExtensions的作用是“在删除时保存的文件扩展名”,可使用的值为字符串,推测可能是监控指定后缀名的文件删除事件,因此以“exe,doc,docx”进行测试,配置成功。
图:配置指定后缀名
实际测试发现还是会保存其它后缀名的文件,并不会只备份exe、doc和docx这三种后缀名的文件。
图:备份文件夹中的文件
根据帮助信息介绍,CopyOnDeleteProcesses的功能是“将保留删除的文件的进程名称”。这里用“powershell”作为参数值测试CopyOnDeleteProcesses。配置后并未发现实际的作用。
图:配置CopyOnDeleteProcesses
通过测试暂未得到这三个条目的功能,同时发现CheckRevocation条目既无法在命令行中使用,也无法在配置文件中使用。
五、新增Contents属性
创建文件流哈希事件增加了Contents属性,该属性记录的是文件流的内容。根据微软的功能介绍,当文件流的大小小于1000字节时,日志会直接在Contents属性中显示流的内容。当文件流大于1000字节时,会生成该内容的哈希值。在cmd窗口中创建备用数据流进行测试命令如下:图:创建备用数据流图:创建文件流哈希事件的日志
六、新增过滤条件
到V11.1版本累计更新了5个过滤条件,下面依次进行测试。
2.1. contains any和contains allcontains any过滤条件的作用是包含使用分号“;”分隔的任意一个值。contains all的作用是包含使用分号“;”分隔的所有的值。首先配置删除文件监控事件的Image属性对contains any条件进行测试。<FileDelete onmatch="include"> <Rule groupRelation="and"> <TargetFilename condition="contains any">.exe;.ps1;.js;.xls;.xlsmTargetFilename> <TargetFilename condition="begin with">C:\Users\admin\AppData\Local\TempTargetFilename> Rule>FileDelete>
当删除exe、ps1等指定类型的文件时,即可产生相应的日志。图:删除exe文件产生的日志
图:删除ps1文件产生的日志
根据帮助信息contains all条件是指包括分号“;”隔开的所有值。使用进程访问事件的SourceImage属性对contains all条件进行测试,规则如下:图:contains all条件实际测试发现并没有产生日志。图:日志查看器重新指定条件contains,值为Explorer.EXE,就能产生大量日志。图:contains条件图:日志查看器推测contains all的作用应该是同时满足后面所有的值才会记录,再次使用映像加载事件来检测contains all,因为一个进程会同时加载多个模块。通过加载TestModule1.dll和TestModule2.dll模块进行测试,发现仍然不会触发日志。图:映像加载事件规则
修改规则后使用contains条件单独指定一个值,可以触发日志。
图:contains条件图:映像加载事件日志通过两次对比测试发现,contains all条件应该是必须同时满足多个值的情况下,才会生成日志。目前是暂未发现有效的应用场景。2.2. excludes any、excludes all和is any
根据contains any过滤条件的功能,可以设置excludes any的过滤条件:图:excludes any条件配置规则后产生的日志中就不会包含Explorer.exe和procexp64.exe进程打开其它进程的日志。is any过滤条件的作用是精确匹配分号分隔的多个值中的一个,作用类似于contains any过滤条件。这里不做详细测试。七、总结新增加的文件删除监控功能极大提高了防御人员的检测能力,提供了捕获文件的方法,对于一些带有自删除功能的木马后门,以及破坏系统数据的恶意程序等有很好的防御效果。但是在实际生产环境中使用这项功能时,一定要仔细选择要监控的文件位置,避免被备份的系统文件、临时文件等占满磁盘空间。新增的五个过滤条件中contains all和excludes all还未能发现正确的使用方法,应用其它三个条件时,对同一属性的多个不同值可以列入一条规则中,可以提高规则的灵活性并降低规则复杂度。但是实际测试中也发现一些问题,例如通过CMD删除文件不记录的情况,只能寄希望后续版本修复该bug。
附录
新版本配置文件sysmon-modular项目:
https://github.com/olafhartong/sysmon-modular