移动互联网的兴起,每天都会涌现大量的app产品,无论公司开发还是个人开发,大家都在追求更快的抢占市场,但是确忽略了打磨产品,也忽略了移动开发中的数据安全隐患,如果我们用Charles工具,很容易截获到很多知名的app的传输的隐私数据,包括用户名和账号信息等。比如下图是我用Charles(青花瓷)软件截获糗事百科明文方式传输的用户名和账号信息,网上了解到神州租车和一嗨租车的用户登陆也是明文传输,明文传输很容易被截获。下文我就将我今天查阅各种资料学到的关于iOS中数据安全的知识总结下来和大家分享。

iOS应用的数据安全有哪些?

  1.网络安全

  2.本地文件和数据安全

  3.源代码安全

他们包括内容如下表格所示:

网络安全

本地沙盒文件和数据安全

源代码安全

用户密码的安全

程序文件的安全

通信协议安全

本地数据安全

验证应用内支付的凭证安全

其它隐私数据安全

网络安全

  1.安全地传输用户密码信息

  安全隐患:

  黑客可以在Mac下使用Charles软件(如果在Windows下,可以使用Fiddler软件)来将自己的电脑设置成代理服务器,从而截取应用的网络请求,分析目标应用在通信协议上是否有安全问题。

  如果每一个移动应用都明文传输用户密码,那么我们可以想象这样一个场景:黑客在咖啡馆或机场等一些公共场所,将自己的电脑设置成与该场所一样名字的免费Wi-Fi,受害者只要不小心使用了该Wi-Fi,则可能泄漏自己的明文密码。对于大多数普通人来说,他们会使用一样的密码登录他的所有的账号,这就意味着他的其他账号:例如淘宝或网上银行账号也有被盗的风险。

  解决方案:

  事先生成一对用于加密的公私钥,客户端在登录时,使用公钥将用户的密码加密后,将密文传输到服务器。服务器使用私钥将密码解密,然后加盐(Salt,在密码学中是指,通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这个过程称之为“加盐”),之后再多次求MD5,然后再和服务器原来存储的用同样方法处理过的密码匹配,如果一致,则登录成功。这样的做法,保证黑客即使截获了加密后的密文,由于没有私钥,也无法还原出原始的密码。而服务器即使被黑客攻陷,黑客除了暴力尝试,也无法从加盐和多次MD5后的密码中还原出原始的密码。这样就保证了用户密码的安全。

  2. 防止通信协议被轻易破解

  安全隐患:

  除了上面提到的明文传输密码的问题外,移动端应用还要面对黑客对于通信协议的破解的威胁。在成功破解了通信协议后,黑客可以模拟客户端登录,进而伪造一些用户行为,可能对用户数据造成危害。例如腾讯出品的消除游戏《天天爱消除》,在淘宝上就有很多售价仅为1元的代练服务,如果真正是人工代练,是不可能卖这么便宜的,只有可能是该游戏的通信协议被破解,黑客制作出了代练的机器人程序。通信协议被破解除了对于移动端游戏有严重危害外,对于应用也有很大的危害。例如针对微信,黑客可以制作一些僵尸账号,通过向微信公共账号后台发送垃圾广告,达到赢利的目的。而iPhone设备上的iMessage通信协议居然也被破解了,所以很多iPhone用户会收到来自iMessage的垃圾广告。

  解决方案

  对于以上提到的问题,开发者可以选择类似ProtoBuf(Google提供的一个开源数据交换格式,其最大的特点是基于二进制,因此比传统的JSON格式要短小得多)之类的二进制通信协议或自己实现通信协议,对于传输的内容进行一定程度的加密,以增加黑客破解协议的难度。

  3. 验证应用内支付的凭证

  安全隐患:

  iOS应用内支付(IAP)是众多应用赢利的方式,通过先让用户免费试用或试玩,然后提供应用内支付来为愿意付费的用户提供更强大的功能,这种模式特别适合不习惯一开始就掏钱的中国用户。但由于国内越狱用户的比例比较大,所以我们也需要注意应用内支付环节中的安全问题。简单来说,越狱后的手机由于没有沙盒作为保护,黑客可以对系统进行任意地修改,所以在支付过程中,苹果返回的已付款成功的凭证可能是伪造的。客户端拿到付款凭证之后,还需要将凭证上传到自己的服务器上,进行二次验证,以保证凭证的真实性。

  另外,我们发现越狱用户的手机上,很可能被黑客用中间人攻击技术来劫持支付凭证。这对于黑客有什么好处呢?因为苹果为了保护用户的隐私,支付凭证中并不包含任何用户的账号信息,所以我们的应用和服务器无法知道这个凭证是谁买的,而只能知道这个凭证是真的还是假的。所以在验证凭证时,哪个账号发起了验证请求,我们就默认这个凭证是该账号拥有的。如果黑客将凭证截获,就可以伪装成真实用户来验证凭证或者转手出售获利。

  打个比方,这就类似于很多商场的购物卡一样,由于是不记名的,黑客如果将你买的购物卡偷窃然后去刷卡购物,商场是无法简单地区分出来的。

  解决方案:

  因此,对于应用内支付,开发者除了需要仔细地验证购买凭证外,也需要告知用户在越狱手机上进行支付的风险。

本地文件和数据安全

  1. 程序文件的安全

  安全隐患:

  iOS应用的大部分逻辑都是在编译后的二进制文件中,但由于近年来混合式(Hybrid)编程方式的兴起,很多应用的部分功能也采用内嵌Web浏览器的方式来实现。例如腾讯QQ iOS客户端的内部,就有部分逻辑是用Web方式实现的。由于iOS安装文件其实就是一个zip包,所以我们可以通过解压,看到包内的内容。

  可以看到,这些文件都有着完整清晰的注释。通过分析这些JavaScript文件,黑客可以很轻松地知道其调用逻辑。在越狱手机上,还可以修改这些JavaScript代码,达到攻击的目的。

  解决方案:

  通过将JavaScript源码进行混淆和加密,可以防止黑客轻易地阅读和篡改相关的逻辑,也可以防止自己的Web端与Native端的通信协议泄漏。

  2.本地数据安全

  安全隐患:

  iOS应用的数据在本地通常保存在本地文件或本地数据库中。如果对本地的数据不进行加密处理,很可能被黑客篡改。比如一款名为《LepsWorld 3》的游戏,打开它的本地文件,可以很容易地找到,它使用了一个名为ItempLifes的变量保存生命数值(如图4所示)。于是我们可以简单修改该值,达到修改游戏参数的目的。而在淘宝上,也可以找到许多以此挣钱的商家。

  解决方案:

  对于本地的重要数据,我们应该加密存储或将其保存到keychain中,以保证其不被篡改。

源代码安全

  安全隐患:

  通过file、class-dump、theos、otool等工具,黑客可以分析编译之后的二进制程序文件,不过相对于这些工具来说,IDA的威胁最大。IDA是一个收费的反汇编工具,对于Objective-C代码,它常常可以反汇编到可以方便阅读的程度,这对于程序的安全性,也是一个很大的危害。因为通过阅读源码,黑客可以更加方便地分析出应用的通信协议和数据加密方式。

  解决方案:

  反汇编的代码被获得后,由于软件内部逻辑相比汇编代码来说可读性高了很多。黑客可以用来制作软件的注册机,也可以更加方便地破解网络通信协议,从而制作出机器人(“僵尸”)账号。最极端的情况下,黑客可以将反汇编的代码稍加修改,植入木马,然后重新打包发布在一些越狱渠道上,这将对用户产生巨大的危害。

 

  参考文章:iOS应用安全开发,你不知道的那些事》

iOS开发中的数据安全隐患和解决方案的更多相关文章

  1. iOS开发中遇到的一些问题及解决方案【转载】

    iOS开发中遇到的一些问题及解决方案[转载] 2015-12-29 [385][scrollView不接受点击事件,是因为事件传递失败] // //  MyScrollView.m //  Creat ...

  2. 【三分钟视频教程】iOS开发中 Xcode 报 apple-o linker 错误的#解决方案#

      [三分钟视频教程]iOS开发中 Xcode 报 apple-o linker 错误的#解决方案#   同样的道理,指向同一库文件的代码语句如果重复书写,即使重复书写所在的文件名字不同,同样会造成这 ...

  3. iOS 开发中,关于xxx.xcodeproj 文件冲突的解决方案 (以后谁不会了,直接将连接给他)

    iOS 开发中,关于xxx.xcodeproj 文件冲突的解决方案 (一有冲突要手把手教一遍,太麻烦了,现在总结下,以后谁不会了,连接直接发他). 关于xxx.xcodeproj 文件冲突的话,是比较 ...

  4. [转]iOS开发中的火星坐标系及各种坐标系转换算法

     iOS开发中的火星坐标系及各种坐标系转换算法 源:https://my.oschina.net/u/2607703/blog/619183   其原理是这样的:保密局开发了一个系统,能将实际的坐标转 ...

  5. iOS开发中常见问题集锦

    在iOS开发中,会出现各种各样的问题.今天,就把这些常见的问题以及各位大牛的解决方案汇总下,方便以后查阅: 常见错误: 1. linker command failed with exit code ...

  6. 多线程在iOS开发中的应用

    多线程基本概念 01 进程 进程是指在系统中正在运行的一个应用程序.每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内. 02 线程 2-1 基本概念 1个进程要想执行任务,必须得有线程 ...

  7. 总结iOS开发中的断点续传那些事儿

    前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...

  8. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  9. iOS开发中静态库制作 之.a静态库制作及使用篇

    iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...

随机推荐

  1. 十分钟学会mysql数据库操作

    Part1:写在最前 MySQL安装的方式有三种: ①rpm包安装 ②二进制包安装 ③源码安装 这里我们推荐二进制包安装,无论从安装速度还是用于生产库安装环境来说,都是没问题的.现在生产库一般采用My ...

  2. 关于ifram之间的相互调用

    window.iframeId.btnClose.click(); 父调子 window.parent.FatherFunciton(); 子调父

  3. 【20160924】GOCVHelper 图像处理部分(3)

    //根据轮廓的圆的特性进行选择     vector<VP> selectShapeCircularity(Mat src,Mat& draw,vector<VP> c ...

  4. filebeat安装与基础用法

    来自官网,版本为1.2 下载rpm包并安装 wget -c https://download.elastic.co/beats/filebeat/filebeat-1.2.3-x86_64.rpm r ...

  5. Linux 各文件夹介绍

    http://www.cnblogs.com/amboyna/archive/2008/02/16/1070474.html linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命 ...

  6. [问题2014S11] 复旦高等代数II(13级)每周一题(第十一教学周)

    [问题2014S11]  设 \(A,B\) 为 \(n\) 阶实对称阵, \(p(A),p(B),p(A+B)\) 分别为 \(A,B,A+B\) 的正惯性指数, 证明: \[p(A)+p(B)\g ...

  7. centos jenkins

    wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo rpm --import htt ...

  8. Android TextView自动换行文字排版参差不齐的原因

    今天项目没什么进展,公司后台出问题了.看了下刚刚学习Android时的笔记,发现TextView会自动换行,而且排版文字参差不齐.查了下资料,总结原因如下: 1.半角字符与全角字符混乱所致:这种情况一 ...

  9. Delphi 使用之dll文件生成与调用

    DLL是Dynamic-Link Libraries(动态链接库)的缩写,库里面是一些可执行的模块以及资源(如位图.图标等).可以认为DLL和EXE基本上是一回事,只是DLL不能直接执行,而必须由应用 ...

  10. Failed to execute goal org.codehaus.mojo:rpm-maven-plugin:2.1.1:rpm (default) on project **

    maven编译项目时报错:Failed to execute goal org.codehaus.mojo:rpm-maven-plugin:2.1.1:rpm (default) on projec ...