一向以封闭安全著称的苹果iOS系统,这次终于因为XcodeGhost事件在中国栽了一个大跟头。要知道在这之前,苹果的AppStore中只发现过5款恶意应用,但这次的规模显然比以往发现的加起来还多几十倍。究竟苹果做错了什么,才导致了这次的 XcodeGhost事件?
如果要厘清事情的本质,我们得先了解一种叫做源码病毒的东西。 源码病毒Ken Thompson Hack
在1984年的图灵奖颁奖仪式上,Unix之父Ken Thompson发表了一篇名为“对深信不疑之信任的反思”(Reflections On Trusting Trust)的演说,现在你还可以在《前20年的ACM图灵奖演说集》这本书中找到它。
Ken Thompson Hack源码病毒图示 Ken Thompson描述了这样一种场景,假如黑客在某个编译器中加入了两段代码:
第一段代码:让编译器编译出的程序都自然携带后门,黑客可以使用这些后门来做坏事。
第二段代码:如果编译器遇到疑似另一个编译器的源代码时,就加入第一段代码和第二段代码本身。
这样一来,世界上所有由该编译器编译而成的程序都会自带后门。假如你现在已经知道了该编译器生成的程序都有后门,并且由于某些原因你只能使用这个编译器 时,你可能会希望利用这个编译器反编译自身,然后删掉让生成程序具有后门的代码,这样就能够拿回一个“干净”的编译器了。
但是第二段代码正是为了这一操作而生。当你执行上一个操作时,“干净”的编译器又会重新染上第一段代码。如果你依然只采用这个编译器作为工具,那么你永远都无法打开这个死结。
源码病毒泛滥的后果
如果这样一种携带源码病毒的编译器成为了绝大多数人使用的工具,那么这种病毒就能够悄无声息地入侵所有使用该工具编译成的操作系统和应用软件。
这些软件可以是QQ、微信等沟通工具,也可以是网银、支付宝等金融工具,又或是微软Windows、苹果OS X等操作系统。如果你想用杀毒软件、debugger程序或新编译程序等来制止它,你怎么知道这些程序不是由该源码病毒的编译器写成的呢?
这种源码病毒发展到最后,就是整个数字世界会不可抑制地被完全“污染”。如果你想找一片净土?或许你只有用最原始的机器码,重新造一个编译器来构造新的数字世界了。
Ken Thompson想告诉我们什么?
Ken Thompson 这篇《对深信不疑之信任的反思》,实际上表达了Ken Thompson对当时软件产业的担忧。
我们是否对并非完全由我们书写而成的代码太过信任?
我们是否应该对编译器等“代码生成器”抱有一定疑问?
我如何确认我的编译器是“正常的”而不是“加入了源码病毒”?
这些问题在32年后的今天已经有了解决方案,譬如校验数字签名或是哈希值。但Ken Thompson这种抱有怀疑的态度,仍旧值得每一个程序员学习。
关于XcodeGhost
XcodeGhost就是类似Ken Thompson所说的那种源码病毒。当然,它并不具备Ken Thompson Hack的第二段代码特征,无法感染编译器。
特定版Xcode编译器被加入了XcodeGhost 但是XcodeGhost作者依然能够通过这个被修改过的XCode,让其编译出的iOS应用都被插入了后门。(Ken Thompson Hack的第一段代码)
由于Xcode几乎是生成iOS应用的唯一工具,而且苹果官方的下载源又因为众所周知的原因下载极慢,再加上国内码农在墙内生活养成的用百度搜索来下载各类应用工具的习惯,一起导致了这半年内该病毒的广泛传播。
XcodeGhost能干什么?
目前已经确认的XcodeGhost后门有如下两个功能:
原文转自:http://tech.sina.com.cn/mobile/n/n/2015-09-22/doc-ifxhytwp5513912.shtml