XcodeGhost以及下载工具安全

这几天iOS界的一件大事就是XcodeGhost了,因为这个好几个大厂都中招了。估计是iPhone推出之后iOS界的第一大安全事件了。

很多人在讨论这件事情的时候都怪程序员安全意识薄弱,干嘛去非官网下载呢?但我觉得这么多大厂的程序员都去百度网盘下载Xcode不太正常。至少像我这种水平的人平时找资料什么都是去官网或者StackOverflow,下载软件更是认准原版。要是这些大厂的程序员找资料什么的还混迹于国内论坛的话,我觉得国内的iOS界已经没救了。所以我不太相信这些大厂程序员会这么做。

我觉得导致XcodeGhost传播如此广的罪魁祸首,很可能就是迅雷。当然我也没什么直接证据证明,因为这个过程是不可再现的。迅雷本身声明说自己服务器里的副本是原版,不是他导致的。但是如果你相信他们的声明的话,跟相信“中国互联网是开放的”这样的说辞没什么两样。这一切的一切都得从苹果Xcode下载的特殊性和迅雷的加速算法说起。

苹果对下载开发工具是有严格的限制的,只有拥有开发者账号的人才能下载DMG版本的Xcode。比如Xcode 6.4的下载URL是http://adcdownload.apple.com/DeveloperTools/Xcode6.4/Xcode_6.4.dmg,如果你把这个URL用wget或者curl下载,得到的是一个“未认证”的错误。这是因为adcdownload是需要你登录时使用的cookie做凭证才能让你下载的。所以三方下载工具,包括迅雷,在没有使用镜像和P2P加速的情况下是不可能下载到这个原版的文件的。那么问题就来了,现在给你一个URL,但你从一开始就无法下载,并且你不知道它的checksum。接着给你ABCD四个文件,然后说,ABCD四个文件中,有一个是那个URL下载下来的,其余都是假冒的。那么请问你如何判断哪一个是原版?答案是不可能判断。因为你根本没有一点原版文件的信息。

source

source2

上面两个截图是我在下载Xcode 6.4的时候,迅雷给出来的数据。可以看到迅雷下载原始文件失败了,只能从镜像中下载。根据上面的推理,我根本无法知道镜像中的Xcode是否原版,在我无法得到任何比特的原始文件的情况下。我只能猜。比如说我的网络里面大多数人都拥有这个checksum的文件,那么这个文件很可能是原始文件。或者qq.com这个域名看起来靠谱,这个可能是原始文件。这个时候,任何结论都是不确定的,只是一个概率问题。而黑客很有可能在这里面做手脚。于是会出现一个很可怕的情况:你在迅雷上输入的是苹果官方的Xcode下载地址,但你下载下来的却是一个XcodeGhost!

XcodeGhost闹得这么大,我认为是多方因素导致的。首先GFW以及国际带宽慢导致了在官网上下载Xcode非常慢。然后苹果的官方下载点不支持断点续传,Xcode又是一个3gig的大家伙,AppStore又没有提供增量更新。这两个因素导致了人们倾向于使用迅雷之类的下载工具下载DMG文件。迅雷之类的加速工具又无法确认镜像文件是否原版文件,以至于会出现输入原版地址,下载到一个修改版文件的情况。然后苹果又不提供DMG文件的checksum,所以无法对照下载下来的文件是否是真的。这些事情连起来,才导致了现在这种情况。

虽然现在没有证据证明迅雷是使得XcodeGhost传播得如此广泛的罪魁祸首,但至少可以知道在无法下载原始文件的情况下,开启镜像下载是有安全风险的。这次事件是很有意义的,它让我们知道了对生产的每一个环节都必须做好安全防护,不仅仅是对编译器,甚至是对下载器也要确保它的可信性。

No Comments

Post a Comment