安全概览与时间线

Bromure 的防护全都在主机上运行,位于代理服务器与虚拟网络交换机之中:凭据替换、出向防火墙、护栏、供应链检查、提示注入检测与个人数据保护。每当其中之一做出判定——替换一份凭据、拦截一个连接、检查一个软件包、扣留一条消息——它就会记录下来。安全时间线窗口会显示这些判定:最近 24 小时的概览,以及每一个事件的时间线。

它回答的问题和追踪不同。追踪记录的是流量本身——“代理送出了什么?”——而且只有在你开启追踪时才记录。安全时间线记录的是安全引擎对那些流量判定了什么,而且它一直是开着的:每一台机器,无论是否已注册、无论是否在私密模式,都不需要设置任何东西。

打开这个窗口

选择窗口 → 安全时间线…,或按 ⌘K 并挑选安全时间线。窗口会以概览标签页打开;左上角的分段控件可在概览与时间线之间切换。整个应用只有一个这样的窗口;再次选择该菜单项会把它带到前面。

概览标签页

位于概览标签页的安全时间线窗口:“过去 24 小时”与五个磁贴(已阻止 4、已允许 5、代理的凭据 2、已检查的软件包 2、已替换的个人数据 0)、一个“防护”表格,Payments API、Web app 与 Data pipeline 各一行,列为防火墙、供应链、护栏、提示注入、个人数据保护与凭据中转,以及一个“最近的拦截”列表,含一项防火墙拦截、一项护栏拦截与一项提示注入拦截。

概览的标题是过去 24 小时——“Bromure 的安全引擎为你的代理做了哪些判定。”它有三个部分。

磁贴

五个磁贴统计最近 24 小时的事件:

磁贴统计
已阻止判定为拦截的每一个事件(在时间线中为红色),来自任何引擎。
已允许判定为放行某项内容的每一个事件(在时间线中为绿色),来自任何引擎。
代理的凭据凭据中转事件:凭据替换、被拦截的外泄尝试,以及你从入侵警报中允许的主机。
已检查的软件包供应链事件:代理服务器看到的每一次软件包获取。
已替换的个人数据个人数据保护以替身换掉的个人数据值的数量——是值,不是请求数。

点击一个磁贴会跳到时间线标签页。代理的凭据、已检查的软件包与已替换的个人数据会以各自的引擎过滤后打开;已阻止与已允许会在所有引擎上打开,并以那个结果过滤。

防护

防护表格列出这台 Mac 上的每一台机器,附上它的颜色,并显示它开启了哪些防护——绿色勾号表示开启,灰色破折号表示关闭:

列打勾的条件
防火墙该机器在护栏窗格中有出向连接规则,或会拒绝未匹配的流量。
供应链至少有一层供应链防护是开着的(年龄门槛、OSV、socket.dev、脚本剥除,或 lockfile 询问)。
护栏护栏确实限制了某些东西:写入策略不是关闭的服务、一项数据库护栏、一条出向连接规则,或任何设为使用前询问的凭据。逐请求的不安全绕行(X-bromure-insecure)不算,因为它是放宽而不是限制。
提示注入至少有一个提示注入检测器是开着的。
个人数据保护个人数据保护的总开关开着,且至少有一个类别。
凭据中转总是:凭据替换无法关闭。

用它来找出那些比其他机器少了些防护的机器。要更改某一项,请打开那台机器的设置(见设置参考)。

最近的拦截

最近的拦截列出最近 24 小时内最新的拦截,最新的在前,最多八项:什么被拦截、引擎与判定,以及距今多久。没有任何东西被拦截时,这份列表会隐藏。

时间线标签页

位于时间线标签页的安全时间线窗口:一个“过滤事件…”字段、“所有引擎”弹出菜单、“8 个事件”、“导出…”与“清空”按钮,以及一个含时间、工作区、引擎、条件与判定列的表格,列出个人数据保护、提示注入、供应链、防火墙与凭据中转的行,以蓝、红、绿标色。

时间线是一张包含每个事件的表格,最新的在前:

列显示
时间判定的日期与时间。
工作区事件发生所在的机器。当你镜像远程 Mac 时,它会显示 Mac · 机器。
引擎哪个引擎做的判定,附它的图标。
条件引擎看到的东西:主机、软件包、片段、密钥…把光标移上去可看完整文字;文字可以选取与拷贝。
判定它判定了什么,以颜色编码。
(最后一列)防火墙的行会有一个快捷操作按钮:允许…、阻止…或规则…——见防火墙快捷操作。对于被 OSV 或 socket.dev 拦截的软件包,允许… → 在此工作区中始终允许 … 会将其加入工作区的受信任软件包(加入后显示现已允许)——见信任被拦截的软件包。

颜色在这个窗口中处处同义:

  • 绿 — 已允许:放行、通过、已签名。
  • 红 — 已拦截:拒绝、驳回、扣留。
  • 蓝 — 信息性:既不是放行也不是拦截的转换,例如凭据替换、经年龄门槛过滤的版本列表,或被剥除的安装脚本。

表格上方的工具栏可过滤它:

  • **过滤事件…**会匹配引擎、条件、判定、机器名称与 Mac 名称中的文字。
  • 引擎弹出菜单(默认为所有引擎)列出有事件的引擎。
  • 结果弹出菜单(默认为所有结果)把表格缩到已阻止或已允许的事件。
  • 当你至少镜像一台远程 Mac 时,会出现一个机器弹出菜单:所有机器、此 Mac,或某一台远程 Mac。
  • 事件计数(“8 个事件”)会反映过滤条件。

清空会清空窗口。它只是把事件隐藏起来:它们仍在磁盘上,但已清空的事件在应用重新启动后不会回来。**导出…**在下方说明。

各个引擎

引擎它的行记录什么判定示例
凭据中转线路上的凭据替换(凭据)、外泄尝试,以及从入侵警报中允许的主机。“已换入 sk-a…9f”(蓝);“已拦截——外泄尝试,VM 已暂停”(红),若该机器关掉了外泄警报则为“已拦截——外泄尝试(警报已关,VM 未暂停)”;“用户已于本会话允许”(绿)
凭据使用主机代表代理执行的 SSH 签名与 AWS SigV4 签署。“已签名”(绿)
防火墙出向防火墙的裁决,按主机、端口与协议,并附上做出判定的规则——没有规则命中时为“默认策略”——直接连接与经由代理设置的连接皆然。主机是程序所请求的名称(www.wikipedia.org),而不是它解析到的 CDN 名称。同一个目标只有在距上次报告已过一分钟后,或在规则变更后立即,才会再次报告;允许的连接只有在机器记录它们时才会列出,且重复的会折叠成一行并附计数。因规则变更而被切断的已打开连接会有自己的一行。“允许——allow tcp github.com:443”(绿);“拒绝——默认策略”(红);“连接已关闭——‘allow tcp github.com:443’不再允许它”(红);与规则无关而被丢弃的连接(IPv6、QUIC、IP 分片)为“拒绝”(红)
护栏写入策略的拦截(护栏),附方法与路径。“已拦截——…”(红)
供应链每一次软件包获取,包含 apt 的 .deb 下载(供应链保护)。“已检查”、“已下载”(绿);“已检查——比冷却期更新的版本已隐藏”、“已剥除安装脚本”(蓝);“已拦截——…”(红)
提示注入检测命中,附检测器、来源与一小段片段(提示注入检测)。“记录”、“已允许”(绿);“已拦截”(红)
个人数据保护个人数据被替换的请求,附各类型的计数与主机——绝不含值(个人数据保护)——以及扫描用尽模型预算的请求。“已换成替身”(蓝);“部分——已达模型预算;仅套用模式规则”(蓝)
代理委派一个代理通过委派发给另一个的每一条消息。“已转发”(蓝);“已扣留——提示注入”(红)
上游 TLS主机拒绝信任的上游证书,以及逐请求不安全绕行的使用。“已拦截——…”(红);“已允许——已跳过证书验证(X-bromure-insecure);未注入任何凭据”(绿)

防火墙快捷操作

防火墙的行可以当场更改机器的出站连接规则。使用该行最后一列的按钮,或在该行上右键点击。更改会存储到机器上,若它正在运行则立即生效——无需重启。

  • 被阻止的连接——允许 主机:端口 会为恰好那个主机、协议与端口添加一条允许规则,并放在最前面,好胜过阻止它的规则。当主机是子域名时,也会提供允许整个 域名:端口(例如 api.github.com 对应 github.com),它涵盖所有子域名——但 CDN 与共享主机域名(cloudflare.net、cloudfront.net、amazonaws.com、github.io、herokuapp.com…)除外,在那里“整个”会意味着该提供商的每一位客户。主机解析时经过的其他名称(它的 CDN 别名)会接着以确切主机的形式提供。每一项都可选始终、15 分钟、1 小时或直到工作区停止;有时限的规则会在时间到时自行关闭。如果相同的规则已经存在,菜单会先说明它的状态(已关闭,或开启到何时),所以重新允许绝不会悄悄缩短它。如果是拒绝规则阻止了它,也可以关闭或移除那条规则。
  • 由规则允许的连接——关闭规则会保留规则但让它不再命中(在编辑器中再次勾选即可恢复);移除规则会删除它。更改后被拒绝的连接会被切断。
  • 因没有规则命中而被允许的连接——阻止 主机(或阻止整个 域名)会添加一条针对它所有协议与端口的拒绝规则。

在这里创建的规则使用程序所请求的名称,也就是代理检查的同一个名称,所以无论程序如何连接都会成立。

如果规则在这一行记录之后已经更改——被阻止的主机后来被允许了,或反过来——按钮会显示现已允许或现已阻止,而它的菜单会指出现在做出判定的规则(或默认策略),而不是再次提供同样的更改。

快捷操作只出现在规则更改能影响的行:IPv6、QUIC 或分片的丢弃不会有,web 规则造成的 HTTP 方法阻止也不会有。在远程 Mac 的行上,按钮会呈灰色:请在运行那台机器的 Mac 上,于它的设置中更改规则。

注意:如果机器的设置正开着,规则表会接收这项更改。未存储的编辑会保留:更改会逐条规则合并进去,表格上方会有一条说明。如果你的编辑无法合并(有一条规则还无法解析),说明会提供重新载入(采用已存储的规则)或保留我的编辑。

时间线只记录安全判定。文件读取、命令、工具调用与模型用量都不在其中;那些属于追踪。

导出事件

导出…(在两个标签页的工具栏上都有)会把事件存成一个 CSV 文件,默认名称为 bromure-security-<日期>.csv。从时间线标签页导出时,它会存下表格所显示的内容,应用当前的过滤;从概览标签页导出时,它会存下窗口中的每一个事件。行的顺序由旧到新,列为 time(ISO 8601)、machine(“This Mac”或远程 Mac 的名称)、workspace、engine、condition、decision 与 outcome(allowed、blocked 或 info)。

存储与保留

  • 每个事件都会被追加到 ~/Library/Application Support/BromureAC/security-timeline/ 中的每日文件,每个事件一行 JSON,文件名为 <yyyy-MM-dd>.jsonl(UTC 日期)。
  • 超过 90 天的文件会被删除。
  • 启动时,窗口会重新加载最新的 5,000 个事件,内存中最多保有 5,000 个;更旧的仍留在文件里。
  • 事件只保有预览:像 sk-a…f9q3 这样的令牌预览、片段预览、个人数据计数。不会写入任何秘密或个人的实际值。

远程 Mac

引擎在承载那些机器的 Mac 上运行。当远程客户端镜像另一台 Mac 时,它会收到那台 Mac 最新的事件,并在自己的安全时间线窗口中,与本机的事件并列显示。每一台被镜像的 Mac 的事件都与这台 Mac 的分开保存,这样机器弹出菜单才能把它们分开,而工作区列也能写出该 Mac 的名称。

与企业遥测的关系

在已向 bromure.io 注册的 Mac 上,同样的引擎事件也会以云端事件(credential.token_swap、egress.firewall、supply_chain.fetch、prompt_injection.detection、privacy.pii_swap 等)送到组织,除非该机器处于私密模式。本机的安全时间线与此无关:不论那台 Mac 是否已注册、不论私密模式是否开启,它都会记录每一个事件。见追踪与审计与企业版。