Emond并不是一个OSX事件监视的新机制,但它可以作为一种攻击新用例。 回想起来,在我撰写本文时,所阅读过的任何macOS威胁报告中都没有提及过这样的方法。但也有可能已经在野使用,或者其本身人畜无害。
如何检测这种持久化访问的方法需要对文件系统进行一些改变, 幸运的是,macOS提供了fsevents API来捕获文件系统事件。实质上fsevents会记录每个卷中的所有事件。 最初,事件存储在内存中,一旦内存缓冲区已满或即将卸载卷,事件会被写入磁盘。FSEvent日志文件以gzip压缩格式存储,并遵循十六进制命名方案。 所有日志文件都存储在一个隐藏的目录中:/fseventsd/。访问此目录需要root权限。 fsevents的一个注意事项是时间戳不包含在日志文件中。 通过访问API,我们可以使用Python或Objective-C筛选所有接收到的事件,并在rules目录或QueueDirectory中发生文件创建/修改事件时进行警报。
点击这里查看开源fsevents项目
你可以注意到fswatch可以在事件触发时提供时间戳。 此外,你可以将其输出到任何其他命令行,以便进一步处理。 你也可以指定多个目录进行监控。 下图显示了一旦我们在rules目录中放置了一个plist文件,fswatch将以一个JSON字符串显示事件详细信息。
图九:事件发生时的输出
当然这只是一个最基本的例子,可能不适用于部署在大型MacOS环境中。对于后者,更适用的选择是osquery。Osquery提供文件完整性监视,它使用fsevents api将文件系统更改记录到特定目录的文件。 更多信息可以点击这里。安装osquery之后,你需要提供一个配置文件来监视文件系统事件。 下图是一个简单的示例来监视rules目录中的所有文件系统事件。 所有事件将以60秒为间隔进行查询。
为了简洁起见,我们从命令行启动osquery守护进程,并使用-config_path标志指定配置文件。 一旦我们创建了plist文件,并将其放置在rules目录中,60秒后,在osquery日志文件中就应该有一个条目。 结果默认记录到/var/log/osquery/osqueryd.results.log。 输出将包括路径,主机标识符,时间戳,文件事件的类型以及其他。
以上检测方法并不能完全遏制对emond的恶意利用,但是足以作为一个很好的起点。
ReferenceLevin, J. (2017) OS Internals, Volume I: User Space. North Castle, NY: Technologeeks.com