Santa 是 macOS 的二进制及文件访问授权系统。它由一个系统扩展组成,负责监视执行和文件访问,并根据本地数据库的内容做出决策;另有一个 GUI 代理,在做出阻止决策时通知用户;一个用于与远程服务器同步配置的后台服务;以及一个用于管理系统的命令行工具。
它之所以叫 Santa(圣诞老人),是因为它负责记录哪些二进制是“顽皮的”还是“乖巧的”。
Santa 文档存储在 Docs 目录中,并发布在 https://northpole.dev。
文档中包括部署选项、Santa 各部分的工作原理详情,以及开发 Santa 本身的说明。
如果你有问题或在入门时需要其他帮助,macadmins Slack 上的 #santa 频道 是一个很好的起点。
如果你认为自己遇到了 bug,欢迎提交 issue,我们会尽快回复。
如果你认为自己发现了漏洞,请阅读 安全策略,了解相关的披露报告说明。
多种模式:在默认的 MONITOR(监视)模式下,除被标记为阻止的二进制外,所有二进制都允许运行,同时会被记录到事件数据库中。在 LOCKDOWN(锁定)模式下,只有已列出的二进制才允许运行。
事件记录:当系统扩展加载后,所有二进制启动都会被记录。在任一模式下,所有未知或被拒绝的二进制都会存储在数据库中,以便日后进行聚合分析。
基于代码签名的规则,并带有覆盖级别:不依赖二进制的哈希(即“指纹”),可执行文件可以通过其代码签名(通过 CDHash、Certificate、TeamID 或 SigningID 规则)被允许/阻止。因此,你可以允许/阻止某个发布者签名的所有二进制,或某个已签名二进制的所有版本。规则按“最具体者优先”的顺序应用,这样你可以允许某个发布者的所有二进制,同时阻止某个特定的签名 ID 或二进制(反之亦然)。
基于路径的规则(通过 NSRegularExpression/ICU):这提供了与 Managed Client(配置描述文件的前身,使用相同的实现机制)中通过 mcxalr 二进制实现的应用启动限制类似的功能。该实现的额外好处是可通过正则表达式配置,并且不依赖 LaunchServices。如 wiki 中所述,在评估规则时它的优先级最低。
故障安全证书规则:你不能添加一条拒绝规则来阻止用于签名 launchd(即 pid 1)的证书,因此 macOS 使用的所有组件都不会被阻止。每次系统更新(在某些情况下是整个新版本)中的二进制都会自动获得允许。这不影响来自 Apple App Store 的二进制,它们使用的是会定期更换的各种证书。同样,你也不能阻止 Santa 本身。
用户态组件相互校验:每个用户态组件(守护进程、GUI 代理和命令行工具)都通过 XPC 相互通信,并在接受任何通信之前检查彼此的签名证书是否一致。
缓存:已允许的二进制会被缓存,因此只有在该二进制尚未被缓存时,才会执行做出决策所需的处理。
没有任何单一系统或进程能够阻止所有攻击,或提供 100% 的安全。Santa 的编写初衷是帮助保护用户免受自身行为的伤害。人们常常下载恶意软件并信任它,将凭据交给恶意软件,或允许未知软件窃取有关你系统的更多数据。作为一个集中管理的组件,Santa 可以帮助阻止恶意软件在大型机群中传播。独立使用时,Santa 也有助于分析你的计算机上正在运行什么。
Santa 是纵深防御策略的一部分,你仍应继续以你认为合适的任何其他方式保护主机。
Santa 只阻止执行(execve 及其变体),它不防护通过 dlopen 加载的动态库、磁盘上已被替换的库,或使用 DYLD_INSERT_LIBRARIES 加载的库。只要启用了 SIP,macOS 的其他部分通常会防范这些途径。
脚本:Santa 目前的设计是忽略任何非二进制的执行。这是因为在权衡管理成本与收益之后,我们发现这样做并不划算。此外,许多应用程序会使用临时生成的脚本,我们不可能将它们全部加入白名单,而不这样做又会引发问题。如果这对其他人有用,我们很乐意重新考虑这个问题(或至少将其作为一个选项)。
Santa 可以与管理服务器同步其设置和策略,从而实现非常快速的配置变更。
有多个商业和开源服务器可供选择:
另外,也可以使用 StaticRules 配置键或 santactl rule 命令在本地配置规则。
像 Santa 这样的工具并不太适合用截图来展示,所以这里改用视频。
非常欢迎为本项目提交补丁。请参阅 CONTRIBUTING 文档。
North Pole Security 和 North Pole Security Santa 与 Google 没有任何关联。