目录

虚假的安全感

凌晨3点,一阵凉风把我吹醒

我点亮手机屏幕,一条推送新闻映入眼帘:“苹果公司让iCloud Safari书签也实现端到端加密

端到端加密

端到端加密”,他们总喜欢用这样一些看起来高大上的词汇

我对这个词颇为熟悉,原本不想多说,但为了本文的部分读者,我还是稍微解释一下为好

所谓的“”,即指你的客户端,该新闻中指你的苹果设备

端到端加密”就是说你的数据在对外传输之前会进行加密,只会在接收的客户端进行解密,而在网络传输和苹果的数据库存储这些中间过程中不进行任何解密操作,这就能保证你的数据只有你可见,其他中间人看到的都只是加密的数据,从而保证你的数据安全

安全吗?

很明显,苹果此举是为了保证你的数据安全,但这样是不是就保证了你的数据除了你之外没有人可以看到呢?

先别急着回答,让我们先来捋一下:

  1. 现代密码学保证数据被加密后其他人看不到原文(期望上如此)
  2. 端到端加密保证了数据离开你的设备后呈现的都是密文状态

这样看来,端到端加密理论上可以保证你的数据别人看不到

再来看看这条推送新闻:

据 Reddit 论坛信息,苹果“iCloud 安全概述”页面的更新显示,与 Safari 标签和历史记录相同,Safari 书签现也更新为端到端加密。

这意味着任何人,甚至是苹果,都无法访问用户保存的 Safari 书签。

新闻中都这样说了,不管懂不懂,反正我们便要相信它了

真的如此吗?

等等!!!真的如此吗?

我在苹果的ToS中发现了这样一段话:

您确认并同意,Apple 在其认为合理必要或适宜的情况下可以访问、使用、保存您的帐户信息和任何内容以及/或者将您的帐户信息和内容披露给执法机构、政府官员和/或第三方而无需向您承担任何责任

来自:https://www.apple.com/legal/internet-services/icloud/cn/terms.html

如果他们真的无法解密你的数据,那他们如何将你的数据提供给执法机构呢?

前面的内容我们似乎都忽略了非常重要的一点:真正用来加密数据的密钥由谁持有?

根据我的编程经验,我们通常不会使用用户的密码直接来加密数据,主要有以下原因:

  1. 用户的密码通常不够长,不符合安全密钥的长度要求
  2. 如果用户修改密码,使用密码直接加密数据需要对所有数据重新加密,这很耗时耗资源
  3. 数据库中通常不会存储明文密码,如果用户忘记了密码,则用户数据便无法恢复了

我们一般通过以下方法之一来解决问题:

  1. 直接生成符合要求的随机密钥,然后用用户密码来加密存储密钥
  2. 直接生成符合要求的随机密钥,建立用户与密钥的映射,所有密钥由服务商统一加密保存

不难看出,使用用户密码加密存储密钥,这种方案在服务商不存储用户密码明文(或者其他任何可以用来解密密钥的信息)的情况下,安全性很高,但是如果用户忘记密码则难以恢复用户数据

而在实际工程化的解决方案中,为了能够在特殊情况下为用户恢复珍贵的数据,通常密钥不会直接交由用户持有,而是通过服务商的安全基础设施和安全承诺信用来保证的

那苹果是采用哪种方案呢?

我在苹果的 iCloud security overview 一文中找到了这样的内容:

On each of your devices, the data that you store in iCloud and that’s associated with your Apple ID is protected with a key derived from information unique to that device, combined with your device passcode which only you know. No one else, not even Apple, can access end-to-end encrypted information.

翻译:在你的每台设备上,你存储在iCloud中并与你的Apple ID相关联的数据,都受到来自该设备独有信息的密钥的保护,并与只有你知道的设备密码相结合。其他任何人,甚至是苹果,都不能访问端到端加密的信息。

Data types that are protected by end-to-end encryption—such as your Keychain, Messages, Screen Time, and Health data—are not accessible via iCloud Data Recovery Service.

翻译:受端到端加密保护的数据类型–如你的钥匙串、信息、屏幕时间和健康数据–不能通过iCloud数据恢复服务访问。

通过这句话可以推测,苹果应该采用的是用用户密码来加密密钥的方案,这很安全

但这是真的吗?苹果在这方面一直保持闭源,没有任何外部人员可以确认这一点,这些承诺会不会成为“虚假的安全感”呢?

说了这么多,其实我们就想知道服务商到底能不能在不经我们允许的情况下解密我们的数据

注意
这里的“允许”不是说整个弹窗让我们点一下同意按钮,而是真正需要我们提供一个“秘密”才能继续解密下去

我想起了之前看到的 “泥坑实验

  1. 把你的设备扔进一个泥坑中
  2. 滑入泥坑中,并砸碎自己的脑袋。当你恢复意识时,你将完全恢复,但是你将永远无法回忆起你的密码和密钥等内容
  3. 尝试恢复你备份在云端的数据

实验可能难以真正实施,但是可以采取一些其他的折中手段,比如假装自己失忆,说一些谎言啥的

无论用了什么办法(证明自己身份、找司法机关帮助、和库克是好朋友等等),如果你可以成功恢复你的数据,那代表着你的数据不是真正的安全

你应该能明白这意味着什么,暂且不说司法部门等合法要求解密数据,只要服务商有途径解密数据,入侵者就有可能不经过你的同意获得你数据的明文

虚假的安全感

我们都相信“没有绝对的安全”,但我更有理由相信,比知道“不安全”更可怕的情况是,认为自己处于“安全”的位置,我称其为“虚假的安全感”

就像前面新闻中提到的那样,如果读者对相关知识和加密方案没有了解,就会被文中的词汇迷惑,完全相信文中那些并非由服务商自己说出的承诺(即使是服务商自己承诺的,也不完全可信)

在这种情况下,如果你相信自己交给服务商的数据完全安全,就有可能在未来的某一天被其反噬

其实,这种“虚假的安全感”在很多地方都有可能发生,我可以给大家讲一个发生在我自己身上的真实故事,相关细节我会进行模糊处理

被攻击的真实案例

某天上午,我同时接到导员和党委书记的电话,说学校网络管理部来了两个工作人员,让我带着电脑过去给他们提供一点帮助。我没有多想,背着电脑包屁颠屁颠的过去了,却发现不是学校网管,而是某部门来了两个人

他们详细询问了我近一个月的网络活动,询问我是否与某列表中国外某些黑客组织有联系,并检查了我的笔记本电脑。反正我也没做坏事,按照流程走下来也没发现什么异常,但他们给我看的某个网址给我留下了印象

回去后,我找到了那个网页,那是FreeBuf中的一篇文章,内容是Google纰漏的一起APT攻击的相关情报。我根据其内容找到了Google原文并找到了更多信息,当晚我根据相关思路对我的电脑进行了细致的检查,最终发现了一个异常进程

通过对该程序进行逆向分析,我发现样本与Google纰漏的样本虽有不同,但诸多特征和证据表明其与该APT组织的攻击程序同源,由此证明我的电脑遭遇了国外APT组织的攻击

我马上联系了他们,他们坦白的确是因为这个原因来找我的。根据他们的监控,这是此APT组织发起的第三波攻击,国内有其他安全研究者也同样中招

通过对我电脑中文件写入记录(可以修改的)、服务添加记录、路由器中的上网日志、学校的DNS日志等信息进行综合分析,基本确定被攻击的大体时间范围和攻击手段

通过结合当天微信聊天记录,我回忆起被攻击当天我在研究某服vpn客户端,上网查了一些相关研究案例,而结合Google纰漏的情报,我极有可能触发了他们的水坑,通过浏览器漏洞执行了黑客的恶意代码

这个事件到这里并没有结束,我想说的关键才刚刚开始

被攻击的时间点前两周我刚重装了系统,最新的Windows10打上所有安全补丁,最新的Chrome浏览器。通常认知下,将系统和软件更新到最新并打上安全补丁,应对基本的网页浏览是基本可以放心的

但实际情况就这样狠狠的打了脸,事实证明,那些我以为的最新版带来的安全感都是“虚假的安全感”,在真正的攻击面前毫无招架之力

夸大危险也许更加可怕

我不想我的读者读了我上面的内容,产生“反正世界上没有绝对的安全,无论怎么努力都仍暴露在危险之下,那还努力个啥?”的想法

我上面的内容的确夸大了大家面临的危险,绝大多数人都没有被攻击的价值

相比“虚假的安全感”,“夸大危险”也许更加可怕,因为认为危险无法避免而放弃抵抗的案例比比皆是

举一个身边最真实最普遍的例子,大家在拥有了安全研究经验后,往往会发现几乎所有现有的杀毒软件等难以发现和阻拦最新的0day攻击,所以大家往往干脆不安装杀毒软件

要知道,即使是最小的防御措施也能够起到一定的阻拦作用,虽然无法阻拦最新的0day,但是面对各种脚本小子还是能够轻易防护的,无论如何都比没有强

夸大的危险极易使人放弃抵抗,从而使自己暴露在更大的危险之下,这比“虚假的安全感”更加可怕

我的态度

我还年轻,经验太少

我面对危险和安全的态度也许会随着之后的人生经历而产生变化,但无论如何我还是记录以下我现有的想法吧

资产梳理

我的第一个想法是资产梳理,对自己有价值的东西进行梳理,包括各类物理可接触的东西和虚拟不可接触的数据

正所谓“知己知彼,百战不殆”,如果自己都不知道自己拥有那些有价值的东西,那几乎就等于将这些遗忘的东西拱手让人

价值分级

然后是价值分级,按照资产的价值高低对所拥有的东西和数据进行划分不同等级

这很好理解,高价值的东西采取高安全性的措施,低价值的东西可以稍微放松一点

毕竟较高的安全性往往带来复杂性的增加,而人的精力有限,无法对所有内容都采取最高安全措施

谦虚与谨慎

我看到上面案例中的两个人,他们习惯于用随身携带的笔记本记录内容,习惯于使用不可多次写入的CD光盘来传输数据,习惯于用手随时遮挡正在书写的内容

虽然他们的安全技能高出常人许多,但他们对各种小细节都保持者最大的谦虚和谨慎,我认为这是保证安全性的最基本也是最重要的东西

拓展阅读