事件

事件引爆于9月18日乌云网公布的一则分析报告:“XCode编译器里有鬼 – XCodeGhost样本分析”,这份纯粹的技术分析报告引发中国iOS生态链的众多开发者的关注。 引起关注的人们对App Store上进行了筛查,结果令人震惊,至少有数十款流行的应用受到感染,其中包括了微信、网易云音乐、网易公开课、我叫MT、同花顺、南京银行、南方航空、中信银行行动卡空间、名片全能王、愤怒的小鸟2等等知名应用,被感染的用户估计超过1亿。

具体的说,这些APP使用了非苹果官方的,来自网盘等第三方下载平台,存在安全问题的Xcode开发环境。用这个XCode把应用源程序编译成可执行的APP时,APP会被自动添加病毒模块。用户从App Store下载安装这样的APP,手机就会中毒,病毒会偷偷地向作者的服务器上传软件包名、应用名、系统版本、语言、国家等信息。幸运的是,此次事件未给公众造成重大损失,还没用危及隐私或者帐号密码等敏感信息。然而,从技术层面看,这完全是病毒作者的“手下留情”,只要插入的病毒代码更恶毒一些,他就会获得超过1亿个“肉鸡”。

这一事件提示我们,使用数字签名或者散列(也称哈希Hash、摘要Digest)等加密机制,鉴别网上软件的来源是多么的重要。

散列值

散列函数(或散列算法,Hash Function)是从任何长度数据创建小的数字“指纹”的方法。散列将数据打乱混合计算,得到一个称为散列值的结果。散列值看起来通常是一个短的随机字母和数字组成的字符串。用作校验目的的散列函数是一个“单向”操作:对于给定的散列值,没有实用的方法可以计算出一个原始输入,也就是说很难伪造。被广泛使用的这类散列函数包括MD5,SHA-1,SHA-256等。许多软件在官网下载页面上提供了散列值。软件下载完成后,使用散列工具计算下载到的文件的散列值,与官网上的散列值(如图1所示)比对后即可确认所下载的软件与官网发布的是否完全一致。

图1  Ubuntu官网给出的安装光盘映像散列值

检验散列的工具和方法

虽然Windows系统内部广泛使用MD5、SHA1等常用散列算法,但是系统并没有提供一个计算MD5的程序或者命令。网络上有大量的计算散列的软件可供下载,可以在搜索引擎上搜索并参考口碑选择一个。使用openssl命令计算SHA1散列值的截图如下。

图 2 使用openssl命令计算散列值

Linux内置有md5sum, sha1sum这两个命令。在终端中运行md5sum <filename>,或者sha1sum <filename> 即可得到相应的散列值。

数字签名

数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。

数字签名(Digital Signature)技术是不对称加密算法的典型应用。数字签名的应用过程是,数据源发送方使用自己的私钥对数据校验和或其他与数据内容有关的变量进行加密处理,完成对数据的合法“签名”,数据接收方则利用对方的公钥来解读收到的“数字签名”,并将解读结果用于对数据完整性的检验,以确认签名的合法性。

数字签名的验证

Windows环境下,经过了数字签名的软件很容易验证其来源和洁净性。在文件属性对话框的“数字签名”页中,点击“详细信息”,即可检验软件的数字签名。下图是对从网盘上下载的android-studio-bundle-135.1740770-windows.exe的数字签名验证的结果。

图2 有效的软件数字签名

如果软件被篡改,或者证书被篡改,都会导致签名的验证呈现无效的状态。下图是使用Hex编辑器人为修改Adobe Reader安装包之后,检测数字签名无效的截图。

图3 无效的数字签名演示

小结

墙的存在,外部官网的可达性和速度是一个难以绕过得现实问题。墙内通过第三方下载平台获取Android Studio、XCode等开发工具,仍然将是很多人的首选。XCodeGhost事件提醒我们,从第三方渠道下载任何软件安装包之后,一定不要忽略检验数字签名,或者比对官网版本的散列值;无法通过验证的,必须果断拒之门外。其次,这一事件也与盗版的“黑苹果”有一定关系,“免费下载”的盗版软件决不是免费的!

从XCodeGhost事件看软件来源鉴别的重要性的更多相关文章

  1. 在XcodeGhost事件之后,获取更纯净的Xcode的方法。

    正值Xcode 7正式版本的更新,IOS界就冒出了个甚至可以说成涉及国家安全的大事也不为过的事件: 也可以点击网址链接看总结的更完整的文章:众多知名 APP 都中毒了,XCodeGhost 病毒事件汇 ...

  2. 从Facebook数据泄露事件看大数据时代的个人信息安全问题

    进入21世纪后,互联网开始大规模普及,线上业务和线上服务也开始逐渐走入人们的生活.尤其在智能手机和移动互联网诞生以后,人们对网络的依赖更是与日俱增.然而,伴随而来的则是涉及个人隐私的信息安全问题.个人 ...

  3. 从HTTL模板引擎看软件设计原则

    HTTL (Hyper-Text Template Language) 是一个高性能的开源JAVA模板引擎, 适用于动态HTML页面输出, 可替代JSP页面, 指令和Velocity相似.作者是阿里巴 ...

  4. 从华为数字化转型看IT自动化运维重要性

    关注嘉为科技,获取运维新知 8月有幸聆听了华为CIO陶总(陶景文)关于“华为数字化转型秘诀:坚定“以客户为中心”的思想”的演讲,获益良多.其中陶总也分享了IT运营平台的建设对于华为实现数字化转型的重要 ...

  5. OpenStack学习系列-----第二篇 由一个错误看理解整个架构的重要性

    看了openstack没几天,然后就开始试着用Java调用所有的API,第一步得到Credentials的时候成功了,然后第二步,传参数使所有的server信息都列出来的时候报错404.具体描述如下( ...

  6. 从性能角度看react组件拆分的重要性

    React是一个UI层面的库,它采用虚拟DOM技术减少Javascript与真正DOM的交互,提升了前端性能:采用单向数据流机制,父组件通过props将数据传递给子组件,这样让数据流向一目了然.一旦组 ...

  7. Windows 事件查看器(收集)

    原文:Windows 事件查看器(收集) 事件查看器相当于一本厚厚的系统日志,可以查看关于硬件.软件和系统问题的信息,也可以监视 Windows 的安全事件 提示:除了可以在"控制面板→管理 ...

  8. CSO视角:Sigstore如何保障软件供应链安全?

    本文作者 Chris Hughes,Aquia的联合创始人及CISO,拥有近20年的网络安全经验. SolarWinds 和 Log4j 等影响广泛的软件供应链攻击事件引起了业界对软件供应链安全的关注 ...

  9. jQuery学习-事件之绑定事件(五)

    大家应该还记得dispatch方法中有这么一段代码: event = jQuery.event.fix( event ); event的修复是在fix这个方法中的,而在fix中是通过 new jQue ...

随机推荐

  1. @html.dropdown用法

    controller1 List<SelectListItem> itemList = new List<SelectListItem>() { "}, " ...

  2. SQL/T-SQL实例参考-2

    对多关联查询,查询多中的记录,但是返回一的结果集 子查询语法 --一对多关联查询,查询多中的记录,但是返回一的结果集 SELECT C.* FROM ( SELECT A.BasicID FROM [ ...

  3. sqlServer组合主键

    sqlServer   组合主键 创建表时: create table Person ( Name1 ) not null ,Name2 ) not null primary key(Name1,Na ...

  4. 基于stor2RRD 的 SAN、存储监控

    一. 配置用法在官网都有的详见网页: http://www.stor2rrd.com/install.htm?1.2 二 . 在这里我只是想记录一下我是如何编译安装Apache的,避免踩坑: 安装包如 ...

  5. 【leetcode 5040. 边框着色】解题报告

    方法一:dfs的非递归形式 using ll=long long; const ll MAXN=50LL; unordered_set<ll> vis,mark; vector<ve ...

  6. Struts2学习第3天--OGNL、EL、值栈

    JAVA中的OGNL: 1 调用对象的方法: 2 访问对象的静态方法: 3 获取OGNLContext.Root中的数据. User: 4 访问Context: 关键还是在Struts2环境中的使用: ...

  7. loj#6041. 「雅礼集训 2017 Day7」事情的相似度(后缀自动机+启发式合并)

    题面 传送门 题解 为什么成天有人想搞些大新闻 这里写的是\(yyb\)巨巨说的启发式合并的做法(虽然\(LCT\)的做法不知道比它快到哪里去了--) 建出\(SAM\),那么两个前缀的最长公共后缀就 ...

  8. 【Es】jest操作elasticsearch

    https://blog.csdn.net/niuchenliang524/article/details/82869319 操作es的客房端有多个,在此例出三种(具体区别自行百度),本文讲的是jes ...

  9. LVS解决高并发,大数据量

    http://www.360doc.com/content/14/0726/00/11962419_397102114.shtml LVS的全称Linux vitual system,是由目前阿里巴巴 ...

  10. webpack(二)解析es6并打包

    一.前言 ECMAScript 6(ES6)的发展速度非常之快,但现代浏览器对ES6新特性支持度不高,所以要想在浏览器中直接使用ES6的新特性就得借助别的工具来实现.Babel是一个广泛使用的转码器, ...