掌握这些技能玩转iOS
近一年来,苹果iOS/OS X频繁被爆出重大安全漏洞,攻击者可以通过漏洞窃取多达上千个应用的密码。这些漏洞一旦被黑客掌握、利用,后果不堪设想。
好在这些漏洞的发现者还是有节操的,他们都将这些漏洞汇报给了苹果公司,避免了重大损失的产生。不过,这也为广大IOS用户捏了一把冷汗。IOS并没有想象中那么安全。
当我第一次开发移动应用时,曾怀疑过是否要把移动应用的安全独立出来。因为移动应用和桌面应用没有什么区别,都存在着相同的漏洞:栈和堆的溢出、格式化字符串漏洞、内存被释放后又重新利用,以及其他一些代码执行问题。这些漏洞也存在于iOS之中,毕竟都是从C语言的角度出发的系统。但是移动设备的安全焦点不在于软件的稳定性,而在于用户隐私、数据窃取以及进程间的恶意通讯方面。
移动应用不该具备哪些能力
人们从早期的桌面操作系统的错误设计里吸取了经验(Windows的错误设计,不同程序的文件可以放在同一个文件夹里,而且运行任意桌面程序都可以访问全部的用户数据,设置控制整台电脑),当前主流的移动操作系统都把应用程序相互隔离。由于应用间的沙盒隔离和iOS平台的日益完善,用户其实对安全的要求越来越高。
1、导致其他应用程序行为异常
一个应用程序不应该让其他应用程序崩溃。在过去的“黑暗”年代,你不仅可以读取其他程序的数据,还可以修改和删除数据,甚至能把整个系统文件删除。随着时间的推移,桌面系统通过进程间的相互独立使这个状况得以改善,但是他们这么做的原因仅仅是为了提高系统稳定性。毕竟删除一个文件就导致整个系统崩溃的问题确实很让人崩溃。
在移动操作系统中解决了这些问题,但是,既要满足用户应用程序之间的必要操作(最简单的例子,访问本机保存的图片),又要使所有进程完全隔离,这是不现实的。应用程序之间总要留一些窗口来做交换。这就需要开发者来确保他们的应用不会做坏事,并采取一切谨慎的措施来保障数据安全,防止其他恶意程序的侵袭。
2、拒绝为用户服务
iOS就是为手机而生的操作系统,这决定了当用户需要紧急呼叫时,所有的应用程序不能阻拦,而且这个请求的优先级最高。很多地方的法律都有相关规定,这也是攻击者不能篡改底层操作系统的原因。
3、盗取用户数据
一个应用程序不应该读取来自其他应用程序或本地操作系统的数据,更不能将其发送给第三方(比如照片云同步功能)。操作系统可以组织一个应用直接读取另一个应用的数据,但是开发者需要自己防范其他的数据盗取手段,仔细研究发送和接收数据所用到的IPC机制。
4、恶意扣费
在没有得到用户批准的情况下,应用程序不应该产生费用。许多手机恶意软件普遍存在让用户订阅第三方服务,这些服务产生的费用又要由机主来买单(当年移动梦网的各种恶心服务)。因此应用内购买项目和功能要明确的向用户说明,并且购买行为要得到用户的完全确认。
移动应用安全威胁分类
一项最新的研究表明,也许我们应该更加注重iPhone的安全性问题,因为研究结果表明,iPhone有着更多的安全漏洞,其漏洞数量比安卓、黑莓和Windows Phone加起来还要多出四倍。 这项研究是由SourceFire进行的,其统计了过去25年中的“公共漏洞和暴露”(CVE)数据,以及NVD漏洞数据,并进行了分析。结果令人吃惊,尽管苹果不断在每次更新时发布新的安全修复程序,但是其CVE数据却较去年出现了增长。 据研究数据表明,iPhone目前有着高达210个的漏洞,占据主要收集平台中的81%!安卓则有24个已知的安全漏洞,黑莓有1个,Windows Phone有14个。这项研究并没有延伸到边缘系统,如Symbian,bada等。
1、取证攻击
取证攻击者一旦有权访问设备或者它的备份,就会尝试获取设备的机密。最常见的做法就是访问设备的物理区域。相比计算机,手机或者平板设备更容易被盗,因此大部分攻击都是取证攻击。
取证攻击者可以由一个抱着碰运气心态的陌生人或者熟练掌握定向攻击的黑客发起。对于一个碰运气的陌生人来说,窃取信息就是偷(或捡到)一部没有任何PIN保护的手机,然后他们就能看到相册的图片,QQ或者微信的聊天记录,短信和通话记录,淘宝天猫等购物信息。一切的文字和可以通过正常途径访问到的数据都能被他们掌握。如果用户开启了两步验证,陌生人也可以很轻易的得到这些验证码。
如果攻击者是一个有着专业知识的职业黑客,攻击者知道某种技术可以用来实现来临时越狱,破解简单的PIN,然后访问设备中的数据。这些数据部分来自系统层,部分来自应用层。因此攻击者不但可以获取UI所展示的数据,可能得到系统底层的缓存数据(直接进入沙盒目录查看文件)。这些缓存数据可能包括截图,按键记录,Web请求中缓存的敏感数据,App内的log日志(这个如果被黑客看到可是很危险的,不但你的所有数据结构暴露在他们眼皮下,还有所有的服务器API),以及应用的本地数据库。
2、代码执行攻击
远程代码执行攻击会在设备上执行一段代码来破坏整个设备和数据,这个过程不需要拿到实际的设备。这种攻击的渠道主要有:网络,二维码(这是相当危险的,特别是地铁上的迷之二维码)、NFC、恶意文件解析,以及连接感染病毒的外接设备。一旦设备执行了远程攻击代码,就可以执行取证攻击,从而获取用户的机密信息,有几种经常出现的代码执行攻击,他们东欧利用了底层编程语言的漏洞(格式化字符串、缓冲区溢出、整数溢出)。
3、Web攻击
基于Web的远程代码执行攻击主要使用恶意的HTML和Javascript来误导用户或窃取数据。远程攻击者可以操控一个恶意网站或者合法网站,也可以简单地将恶意代码发布到公共论坛。
这些攻击可以从HTML5的数据库或本地存储中窃取数据,还能修改或窃取存储在SQLite中的数据,读取会话cookie或植入一个虚假登录表单来盗取用户的凭据(假的银行网站、假的领奖网站)。
4、网络攻击
基于网络执行的代码攻击,通常会通过网络注入一些可执行代码,从而控制相关的应用程序或整个系统。比如你可以修改设备的网络请求内容,也可以使用漏洞利用程序来破解系统服务或者内核。如果被攻击的目标具有比较高的权限,那么攻击成功之后,攻击者不仅可以获取某个特定应用程序的数据,还能获得设备中全部的数据。他们不仅可以监控设备的运行状态,还能植入后门应用程序方便再次访问。
5、物理攻击
通过物理手段供给设备,往往要用到NFC或者USB接口。这种类型的攻击常常被用在设备的越狱或者Root上,但也可以通过短暂的物理接触供给设备。大部分攻击都是针对操作系统的。
掌握这些技能玩转iOS的更多相关文章
- 玩转iOS开发:iOS中的GCD开发(三)
上一章, 我们了解到了GCD里的一些队列和任务的知识, 也实践了一下, 同时我们也对主队列的一些小情况了解了一下, 比如上一章讲到的卡线程的问题, 如果没有看的朋友可以去看看玩转iOS开发:iOS中的 ...
- 玩转iOS 9的UIDynamics(转)
转自 http://www.cocoachina.com/ios/20150716/12613.html 本文由CocoaChina翻译小组成员AGSpider(微博)翻译自fancypixel的博客 ...
- 玩转iOS开发 - 多线程开发
前言 本文主要介绍iOS多线程开发中使用的主要技术:NSOperation, GCD. NSThread, pthread. 内容依照开发中的优先推荐使用的顺序进行介绍,涉及多线程底层知识比較多的NS ...
- 玩转iOS开发 - 简易的实现2种抽屉效果
BeautyDrawer BeautyDrawer 是一款简单易用的抽屉效果实现框架,集成的属性能够对view 滑动缩放进行控制. Main features 三个视图,主视图能够左右滑动.实现抽屉效 ...
- 玩转iOS开发 - 数据缓存
Why Cache 有时候.对同一个URL请求多次,返回的数据可能都是一样的,比方server上的某张图片.不管下载多少次,返回的数据都是一样的. 上面的情况会造成下面问题 (1)用户流量的浪费 (2 ...
- 玩转iOS开发 - JSON 和 Xml 数据解析
前言 Json 和xml是网络开发中经常使用的数据格式,JSON轻量级.xml相对较复杂.所以如今用JSON的比例很大.基本上从server获取的返回数据都是JSON格式的,作为iOS开发人员,解析J ...
- 玩转 iOS 10 推送 —— UserNotifications Framework(合集)
iOS 10 came 在今年 6月14号 苹果开发者大会 WWDC 2016 之后,笔者赶紧就去 apple 的开发者网站下载了最新的 Xcode 8 beta 和 iOS 10 beta,然后在自 ...
- 玩转iOS开发 - 消息推送
消息推送
- 玩转iOS开发 - 视图控制器生命周期
视图控制器生命周期
随机推荐
- windwos-sshfs
从 http://www.jianshu.com/p/d79901794e3d 转载 目的 最近因为需要在linux虚拟机里进行开发程序,虽然在linux里有超强的编辑器vim,但vim开发html前 ...
- django组件之中间件
中间件的概念 中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出.因为改变的是全局,所以需要谨慎实用,用不好会影响到 ...
- nginx配置文件企业优化
1.1 企业规范优化Nginx配置文件 第一个里程碑:创建扩展目录,生成虚拟主机配置文件 mkdir extra sed -n '10,15p' nginx.conf >extra/www.co ...
- 字符串转LocalTime再转Instant
LocalTime a= LocalTime.parse("20:13:01"); // LocalTime a= LocalTime.now(); System.out.prin ...
- (转)Caffe搭建:常见问题解决办法和ubuntu使用中遇到问题(持续更新)
参考网址:http://www.cnblogs.com/empty16/p/4828476.html 严正声明: 在linux下面使用命令行操作时,一定要懂得命令行的意思,然后再执行,要不然在不知道接 ...
- java——newInstance()方法和new关键字
https://www.cnblogs.com/liuyanmin/p/5146557.html 这两个都可以创建一个对象,那么这样个东西有什么不一样呢?什么时候用new,什么时候用newInstan ...
- 转 python 随机走动的模拟
https://blog.csdn.net/python2014/article/details/21231971 麻省理工的随机走动模块,还不错,三天搞懂了,不过懂得不彻底. 记录下修改的代码 ...
- 关于let 和 var 的作用域问题
直接来一个经典案例: // 1. 下面的结果是什么? 为什么? for (var i=0;i<5;i++){ setTimeout(function () { console.log(i) }, ...
- zuul路由网关
zuul作为网关组件,主要用来管理api请求接口(统一对外暴露,负载均衡),身份认证,流量监控等.它是通过servlet来实现的,核心是一系列过滤器,可以在请求的发起跟相应返回阶段进行一系列的处理. ...
- $.get和$.post实例
get和post用法一样,我只写个$.get的. [HTML] <input type="text" id="myFishName" name=" ...