跳转到主要内容
Hilt macOS 采集器是一个经过公证的 macOS 应用 Hilt EDR(bundle EDRApp.app,团队 Cybe Corporation / MVMB6LCP2A),其中内嵌两个 Apple 系统扩展:ESensor(Endpoint Security 遥测传感器,bundle id Hilt.EDRApp.ESensor)和 NetFilter(用于逐流量归因的 NetworkExtension 内容过滤器,bundle id Hilt.EDRApp.NetFilter)。它不含内核扩展——采集器完全运行在用户空间,基于 Apple 现代的系统扩展框架。本页介绍它对外呈现的网络面,以及让它能在正常、加固的 Mac 上运行的 Apple 信任链。

出站

  • 仅一个目标。 ESensor 将事件以 JSON 行形式发送到本地转发器 LaunchDaemon,后者通过出站 HTTPS 将其送往 Hilt edr-collector 摄取端点。采集器从那里路由到 MSK Kafka 和富化流水线——参见数据流。
  • HTTPS / TCP 443。 流量是发往所配置摄取端点的标准 TLS。转发器是唯一向网络打开 socket 的组件;系统扩展本身从不与互联网通信。
  • 防火墙规则: 允许该 Mac 的源地址范围通过 TCP/443 访问摄取端点。无需开放其他任何端口——无论入站或出站。

它不做的事

  • 无入站 socket。 采集器从不监听连接。主机上没有管理端口、没有远程 shell、没有 agent API 面。
  • 无回连(phone-home)。 除了发往所配置摄取端点的那一条出站 HTTPS 流之外,采集器不进行任何网络调用——不向 Hilt 发送遥测、不做许可证签入、不发信标。
  • 控制层不依赖公共 DNS。 它唯一解析的名称就是你的摄取端点。
  • 暂无自动更新通道。 早期访问版本不会自我更新;运行时没有更新拉取路径。新版本以全新的经过公证的 .pkg 形式发布。参见状态。
  • 暂无任意设备端响应动作。 遥测绝大多数为 NOTIFY——ESensor 观测并上报,不会阻断任意用户/进程/网络活动,也不执行设备端隔离(quarantine)。一小组 AUTH(signal、file_unlink、file_rename)仅在内核层拒绝对 agent 的未授权篡改;参见事件覆盖和篡改检测。它没有可由控制台发起隔离或隔离处置的入站命令通道。

Apple 信任链

关键在于,采集器运行在启用了系统完整性保护(SIP)的正常、加固的 Mac 上——无需 csrutil disable、无需开发者模式、无需 kext。这之所以可能,是因为应用及其扩展从头到尾满足了 Apple 完整的可信执行链。 几个重要细节:
  • 仅有授权本身不改变任何事。 在 SIP 开启时,内核的可信执行层(AMFI)只有在一份将 com.apple.developer.endpoint-security.client 加入允许列表的 Apple 签发描述文件被内嵌于正确签名的 bundle 中时,才会认可该授权。这正是 ES 客户端置于系统扩展 bundle 而非裸命令行二进制文件中的原因——松散的二进制文件无处携带该描述文件。
  • ES 扩展不能使用 App Sandbox。 App Sandbox 与 Endpoint Security 客户端不兼容:当宿主处于沙箱中时,es_new_client() 会以 ERR_NOT_PERMITTED 失败。因此 ESensor 以非沙箱方式运行(但仍处于 Hardened Runtime 和 SIP 之下)。
  • 公证是恶意软件扫描,而非激活。 一个已装订、经过公证的构建在扩展加载前仍需被批准——要么由用户在系统设置中批准,要么通过 MDM 系统扩展负载批准。参见安装流程。

两道运行时关卡

有两道相互独立的关卡决定 ESensor 的 Endpoint Security 客户端能否启动。它们失败时返回不同的错误码,修复方式也不同——请务必区分清楚。
  • ERR_NOT_ENTITLED 属于信任/SIP 路径。 它意味着授权未被授权——缺失或无效的内嵌描述文件、临时(ad-hoc)签名,或 SIP 拒绝了它。一个正确签名并带描述文件的构建在启用 SIP 的 Mac 上运行即可通过此关卡。
  • ERR_NOT_PERMITTED 属于 Full Disk Access 路径。 即便是完整带描述文件、由 Apple 签名的 ES 客户端,在获得 Full Disk Access 之前仍会以 ERR_NOT_PERMITTED 失败。每个 Endpoint Security 客户端都必须具备 Full Disk Access——没有任何配置可以绕过它。
由于这两道关卡相互独立,一个扩展可能通过了授权关卡却仍无法启动。在独立安装(standalone)中,Full Disk Access 条目显示在传感器的身份下——ESensor /「Hilt EDR Sensor」,而非「EDRApp」——那才是能通过关卡 2 的开关。参见安装流程。

防篡改

系统扩展受 macOS 本身保护,而非依赖自卫式 agent:
  • 未经管理员和应用无法卸载。 系统扩展已在操作系统中注册,只能由所属应用(EDRApp.app)发出停用请求来停用,且该请求需要管理员授权。标准用户无法停止或移除传感器;kill 掉该进程只会让 launchd 重新拉起它。
  • SIP 保护磁盘上的 bundle。 在 SIP 启用时,已激活扩展位于系统扩展存储中的文件受保护,非系统进程无法篡改。
  • 移除是有意为之的动作。 卸载意味着应用停用扩展(弹出管理员提示),或在受管理的机群中由 MDM 撤回系统扩展配置描述文件。不存在「直接删掉二进制文件」的静默路径。
  • launchd 下的自愈。 ESensor 由 launchd 运行;若它退出——例如在被拒绝 Full Disk Access 之后——大约十秒内即被重新拉起,并在授权被添加的那一刻立即接管,无需重启应用。

信任作为一等遥测

除主机状态之外,代码签名信任也被记录在采集器发出的每一个事件中,这正是 macOS 相较 Linux 采集器的差异化之处:
  • code_signature 判定——为 platform、developer_id、adhoc 或 unsigned_or_invalid 之一。
  • signing_id——运行中代码的 bundle 标识符(例如 com.google.Chrome)。
  • team_id——签名背后的 Apple 开发者 Team ID。
  • cdhash——在 exec 时记录的 code-directory 哈希(二进制完整性)。
这意味着诸如*「哪个未签名的应用读取了 ~/.ssh?」*这样的查询只需一个 WHERE 子句——这是 Linux 采集器无法构造的表达式。完整 schema 参见事件数据模型。

数据驻留

事件从 Mac 经出站 HTTPS 传送到你的摄取端点,进入你的 MSK Kafka 和 ClickHouse(endpoint_events)。Hilt 不接收、不镜像,也不持有对主机事件的带外访问权限。

要求与状态

  • macOS 15.0(Sequoia)或更高版本。 安装脚本在低于 15.0 时会直接失败。通用二进制:Apple Silicon 和 Intel。
  • 状态:早期访问。 本文所述的经过公证、SIP 开启即可安装的 .pkg 就是正式发布模式。自动更新和设备端隔离响应在 macOS 上尚不可用——这也是当前没有入站通道、没有自更新路径的原因。
完整的 Apple 信任链在部署层面的说明,参见安装流程。关于 macOS 主机在产品中的呈现位置,参见数据流。
最后修改于 2026年10月8日