【245】41周 科普:WWDC 2018 中的 Fingerprint 与隐形的隐私

Fairyex
06月14日

科普:WWDC 2018 中的 Fingerprint 与隐形的隐私

| 本文为付费栏目文章,您已订阅,可阅读全文 |
Hum:在 WWDC 2018 中,Craig Federighi 在谈到新版 Safari 在隐私方面带来的提升时,这张指纹的图片让我印象很深:

WWDC
浏览器的配置、字体、插件等等特征,都可以被数据公司利用,来建立一个独特的指纹,来追踪你的设备,并在你浏览过的网页中为你提供广告。
而在 Mojave 中,苹果使得根据这种机制来创造用户指纹的过程变得更加困难。对于数据公司来说,我使用的 Mac 将和其他人的 Mac 变得更接近。
这让我意识到,我们传统意义上理解的隐私,已经和行业里的概念完全不同。在知道苹果的新系统对这种新的隐私获取方法采取了对策的同时,我对这种技术与原理也产生了好奇。
因此,我邀请了付费教程《下载科普:隐私、稳定与速度》的作者 @Fairyex,来写这篇关于 Fingerprint 与隐私的科普文章。以下为正文。

隐私信息与隐私泄漏

Hum 意识到我们理解的隐私和业内的隐私概念不同,确实是如此,不过理解当下隐私信息的概念也并不难。
其实一句话就能解释清楚什么是隐私信息 —— 能将你和其他人区分开来的信息就算是你的隐私信息。
比如我的昵称是 @Fairyex,这不是隐私,因为相同昵称可能有很多人。而在少数派里,你们后台,你可以看到「昵称 Fairyex,邮箱为 YYY@ZZ.COM」,这种能将你区分开来的信息可以称为隐私信息。
服务商在你同意的用户协议指定范围内(论坛,应用等)获取,使用这些信息是合法的,不然他就没办法给你提供服务。
举个例子:我在外卖平台上同意了用户协议,并填写了地址电话,那么,平台员工在送外卖时看到我填写的地址电话,就不算隐私泄露。

美团的隐私政策
美团外卖隐私政策,完整文档地址
那么什么时候才算是隐私泄露呢?当这些隐私信息出现在用户授权之外的地方,就是隐私泄露
接着刚才的例子来说,当 A 外卖平台倒闭,转让用户信息给 B 外卖平台;外卖小哥偷偷把你的信息卖给竞争对手,虽然这两种行为的责任人不同,但对于你来讲只有一个结果 —— 隐私数据已经泄露。

表面与隐形的隐私信息

上面举的所有例子是不是都很好理解?的确,谈到隐私泄露时大部分人能想到的都是与他们生活息息相关的直接信息。这些信息是很重要,但是我们不能只注意到这些明显的表面隐私。一些我们忽略的,看不到的隐私信息正在泄露,而且带来的危害不可小觑。
当然,你可能也不是对此全然不知,至少你在经历或经历过这些事:
  • 在淘宝,百度等地搜索某个关键词之后,浏览其他网站广告会变成和你搜索关键词相关的内容;
  • 访问过的即使是完全不同类型的网站都会「不约而同」显示同一内容的甚至同一条广告;
  • 日常生活中口头聊天,聊天软件的内容突然变成了你的淘宝商品推荐列表/相关广告推广内容,就像监听了你一般;
  • 和别人买同一样商品的价格不一样,购物节领到的优惠券与折扣不一样,甚至就连打车都价格不一样……
在经历这些乃至更多似乎有某种联系的情境后,你应该也会产生自己的猜测。
实际上,我们在互联网上遇到的所有「差别对待」情况背后都和不知情下泄露出去的「秘密信息」息息相关。

数码世界的指纹:Fingerprint

过去我们认为,在网上,如果想要针对某个人榨取更加彻底的利益,那么他们就必须弄到我们的账户密码、或者我们账号绑定一个手机号码等等。这其实已经是比较「古老」的想法了。

账户实名认证
随着人们隐私的逐渐觉醒,这些信息越来越难以获取。不少人已经养成了不同账户使用不同密码的习惯,甚至还有二步验证,有的人二步验证所用的电话号码也是数字电话,和自己的现实生活没有交集。
同时,这些信息本身,不能提供太多关于这个人生活习惯的信息。就像你知道一个人的名字、住址和电话,但也不知道他到底什么时候出门,喜欢吃什么用什么。
当然,有了基本信息,再去查这些附属的信息会容易一些。不过在互联网世界,不必这么大费周章,也能达到他们的目的:
只要你碰到互联网,即使不注册账号不绑定手机不暴露自己的身份信息,所有拿到你这些信息的广告商/企业都能准确定位你,然后(只)让你看他们想让你看到的东西。
在说明 Fingerprint 如何获取信息之前给大家看一个笑话(来源知乎用户沛沛地回答):
高考前十天。
下午的自习课,同学都在紧张的复习, 突然,一道黑影跑进教室:
来,把这套卷子做了,作业不用写。
某同学:老李打算泄题给我们吗?
语文老师:不,我掐指一算,可能有类似题型。
班里 *%¥@&$# 讨论了半天。 我:出题人不都被关起来了,您这是跟他们神交了吗?
突然,老李露出一个诡异的微笑。 呵,年轻人 jpg.
给每个出过题的扣电话。 谁不接就一直扣,一直不接,那就是出题去了。
我把他这几年出的模拟卷都搜刮来了。为师只能帮你们到这了。 我们:目瞪狗呆。
想要解决问题,不回答也是一种答案。这种用于出人意料地绕过安全措施获取信息的方式,在互联网安全领域称为旁道攻击(又称旁路攻击、侧信道攻击。英文 Side-channel Attacks)。
其实很多旁道攻击压根就不能被称为一种技术,只是奇技淫巧的合集。随着互联网信息方面安全措施越来越完善,这种技术的使用会越来越常见。而 Fingerprint 就是最新的奇技淫巧。
在浏览网页时,我们的「身份」由如下部分或全部信息组成:
  • User Agent:相当于身份证上的姓名,性别,住址等信息。形如 Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36,在手机浏览器上就是通过更改 User Agent 达到打开电脑板网页的效果。
  • Cookie:可以在电脑本地保存的键值对(形如 XXX = XXX),只有过了设定的期限和手动才会删除。通常我们登录账号之后网页会生成一条由服务器颁发的唯一识别码写进 Cookie,相当于现实中的身份证号。平时我们登录之后不用再重复登录就是它的功劳。如果网站只验证 Cookie,把登录之后生成的 Cookie 复制到另一个设备就可以成功伪装登录。

少数派登录之后的 Cookie
其中,User Agent 可以由用户随意更改,Cookie 可以被用户经常清理。因此,通过这两个手段来确定「身份」并不是那么的稳定。但是,有些东西是大概率或短期不会变的,比如我们电脑/手机的屏幕分辨率,是否拥有某个硬件,系统使用的语言甚至是字体等等。
举个有些粗糙的例子:
  • 可能有几千万人用着 1080P 分辨率的设备,但;
  • 同时使用 1080P 设备和 Webkit 内核浏览器的可能只有几百万人,但;
  • 同时使用 1080P 设备和 Webkit 内核浏览器的中文用户可能只有几十万人,但;
  • 以上中文用户里面用着 Win10 1803 的可能只有几万人,且;
  • 用着 Win10 1803 开着 Adblocker 或者用 hosts 去广告的可能只有几千人,那么;
  • 如果他刚好装了一个阿里汉仪智能黑体字体到电脑里面,那么全地球就只有他一个。

层层定位
以上信息,甚至包括他反广告的手段,综合起来就成了他的「指纹」。这些信息原本就是无关隐私的,所以完全公开。任何一个网站,都可以通过简单 API 没有任何提示获取这些信息。
除了上面列出的这些内容外,系统设置,所在的经纬度、甚至阅读一百个字的时间这个级别的数百种我们想不到的类别的信息,都会构成我们在互联网上的「指纹」。
只要用户待在采集 Fingerprint 的网站上足够长,就相当于每次动态更新自己的指纹,让网站知道你还是你,还能放心地推送卫生纸广告和同城交友~

精确投放的广告
最可怕的是,你为了逃避隐私泄露而做的行为也成了一种参考信息,同时开启 Adblock,关掉 Js,开着隐身模式的人可不多哦。
就像前面所说,不回答也是一种答案。而且越不容易变化的数据(硬件 ID,屏幕分辨率)在生成 Fingerprint 的算法里面占的比重越大,像是 Cookie 和隐身模式这种经常会变化的数据比重基本没有,所以隐身模式并没有什么卵用。
少数派也有相关的文章介绍:《浏览器的隐私模式,真的能完全保护我们的隐私吗?》。
最后给大家看看 Fingerprint 长啥样,在我的装有 Google 框架手机上 FingerPrint 是这样子的,基本上所有系统的手机都有显示 Fingerprint 的地方,大家可以自己找找看:

Android 手机中的 Fingerprint

广告通过 Fingerprint 成为「附骨之疽」

Fingerprint 的应用十分广泛,今天我们只专注其中一点 —— 百度如何实现广告精准投放。就拿我前几天音响坏掉的经历来讲(开着隐身模式是假设):
  • 我在全新的,没有登录过百度账户的 Chrome 浏览器上开着隐身模式通过它搜索关键词「JBL 售后」,「3.5mm 耳机插孔接触不良」等关键词;
  • 这个时候搜索平台检测到我没有登录账户,开始收集特性产生一条 Fingerprint 发送给服务器,然后写入本地的 Cookie(开着隐身模式这里会失败);
  • 服务器把这条 Fingerprint 和搜索关键词/日期/点了什么链接等信息做成表(你正在被做成表放在专门的广告数据库中;
  • 我心想还是买个新的吧,与是关掉了浏览器做其他的事情,所有临时数据被删除,但是 Fingerprint 被保留了下来(开着隐身模式就什么都不剩了);
  • 过了几天我上网拿的时候打开了句子迷,它用了百度广告联盟的广告。打开网页同时通过 iframe 请求广告服务器加载广告。

网页的请求
我们平时所看到的网页广告大部分都是通过 iframe 的方式加载的,也就是一个网页里面加载另一个网页,我们看的广告实际上就是另外的完整网页。
  • 因为广告服务器和搜索平台是同一个根域名,所以它可以请求浏览器把搜索平台的 Cookie 发给它,成功获得 Fingerprint(如果没开隐身模式)。
  • 如果开了隐身模式,服务器一看 Cookie 上啥都没有,自动重新生成 Fingerprint,由于我用的是同一台电脑,所以 Fingerprint 和几天之前的是一样的。
  • 服务器拿到了 Fingerprint 在数据库上一对比,发现这玩意儿前几天搜索了 「音响」,刚好手里面接了几条音响广告,就给他看这个。
  • 于是我一整天无论在哪个网站都能看到这些个破玩意儿:

小广告
小贴士:这些广告的图片,因为都是通过搜索引擎关键词自动抓取,所以都跟 80 年代课本插图那个风格似的~
除了广告,几乎所有需要「个性化」的地方都能看到 Fingerprint 的身影。

自己动手验证 Fingerprint

说得再多都不如亲自动手实践一番来得直白,记得深刻。

在 browserleaks.com 上查看自己可以泄露的数据

browserleaks.com 是一个专门展示浏览器泄露数据的网站,在这里你可以亲自检查远程的服务器可以获得本地设备上的什么数据。

browserleaks
通过这个网站你可以了解到很多常规数据获取外的骚操作。举个例子,访问网站的时候服务器可以记录访问的 IP 地址这个大家都知道,可是你知道服务器还能通过 WebRTC 泄露方式获取你的内网 IP 地址,公网 IP 地址,DNS 服务器等等的数据吗?
有特别细心的派友会发现有些数据不是很准确,比如 IP 地址经纬度偏差通常比较大,那么这些数据还有价值吗?有的,因为 Fingerprint 的最终目的只是通过多种数据的差异确定一个身份,并不需要每个数据都是准确的,只要它们不会经常变化就行了。
再看看下面这张图,清楚地暴露了我整个桌面的配置:USB 摄像头,飞傲的耳机功放,JBL 的音箱,32 寸的 LG 显示器加上所有设备的设备 ID。

我的桌面配置
上面我说的「通过一个简单的网页知道你的地址,你用的手机还有多少电甚至你正在干嘛」也可以在这个网站里面测试,这个就留给各位去实践咯~

用 Fingerprintjs2 测试 Fingerprint

如此「实用」的技术在 Github 上自然少不了开源库啦,Fingerprintjs2 就是人气最高的一个 Fingerprint 生成库。
通过它提供的测试地址,我们可以自己测试各种数据的变动会对 Fingerprint 的生成造成什么影响。下面是我的电脑与手机分别开关隐身模式 + Cookie 产生的 Fingerprint。

电脑和手机上的 Fingerprint
通过以上的方式,详细你能够对自己在互联网上的「指纹」产生一个大概的了解。

MacOS Mojave 如何更有效地防止隐私泄露

苹果当然也认识到了这些技术给他们用户带来地信息安全威胁,作为以安全与尊重隐私闻名的苹果,它们的工程师怎么会对此置之不理呢,所以在 WWDC2018 上苹果宣布了新系统 MacOS Mojave 上地安全措施可以抵御 Fingerprint 和其他攻击手段。

传统的防护手段再次增强

首先新的 MacOS Mojave 在原本的基础上再次增强了对于更多敏感信息的保护,包括联系人,照片库,日历和系统闹钟提醒等信息。

更多的保护手段
这是系统级的 API 防护,任何应用,网站只有通过这些 API 才能获取相关信息。而一旦他们使用了这些 API,系统会自动拦截并弹出一个明显的不可自动跳过的提示,提示包括想要获取信息的应用/网站以及想要获取信息的内容,让用户有能力去控制。

地点信息

关闭所有非同域名网页组件

就像一个手机可能用了很多家的技术那样,一个网页也包含了很多第三方组件:来自广告联盟网站的广告,来自社交平台的分享按钮,可能还有来自第三方的评论组件等等。

第三方组件
浏览器在加载这些组件的同时默认它们也可以读取自己的 Cookie 和使用 Javascript 脚本,这就让这些组件几乎拥有和网页本身同样的权限 —— 包括获取主网页上的用户信息与 Fingerprint。新的 Safari 把它们都关闭了(Shut it down),这是苹果的原话。那么你猜想要继续使用他们的用户会收到什么呢?
猜对了,就是系统弹出的一个明显的不可自动跳过的提示,包括这些组件属于哪个网站和它们想干啥。只要用户不同意,这些组件在新的 Safari 上啥都干不了。

需要用户同意,组件才能运行
苹果的目的很明确:不管你认不认识,这些是你的数据,你应该有能力去决定谁能看到它们。

统一化 Fingerprint 信息

这就是苹果在发布会上简单提到的那一点。
在新的 MacOS Mojave 上还专门制定了反 Fingerprint 获取措施,既然信息特征越多,差异化越大指纹就越清晰,那么只需要反其道而行之就能大大模糊生成的指纹。
新 Safari 极大简化了网页能获取到的系统设置,只向网站展示默认字体列表,而且不再支持一些远古插件格式(比如 flash 和 java)。苹果宣称这些措施能让你的 Mac 看起来和其他人的 Mac 差不多。
虽然要保证大部分功能的正常运行,这些新措施并不能彻底解决 Fingerprint 的问题(比如网站还是可以通过主动一个个设置的方式拿到字体列表),至少可以让生成 Fingerprint 难度更高,清晰度更低。

Fingerprint

结语

苹果在 WWDC2018 上不仅给用户带来了更强大的安全控制措施,还给那些把用户信息安全放在首要地位的网站/开发者带来了不少确保用户信息安全的新方法,有兴趣的开发者可以在苹果的 WWDC 2018 开发者官网查看这些相关的技术与信息。
现在,你应该对隐私这个东西有了更深一层的认识了,同时也应该能了解到隐私问题的现状,我们在互联网上的指纹是怎么来的,又是长得啥样。还有苹果为了我们的隐私数据安全又做了哪些努力。
不过有些东西,知道归知道,防范起来还是会比较麻烦,甚至带来一些不便,比如有些人会贴住摄像头与麦克风。对于这样在乎自己的隐私的朋友,我也希望通过这篇文章,能使你更加了解对方的手段,从而可以进一步地调整自己的习惯,来防范自己的隐私泄漏。

上一期
Shortcuts 和苹果的布局
下一期
App 奏折特别期,Power+ 组的私藏小工具
 
精选评论(1) 我的评论
  • Emonda
    记得知乎里头只要讨论网络隐私的问题下面都有

    “你又不是什么重要人物,谁在乎你的隐私?”

    “不做亏心事不怕鬼敲门”

    但是我在3年前就在论坛里看到有人分享,国外的一篇文章:说是自己在爬山的时候,带着开着流量的智能手机和家人谈到想买什么型号的新的音响(或者是电视啥的~)结果回家后,就在购物网站的推荐页面看到了自己所说的产品(精确到品牌和型号)但自己从来没有搜索过类似产品!

    稍稍一想就可以发现这不就是我们现在的生活吗……

    早在数年前优酷、爱奇艺、土豆出来时大家就忽视了人家也是赚钱的,但靠什么赚钱?不就是广告吗,那广告公司靠什么赚钱?不就是你的注意力你的时间吗?那么又怎么赚取你的时间?当然是靠个性化的服务、广告呀!所以可以说你的隐私,都被拿来买适合你的广告和其他服务去了。那现在随便打开什么美团、支付宝、大众点评你所看到你喜欢的东西都可以说是你的隐私和时间买来的。

    这就不难发现为啥逼乎里头有“对于大多数人来说只要服务给的好!隐私算个屁!”这番言论。


    当然这些只是看到文章的有感而发,毕竟就算Apple或少数派等等其他组织怎么努力,现在许多人仍然认为
    只要密码不泄漏,我的百度云资源不会被其他人看到,我的家庭住址不会被坏人知道就算保护好隐私了。但是却忽视了现在犯罪成本越来越高,盗号、盗刷、偷家啥都会越来越少,但用你的“指纹”来为广告公司提供更精确的投放点实现利益最大化才会最大的隐私问题!

    至于这究竟算不算隐私安全,算不算社会问题、道德问题我也说不清,但我只是想说除了可见的隐私安全,还有另一个更大、更危险、更详细的的“社工库”正在你的眼皮底下形成,很难想象现在的小孩从出生就开始建立这个个人“社工库”到他们都长大后这个世界会怎样?至少在我看来这样下去《攻壳机动队》那样的博赛朋克世界不会远,或者说已经到来。
    06月16日