Sintert:用SWIFT编写的适用于MacOS的用户态应用程序授权系统

2020-11-08 20:20:21

Sintert是适用于MacOS 10.15及更高版本的100%用户模式终端安全代理,使用SWIFT编写。

Sinterer使用用户模式EndpointSecurity API订阅一组与安全相关的事件类型,并从MacOS内核接收授权回调。Sinter当前版本支持允许/拒绝进程执行;在未来版本中,我们打算支持其他类型的事件,如文件、套接字和内核事件。

烧结机是一项正在进行中的工作。欢迎反馈。如果您有兴趣贡献或赞助我们,以帮助实现其潜力,让我们联系。

不使用内核扩展(MacOS 11 Big Sur将正式弃用内核扩展)。

不是反恶意软件或反病毒软件。没有签名数据库。使用规则,只拒绝你告诉它拒绝的内容。

第一个允许/拒绝进程的开源MacOS解决方案是Google Santa。我们都是圣诞老人的粉丝,并在过去为其代码库做出了贡献。然而,很长一段时间以来,MacOS社区中的许多人都要求使用开源解决方案来跟踪和管理事件,而不仅仅是流程事件。

我们看到了使用MacOS10.15中的EndpointSecurity API构建此类功能的理想平台。从头开始使用严格的用户模式API意味着我们可以尝试更简单的设计,并使用内存处理更安全、性能更好的现代编程语言。因此,我们开始开发Sintert,它是SinterKlausen的缩写,是圣诞老人的另一个名字。

使用Pkg Installer链接从Releases页面下载并安装最新版本的Sinter.

安装Sinter.app后,您必须启用Sinter.app的完全磁盘访问权限。要执行此操作,请打开系统首选项、安全性、隐私选项卡、全磁盘访问权限。检查Sinter.app的项目。如果使用MDM,您可以在终端上自动启用此权限,无需用户交互。

Sintert要求/etc/sinter/config.json中有一个配置文件。源代码树中的./config/config.json中提供了一个示例:

{";Sinter";:{";Decision_MANAGER";:";LOCAL";,";LOGGER";:";FileSystem";,";ALLOW_UNSIGNED_PROGRAM";:";TRUE";,";ALLOW_INVALID_PROGRAM";:";TRUE";,";ALLOW_UNKNOWN_PROGRAM";:";TRUE";,";ALLOW_EXPIRED_AUTH_REQUESTS";:";TRUE";ALLOW_MISPLAGE_APPLICATIONS";::";TRUE";,";CONFIG_UPDATE_INTERVAL";:600,";ALLOW_APPLICATION_DIRECTORIES";:[";/bin";,";/usr/bin";,";/usr/local/bin";,";/Applications";,";/system";,";/usr/sbin";,";/usr/libexec";,,],},";FilesemLogger";:{";log_file_path";:&。/var/LOG/Stered.log";,},";远程决策管理器";:{";SERVER_URL";:";https://server_address:port";,";MACHINE_IDENTIFIER";:";IDENTIFIER";,},";本地决策管理器";:{";RULE_DATABASE_PATH";:";/etc/sinter/rules.json";,}}。

可以通过更改Decision_Manager值来选择决策管理器插件。本地插件将启用LocalDecisionManager配置节,指示Sintert使用位于给定路径的本地规则数据库。通过使用同步服务器插件,可以使用与圣诞老人兼容的同步服务器。这将启用RemoteDecisionManager配置节,可以在其中设置服务器URL和计算机标识符。

可以将烧结器配置为记录并选择性地拒绝尚未从允许的文件夹启动的应用程序。

ALLOW_MISPLAGE_APPLICATIONS:如果设置为TRUE,则放错位置的应用程序只会生成警告。如果设置为False,则拒绝任何不是从有效路径开始的执行。

ALLOW_APPLICATION_DIRECTORIES:如果非空,将用于确定应用程序是否放在错误的文件夹中。

模式不在烧结机中实现,因为一切都是基于规则的。可以通过调整以下设置来实现监控功能:

ALLOW_EXPIRED_AUTH_REQUESTS:EndpointSecurity API要求Sintert在未指定的时间范围内(通常不到一分钟)响应授权请求。大型应用程序(如Xcode)将需要相当长的时间进行验证。默认情况下,这些执行被拒绝,一旦应用程序通过验证,用户应该重试。将此配置设置为TRUE会更改此行为,以便始终允许这些请求。

规则数据库以JSON格式编写。下面是一个示例数据库,它允许来自cmake.org的CMake应用程序包:

Sinter目前只支持二进制规则,使用ALLOWLIST或DENYLIST策略。代码目录散列值可以从CoDesign工具输出中获取(例如:CoDesign-dvvv/Applications/CMake.app)。请注意,尽管CLI工具可以获取完整的SHA256散列,但内核/EndpointSecurity API仅限于前20个字节。

构建烧结机需要一定的代码签名证书和权利,苹果必须授予您的组织这些证书和权利。但是,在禁用了SIP的情况下,仍可以从源代码构建Sintert,并在测试系统上本地运行它。有关说明,请参阅SinterWiki。

烧结机是在AGPLv3许可下授权和分发的。如果您正在寻找条款的例外情况,请与我们联系。