关于 Dropbox 共享文件夹安全性的技术探讨

标签: 行业观察 dropbox security 友情链接 - Geek 安全 | 发表时间:2011-04-07 14:54 | 作者:XDash 星空
出处:http://www.syncoo.com

# 感谢读者 plusium 这篇很有技术含量的投稿,原载于他的博客

本文将从纯技术的角度,分析一下热门的云存储同步工具 Dropbox 共享文件夹的权限设置及其安全性,即在已经公开了某一文件夹链接的情况下,其他非公开文件夹的安全性。这里以首次安装后系统自动生成的 Photos 文件夹为例。当然,类似“如果这么担心安全性的话,就不要往 Dropbox 上放啊”这样的话,不用说我也知道。

我们知道一个 Photos 文件夹的公开共享链接是大约这样子的:

http://www.dropbox.com/gallery/9628444/2/_wallpaper/_other?h=8a53e8

其中 [9628444] 是用户ID,[2] 是文件夹的深度,[_wallpaper] 是一级文件夹名,[_other] 是二级文件夹名。[h=8a53e8] 是一个校验码,用于保证只有知道这个地址的人才有权限访问这个文件夹。其中的这个 [h] 很可能是指 [hex] ,表示是16进制的意思。

一般情况下,没有链接地址,其他文件夹依然是不可访问的,其中校验码起了很大的作用。

用一个6位的十六进制数进行权限控制,看起来应该很安全,不太可能有人误打误撞进了你的相册。

暴力穷举破解也似乎不可行。假设有人知道了你的用户ID和文件夹名称(在本文上述前提下,其他人会知道你的用户ID,和文件夹的命名规则,可以很容易猜测出其他文件夹的名称,或者穷举文件夹名称),那么想要穷举这个校验码,需要最大尝试 16,777,216 次。实际上由于最高位不可能是0,那么最大就需要尝试 15,728,640 次。而 Dropbox 会在连续尝试失败若干次之后暂时封锁来自该 IP 的访问,所以暴力破解不太可行。

那么我们来看看这个校验码的生成有没有什么规律。按最安全的方案的话,Dropbox 应该在每个文件夹创建时随机生成一个校验码。通过以下实验可以发现,校验码不是随机生成的

假设校验码是随机生成,那么我们在 Photos 下面创建一个名为 [test] 的文件夹,如果分别在客户端和 Web 端创建,校验码应该会不一样。

我们将 Dropbox 客户端的代理服务器设置为一个不存在的代理,令 Dropbox 处于离线状态,这样可以保证 Dropbox 客户端程序在生成校验码时不与服务器交互。然后在本地和 Web 端分别创建 [test] 文件夹并获得共享链接,发现两个链接的校验码是一样的。这足以说明,校验码不是随机生成的。

而这两个分别生成的校验码一样,是不是因为校验码是和路径有关的呢。我们把 [test] 改名为 [test1] ,发现校验码变了,说明校验码是和路径有关的

那么校验码和用户 ID 有没有关系呢?用不同的用户登录 Dropbox 同样创建 [test] 文件夹并获得链接,发现校验码不一样,所以校验码是和用户 ID 有关的

设计上也应该是这样,否则我只要自己也创建一个一样路径的文件夹,就能得到其他所有人的这个文件夹的校验码了。特别是在每个人都有 [Photos] 这个根文件夹的情况下,这点尤其重要。

这个根文件夹虽然看似不提供共享链接,但是有用于通知图片更新的 Feed 地址,可以用来反推共享链接。而且这个feed地址或者共享链接一旦泄漏,那你的所有相册就相当于完全公开了。因为有某文件夹访问权的人,也有它的子文件夹的访问权。如何获得 Photos 根文件夹的 Feed 地址,在我的上一篇文章(blogspot)里有介绍。

既然校验码不是随机生成,那么次级安全的生成方案,就是令校验码和用户密码之类的挂钩了。

经测试,校验码和用户登录名以及密码均无关。那么按我的想象,只有两种可能性了。1、为每个用户分别随机生成一个永久的密钥,令校验码和这个密钥有关。2、所有用户使用同一个密钥。

安全性上肯定是第一种要高,以 Dropbox 的技术实力来看,我们应该相信他们是采用了第一种方案。如果用的是第二种方案的话,那么一旦将来这个唯一的密钥以及加密方法泄露出去,事情就大条了。而且考虑到 Dropbox 的某些技术人员肯定会知道这个密钥,为了限制技术人员的访问权,Dropbox 决策层也应该会采用第一种方案。

虽然有数据库查看权限的技术人员也能查到单个用户的密钥(这个密钥由于和用户密码无关,肯定不是加密存储的),但我们应该也没必要担心这一点,毕竟我们的文件都存在人家的服务器上,他们要想访问,那还不是轻而易举。

顺便一提,我的个人观点,不管其他文件夹的文件是否使用了 AES-256 加密存储(他们宣称的,但这个加密据我猜测,应该不是使用用户密码进行加密的。从可以通过文件的 MD5 指纹或者 SHA-1 指纹进行文件去冗余存储处理,也可以看出文件不是使用类似上述的用户密钥进行加密的。而是使用一个公共密钥进行加密的。但是,没有使用用户密码作为密钥进行的加密,对用户来说都是相当于没有加密。当然使用用户密码作为密钥加密,安全性是最高,但是实用性不够。因为如果那样做的话,只要用户一修改密码,那所有的文件都需要拿出来重新进行加密。关于 Dropbox 的加密方法,我这边还会继续关注,有这方面消息的人请务必留言讨论一下。),但 [Public] 和 [Photos] 这两个文件夹的文件肯定没有加密存储,因为没有加密的必要。考虑到效率,也不应该加密。

只要保证这些文件是不可浏览的(not browsable)和不可搜索的(not searchable),就可以认为文件是安全的了。不知道他们的权限管理和 Google 比怎么样,不要出现像之前 Google 工程师查看用户私人数据这样的事情才好。

写了这么多,结论就是文件目前是安全的,链接没有公开的相册,别人是怎么也看不了的。想看看有没有人有更深入的分析,所以稍微写一些,也就是抛一块烂砖,看能引出块玉来不。

Update 1:

逛了一圈 Dropbox 的官方论坛,发现 Dropbox 的确是用一个公共密钥来加密所有文件

参考 http://forums.dropbox.com/topic.php?id=25288&replies=7#post-159350

既然文件都是用一个公共密钥加密,那么前面提到的共享链接的校验码肯定也是用一个公共密钥了。至于这两个密钥是不是同一个,似乎就不那么重要了。泄漏了任何一个,对dropbox而言都将是毁灭性的打击。

实在不放心人家的安全性的人,建议用 Dropbox + TrueCrypt 的组合方案。这个方案下 Dropbox 的一大特性——差分同步——是否还有效就不知道了。具体请自行 Google。

另外还有一个据说是真正的本地加密(可设个人加密密钥)、云端存储的产品,在 idrivesync.com。我没实际验证,有兴趣的可以去看看。

Update 2:

国内有不少出售或转让 Dropbox 账号的,我要给大家一个警告,由于文中所述原因,转让 Dropbox 账号是很危险的行为

因为即使更换了账号对应的 E-mail 地址和密码,原始 Photos 文件夹的分享链接和验证码是不会变的。前账号所有者保存下这个链接(如果他知道的话),然后将账号转让出去,下一个所有者的 Photos 文件夹及其子文件夹的所有图片将可以一览无遗。

我建议,不要将这个链接保存在任何地方,不要用任何在线或离线的RSS阅读器订阅自己的 Photos 文件夹更新,最好是自己永远不要去获取这个链接。连你都不知道了,别人就更加无法知道了。

不过大家放心,如果你的账号就是从别人手中转让过来的也不用太担心,因为在我写这段文字之前,我想全国没(几个)人知道这件事。(@XDash 吐槽:好吧,现在全国有不少人知道了 — —+)

一切打算利用该“feature”进行非法、非道德用途的人,请停止这个想法。因此产生各类法律或者非法律的问题,本人一概不负任何责任。若因本文影响到你的淘宝上的生意,请自己承担后果。


您可能也喜欢:

最佳免费文件管理器评测【原文有更新,暂停翻译】 (@xbeta)

五大云存储服务对比:iCloud、Google、亚马逊Cloud Drive、Dropbox和SkyDrive (@36kr)

Dropbox Shell Tools – 一键同步文件到Dropbox

Dropbox免费网络文件同步工具v1.0.1破解版 for iPhone

Dropbox网盘的15个应知必会的高级使用技巧(5)【完结】
无觅

相关 [dropbox 共享 文件夹] 推荐:

关于 Dropbox 共享文件夹安全性的技术探讨

- 星空 - 同步控
# 感谢读者 plusium 这篇很有技术含量的投稿,原载于他的博客. 本文将从纯技术的角度,分析一下热门的云存储同步工具 Dropbox 共享文件夹的权限设置及其安全性,即在已经公开了某一文件夹链接的情况下,其他非公开文件夹的安全性. 这里以首次安装后系统自动生成的 Photos 文件夹为例. 当然,类似“如果这么担心安全性的话,就不要往 Dropbox 上放啊”这样的话,不用说我也知道.

dropbox讲python

- chuang - Initiative
dropbox定制优化CPython虚拟机,自己搞了个malloc调度算法. 那个 !!!111cos(0). 期待这次PyCon China 2011.

用SugarSync替代Dropbox

- yuan - Solidot
fzcs 写道 "网络存储可以实现在多台电脑上文件共享和同步文件并在互联网上共享文件. 不可否认Dropbox是目前比较优秀的网络存储(云存储)应用之一,可惜前一阵被无情墙掉. 可能有很多朋友已经完全适应了网络存储带给我们的便捷,很大程度已经离不开这类应用,所以寻找Dropbox的替代者就变得尤为必要了.

Dropbox真心好玩

- dc - 亦斯
前两天在找一款同步盘,最后竟然选定了迅雷随身邮,罪过罪过. 唉,又多了一样永远抹不掉的污点. Dropbox真心好玩,由于被墙而不去上她你就大错特错了. 还没账号的童鞋,抓紧点此注册. (好吧,这是我的邀请链接:http://db.tt/0q7UxPxe,用了这个你能多得250M. 找字符串的好去处:http://just-ping.com/index.php?vh=www.dropbox.com%2F&c=&s=ping%21.

Dropbox的成本估算

- 车东 - 阮一峰的网络日志
两周前,云存储网站Dropbox宣布,用户总数达到了2500万. 这个数字令人印象深刻,因为一年半前,它的用户总数已经是300万了. 短短18个月,在一个这样大的基数上,继续扩张八倍多,真可谓势头惊人. 惊叹之余,许多人很好奇,Dropbox到底花了多少钱,才能够服务这么多用户. 因为除了付费用户以外,它没有其他收入来源.

Dropbox的创业经历

- ZFreet - 阮一峰的网络日志
上月底,美国旧金山有一场演讲会"Startup Lessons Learned". 许多创业公司聚在一起,分享经验教训,其中就有Dropbox. 它是一家云储存公司,最近很红,你可以用它在朋友之间、电脑之间共享文件. Drew Houston是这家公司的CEO,在会议上做了主题演讲. 演讲的视频和PPT,都已经放上了互联网.

DropboxPortableAHK 1.3.2.0 - Dropbox免安裝版

- Nicholas - 阿榮福利味
Dropbox可攜版 - DropboxPortableAHK,作者使用「AutoHotkey」設計的程式,將它解壓縮於USB或隨身碟,依照步驟操作,最後會從網路下載最新版的官方版程式,下載及設定完成後就可以於隨身碟使用,也就是說不需要管理者權限也可以使用了,可以在同一個電腦使用者帳號下管理多個Dropbox帳號,還會自動檢查最新版本.

引爆流行的 Dropbox

- tossking - 爱范儿 · Beats of Bits
Dropbox 是一个“简单”的产品,而这款简单的产品所取得的成绩却不简单:如今已经拥有 5 千万名注册用户,而且尽管 96% 的用户都是免费使用,但公司依然获得 2.4 亿美元的收益. 有一个数字值得注意,Dropbox 的用户数量是一年前的 3 倍. 福布斯专门撰写了关于 Dropbox 的故事.

将URL直接下载到Dropbox

- zjk - 煎蛋
URL Droplet是一个dropbox app,只要填你要下载的URL进去,它就会自动将之下载到你的Dropbox里. 虽说直接下载到Dropbox文件夹里也很方便,不过这不就多出来一个上传到云的多余过程么. 网络速度快的同学们可能没感觉,不过对于网络蜗牛爬的同学们来说一定深有感触吧. //Dropbox真的是个非常好用的服务,由于他们开放了API,所以有很多Dropbox app可以使用,比如效果华丽的在线相册什么的,很有用.

Dropbox 用什么语言开发的?

- DaoDao - python.cn(jobs, news)
服务器端和客户端都应该是 Python. 服务器端使用 Pylons 框架,客户端使用 PyObjC 实现. Dropbox 绝大部分是用 Python 开发的. 用到 Python 的地方有:服务器后台、客户端、Dropbox 网页版前段、API 后台、数据分析. 在服务器端、桌面版客户端使用的是 Python 的官方实现 CPython.