安全快速下载Xcode的姿势
这几天,相信iOS开发者都频繁的被 XcodeGhost 刷屏了!互联网上相关的各种分析及猜测都层出不穷,事件愈演愈烈,涉事 App 名单也在不断增加,不乏知名App。
也许感受到了压力,今日凌晨,自称XcodeGhost的作者发布了致歉声明,声称XcodeGhost源于自己的试验,没有任何威胁性行为
,并公开其源码。
然而,这真的只是一次试验么?试验性的东西至于始作俑者煞费苦心的到处上传,传播注入过的 Xcode 么?
作为一名程序猿,我们还是要保持良好的习惯,安全意识绝对不能少。开发工具一定要从官方渠道获取!当然大家会说,不是我不想,是网络环境太差啊!
在这里给大家插播一个福利:
腾讯 Bugly团队提供了一个镜像服务,提供各类开发工具和资源的下载(都是从官方渠道获得的),其中,也包括Xcode。大家可以通过阅读原文访问。
大家如果因为网络环境无法从官方渠道下载Xcode,可以试试用这个镜像服务。
XcodeGhost的Ghost到底在干什么
通过各种逆向分析及作者公布的源码中,我们看看这种“木马”到底具有什么样的能力:
1.上报信息
通过向域名为icloud-analysis.com
的服务器上报包括APP版本、APP名称、本地语言、iOS版本、设备类型、国家码等信息。
如果只是上报信息的话,我等天朝人民早就习以为常了吧?基本可以忽略此类信息泄露。
2.下发指令
通过应答包可以下发指令,利用openUrl这个系统接口跳转,可以干的事包括跳转至其它App,打开指定网页,发短信,打电话等。
需要说明的是,除了利用Safari打开特定网页,其它行为的都会有用户确认环节,不会在用户无感知情况下就可以完成操作。
所以弹框内容一定要看啊!一定要看啊!一定要看啊!(重要的事情说三遍)
那么下发指令操作会带来哪些威胁呢?
譬如诱导用户安装企业证书签名的App,然后可以通过该App调用系统私有接口做更多的事情,例如前段时间曝光的 Hacking Team 的非越狱远程控制(RCS),基本可以接管你的iPhone了。
当然,在最新的iOS 9系统中,所有的企业证书签名应用都需要额外的证书信任操作环节,所以不会受到太大的威胁。
然而在低版本iOS系统中,如果突然弹框要求用户确认安装某应用,估计会有部分用户不假思索的点了确定,埋下了巨大的安全隐患。
目前注入App的恶意代码上报的服务器已经处于关闭状态,上述威胁都暂时不存在。然而一旦某天该服务器又打开了,那么受影响的App开发商完全掌控不了局面!!!
这也是该次事件最无奈的地方——开发商只能采取发公告抚慰用户情绪,发布新版本等措施修复漏洞,其它的无能为力啊。
那么看完热闹后,各位开发者有没有检查过自己安装的Xcode是否受到感染?
怎样检测XcodeGhost
检测Xcode是否受到感染的方法:
· 比较官网版本安装包和本地已安装版本安装包的SHA值
· 检查Xcode安装目录是否存在恶意代码的库文件
官网版本的Xcode目录结构的SDKs目录下没有Library目录,而XcodeGhost版本则有此目录并包含CoreService,其目录结构如下:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/Library/Frameworks/CoreServices.framework/CoreService
如果发现存在受感染版本的Xcode,开发者需要立即采取如下措施:
· 删掉受感染的 Xcode
· 官方渠道(App Store,developer.apple.com)下载 Xcode ,需要注意的是,不要用迅雷等加速服务。
如果确认Xcode受到了感染,还是赶紧解决并编译新版本App进行更新吧。
最后的最后,好东西必须安利:
Bugly团队一直秉承专业严谨的研发流程,一直都坚持从官方渠道获取开发工具,且通过我们内部的持续集成服务(RDM)进行构建,所以完全没有受到此次事件的影响,大家可以安心的使用。
One More Thing!
现在紧急更新版本还是适配下iOS 9的新特性吧?
Bugly最新的iOS SDK已经支持iOS 9新特性: Bitcode和App Transport Security(ATS),赶紧用起来吧!
腾讯Bugly 最专业的质量跟踪平台
精神哥、小萝莉,为您定期分享应用崩溃解决方案
- 二叉树的性质和常用操作代码集合
- linux学习第十五篇:磁盘格式化,磁盘挂载,手动增加swap空间
- 《Java程序设计基础》 第8章手记Part 2
- 备忘录模式
- 《Java程序设计基础》 第8章手记Part 1
- 你很有想法,跟我学做菜吧No.3
- 《数据结构》 定长顺序串常用操作代码集合
- 一斤代码深入理解系列(七):微信小程序中使用微信风格样式库-WeUI
- 餐厅老板要累疯了No.2
- linux学习第十九篇:压缩介绍,gzip,bzip2,xz压缩工具
- 区块链?黑人问号?NO.1
- linux学习第二十一篇:安装软件包的三种方法,rpm,yum工具用法,yum搭建本地仓库
- iOS使用自签名证书实现HTTPS请求
- 《Java程序设计基础》 第7章手记
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 设计模式实战-组合模式
- Hive如何实现自增序列
- 设计模式实战-过滤器模式,你总是这么挑三拣四
- 时间选择器组件之关于table走过的弯路
- 设计模式实战-观察者模式,你知道发布订阅怎么实现吗
- 设计模式实战-桥接模式,想做月老吗?
- 设计模式实战-原型模式,我们就来依法炮制
- 设计模式实战-建造者模式,做任何事情都需要步步为营
- 设计模式实战-单例模式,我就是天下无双
- 设计模式实战-抽象工厂模式,分而治之
- 搞定常被问的数组和排序算法,附面试题
- 玩转 Java 时间 + 面试题
- 【分布式技术】分布式系统调度架构之两层调度,解决单体调度问题
- 一致性哈希算法,在分布式开发中你必须会写,来看完整代码
- FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放