在 Mac 上信任一个应用,并不是一个单一的“是或否”的决定。它是四个独立的问题,每一个由不同的机制回答:是谁构建了它,Apple 有没有检查过它,它被允许触碰什么,以及它运行起来之后实际在做什么。Apple 对前三个有详细的文档。第四个是你必须自己观察的,也是能抓住那种通过了前三关、之后却出了问题的应用的那一个。
App Store 还是直接下载
Apple 的支持页面在 Mac 上安全地打开应用把 App Store 称为获取软件最安全的地方,理由有两个具体的方面:Apple 在接受每一个应用之前都会审核它,而且如果日后发现问题,Apple 可以迅速移除该应用。App Store 应用还必须在 App Sandbox 内运行,Apple 的 Gatekeeper 与运行时保护页面把它描述为限制应用可以访问的数据,并强制它使用 macOS API 与其他应用通信。
这并不意味着每一个直接下载都可疑。大量正当的 Mac 软件是在商店之外分发的,因为沙盒禁止它们需要做的事(磁盘工具、开发工具,也包括防火墙)。区别在于,对于直接下载,审核步骤被 Apple 在同样这些页面上描述的两项较轻的检查所取代:一个说明是谁构建了该应用的签名,以及一次公证扫描。
Developer ID 与公证:它们证明了什么
Developer ID 证书由 Apple 颁发给已加入 Apple Developer Program 的开发者,它让 Gatekeeper 能够确认一个应用是由该开发者签名的,并且此后未被修改。签名证明的仅此而已:身份和完整性。它对意图只字不提。一个已签名的应用仍然可能是一个坏应用;签名只是意味着 Apple 知道上面署的是谁的名字,并且可以撤销它。
公证是第二项检查。Apple 关于在分发前对 macOS 软件进行公证的开发者文档把它描述为对 Developer ID 签名的软件进行的一次自动扫描,查找已知的敌对内容和代码签名问题,之后 Apple 会签发一张 Gatekeeper 可以读取的票据。Apple 的支持页面在措辞上很谨慎:公证意味着“Apple 已检查其中是否存在恶意软件,且未检测到”。它是一次对照 Apple 已知内容的扫描,而不是对该应用所做之事的审查,而且如果 Apple 后来了解到更多,可以撤销公证。
隔离标记
把这些检查与某次特定下载联系起来的机制,是文件上的一个扩展属性 com.apple.quarantine,Safari 以及大多数其他浏览器和消息应用都会给它们保存的任何东西打上这个属性。当你第一次打开一个带有该属性的文件时,Gatekeeper 会执行它的检查并请求你的批准。Apple 的 Gatekeeper 页面把默认行为描述为在所有软件第一次打开时检查其是否包含已知的恶意内容。你可以自己用终端命令 xattr -l 在一个下载的文件上看到这个属性。
如果一个应用未签名或未公证,macOS 会拒绝打开它,并提供一条绕过的途径。Apple 的支持页面打开来自未知开发者的 Mac 应用解释了步骤,然后加上了一条值得转述其实质的警告:绕过这些设置是 Mac 被感染的最常见方式,Apple 建议改为寻找另一个应用,即便该开发者看起来已经很有名气。实用的规则由此直接得出。绕过应该是一个罕见的、审慎的举动,只针对你有特定理由信任的软件,而永远不应是一种反射动作。
权限:应用被允许触碰什么
第三个问题是范围。Apple 的《平台安全指南》中关于控制应用对文件的访问的页面解释说,自 macOS 10.15 起,应用在读取你的“桌面”、“文稿”、“下载”、iCloud 云盘或网络卷之前必须先询问,而对摄像头、麦克风、屏幕录制、键击监控和完全磁盘访问权限的访问,只能通过明确的提示或在“系统设置”的“隐私与安全性”中手动更改来授予。这些提示背后的系统叫做 TCC(透明、同意与控制),用 Apple 的话说,它的原则是用户应当对应用如何处理他们的数据拥有完全的透明、同意和控制。
权限本身就是一种信任信号。一个请求辅助功能访问权限的剪贴板管理器有它的理由。一个请求完全磁盘访问权限和屏幕录制的壁纸应用则没有。一个应用的用途与它所请求的东西之间的错配,往往在该应用做任何事之前就已经可见,而拒绝授权、看看应用是否仍然能用,不花任何代价。
网络行为:其他检查无法回答的问题
签名、公证和权限都是在请求之前或请求发生的那一刻进行评估的。它们都不会随时间观察应用,也都不会去看那个把隐私问题变成安全问题的唯一活动:把数据发送出 Mac。一个应用可以由真实的开发者签名、由 Apple 公证、只被授予它看起来确实需要的权限,却仍然把你的联系人上传给一家分析数据经纪商,每隔几分钟轮询一个跟踪端点,或者在一次例行更新替换了它的代码之后,开始和一台它以前从未联系过的服务器通信。
把网络行为当作信任信号来解读,意味着对每一个应用问几个具体的问题。它到底联网吗,如果联网,就它的用途而言这是预期之中的吗?它和哪些主机通信——是开发者自己的、一个可识别的服务,还是一串广告和分析域名?它使用加密连接吗,还是有什么东西通过明文 HTTP 离开?它的行为在更新后有变化吗?它是否在你不使用它的时候按时间表联网?这些都不需要专业知识;它们需要的是看到这些连接,而 macOS 默认不向你展示。
这就是 FireAI 的用途。它的实时地图显示每个应用发出的每一个连接,连同目标、国家以及背后的网络;它的 Private AI 审查——一个设备端模型——利用目标信誉、该二进制文件是否曾被见过、端口和协议以及链路是否加密,来判断来自未知应用的每一个新连接,然后用直白的语言解释它的理由。它的未加密数据防护阻止卡号、密码和 API 密钥通过明文 HTTP 离开,无论是哪个应用在发送它们。每一个 AI 决定都会变成一条你可以撤销的可见规则,规则可以用直白的英语或法语书写(“block Microsoft Teams”),或导出为文本文件。
阻止未签名的东西,并跟随签名
FireAI 的两个设计选择直接来自上述 Apple 的模型。第一,它更严格的安全模式——Paranoid 和 Under attack——完全阻止未签名的应用联网,同时阻止遥测和跟踪器,这把 Apple 的“你确定吗?”对话框变成了一个网络层面的默认设置:一个未签名的二进制文件如果你坚持可以运行,但它无法联系任何人。第二,FireAI 的按应用规则跟随应用的代码签名,而不是它的名称或路径。“下载”文件夹里一个名为“Slack.app”的冒名顶替者不会继承你为真正的 Slack 写的规则,因为签名不匹配;而当真正的应用更新时,规则会延续下去,因为签名匹配。这正是 Apple 用于 Gatekeeper 的那个身份,被应用到了网络上。
这不做什么
FireAI 不扫描应用的文件,不检查它的代码或内存,也不是杀毒软件;它无法在你运行一个下载之前告诉你它是敌对的。如果你已经允许了一个应用,藏在该应用内部的流量会继承它的权限。到一个信誉良好目标的加密流量是按目标和模式来判断的,而不是按内容。而且没有任何防火墙能取代前三项检查:在 Mac 上最便宜、最可靠的信任决定,依然是优先选择 App Store 或经 Developer ID 签名并公证的下载,拒绝那个绕过对话框,以及拒绝授予应用没有明显理由需要的权限。
把这四个问题合在一起,就得到了一个可信 Mac 应用的可行定义:由已知开发者签名,由 Apple 公证,只请求它看起来确实需要的东西,并且只和对它的用途而言合理的服务器通信。Apple 让你在安装时检查前三项。第四项你只能通过观察才能看到,这也正是它值得加上的原因。
FireAI 和 HisnLabs 在其中扮演的角色
Apple answers the first three trust questions at install time; FireAI exists for the fourth, showing what each app actually does on the network and keying every rule to the same code signature Gatekeeper already relies on.
FireAI 是 HisnLabs 自己的产品:一款直接在 Mac 上运行的 AI 防火墙。它用通俗易懂的语言显示你的应用建立的每一个连接,并让你决定哪些数据可以离开你的 Mac——它的 AI 在本地运行,因此你的流量永远不会发送给我们或任何其他人。HisnLabs 的安全研究团队负责让这些判断保持准确:归类哪些域名只是普通的遥测、哪些属于真正的服务,追踪连接背后的国家和网络,并用真实的流量模式训练设备端模型(Autopilot 功能)——这一切都不会离开你的 Mac。
你可以阅读它背后的技术决策,或试用 FireAI 17 天:HisnLabs 出品的 FireAI。
