摘要:美国移动应用开发商Possible Mobile递交的新版应用遭到了苹果的拒绝,理由是XcodeGhost。遵循安全准则,使用正版Xcode,启用了GateKeeper。在多次试错之后,终于发现XcodeGhost隐藏在第三方框架中。

今年9月,苹果XcodeGhost事件引发了全社会的广泛关注,堪称App Store自2008年上线以来遭受的规模最大的攻击,涉及应用之广已完全超过想象,由此折射出当前互联网软件安全领域仍然存在严峻挑战。在MDCC 2015移动开发者大会的平台与技术-iOS专场,阿里巴巴资深安全工程师郑旻(蒸米)复盘了整个过程,并讨论了可行的预防措施及事后思考。

然而,来自美国的移动应用开发商Possible Mobile最近遇到了一个问题,他们递交的新版应用遭到了苹果的拒绝,理由是XcodeGhost。这家公司大惑不解,因为他们遵循了严格的安全准则,使用的官方下载的Xcode编译器,启用了GateKeeper。在多次试错之后,他们终于发现XcodeGhost隐藏在第三方框架中。

以下为译文:

不久前,Xcode感染XcodeGhost病毒,让诸多iOS应用遭恶意代码植入的新闻一爆出,当即引发轰动。苹果因此从App Store撤出受感染的应用,并发布了一份FAQ(常见问题汇总)。由于该事件主要发生在中国,而我们的公司为保险起见,一直坚持从苹果官方渠道下载Xcode,并启用GateKeeper,所以没受什么影响——直到最近出现了问题:我们向App Store提交了应用更新后的几分钟,收到了这样一封拒绝邮件。

Invalid Executable – The app in [REDACTED].app has been built with an unsupported version of Xcode. Make sure Gatekeeper is enabled, download the latest version of Xcode from developer.apple.com, rebuild the app, and submit it again.

大家苦思冥想,抓耳挠腮,走投无路之际,终于发现XcodeGhost恶意代码是通过第三方框架进入我们的应用的。

早在9月,安全研究员发现:感染XcodeGhost的Xcode恶意软件将恶意代码植入应用。而这封邮件的似乎在暗示:我们的应用已被感染——但我们的开发者都是从App Store或Apple Developer门户网站下载Xcode的,这完全说不通啊。

其实不久前,我们也遇到过这种情况,那次因为向Apple Store提交时,所用的机器安装的是OS X测试版。这次是否也是同样的原因呢?我们试着在不同的机器上重建应用,其中一个完全是纯净的build服务器环境,但每次提交都出现相同的错误。

这下子真是黔驴技穷了。为百分之百确定问题的症结,我们紧跟着苹果的操作指南来验证所有版本的Xcode,好确保XcodeGhost没有侵入机器。显示的结果全都是:

/Applications/Xcode.app: accepted

source=Mac App Store

随后,我们尝试在多个机器上重新安装Xcode,并调整了GateKeeper的设置,但仍旧被拒绝。鉴于提交的应用版本相比以往的不同之处主要是针对一些第三方框架,所以我们想——会不会是因为第三方利用XcodeGhost编译了框架,然后发送给我们呢?

刚开始我们不知道怎么检查二进制文件,才能找出XcodeGhost的蛛丝马迹,所以干脆采用简单粗暴的方式,撤出第三方框架,再次编译、提交。先找出罪魁祸首的首要嫌疑对象,从那里切入。没费多大功夫,第三方框架就从应用中移走了,我们再重新提交(提交的版本不可能正式发布,因为应用的主要功能还是离不开第三方框架)。没过几分钟,我们就看到iTunes Connect上“正在处理…”的字样消失了——应用可以提交了。移除第三方框架,顺利通过;添加第三方框架,被拒绝。

为了确定问题具体出在哪里,我们仔细研究了XcodeGhost,发现XcodeGhost C2(指挥-控制)服务器所用的URL可能是关键,于是在第三方框架里搜寻类似的URL。虽是摸着石头过河,但第一次就中了彩——第三方框架一个二进制文件中发现的URL字符串确认是带有XcodeGhost病毒的(http://init.icloud-analysis.com)。

除此之外,我们还在设备上安装了build版,代理了流量。应用发布后不久,http://init.icloud-analysis.com上就出现了请求。好在9月时,与XcodeGhost关联的C2服务器被发现后很快就被移除了(或者说消失了),因而所有对该URL的请求都是无效的,设备上的信息并未发送给任何人。

到现在为止,我们有十足的信心告知第三方供应商:问题出在他们那里。解释了前因后果,要求他们提供由正版Xcode编译的新框架。接收更新版本后,再进行一次查询和流量代理,直到确认再无XcodeGhost的任何蛛丝马迹为止。

针对具体问题,我们的具体方案是对项目中所有与XcodeGhost相关的URL和方法名称进行递归查询,这会用到一个包含所有目标搜索字符串的文本文件:

  • http://init.crash-analytics.com
  • http://init.icloud-diagnostics.com
  • http://init.icloud-analysis.com
  • http://init.icloud-diagnose.com
  • AppleIncReserved
  • UIDevice(Reserved)
  • CLASS_METHODS_UIDevice_$_Reserved

我们在所有报告中运行的查询指令是:grep -R -f filewithstrings.txt *

病毒的新变体或恶意软件中新的字符串可以添加到文件中,进一步完善查询环节。也可以考虑添加“http://init”。或“http://init.icloud-”。当然,这可能会导致将未感染对象错认为感染对象,但唯独用这种方法,才能尽早找到那些可能已经或即将感染XcodeGhost的URL。查询成为build服务器的必经步骤之后,一旦发现病毒感染,build就会停止运行。

我们可以控制和检查开发者的工作环境(相信他们没有从第三方下载修改过的Xcode版本),但对第三方库和框架就没辙了。我们的大多数项目包含编译过的第三方代码,而这些第三方代码并不在我们的掌握之中,也无法控制第三方供应商编译代码的环境。

我们也不能控制第三方库,却还是得负责最终的代码整合和排错等,但如今却遇到了新问题,这既是一个警示,也说明了产业定期的变革会带来新挑战,会不断催生新的解决方案。

后续更新:在写这篇文章时,又出现了XcodeGhost的新变体。该版本通过连接多个运行中的URL字符串组成完整的URL,让C2服务器URL逃过了静态分析。如上的检测方法仍能查出旧的XcodeGhost变体,但目前还不清楚是否能够用于新变体,如果新变体以相似的方式混淆了自己的方法名称,这个检测方法可能就用不上了。对于这点,蒸米表示,事实上在事件爆发之前就已经存在,只是最近才中招罢了。

(翻译/张新慧 审校/唐小引)

文章来源: A Lesson in XcodeGhost & Third-Party Frameworks

作者简介:Nick Arnott,Possible Mobile公司的QA(产品质量评价)部门负责人,善于分析,拥有6年专业QA经验和独立安全研究背景。

技术交流群:206614695

警报:XcodeGhost已扩散至第三方框架相关推荐

  1. iOS警报:XcodeGhost已扩散至第三方框架

    为什么80%的码农都做不了架构师?>>>    今年9月,苹果XcodeGhost事件引发了全社会的广泛关注,堪称App Store自2008年上线以来遭受的规模最大的攻击,涉及应用 ...

  2. 常用的iOS第三方框架

    转载自:https://github.com/Tim9Liu9/TimLiu-iOS 目录 UI 下拉刷新 模糊效果 AutoLayout 富文本 图表 表相关与Tabbar 隐藏与显示 HUD与To ...

  3. 小程序第三方框架对比 ( wepy / mpvue / taro )

    众所周知如今市面上端的形态多种多样,手机Web.ReactNative.微信小程序, 支付宝小程序, 快应用等,每一端都是巨大的流量入口,当业务要求同时在不同的端都要求有所表现的时候,针对不同的端去编 ...

  4. 在react里写原生js_小程序原生开发与第三方框架选择

    最近正在更新<微信小程序入门与实践>一书的第二版.书中有一章节谈到了"多样化的小程序开发",摘取并加以整理分享给各位开发者.我一向不推荐也不提倡公众号阅读学习编程,文章 ...

  5. iOS音频播放第三方框架FreeStreamer解析(全)

    iOS音频播放第三方框架FreeStreamer解析(全) 新项目是一款音频播放类软件,作为该项目核心功能:音频播放.第一版本是使用了系统提供的AVPlayer框架来实现音频文件的播放,再开发完成之后 ...

  6. 第三方框架简介ios

    第三方框架简介iOS 图像 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网络下载图片并进行缓存.可对图片 ...

  7. IOS第三方框架集合

    简   注册 登录  添加关注 作者 xuejunjun 2015.06.06 17:39* 写了14057字,被17人关注,获得了116个喜欢 IOS第三方框架集合 字数6100 阅读17132 评 ...

  8. 开源项目分析(SwiftHub)Rxswift + MVVM + Moya 架构分析(一)第三方框架使用

    文章目录 开源项目分析(SwiftHub)Rxswift + MVVM + Moya 架构分析(一)第三方框架使用 1. SwiftHub项目简介 1.1 SwiftHub项目UI 1.2 Swift ...

  9. Android专题-常用第三方框架

    Android专题-常用第三方框架 HTTP网络请求 带*号的是个人推荐比较好用的 HTTP网络请求 okhttp * :https://github.com/square/okhttp retrof ...

最新文章

  1. 2019年云计算十大趋势:云成为获取人工智能主要途径
  2. VTK:可视化之LabelPlacementMapper
  3. 基于Flask实现后台权限管理系统 - 表设计
  4. LightOJ 1366 - Pair of Touching Circles (在矩形中只需要两个圆相外切,有多少种) 半径圆心均为整数)...
  5. 使用CleanMyMac的空间透镜功快速决策清理垃圾
  6. 计算小于100的最大素数
  7. 手机摄影:黄埔军校旧址(下)
  8. iOS 每日一记之———————————————仿QQ语音通话隐藏显示效果
  9. 打印后台程序服务没有运行,无法添加或使用打印机的处理方法
  10. 仿淘宝头像上传功能(三)——兼容 IE6 浏览器。
  11. 如何下载网上只能看不能下载的PPT文件
  12. 谈谈Python的Flask框架学习与福利分享
  13. 什么是鸟撞?该如何设计防鸟撞的建筑?#可持续设计
  14. Qt QSqlQueryModel详解
  15. (向量空间)概念和法则的人为定义 I
  16. onedrive php接口,Onedrive不用API,只用共享链接就能做成分享网盘
  17. 再次阅读乔布斯的讲演—“好学若饥、谦卑若愚”
  18. 无线点餐系统、在线点餐系统/在线订餐系统的设计与实现
  19. 还不知道transform 3D转换怎么用?看这个就够了
  20. 使用Docker还是Rocket?也许可以一起来

热门文章

  1. 最小二乘法的拟合原理
  2. python提取pdf中的图片_PDF图片提取
  3. 一文掌握FastDeploy Serving服务化部署(打造线上证件照制作系统,含完整代码)
  4. 微信删除了怎么恢复聊天记录?左滑删除的聊天记录可以这样找回
  5. morphology.remove_small_objects的使用——和numpy转换为bool
  6. 面试记录2021Peking(更新中……)
  7. 手工去掉迅雷最新版5.9.15.1274广告
  8. 合肥工业大学计算机与信息学院复试,合肥工业大学计算机 初试+复试】经验点点滴滴.doc...
  9. 《高性能网站建设进阶指南》阅读笔记
  10. ksweb安卓手机服务器教程-Termux-,端口映射,内网穿透