每一款自称为 Mac 提供“高级威胁检测”的产品,都建立在为数不多的几种机制之上,其中大多数都有 Apple 的文档。知道某项功能依赖哪种机制,就能知道它真正能看到什么,又对什么视而不见。本文逐层讲解这些机制:什么是签名,公证检查什么,Apple 的 Endpoint Security 框架向安全软件暴露了什么,行为分析在实践中意味着什么,以及一个监视网络连接的模型能判断什么、不能判断什么。
简短的结论是:没有任何单一的层能看到一切。文件扫描器永远看不到连接。网络监视器永远看不到文件。对这条边界坦诚的产品,比模糊它的产品更有用。
第一层:签名(XProtect)
最古老的检测技术是签名:一种与已知有害软件相匹配的模式。在 Mac 上,这项工作属于 XProtect。Apple 的《平台安全指南》在防范恶意软件这一页中把 XProtect 描述为基于签名的,并说它在三个时刻运行:应用首次启动时、应用在磁盘上被更改时,以及 XProtect 的签名更新时。
Apple 对这种方法的覆盖范围很坦率。同一页面指出,XProtect 的规则“比特定的文件哈希更通用,因此能够发现 Apple 未曾见过的变种”,并描述了一个在事后清除感染的修复引擎。而签名从构造上就做不到的,是匹配一个还没有人为它写过规则的东西。这正是其他每一层存在的目的所要缩小的缺口。
第二层:公证与 Gatekeeper
第二层在应用首次打开之前运行。Apple 关于 Gatekeeper 与运行时保护的页面解释说,Gatekeeper 会验证一个下载的应用来自已识别的开发者、已由 Apple 公证并且未被篡改,并在打开下载的软件之前请求用户的批准。公证本身是 Apple 在 Developer ID 签名的软件发布之前对其进行的一次扫描;Apple 的指南补充说,对于后来被发现是恶意的软件,即便此前已获批准,它也可以随后签发撤销票据。
这一层是门口的一道检查。它回答的是“我们知道是谁构建了它吗,Apple 有没有在它身上发现明显的问题?”。它不会在应用进门之后继续跟着它。一个通过了门口检查、之后行为不端的应用,或者一个在更新后行为发生变化的应用,从那一刻起就脱离了 Gatekeeper 的视线。
第三层:Endpoint Security 框架
Mac 上的第三方检测产品——通常被称为 EDR(端点检测与响应)的那个类别——在很大程度上建立在一个 Apple API 之上:Endpoint Security 框架。Apple 在 macOS 10.15 中引入了它,让安全软件可以从用户空间接收系统事件流(某个进程被启动、某个文件被打开或写入、某个任务被创建),而不必加载 Apple 一直在逐步淘汰的内核扩展。
这是能看到进程树的那一层:哪个进程派生了哪个进程,带着什么参数,触碰了哪些文件。它也是“行为分析”通常所在的那一层。行为检测意味着把一个进程的所作所为与已知的攻击者技术进行比较,而不是与已知的文件进行比较。这些技术的公开参考是 MITRE ATT&CK macOS 矩阵,它编目了从初始访问、持久化到命令与控制、数据外传的各种战术,每一种都被拆解为具体的、可观察的技术。
行为分析有实实在在的代价:一个出于正当理由写入启动代理、读取钥匙串或派生 shell 命令的应用,仅从事件流来看,和一个出于恶意做这些事的应用非常相像。每一家 EDR 厂商对这种取舍的调校都不一样,而且没有一家公布足够的细节让局外人进行比较。可以有把握地说的是,这一层要么需要一款付费产品,要么需要相当多的专业知识才能运转。对个人用户而言,非营利的 Objective-See Foundation 发布了基于同样这些 Apple 框架构建的免费开源工具,比如用于检查运行中进程的 TaskExplorer,以及用于列出哪些东西被设为自动启动的 KnockKnock。
第四层:内存与文件内容
有两种分析甚至位于 Endpoint Security 层之下:深入检查文件的内容(静态分析,也就是杀毒扫描器所做的事),以及检查运行中进程的内存。这是知道一个程序究竟包含什么的仅有的途径,它们是杀毒和取证工具的领域。这一点值得直说,因为营销文案常常暗示并非如此:防火墙——包括 FireAI——完全不做这些事。FireAI 不扫描文件,不读取进程内存,也不是杀毒软件。
第五层:网络
最后一层是其他层无法触及的那一层。攻击者在把代码放进一台 Mac 之后想做的几乎每一件事都涉及网络:获取第二阶段载荷、向控制服务器报到、把偷来的数据发出去。在 ATT&CK 矩阵中,这些步骤有自己的列——命令与控制、数据外传——正是因为它们是一个独立的、可观察的阶段。
网络层看到的是一组与上述各层不同的事实。对于每一个新的出站连接,它知道是哪个已签名的二进制文件打开了它、目标主机、IP 和端口、协议、连接是否加密,以及时间。这足以让一个审查者——无论是人还是模型——做出几项有用的判断:
- 目标信誉:这个主机或 IP 是否出现在 abuse.ch、Spamhaus、Phishing Army 或 OpenPhish 等公开屏蔽列表上,或者它是否是一个 Tor 出口节点?威胁情报源是一次列表查询,而不是猜测,并且可以在本地应用,无需把流量发到任何地方。
- 首次出现的二进制文件:这是这个代码签名在这台 Mac 上第一次打开连接吗?一个刚安装、未签名、立刻连接到一个陌生 IP 的工具,和 Safari 连接到一个 CDN,是不同的风险。
- 端口和协议的异常:一个文本编辑器在 4444 端口上通信,一个应用使用裸 IP 地址而不是主机名,或者一个连接指向一个该应用毫无理由涉足的国家。
- 明文 HTTP 中的凭据:如果一个连接未加密,那么载荷在离开 Mac 之前就是可读的,一个以明文传输的卡号、密码或 API 密钥可以在那一刻被拦下。
这就是 FireAI 的 Private AI 审查所做的事。一个小型的设备端模型(约 1.5 GB 的可选下载)审视来自未知应用的每一个连接,恰恰使用上面列出的这些事实,然后要么阻止它,要么标记它,要么放行它,并附上一条你可以阅读和撤销的直白理由。判断在 Mac 上做出;流量永远不会被发送给 HisnLabs 或任何其他人去分析。
局限同样具体。网络审查器看不到文件内容,所以它无法在一个下载运行之前告诉你它是敌对的。它看不到内存,所以它无法检测出被注入到一个可信进程内部的载荷;而如果敌对代码藏在一个已签名、已被允许的应用背后,它的流量就会继承那个应用的权限。它无法解密 TLS,所以对于加密连接,它判断的是目标和模式,而不是载荷。而信誉情报源只知道那些已经有人举报过的目标。
把各层拼在一起
作为一个堆栈来读,这幅图景是连贯的。公证和 Gatekeeper 决定代码能否进来。XProtect 清除已知的坏东西。基于 Endpoint Security 的工具监视进程在做什么。杀毒和取证工具读取文件内容和内存。网络层监视什么东西离开了。每一层都回答一个其他层无法回答的问题,而对任何“高级检测”宣传的有用检验只是:它是这些层中的哪一层,那一层能看到什么?
这也解释了为什么这些层之间并不竞争。一款 EDR 产品和一个按应用防火墙可以运行在同一台 Mac 上,却从不查看同一个事实:一个读进程树,另一个读连接表。一家已经为端点检测付费的公司从第二个进程监视器那里得不到多少收益,却可能从能够按应用、按目标说出允许什么离开这一点上获益良多。一个完全没有 EDR 的家庭用户,仅从网络层就能得到 Apple 的各层从不浮现的那一个信号。
对大多数 Mac 用户来说,实用的组合是:保持更新的 Apple 内置各层,再加上对 Apple 不向你展示的那一个阶段的可见性——哪些应用正在连接到哪里。这是一个比“阻止每一种威胁”窄得多的承诺,也是真正能够兑现的那一个。
FireAI 和 HisnLabs 在其中扮演的角色
FireAI is the network layer of that stack and nothing more: it does not scan files or read memory, but it is the one place every app’s outbound connection has to pass through, reviewed on your Mac by a model that explains what it saw.
FireAI 是 HisnLabs 自己的产品:一款直接在 Mac 上运行的 AI 防火墙。它用通俗易懂的语言显示你的应用建立的每一个连接,并让你决定哪些数据可以离开你的 Mac——它的 AI 在本地运行,因此你的流量永远不会发送给我们或任何其他人。HisnLabs 的安全研究团队负责让这些判断保持准确:归类哪些域名只是普通的遥测、哪些属于真正的服务,追踪连接背后的国家和网络,并用真实的流量模式训练设备端模型(Autopilot 功能)——这一切都不会离开你的 Mac。
你可以阅读它背后的技术决策,或试用 FireAI 17 天:HisnLabs 出品的 FireAI。
