在我睡觉时,手机在偷跑什么流量

2023-08-08 Tom

曾经想做过这个有趣的主题,现在它来了——在我睡觉时,手机在偷跑什么流量。我认为可视化的数据能够更好的展示当前网络的情况,毕竟你才是这个家庭网络的主人,你有权知道。并且我尝试发现发现一些异常的流量,它将有助于更好的保护隐私。你可能觉得像 Pi-Hole、AdGuardHome 以及 NextDNS 已经提供了网络流量的情况,但我觉得还不够。于是2023年8月3日凌晨,共计三小时,在路由器 tcpdump 捕获流经接口的全部数据包。最终得到大小为 76MB 的 pcapng 文件。想直接看原始表格分类结果的请访问这里

数据处理还是花费了我的一些时间,用到了 Maxmind GeoLite2 的免费数据(最终只用到了 AS 信息,城市、国家没啥用),HTTPS 请求提取出 SNI 信息,HTTP 则提取 Host 头。结果还是剩下一堆不明流量。由于 DNS 数据包我也捕获了,根据解析结果反向确定了域名。这一做法有点像是 Passive DNS,许多安全大厂都将解析结果保留,以供后期的溯源,比如 360 PassiveDNS 系统(但目前无法访问了),思科也有相应的付费产品。所以当安全厂商收购或是推出 DNS 公共解析服务并不是那么没有道理。我也可以利用类似的服务,确定它的真实身份。幸运的是 VirusTotal 提供了一个免费的限速服务。剩下的话就是确定各个协议了,这也是最耗时的,尽管 Wirshark 能够解析绝大部分协议,似乎不少连接还是使用私有的协议。确定协议后,结合其他信息就能方便对应用进行分类了,来看分析结果吧。

按应用分类

应用流量流量占比
一加[1]28.67M41.47%
腾讯[2]23.51M34.01%
字节[3]13.02M18.83%
小米1.16M1.68%
高德[4]1.05M1.52%
谷歌[5]0.59M0.86%
未知应用0.24M0.35%
阿里[6]0.22M0.33%
网心科技[7]0.07M0.10%
华为[8]0.05M0.07%
友盟0.04M0.06%
朝夕光年[9]0.03M0.04%
中国移动0.02M0.03%
迅雷0.02M0.02%
Voice.com[10]0.02M0.02%
金山云0.01M0.01%
秒针分析0.00M0.00%

[1]:其中包括欢太商城,OPPO 域名。[2]:由于准确区分 QQ 和微信难度较大(因为大多用的无法识别的私有协议),故归为一类。[3]:字节系包涵旗下的头条的流量,不再单独区分。[4]:仅代表高德自身域名流量,尽管它已经被阿里收购。[5]:谷歌包含谷歌境内合资公司谷翔的流量。[6]:阿里包含阿里云、潜在的淘宝流量,不再细分。[7]:指深圳市网心科技有限公司,根据官网是一家提供边缘计算的公司。[8]:华为包含华为云,以及已知的华为使用的域名,如 dbankcloud.cn。[9]:指域名为 dailygn.com 的流量,不确定身份。[10]:指域名为 volces.com 的流量,应为某个 SDK 流量。

其实我注意到一加在跑流量,但是我在机器上开了一个 VPN 确定到底是哪个应用在偷跑,流量就停了…不得不说腾讯似乎真的很喜欢 GQUIC,所有这些 GQUIC 流量都是它贡献的(见下协议分类),另外微信在使用一些私有的协议,能看到一些文本,但又不像 HTTP。高德地图的域名 cgicol.amap.com 已经确定是用于上传基站、Wi-Fi 位置信息,好家伙居然偷偷上传了 1MB 多的信息。谷歌,因为连接不上服务器所以只能产生这些流量了,谷歌喜欢 TLS 和 QUIC 并用,QUIC 流量几乎都是它产生的(见下)。华为产生的流量比较少,不知道是不是因为设备比较老,还是真的比较隐私友好。还有一些我听都没听说过的应用。我真不知道它们是干嘛的,迅雷可能是某应用的 SDK 或者小米的迅雷下载服务造成的。

这里重点强调一下网心科技,域名看起来是 NAT 打洞,协议为 UDP、HTTP,不出意外为 P2P 应用。官网宣称“整合闲置带宽、计算、存储资源,打造绿色计算网络”也太道貌岸然了。搜索了一翻就是 PCDN,白嫖家宽用户,然后给一些小恩小惠。

我曾经有捕获到家宽网络与世界各地家宽疯狂连接的,根据端口的流量特征,发现来自腾讯系应用:

按协议分类

协议流量占比
未知 TCP53.9%
TLS33.7%
GQUIC11.2%
HTTP0.7%
DNS0.1%
NTP0.1%
QUIC0.0%
未知 UDP0.0%
XMPP0.0%

这里得先把局域网内的流量过滤掉,比如 ARP 协议这些,以避免影响结果,看了一眼局域网内的流量只有 1.8M:!(ip.src==192.168.0.0/16 && ip.dst==192.168.0.0/16) && !arp || dns(供参考,可能还有其他的)。

协议分类真的是吃力不讨好的活,所以直接用了 Wireshark 的解析结果。基本上一半都是未知协议(这里指无法被具体分类到应用层的协议)。HTTP 协议全是微信的 MMTLS。

在检查中,还发现存在 DNS over TLS (114.114.114.114) 流量,但是没有握手成功,目前的推测是腾讯 Tim 的流量。并且我惊讶地发现似乎存在绕过本地 DNS 解析的情况,比如 resolver.mi.xiaomi.com(HTTP?),mobile.ttgw.httpdns-hl.l.bytedns.net(UDP),httpdns-sc.aliyuncs.com(TLS),这些域名均没有在本地存在解析记录,也提取不到任何表明服务器身份的信息,完全是靠 VirusTotal Passive DNS 的结果发现的,意味着你没法在 DNS 和应用层级别屏蔽它。而微信的 dns.weixin.qq.com.cn 比较良心了,既有本地 DNS 解析,又有 Host 头,很好确定身份。此外还有一些直连 IP 却未找到相应解析的,可能是应用的 DNS 缓存造成,也可能是真的写死 IP 的,这里无法推断。

一圈看下来,还是属于字节系的域名最多,dig.bdurl.net 中的 bd 我甚至以为是百度系,结果发现这里的 bd 是 ByteDance 的意思。其他的话:腾讯 QQ 协议应该还是老的,还是能够看到明文的 QQ 号,一眼就能分类成腾讯系。也确实有应用在使用 NTP 协议,但是由于我 ThinkPad 也在同步,对结果有些干扰。

以上就是静置时家宽网络下的手机流量分析,利用协议本身的信息、目标网络的归属确定应用流量的身份。同时也对私人网络流量控制提出了挑战,在不使用商业流量产品下如何网络自主,还是任由他人摆布?在这个目前不可能摆脱专有软件生活的世界,这个答案似乎并不好寻找。

小字提一下:事实上,最近我在尝试了 Rethink: DNS + Firewall,我觉得它很有创意,DNS 屏蔽列表 + 应用防火墙,支持指定上游 DNS/DoH,支持 Socks5 代理转发。但是不太稳定,比如有时无法开机自启。缺点也很多,无法自定义过滤列表,必须从 Rethink 官网下载;备份恢复不完整;协议分类不准确,甚至把 IMCP 协议结合不知道哪里来的 25 端口,识别成 SMTP 协议。我倒是期望能够增加应用级别的“阻止未在使用的应用访问网络”,或是能在“全局”下添加例外,那倒是很实用的。