Highlight
macOS Ventura 为 Endpoint Security API 新增了三类用户空间事件(认证、登录/注销、XProtect 恶意软件检测)、基于目标路径的精确 muting 能力、muting 逻辑反转,以及命令行调试工具 eslogger,让安全产品不再需要依赖已废弃的 OpenBSM 审计追踪。
核心内容
Endpoint Security 是什么
(00:18)
Endpoint Security 是 Apple 提供的 C API,用于构建 macOS 安全产品:杀毒软件、EDR(端点检测与响应)、数据泄露防护等。
它最早在 macOS Catalina 中推出,替代了三个已废弃/不支持的机制:
- KAuth KPI(已废弃)
- MAC Kernel Framework(不支持)
- OpenBSM audit trail(已废弃)
到 macOS Monterey 为止,Endpoint Security 已支持超过 100 种事件类型,但主要聚焦内核中的关键事件(进程 fork、文件打开等)。
新增的用户空间事件
(01:23)
macOS Ventura 扩展了事件范围,新增三类用户空间安全事件:
认证事件:覆盖用户向操作系统认证的场景,包括本地账户登录、管理员授权操作等。安全产品可用它来观察可疑的访问模式。相比 OpenBSM 的审计记录,新事件信息更丰富,还支持 Apple Watch Auto Unlock 的可见性。
登录/注销事件:覆盖本地控制台登录和远程访问(SSH 等)登录。这些信息帮助企业安全团队监控跨设备的横向移动。
XProtect 事件:Gatekeeper 检测和阻止已知恶意软件的行为现在可以通过 Endpoint Security 观察到,包括检测事件和阻止/移除操作。
(03:42)
OpenBSM 审计追踪从 macOS Big Sur 起已废弃,将在未来版本中移除。有了这些新增事件,大多数 Endpoint Security 客户端不再需要依赖 OpenBSM。
基于目标路径的 Muting
(03:52)
Muting 是减少不必要事件流量的关键机制,可以防止死锁、挂起和看门狗超时。
macOS Catalina 起支持按 audit token 或可执行镜像路径 muting。macOS Monterey 起默认 mute 了一些系统可执行文件的特定事件类型。
macOS Ventura 新增了基于目标路径的 muting:
// Mute 所有目标路径在 /var/log 下的事件
es_mute_path(client, "/private/var/log", ES_MUTE_PATH_TYPE_TARGET_PREFIX);
// 只 Mute 对 /dev/null 的写入事件
var events = [ ES_EVENT_TYPE_NOTIFY_WRITE ];
es_mute_path_events(client, "/dev/null", ES_MUTE_PATH_TYPE_TARGET_LITERAL,
&events, events.count);
关键点:
ES_MUTE_PATH_TYPE_TARGET_PREFIX匹配路径前缀ES_MUTE_PATH_TYPE_TARGET_LITERAL精确匹配单个路径es_mute_path_events可以只 mute 特定事件类型
Mute 逻辑反转
(05:09)
除了”排除指定内容”,现在还可以”只接收指定内容”:
// 反转目标路径的 muting 逻辑
es_invert_muting(client, ES_MUTE_INVERSION_TYPE_TARGET_PATH);
// 清除之前的目标路径 mute 设置
es_unmute_all_target_paths(client);
// 只接收 /Library/LaunchDaemons 下的事件
es_mute_path(client, "/Library/LaunchDaemons", ES_MUTE_PATH_TYPE_TARGET_PREFIX);
关键点:
- 反转后,只有匹配 mute 规则的路径才会触发事件
- 先调用
es_unmute_all_target_paths清除旧设置,再添加新的选择性规则 - 适用于只关注特定持久化位置的场景
eslogger 调试工具
(06:09)
eslogger 是 macOS Ventura 内置的命令行工具,不需要编写原生客户端就能观察 Endpoint Security 事件。
# 观察 SSH 登录和注销事件
sudo eslogger openssh_login openssh_logout > out.jsonl
关键点:
- 支持所有 80 种 NOTIFY 事件
- 输出 JSON 格式,与 C API 的数据结构一致
- 需要以 superuser 运行,且 Terminal.app 或 SSH 需要已获得完全磁盘访问权限
- 输出格式可能随软件更新变化,不适合应用直接使用
详细内容
用 eslogger 分析事件
# 1. 启动 eslogger 监听 SSH 事件
sudo eslogger openssh_login openssh_logout > out.jsonl
# 2. 在另一个终端执行 SSH 登录/登出
ssh localhost
exit
# 3. 停止 eslogger(Ctrl+C),分析输出
cat out.jsonl | jq '{
event: .event,
process: .process.signing_id,
pid: .process.audit_token.pid,
success: .event.openssh_login.success,
username: .event.openssh_login.username
}'
关键点:
- 输出是 JSON Lines 格式(每行一个 JSON 对象)
- 所有事件都包含触发事件的进程信息(audit token、签名 ID 等)
- 事件特定字段在
.event.{event_type}路径下 - 用
jq可以方便地提取和过滤感兴趣的字段
完整的 Muting 策略示例
#include <EndpointSecurity/EndpointSecurity.h>
// 初始化客户端
es_client_t *client;
es_new_client(&client, ^(es_client_t *c, const es_message_t *msg) {
// 处理事件
});
// 策略 1:Mute 所有日志相关事件
es_mute_path(client, "/private/var/log", ES_MUTE_PATH_TYPE_TARGET_PREFIX);
es_mute_path(client, "/private/var/db/diagnostics", ES_MUTE_PATH_TYPE_TARGET_PREFIX);
// 策略 2:只监控 LaunchDaemons 目录(反转模式)
es_invert_muting(client, ES_MUTE_INVERSION_TYPE_TARGET_PATH);
es_unmute_all_target_paths(client);
es_mute_path(client, "/Library/LaunchDaemons", ES_MUTE_PATH_TYPE_TARGET_PREFIX);
es_mute_path(client, "/Library/LaunchAgents", ES_MUTE_PATH_TYPE_TARGET_PREFIX);
// 策略 3:Mute 特定进程
es_mute_process(client, &system_process_audit_token);
关键点:
- 三种 muting 类型(进程、可执行路径、目标路径)都可以独立反转
- 反转前先清除旧的 mute 设置,避免规则冲突
- 合理使用 muting 可以显著降低事件流量,提升系统稳定性
核心启发
1. 从 OpenBSM 迁移到 Endpoint Security
- 做什么:把还在用 OpenBSM 审计追踪的安全监控逻辑迁移到 Endpoint Security
- 为什么值得做:OpenBSM 已废弃并将移除,新事件比审计记录信息更丰富,还支持 Apple Watch Auto Unlock 等场景
- 怎么开始:先用 eslogger 观察新事件的 JSON 结构,确认数据字段满足需求后,逐步替换 OpenBSM 的调用
2. 用目标路径 Muting 优化性能
- 做什么:对只关注特定目录的安全产品,用
es_mute_path排除无关路径的事件 - 为什么值得做:减少不必要的事件流量可以降低 CPU 占用,避免 watchdog 超时
- 怎么开始:分析你的安全产品实际关注的路径列表,对不相关的系统目录(如 /var/log)添加 prefix muting
3. 用 eslogger 做安全事件原型验证
- 做什么:在开发阶段用 eslogger 快速验证检测逻辑,确认事件数据包含需要的字段
- 为什么值得做:写 C 客户端需要编译和部署,eslogger 让你几秒内就能看到事件数据
- 怎么开始:
sudo eslogger {event_type} | jq '{field: .path.to.field}'快速提取和验证字段
关联 Session
- Build an Endpoint Security app — Endpoint Security 框架入门
- What’s new in notarization for Mac apps — Mac 应用公证流程更新
- Discover Managed Device Attestation — 托管设备认证机制
评论
GitHub Issues · utterances