事件

事件引爆于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. angular 输出属性

    import { Component, OnInit, EventEmitter, Output } from '@angular/core'; @Component({ selector: 'app ...

  2. angular 辅助路由

  3. 上课总结-模电chapter 1

    Chapter 1 半导体器件 一.杂质半导体(N型半导体/P型半导体) N型 p型 特点 N型 将少量5价元素参入四价元素中==> 电子多 ==>电子为多子 p型 将少量3价元素参入四价 ...

  4. sublime 快捷键 1到9的顺序

    p{$$}*9

  5. Array数组结构底层实现复习

    Array数组结构底层实现复习 内容待总结: size capacity length

  6. css和js带参数v或version

    1 <span style="font-size:14px;">css和js带参数(形如.css?v=与.js?v= 或 .css?version=与.js?versi ...

  7. css类选择器中 空格 逗号 啥都不填的区别及其他笔记

    .a.b 代表 一个元素上 同时 有 a 类 和 b 类 .a .b (中间有空格) 代表 .b 是 .a 的子元素选择. .a,.b 代表 class='a' 和 class='b' 都会被选择上.

  8. D. Magic Gems(矩阵快速幂 || 无敌杜教)

    https://codeforces.com/contest/1117/problem/D 题解:有一些魔法宝石,魔法宝石可以分成m个普通宝石,每个宝石(包括魔法宝石)占用1个空间,让你求占用n个空间 ...

  9. SGU - 495 概率DP

    题意:n个带礼物的盒子和m个人,每个人拿一个盒子并放回,如果里面有礼物就拿走(盒子还是留下),问m个人带走礼物的期望 #include<iostream> #include<algo ...

  10. WSH的SpecialFolders对像

    前面我做过一个VBS,来实现添加网站快捷方式到开始菜单,当然你也可以添加到别的地方,这就是那个对像的一些用法返回 SpecialFolders 对象(特殊文件夹集). object.SpecialFo ...