[!NOTE] 截至2025年,Santa 已不再由 Google 维护。 我们鼓励 现有用户迁移到仍在积极维护的 Santa 分支,例如 https://github.com/northpolesec/santa。
Santa 是 macOS 上一个二进制文件和文件访问授权系统。它由一个监控执行操作的系统扩展、一个基于本地数据库内容做出执行决策的守护进程、一个在阻止决策时通知用户的 GUI 代理,以及一个用于管理系统并与服务器同步数据库的命令行工具组成。
它的名字叫 Santa,因为它会追踪哪些二进制文件是调皮的 (naughty) 还是乖巧的 (nice)。
Santa 的文档存储在 Docs 目录中,并发布在 https://santa.dev 上。
文档包括部署选项、Santa 各部分的工作原理详解以及开发 Santa 本身的说明。
如果您有问题或以其他方式需要帮助来上手, santa-dev 群组是一个很好的去处。
如果您认为遇到了一个 bug,请随时报告问题,我们会在第一时间回复。
如果您认为自己发现了一个漏洞,请阅读 安全策略 以了解如何报告。
多种模式:在默认的 MONITOR(监控)模式下,除了被标记为阻止的二进制文件外,所有二进制文件都允许运行,同时会记录日志并存储在事件数据库中。在 LOCKDOWN(锁定)模式下,只允许运行已列出的二进制文件。
事件记录:当系统扩展加载后,所有二进制文件的启动都会被记录。在任一模式下,所有未知或被拒绝的二进制文件都会存储在数据库中,以便后续聚合分析。
基于证书的规则,具有覆盖级别:可以不必依赖二进制文件的哈希(或称“指纹”),而是根据其签名证书来允许/阻止可执行文件。因此,您可以允许/阻止某个发布者使用该证书签名的所有二进制文件(包括版本更新)。只有当二进制文件的签名有效时,才能通过证书允许它;但基于二进制文件指纹的规则会覆盖基于证书的决定;即,您可以允许一个证书,同时阻止使用该证书签名的某个二进制文件,反之亦然。
基于路径的规则(通过 NSRegularExpression/ICU):这提供了类似于 Managed Client(配置配置文件的前身,使用相同的实现机制)以及通过 mcxalr 二进制文件实现的应用启动限制的功能。此实现的额外好处是可以通过正则表达式进行配置,并且不依赖 LaunchServices。如 wiki 中所述,在评估规则时,其优先级最低。
安全失效证书规则:您无法设置一条阻止规则,用于阻止用于签署 launchd(即 pid 1)以及 macOS 中所有组件的证书。因此,每个 OS 更新(以及某些情况下整个新版本)中的二进制文件都会自动被允许。这不影响来自 Apple App Store 的二进制文件,它们使用各种常规应用会定期更换的证书。同样,您也无法阻止 Santa 本身,Santa 使用与其他 Google 应用不同的独立证书。
用户层组件相互验证:每个用户层组件(守护进程、GUI 代理和命令行工具)使用 XPC 进行通信,并在接受任何通信之前检查它们的签名证书是否相同。
缓存:允许的二进制文件会被缓存,因此只有在二进制文件尚未缓存时,才需要执行处理请求所需的操作。
没有单一系统或过程能够阻止所有攻击,或提供 100% 的安全性。Santa 的编写目的是帮助保护用户免受自身行为的伤害。人们常常下载恶意软件并信任它,将凭据交给恶意软件,或允许未知软件外泄您系统的更多数据。作为一个集中管理的组件,Santa 可以帮助阻止恶意软件在大量机器间的传播。独立使用 Santa 也有助于分析您计算机上正在运行的内容。
Santa 是纵深防御策略的一部分,您应该继续以任何其他您认为合适的方式保护主机。
Santa 仅阻止执行(execve 及其变体),不保护针对使用 dlopen 加载的动态库、已被替换的磁盘上的库,或使用 DYLD_INSERT_LIBRARIES 加载的库。
脚本:Santa 当前被设计为忽略任何非二进制文件的执行。这是因为权衡了管理成本与收益后,我们认为这样做不值得。此外,许多应用程序使用临时生成的脚本,我们不可能全部列入白名单,如果不这样做也会引发问题。如果对其他人有用,我们乐于重新考虑这一点(或至少使其成为一个选项)。
santactl 命令行客户端包含一个用于与管理服务器同步的标志,该操作会上传机器上发生的事件并下载新规则。有几个开源服务器可供同步:
或者,santactl 可以在本地配置规则(无需同步服务器)。
像 Santa 这样的工具不太适合截图,所以这里改为视频。
非常欢迎对此项目提交补丁。请参阅 CONTRIBUTING 文档。
这不是一个正式的 Google 产品。