Sinter:macOS 用户模式安全强化的开源利器

Sinter 是首个完全用 Swift 编写的开源 macOS 端点保护代理,支持 Apple 的 EndpointSecurity API,解决了从内核模式迁移到用户模式的安全挑战,包括实时决策、TOCTOU 风险缓解和代码签名验证等关键技术问题。

Sinter: macOS 的新用户模式安全强化工具

TL;DR: Sinter 是第一个完全用 Swift 编写的开源端点保护代理,支持 Apple 的新 EndpointSecurity API。Sinter 展示了如何构建一个成功的事件授权安全代理,并解决了所有端点保护代理在 macOS 11 Big Sur 发布前从内核模式迁移到用户模式代理时将面临的许多挑战。

简单、开源且基于 Swift

Sinter 是我们为 macOS 10.15 及以上版本开发的新开源端点安全强化代理,用 Swift 编写。我们从头开始构建它,作为一个 100% 用户模式代理,利用新的 EndpointSecurity API 从 macOS 内核接收一组安全相关事件类型的授权回调。Sinter 通过简单规则控制允许或拒绝事件,并且不使用传统防病毒解决方案中昂贵的全系统扫描或基于签名的检测。

立即获取测试版安装程序并试用!

目前,Sinter 允许您编写一组规则来阻止或允许进程执行事件,并通过与 Santa 兼容的同步服务器或本地配置文件将规则提供给代理(这里是一个演示显式允许的示例规则)。然而,我们计划开发更复杂的规则语法,并为 API 支持的许多其他类型事件添加阻止能力,这也将意味着 Santa 规则兼容性的结束。

追求 100% 用户模式安全代理

实现端点安全解决方案(例如,防病毒、反恶意软件)需要实时拦截和授权 OS 级事件。历史上,这意味着使用内核模式回调 API 或在未提供适当 API 时挂钩内核模式操作系统代码。操作系统开发者早就知道,像这样的第三方内核模式代码是系统不稳定和不安全的主要来源,因为内核代码中的任何小错误往往都会产生严重后果。

于是 macOS EndpointSecurity API 登场。2019 年底,Apple 宣布在 macOS 中弃用对所有第三方内核扩展的支持,并将引入用户模式 API 和框架来替代第三方产品所需的功能。所有安全供应商都收到通知:在明年内弃用您现有的内核模式解决方案,并在下一个 macOS 版本(macOS 11 Big Sur)发布前迁移到 EndpointSecurity API。对许多团队来说,这显然不是一个有趣的前景,公告发布后不久,一个客户就委托我们开发一个用户模式解决方案,以使迁移不那么痛苦。

什么是 EndpointSecurity API?

EndpointSecurity 是一个 API,它在特定事件即将发生时实时实现从 macOS 内核的回调。EndpointSecurity 客户端订阅一个或多个事件类型,这些类型要么是 NOTIFY 类型,要么是 AUTH(授权)类型。Notify 正如其名,对于在主机上捕获简单活动日志很有用。授权回调则强大得多;它允许客户端进程决定允许或拒绝事件发生。

EndpointSecurity 取代了 macOS 上实时事件授权的内核模式等效项(Kauth KPI 和其他不受支持的内核方法)以及只读事件监控 OpenBSM 审计跟踪。任何用于 macOS 的实时监控或保护产品都必须重写以使用 EndpointSecurity for macOS 11 Big Sur。

请注意,EndpointSecurity API 中没有网络相关事件(除了 UNIX 域套接字)。所有这些都在 Network Extension 框架中。您可以从一个系统扩展中结合使用这两个 API,但这里我们特别关注 EndpointSecurity API。

使用此 API,FireEye 的 Stephen Davis 和 Objective-See 的 Patrick Wardle 迅速发布了事件监控应用程序,可以实时显示例如进程相关和文件相关的事件。但是,追随 Process Monitor(“ProcMon”)脚步的只读监控工具虽然有用,但只使用了 EndpointSecurity API 功能的一半(监控能力)。Google 的 Santa 是一个用 Objective-C 编写的开源 macOS 进程允许/拒绝解决方案,展示了使用 EndpointSecurity 授权事件的能力:其代理现在接收来自 EndpointSecurity 的进程事件并做出允许/拒绝决策。

我们看到掌握 EndpointSecurity API 至关重要,因为许多团队需要在其现有的 macOS 安全应用程序中迁移到它。通过 Sinter 的开发,我们深入研究了 EndpointSecurity,从经验中吸取了一些教训,并为我们遇到的各种挑战融入了解决方案——这样您就不必这样做了。Sinter 还展示了用 Swift 编程语言实现 EndpointSecurity 客户端,这承诺比 Objective-C 具有更好的内存安全性和性能,同时保持与所有其他新 macOS API 的兼容性。

开发 Sinter:不适合胆小者

实现事件授权代理比实现只读事件订阅者困难一个数量级。我们还通过艰难的方式了解了 EndpointSecurity API 的某些缺点。以下是我们

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计