接到用户反馈,血量消耗问题,我们发现了一个 macOS/iOS 系统持续大流量请求导致大量流量消耗的问题。
问题
追踪
打开 Surge Dashboard,看到如下的情形:
可以看到当时在持续不断的进行下载动作的进程名称是 com.apple.Safari.SafeBrowsing.Service
,看请求地址是 safebrowsing.googleapis.com。
这是 Safari 和安全流量相关的服务,通过 Snitch 的数据库查到对其的说明:
Safari has built-in support for Google‘s Safe Browsing service to identify fraudulent and unsafe websites. Right before Safari navigates to a certain website, the website gets checked for possible security concerns using Google’s Safe Browsing online database. Accessing the online database requires connections to Google servers.
大致是介绍 Safe browsing (安全浏览)是谷歌提供的一种服务,利用谷歌持续更新的恶意网址和钓鱼网站的数据集,来检测 url 的安全性,帮助我们有效抵御网上诱骗、社交工程、恶意软件、垃圾软件、恶意广告、侵扰性广告以及侮辱性网站或扩展程序带来的危害。
说的大概是该服务是针对 Safari 浏览器启用的,在 Safari 要帮你导航到下一级页面的时候,会识别该页面是否是欺诈?或者不安全⚠️的网站。
我们在 Safari 的 Security 菜单中可以找到启用关于欺诈网站的检测功能的开关。以我本机上看到的内容如下
Safari uses Tencent Safe Browsing and Google Safe Browsing to identify fraudulent websites.
意思就是 Safari 使用腾讯的安全浏览服务和 Google 的安全浏览服务来鉴别欺诈网站,腾讯是本地化的产物。
通过针对该进程的出口请求 host 也可以验证这一点,该进程发起的网络请求会有如下两个 host 出口:
safebrowsing.googleapis.com
safebrowsing.urlsec.qq.com
其实在 iOS 设备上也有同样的进程来做这件事情,抓包有时候也能捕捉到这两个请求〔国行〕:
处理
尝试关闭 Surge 作为系统流量代理之后,看到 Activity Monitor 中进程又开始了下载,如下图所示,只是连接请求主体从原来 Surge 切换到了独立进程而已〔Surge 会接管网络流量,因此之前该任务的下载会算到 Surge 的头上〕,但是针对该 host 的下载任务一致持续不断。
而在我关闭 Surge 作为代理之前,可以看到该进程大概在 7 个小时之内耗了 12.4 GB 的流量。
最后处理很简单,只需要将 safebrowsing.googleapis.com 或 com.apple.Safari.SafeBrowsing.Service 过滤掉,或者绕过代理改为直连即可。