宣布 osquery 5:现支持 macOS 上的 EndpointSecurity
Sharvil Shah
2021年11月10日
osquery, engineering-practice, open-source
原文发布于2021年10月6日
TL;DR:osquery 5.0.1 版本现已发布,这是一个跨平台的开源终端可见性代理。此版本引入了基于 EndpointSecurity 的 macOS 进程事件表,是项目的一个重要里程碑。阅读下文,了解我们如何将 EndpointSecurity 集成到 osquery 中,以及如何开始在组织中使用它。
Apple 对 macOS 安全的新规则
多年来,Apple 逐渐从 iOS 的策略中汲取经验,以提升 macOS 的安全性。五年前,Apple 在 OS X 10.11 El Capitan 中引入了系统完整性保护(SIP),以限制 root 用户的权限。自那以后,Apple 加速了 macOS 安全改进,引入了对 GateKeeper 的更严格要求,并强制执行代码签名以及应用程序二进制文件和包的公证。
权利(Entitlements)是另一个加强 macOS 安全的功能。由 Apple 授予并嵌入相应的代码签名中,权利允许应用程序或二进制文件使用受限的 API 或框架。这些新的锁定 API 取代了以前仅在内核模式“内核扩展”中可用的 API。作为一个仅用户模式的可执行文件,osquery 项目已经很好地适应了这些新 API,遵循了许多平台正在采用的从内核中分离出的操作系统完整性趋势。
什么是 EndpointSecurity?
Apple 在最近的 macOS 版本中逐渐弃用了内核扩展。为了替代内核扩展,Apple 开发了 EndpointSecurity 框架和 API。结合所需的权利,EndpointSecurity 框架使用户模式进程能够实时订阅来自 macOS 内核的事件。EndpointSecurity 取代了内核模式授权框架 kauth 和用于从内核获取审计轨迹的传统框架 OpenBSM。
与 OpenBSM 相比,EndpointSecurity 更可靠、性能更高,并且据传闻捕获更多的进程事件。有关 EndpointSecurity 的深入评论,请查看我们的 Sinter 博客文章,这是我们团队首次演示 EndpointSecurity。
这些安全功能对最终用户来说是一大福音。我们在改造 osquery(一直作为基本的独立 CLI 可执行文件部署)时,面临着陡峭的学习曲线,需要新的签名和打包程序,但我们相信这是值得的。
如何使用 osquery 与 EndpointSecurity:迷你教程
随着 osquery 5.0.1 版本的发布,我们实现了 es_process_events 表。在跟随教程之前,请检查此表的模式。
在 osqueryi 中跟随
开始使用 osquery 的最简单方法是使用 osqueryi,即交互式 osquery shell。从 osquery.io 下载官方的 macOS 安装程序包,并像安装其他应用程序一样安装它。
随着版本 5.0.1 的发布,osquery 现在作为应用程序包安装在 /opt/osquery/lib/osquery.app 中,而 osqueryi 是 /usr/local/bin 中的一个符号链接。
接下来,授予您的终端模拟器应用程序(无论是 Terminal.app、iTerm2.app 还是任何其他终端模拟器)在系统偏好设置中的“完全磁盘访问”权限。完全磁盘访问是 Apple 的透明同意与控制(TCC)框架的一部分,这是另一个 macOS 安全功能,并且是启用 EndpointSecurity 所必需的。在下一节中,我们将解释如何为注册了移动设备管理(MDM)解决方案的 Mac 自动授予此权限。
最后,以 root 权限运行 osqueryi,并提供 --disable_events=false 和 --disable_endpointsecurity=false 标志,以交互方式启动 osquery,启用临时事件和基于 EndpointSecurity 的 es_process_events 表。
以下是 osqueryi 捕获自上次启动以来发生的最近进程事件的示例。
|
|
为 MDM 管理的 Mac 部署 PPPC 配置文件
虽然 osqueryi 是一个用于交互式内省、监控和开发适合环境的查询的优秀工具,但大多数 osquery 部署是以守护进程模式与配置文件一起进行的。
对于注册了 MDM 的 Mac 主机,您可以通过推送隐私偏好策略控制(PPPC)配置配置文件来自动且静默地授予完全磁盘访问权限。对于此配置文件,您需要 systemPolicyAllFiles 密钥(授予完全磁盘访问权限)和 CodeRequirement 密钥。
使用 codesign 工具输出 CodeRequirement,并复制输出中“designated =>”之后的所有内容。
|
|
要完成 systemPolicyAllFiles,标识符应为 io.osquery.agent,标识符类型应为 bundleID。
综合起来,以下是一个完整的 PPPC 配置文件的示例,授予 osquery 完全磁盘访问权限。请注意,您需要更新 PayloadOrganization 和其他相关字段(此处以粗体显示)。
您可能需要查阅 MDM 提供商的文档以获取有关 PPPC 配置文件的更多信息。
从 osquery 4.x 迁移到 5.x
随着版本 5.0.1 的发布,osquery 现在在 macOS 上作为应用程序包安装在 /opt/osquery/lib/osquery.app 中,新的包标识符是 io.osquery.agent。如果您从版本 4.9 升级 osquery,需要停止 osquery launchd 服务,并在安装版本 5.0.1 后重新启动它,因为 osquery 本身不提供清理旧版本工件、二进制文件和配置文件的机制。另外值得注意的是,包安装程序不安装 LaunchDaemon 来启动 osqueryd。您可以使用提供的 osqueryctl start 脚本来复制示例 LaunchDaemon plist 和相关配置以启动 osqueryd 守护进程。
类似的更改适用于 Linux 和 Windows 主机。请查阅 osquery wiki 上的安装指南以了解更多信息。
更强大的基础
我们很快开发了一个带有 EndpointSecurity 集成的 osquery 工作概念验证;实际上,我们在版本 5.0.1 发布前几个月就将该功能合并到了 osquery 中。但为了实际“开启” EndpointSecurity 功能,我们必须克服大量的技术债务:
- 迁移到具有兼容 macOS 版本的 CI 运行器
- 更新构建的 SDK 要求并放弃 macOS 10.11 支持
- 完全重新打包 osquery 作为应用程序包
- 设置一个新的私有 GitHub 仓库来保存新的签名密钥
- 设置一个公共仓库来托管新的自动化 CI/CD 流水线,以生成签名的包
- 更改 POSIX 系统上的默认安装路径
- 研究和实现 macOS 公证
- 记录新的 macOS 隐私权限以及生成 MDM 配置文件以应用这些权限的过程
最后,我们必须推广所有这些破坏性更改,并处理所有社区的反馈。确实,我们需要进行的更改数量保证了 osquery 的新主要版本,从版本 4.9 到 5.0.1。
2019 年 6 月,Facebook 和 Linux 基金会成立了 osquery 基金会,这是一个新的社区实体,旨在加速 osquery 项目的开发和开放参与。一个多利益相关者的技术指导委员会(包括 Trail of Bits)自此一直在更新和维护 osquery。在整个项目开发过程中,项目独立性的最大技术障碍之一是缺乏自动化的打包和代码签名流水线。得益于社区今年将 EndpointSecurity 集成到 osquery 中的努力,这条流水线终于就位。Facebook 的原始 osquery 开发者现在可以完全将钥匙(字面意义和比喻意义)交给社区。
osquery 项目无疑只有通过其开源社区的持续参与和支持才能实现。我们特别感谢我们的客户赞助商 Atlassian,以及 osquery 社区的过去和现在的贡献者。
未来方向
现在我们已经将 EndpointSecurity 集成到 osquery 中,该工具在 macOS 上带来了各种新的检测能力。现在添加文件事件监视器、内核扩展加载事件甚至内存映射事件应该会容易得多。我们为 EndpointSecurity 奠定的自动化代码签名和打包基础可能为其他权限化/授权的 macOS 事件监视框架(如 NetworkExtension)集成到 osquery 中铺平道路。
Trail of Bits 多年来一直处于 osquery 开发的前沿。您希望我们将项目带向何方?给我们留言,讨论我们如何帮助实现您的想法!
如果您喜欢这篇文章,请分享:
Twitter
LinkedIn
GitHub
Mastodon
Hacker News