XcodeGhost探秘:苹果栽在了源码病毒手里

发表于2015-09-24
评论0 609浏览

想免费获取内部独家PPT资料库?观看行业大牛直播?点击加入腾讯游戏学院游戏美术行业精英群

167422913

一向以封闭安全著称的苹果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后门有如下两个功能:


  1.受感染App打开后会不断向特定服务器发送收集到的系统信息,包括:时间,应用名称及版本,本地语言,操作系统版本,设备类型,国家码等等。

2.受感染App在受感染iPhone中弹出内容由服务器控制的对话框窗口。

  XcodeGhost作者通过第一个功能获得的信息来精确区分不同iPhone用户,然后再通过第二个功能实现进一步地攻击:可能是伪装成内购页面来套取你的iCloud密码;也可能是伪装成支付失败,请到某某支付宝付款的字样,来获得金钱等等。

  当然,这种攻击也是非常好识破的。比如XcodeGhost在伪装内购弹窗时,你会发现它需要你输入Apple ID。但用过苹果的朋友都知道,Apple ID在iOS系统内部属于优先级很高的信息,内购弹窗一般都会默认填好Apple ID账号(除了AppStore之外),只需要你输入密码。所以一旦你发现需要手动输入Apple ID账号的应用弹窗,基本可以确定就是XcodeGhost的钓鱼行为了。

  Apple公司这次有多大责任?

  可能绝大多数人都会责怪苹果:不管你的护城河建得多么坚固,不管你的应用审核多么严格,不管你的硬件多么“自足”,最终你还是被攻破了呀。

  对,这次XcodeGhost事件可以算是苹果有史以来最大的安全事件。但苹果这回确实比较“倒霉”,因为遇上了源码病毒。

苹果不可能逆向分析每一个应用

  首先对于苹果的AppStore而言,这种病毒是无法检测出来的。为什么?苹果的应用商店审核只能确定App调用了哪些系统API,而这些被允许调用的API都是经过了重重检验,基本不可能跳出系统沙盒去获取非法信息。

  但除此之外,苹果根本无法通过有限的人力物力去静态分析一个App到底能够怎么弹窗,就算你给了它们源代码也做不到。(如果可以的话,那就表示苹果每上架一款程序,都会将其代码整个逆向分析一遍,这个根本不可能做到)

  那么有人会问了,这种攻击难道就无法避免了?确实,这种程度上的安全我们只能寄托于开发者的素质,但显然系统自身的沙盒隔离也是非常关键的一点。

  譬如iOS开发者就将Apple ID设计成了很高优先级的东西,病毒制造者无法获取到该信息,那么他的钓鱼弹窗就和真实的内购弹窗区别开来了,这就是系统沙盒的作用所在。

  诚然,苹果这回就算没有问题也是有问题。但追究其XcodeGhost传播的根源,国内封闭的网络环境确实是主要因素。(当然,开发人员“不干净不校验”的习惯也存在问题)

  现在我们该如何做?

  说到这里,其实大家也发现这次的“大危机”其实并没有我们想象中那么严重。

  首先,XcodeGhost大面积获取的信息都是常规信息,并不包含你个人的隐私资料。其次,包括各种弹窗在内的钓鱼攻击,其实也比较好分辨,你只要看哪个需要你输入Apple ID就行了。

  最后,笔者也忠告,假如你最近曾经遇到过在第三方应用输入Apple ID的事情,请马上修改。假如你现在不记得了,也请马上修改,这样比较保险。

原文链接

著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引

游戏学院公众号二维码
腾讯游戏学院
微信公众号

提供更专业的游戏知识学习平台