最近推上热闹的 MacOS 系统 OCSP 用户应用隐私泄露问题简记

陪她去流浪 桃子 2020年11月17日 编辑 阅读次数:3789

这两天的推上有一件挺热闹并且骇人听闻的事,夸张一点地说: 在 MacOS 上,包括 Apple、运营商、CDN、中间人在内的任何人 / 设备都完全知道你在何时打开了哪个 App

第一次听到这个消息时你是什么反应?反正我是惊呆了。 至少我个人作为开发者而言是较注重隐私的,而且在隐私方面,我也挺相信苹果,但是出了今天这一茬,简直是毁灭性的打击。

推友们在说啥

virushuo

ocsp是非加密的,等于苹果把你机器上每个运行的软件的证书都请求了一次,那么意味着运营商和所有网络上监听的人,都借此知道了你安装了什么app。因为检查是实时的,也就知道了你在什么时间运行了它。换句话说所有人都知道你几点打开过twitter app…

quakewang

关于 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
GET /ocsp03-wwdr09/ME4wTKADAgtAOUwQzBBMAkGBSsOAwIaBQAEFADrDMz0cWy6RiOj1S%2BY1D32MKkdBBSIJxcJqbYYYIvs67r2yANGFUlSjtwIIdVxb%2Bnqj1bA%3D HTTP/1.1
Host: ocsp.apple.com
Accept: */*
Accept-Language: en-us
Connection: keep-alive
Accept-Encoding: gzip, deflate
User-Agent: com.apple.trustd/2.0

HTTP/1.1 200 OK
Content-Type: application/ocsp-response
Content-Length: 2534
Connection: keep-alive
Server: ATS/8.1.1
ETag: "468466baf39bef95db0acc17fa3edc9214f7f7cd"
Date: Mon, 16 Nov 2020 15:59:57 GMT
Last-Modified: Mon, 16 Nov 2020 16:00:02 GMT
Expires: Tue, 17 Nov 2020 02:59:57 GMT
Age: 7297
Cache-Control: max-age=39600,public,no-transform,must-revalidate
Accept-Ranges: bytes
Via: http/1.1 jptyo5-vp-vst-001.ts.apple.com (ApacheTrafficServer/8.1.0), https/1.1 jptyo5-vp-vfe-003.ts.apple.com (ApacheTrafficServer/8.1.1)
CDNUUID: 65d32f98-6e0e-4fd8-a7c4-d18a954cf36a-969287156
X-Cache: HIT KS-CLOUD
X-Cache-Status: MISS from KS-CLOUD-XG-02-02
X-Cache-Status: PENDING from KS-CLOUD-JN-MP-13-09
X-Cache-Status: HIT from KS-CLOUD-HUZ-CT-21-10
X-Cache-Status: HIT from KS-CLOUD-JM-CT-03-15
X-KSC-Request-ID: 9add9c64b0d480fe85f410a6cad8e970
X-Cdn-Request-ID: 9add9c64b0d480fe85f410a6cad8e970

淦,太可怕了。一打开的时候就立马发出了,路径中包含了证书相关信息,就能够推断出正在使用的应用。

从响应中还能看到 KS-CLOUD 字眼,没错,这是金山云的 CND、缓存服务器之类的东西。这些信息无疑被它们掌控了。

我会先把上述的几个域名先屏蔽,然后观察一阵子,看看有没有什么不良后果。(其实那篇详述 OCSP 原理的文章解释过了)。

参考

[REFERENCES]

标签:macOS · OCSP · 隐私