这两天的推上有一件挺热闹并且骇人听闻的事,夸张一点地说: 在 MacOS 上,包括 Apple、运营商、CDN、中间人在内的任何人 / 设备都完全知道你在何时打开了哪个 App。
第一次听到这个消息时你是什么反应?反正我是惊呆了。 至少我个人作为开发者而言是较注重隐私的,而且在隐私方面,我也挺相信苹果,但是出了今天这一茬,简直是毁灭性的打击。
推友们在说啥
ocsp是非加密的,等于苹果把你机器上每个运行的软件的证书都请求了一次,那么意味着运营商和所有网络上监听的人,都借此知道了你安装了什么app。因为检查是实时的,也就知道了你在什么时间运行了它。换句话说所有人都知道你几点打开过twitter app…
关于 macOS OCSP 我只提醒一点:如果你在墙内的话,由于它走的非加密 http,一个最简单的网络监控就能够知道在你的 macOS 上运行了什么程序,比如常见的 ShadowsocksX-NG 考虑到最近因为翻墙被请喝茶的各种报道,请自己编译这些软件,或者下载后移除签名: codesign --remove-signature
某应用用户应该发个邮件问问作者:听说Mac上的应用有OCSP隐私泄露问题,继续在国内用安全吗? 就想知道作者会不会捏着鼻子回复No body knows OCSP better than me
有太多的讨论,我就不过多的贴推文了。知道是怎么回事足以。
OCSP 是什么
OCSP 全称是 Online Certificate Status Protocol,即在线证书状态协议。为什么要有这个?且从数字证书说起。
苹果为了“保证在 MacOS 上运行的应用安全”,所以需要开发者用其密钥对所发布的应用进行数字签名,然后才能上架发布。 而开发者的密钥由苹果签发,所以,当有一天,苹果觉得开发者违反了它的条款等等,就能主动吊销(Revoke)此开发者的证书。 那 MacOS 怎么知道证书已经被吊销了呢?每次启动一个应用的时候,检查一下该应用的证书的状态即可。 向谁检查?http://ocsp.apple.com。注意到,这是一个 HTTP 协议的地址,而非 HTTPS。那就是,明文、不安全的,非常容易被人知道传输的内容。
至于为什么不走 HTTPS?这貌似涉及到是先有鸡还是先有蛋的问题。我暂时还不太懂,这里不过多讨论,可以看这里。
这里有一篇文章比较详细地讲解了 MacOS 上 OCSP 的工作过程:Can't open apps on macOS: an OCSP disaster waiting to happen。
如何规避检查
最最容易想到的办法自然是在本地 /etc/hosts
文件中屏蔽(污染)掉以下域名。目前已知如下:
- ocsp.apple.com
- ocsp.g.aaplimg.com
另外还有几个 CNAME,我觉得上面几个就够了。
- ocsp-lb.apple.com.akadns.net
- ocsp-cn-lb.apple.com.akadns.net
- ocsp.apple.com.download.ks-cdn.com
- k128-mzstatic.gslb.ksyuncdn.com
- ocsp.apple.com.cdn20.com
屏蔽掉域名以后,会有什么后果?MacOS 的 fall-back 规则是什么呢?
- 如果检查失败,默认通过?
- 如果检查失败,默认不通过?
根据上面较详细介绍 OCSP 的文章可以知道苹果目前是前者,默认通过。 所以我们目前来说,污染域名的方式是可行的。 但是如果哪一天苹果悄悄改成默认不通过。 岂电脑岂不是废了?目前感觉还不太可能,不然没网的时候岂不是不能用电脑了?
其它阅读:如何避免App被苹果永久撤消或签署。
我的实验
怀揣着一堆的疑问,我打开了 Wireshark,设定了 http
作为过滤器,然后开始抓包,然后随便打开了一个应用,果然立马抓到了包!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
|
淦,太可怕了。一打开的时候就立马发出了,路径中包含了证书相关信息,就能够推断出正在使用的应用。
从响应中还能看到 KS-CLOUD
字眼,没错,这是金山云的 CND、缓存服务器之类的东西。这些信息无疑被它们掌控了。
我会先把上述的几个域名先屏蔽,然后观察一阵子,看看有没有什么不良后果。(其实那篇详述 OCSP 原理的文章解释过了)。
参考
[REFERENCES]