砍柴网

科普:爷爷奶奶都能看懂的 iOS 恶意代码事件

昨日,由微博曝出的国内众多知名大厂 iOS App 被恶意代码植入事件,已在短短不到一天时间内在整个国内互联网掀起轩然大波,向来以安全著称的 iOS 为何会遭如此大规模的恶意代码植入?少数派邀请到国内知名应用开发商 Clover 四叶新媒体联合创始人 @Saic ,为我们重新梳理一遍整个事件,并以最通俗易懂的文字科普本次事件。

攻击者 直接修改 了编写应用程序的工具 Xcode,在其中植入恶意代码(代号 XcodeGhost),主动发布到百度云等网盘,并在各个开发者论坛留言提供下载连接。

恶意代码看起来和普通统计代码没有区别,苹果审核无法分辨, 直接影响越狱和非越狱渠道下载的应用 。

攻击代码存在 多种变种 ,可能会诱导用户进行下载或修改密码等恶意操作。

尽快修改 Apple ID 密码 ,并且不要信任来自被攻击应用内弹出的安装应用,重置密码等提示。

发生了什么

国家应急互联网中心 2015 年 9 月 14 日 发布公告 :

近日,CNCERT 监测发现,开发者使用非苹果公司官方渠道的 Xcode 工具开发苹果应用程序(苹果 app)时,会向正常的苹果 app 中植入恶意代码。被植入恶意程序的 app 可以在 App Store 正常下载并安装使用。该恶意代码具有信息窃取行为,并具有进行恶意远程控制的功能。

Xcode 是开发 iPhone / iPad 应用使用最广泛的 开发工具 ,承担了将编程代码转换为可以实际运行程序的工作(简称 编译 )。

Xcode 通常跟随着 iOS 操作系统的版本更新而升级,如果需要在应用中支持一些新功能,例如通知中心挂件,Apple Watch 上的应用。需要使用最新版本的 Xcode 进行开发, 编译 并 提交 至苹果,苹果审核后发布到 App Store。

一般情况下,开发者应该通过苹果官方的 Mac 应用商店 (Mac App Store) 来下载正版的 Xcode,一个 Xcode 的大小通常在 2G ~ 4G 左右。

因为国内的网络状况极差, 部分开发者会选择通过下载百度云上其他人转存的版本进行开发 。连接到苹果放置在国外的服务器速度极慢。虽然国内有官方的中转内容分发加速,但大部分时间也受到干扰。

黑客利用了这一弱点, 展开了直接针对应用程序源头的攻击 :

直接修改 Xcode 本体,在其中植入恶意代码,主动发布到百度云等网盘,并在各个开发者论坛留言提供下载连接。

使用了修改后的 Xcode 程序编译程序时, 恶意代码会自动加载到开发者开发的程序中 。并提交到苹果应用商店

苹果以审核严格著称,为何会允许应用上架

恶意代码加载到程序中后,将收集到的用户信息加密,发送到远程服务器。

收集的信息包括系统版本,程序名称,用户的唯一识别 ID,语言等非敏感信息。

对苹果来说, 这段代码与普通的第三方统计代码并没有区别 ,甚至你在使用一些程序内的微博登陆或微信分享功能时,微博和微信都可能会收集这些信息到自己的服务器。

因为没有涉及到苹果禁止开发者使用的接口,一切看起来都很正常,所以 带有恶意代码的应用可以正常发布到 App Store 。

对我有什么影响

根据目前的研究进展以及自称是开发者公布的 恶意代码源码 ,代码主要做了以下事情:

在用户安装了目标应用后,木马会向服务器发送用户数据。

服务器会返回一些可以让程序弹出提示的控制代码 ,例如:

用户名密码错误,请到以下地址修改,用户确认后跳转到一个伪造的钓鱼网站

弹出 App Store 官方的应用下载页面,诱导用户下载

程序有升级,用户确认后可以利用非官方渠道、修改过的应用替换掉当前应用

其他非官方应用程序的推广和下载

因为弹窗是从用户信任的应用里弹出,很多时候不会多做怀疑就会授权或确认下载。

另外根据相关研究,代码可能存在 多种变种 ,可能存在直接窃取用户 Apple ID 的版本,模拟系统登陆框 在技术上是可行的 。

我现在应该怎么办

攻击者已经 关闭了服务器 ,继续使用被感染的应用暂时不会有太大影响。

开启 Apple ID 两步验证(教程)。

这次攻击无论越狱或官方渠道都会受到影响。但越狱渠道可以调用苹果禁止使用的,例如获取用户安装信息、Apple ID 等接口, 若非对系统安全非常了解的用户,应该尽量避免越狱或下载来源不明的助手和非 App Store 应用 。

恶意代码发布者的声明解读

来自开发者 @onevcat:

算个账,微信用户总数5亿日活70%。每天每人就算5个POST请求,每个请求300Byte,日流入流量就接近500G,以及17.5亿次请求。据说服务器扔在亚马逊,那么资费算一下每个月应该是存储$450,请求$260K。这还只是单单一个微信,再算上网易云音乐等等,每月四五十万刀仅仅是苦逼iOS开发者的个人实验?