邮件中外部内容的加载、用户跟踪及隐私安全

陪她去流浪 桃子 2021年06月19日 编辑 阅读次数:2111

苹果的 iOS 系统最近更新到了版本 15,针对“邮件”,其提高了对于隐私的保护措施,防止用户被追踪。 邮件相关的隐私问题,理应在邮件诞生之初就伴随而来,但是鲜有人注意。

最近也正值某著名安全博主较长时间“消失”这样一个时期,这篇文章借机简单复盘一下这些问题,并提出一些建议,希望大家注意隐私安全。

本文适用于所有有邮件的地方,与苹果/iOS 无直接相关。

邮件带来的隐私问题

邮件并不只限于传送简单的纯文本内容,基于MIME 协议它还可以传送包含像是超链接、图片、音频、视频、程序等外部内容。 这正是日常见得最多的邮件形式。

很显然,当阅读这类包含外部内容的邮件的时候,有一些问题需要注意:

  • 如果邮件里面有图片存在,在你阅读邮件的时候,大多数邮件客户端会自动加载并显示这些图片。 既然会加载图片这个外部内容,那么你就会与图片的服务器建立连接。 这样一来,服务器就能明确地知道你在:

    • 何时(通过你请求下载图片的时间);
    • 何地(通过你建立 TCP 连接时的 IP 地址,国内宽带应该是完全实名的,这样能直接定位到你的身份证);
    • 如何(你的浏览器/客户端 的 UserAgent,可能包含语言、版本号、操作系统等);
    • 几次(忽略缓存的话,每次打开邮件都会重新请求);

    请求了这张图片。

    图片是用一个 URL 来标识的,简单到形如:

    https://example.com/picture.png

    但是也可能很“复杂”,路径中可能以明文或“某种加密形式”包含了你的邮件地址,比如:

    https://example.com/your.email@example.com/picture.png (未转码)

    在参数中同样也是完全可行的:

    https://example.com/picture.png?email=your.email@example.com (未转码)

    这样做的用意就非常明确了,你每次打开邮件阅读(随之请求图片),记录了你的信息的图片地址,就会被发送给服务器。进而,服务器就清清楚楚地知道“你的一切活动”。

    很多的邮件发送方不会做这种“明目张胆”的事,他们会悄悄地放入一张尺寸大小只有 1*1 的透明像素图片。 此时你应该是毫无可能察觉到它的存在,也无法察觉到你的网络活动已经被跟踪了。 这种事情很可能发生在你不经意地打开了一封别人发往你公开邮件地址的邮件,这是极其危险的(对一些情况来说)。

    所以你要关闭图片自动显示吗?这……挺难受的,我也不知道怎么办。

  • 如果邮件里面有链接(通常非常长,含有大量信息)存在,并且你点开了它,那你就主动做了跟显示图片类似的事情。

谷歌邮箱做了什么?

很多人会推荐你用谷歌邮箱(Gmail),而不是国内或其它的邮箱,所以是为啥?为此我第二次研究了一下这个过程。

说第二次研究,是因为,我之前在公司写邮件服务的时候就遇到过这个问题:我们尝试用内网链接来表示邮件中的图片。 结果是不行的,图片会走谷歌的代理,它不知道我们的内网,于是图片无法访问。

  • “何地”及“如何”问题

    当你打开一封包含图片的谷歌邮件的时候,会发现,图片不是你的浏览器直接请求的,而是会被一个代理服务器帮你请求。代理服务器的地址类似:

    https://ci3.googleusercontent.com/proxy/VRSXFBwsBzPNEoDs1MdIe1eLmMbnGpTVchF7L5_8KUcvjf0Y=s0-d1-ft#https://example.com/picture.png

    可以看到,图片的地址被替换了,没有直接访问图片地址的服务器。图片服务器就只能看得到代理服务器的 IP 地址了,你的地址被“隐藏”起来了。

    如果做实验在服务器上观察图片的请求信息,从 nginx 的日志可以看到如下一条日志:

    66.249.84.13 - - [18/Jun/2021:15:55:51 +0000] "GET /picture.png HTTP/1.1" 200 336668 "-" "Mozilla/5.0 (Windows NT 5.1; rv:11.0) Gecko Firefox/11.0 (via ggpht.com GoogleImageProxy)" "-"
    

    可以看到,请求的来源 IP地址是来自于谷歌云。UserAgent 也显示了其来自 GoogleImageProxy。

    以上解决了“何地”及“如何”的问题。

  • “何时”问题

    遗憾的是,我观察了 GoogleImageProxy 会何时请求我的图片,结论是:我打开邮件的时候。

    这我有点意外,为什么没有在我打开前就预加载到谷歌自己的代理服务器上? 这样一来,我打开邮件的时候可以直接到代理服务器下载。原来的图片服务器完全不知道我何时查看了图片。

    留下一个疑问。

  • “几次”问题

    我在多次查看邮件(甚至刷新页面)时,虽然看到有向谷歌的代理服务器重新请求图片,但是我的图片服务器未收到重复请求。

    所以可以确认谷歌邮箱有缓存图片并解决“几次”查看邮件的问题。

国内的邮箱,我测试过 QQ 邮箱,它是直接访问的我的图片服务器,没有走代理。所以可以定性为不安全? 国内的其它的邮箱我没测试了。一些不支持 HTTPS 的邮箱(或默认不是的),我根本没有使用的想法。

苹果 iOS 系统做了什么?

我还不知道,我简单测试了一下,我发现它目前并没有完全履行下面两张图上所说的行为:

结语

希望大家注意隐私安全。

标签:苹果 · 安全 · 谷歌邮箱