iOS Application Security
文章分A,B,C,D 4个部分。
A) iOS Application Security
下面介绍iOS应用安全,如何分析和动态修改app。
1)iOS Application security Part 1 – Setting up a mobile pentesting platform Part1介绍如何在越狱的设备上搭建用来测试iOS安全的环境。
2)iOS Application security Part 2 – Getting class information of IOS apps Part2介绍如何利用class-dump-z 和 Clutch 来dump类信息,利用这些信息,可以理解代码的设计和代码内部是如何工作的。
有没有可能我们去动态修改app呢?
例如有一个方法 -(BOOL)isFacebookSessionValid ,在某种情况下返回 NO,有没有方法操纵它让它返回YES呢?
可不可以在运行时修改 instance variable变量的值呢?
答案是:YES。
3) iOS Application security Part 3 – Understanding the Objective-C Runtime Part3提到Method Swizzling.我之前有篇blog有过介绍,参见:Monkey Patching iOS with Swizzling
4) iOS Application Security Part 4 – Runtime Analysis Using Cycript (Yahoo Weather App)
Part4介绍了用Cycript动态分析和修改app的方法。文章拿Yahoo Weather app做的例子。其中一处改动是给加上了badge number。

Part5 分享了一些高级分析技术。分析了如何获得特定类的信息(方法名,实例变量名称),并且如何在运行时修改。
6)IOS Application Security Part 6 – New Security Features in IOS 7
B)关键数据的保存。
在本地保存的数据,一般来说,要么:
1)存本地db。
2)存plist文件。 ([NSUserDefaults standardUserDefaults] 也是一个plist文件)
3)存入keychain。
如果直接保存明文,即使在keychain中,也不安全。 之前我写过一篇blog,keychain is not safe,里面提到了某微博,其实就是新浪微博客户端,把用户密码存在keychain中,在一定条件下,也是可以提取出来的。
(下面图中password所在位置就是我新浪微博的密码,为了演示,这里做了修改)

所以,关键数据是需要加密的。Encrytion is a must for sensitive data.
C)通信的安全。
一般来说,http请求都应该要做到能够防篡改、防重放攻击(replay attack)等等,如果安全要求更高,还要用https, 在客户端用https,也要注意对源的校验。(通过SSL Pining提供iOS SSL通信的安全)。
比如一些涉及到关键业务的东西,不能够直接给个URL,任何人都能从PC上就下载,一定要做身份校验,甚至要有time out值(URL里面有时间戳)。
比如最近大家看到的关于支付宝插件的分析相关文章(参见:分析支付宝客户端的插件机制,浅析支付宝钱包插件,再谈支付宝钱包插件和说好的 Demo),如果是你来设计,请问会从哪些方面来加强安全呢。
我想到这些:
1)插件内容加密。
这里做到加密关键部分即可。在加载插件对应功能的时候,把对应功能解密到内存中,文件系统中还是保持加密状态。
2) 下载插件的URL做身份验证。
3) 插件里面的JS做混淆。
4)关键逻辑和代码,放在native实现。
5)加入冗余代码,让代码不易被看懂。
D)安全 VS 成本
对于个人用户来说,尽量不要越狱,不使用免费WIFI登陆敏感网站。(很多免费WIFI传输都不加密,加密的密码很可能也是123456这种,很容易被hack;或者这个WIFI,本身就是别有企图的人提供的)。
对企业来说,就既要考虑通信的安全,也要考虑客户端的安全等等。直接把用户的密码存在本地,安全上是有风险。
安全是相对的,A)中分享的文章可以看到,即使把关键逻辑放在iOS native code中去实现,也是可能被hack,被破解的。但是,这个需要的技巧和能力就会要求更高。
你的业务是什么,你打算以多大的成本来提高安全性,业务越critical,要求越高。
对于和钱打交道的app,至少,你需要提高门槛。
You should raise the bar.
---------这是分割线----------
转载自:http://wufawei.com/2013/07/iOS-application-security/
iOS Application Security的更多相关文章
- IOS Application Security Testing Cheat Sheet
IOS Application Security Testing Cheat Sheet [hide] 1 DRAFT CHEAT SHEET - WORK IN PROGRESS 2 Int ...
- iOS使用Security.framework进行RSA 加密解密签名和验证签名
iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...
- 安装数据库Mocrosoft.NET Application Security警告
在安装sqlserver 2012的时候,出现了Mocrosoft.NET Application Security警告,这个时候可以检查是否联网,如果没有联网请连接上,然后重新检查就不再警告了.如果 ...
- [转]Running JavaScript in an iOS application with JavaScriptCore
原文:https://www.infinum.co/the-capsized-eight/articles/running-javascript-in-an-ios-application-with- ...
- Web Application Security(Web应用安全)
Web Application Security 1.web应用面临的主要安全问题 1)黑客入侵:撞库拖库.网页篡改.后门木马.加密勒索.数据泄露 2)恶意内容 2.web应用安全现状 1)网站安全问 ...
- iOS Application Project与OS X Application Project对于plist使用的区别
前几天因为在开源中国看到一个求源代码的问题: 模拟一个动物园系统MyZoo 1.动物园里面有三种动物:Panda,Elephant,Kangaroo 2.三种动物都有一定的数量(不止一只) 3.动物有 ...
- Persisting iOS Application Data in SQLite Database Using FMDB
In previous articles we have utilized NSUserDefaults and .NET web services to persist iPhone data. N ...
- iOS Application Life Cycle 应用程序生命周期
应用程序的状态 IOS的应用程序一共有5种状态. Not running(未运行):程序未启动 Inactive(未激活):其他两个状态切换时出现的短暂状态.唯一在此状态停留时间比较长的情况是:当用户 ...
- Spring Security(三十七):Part IV. Web Application Security
Most Spring Security users will be using the framework in applications which make user of HTTP and t ...
随机推荐
- http常用状态吗以及分别代表什么意思?
http常用状态码: 状态码 定义 说明 1xx 信息 街道请求继续处理 2xx 成功 成功的收到.理解.接受 3xx 重定向 浏览器需要执行某些特殊处理一完成请求 4xx 客户端错误 请求的语法有问 ...
- 学c++有感
第一次学习这么课程的时候,感觉课堂和教材的内容基本上都能接受和理解,但真正实际动手编写程序又觉得一片空白无从下手,可谓是“欲起平之恨无力.”一开始编写程序时,总是出现错误,从而产生了恐惧感,认为自己不 ...
- GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 (线段树)
GSS4 - Can you answer these queries IV || luogu4145上帝造题的七分钟2 / 花神游历各国 GSS4 - Can you answer these qu ...
- js获取移动端触摸坐标
想在touchmove事件里监听手指按下的坐标,event.pageX获取的是undefined,changedTouches,targetTouches,touches也只获得到了鼠标按下时的坐标, ...
- adb 常用命令详解
1.把电脑上文件或目录copy到手机中:adb push <local> <remote> - copy file/dir to device 此处的<local& ...
- nw.js学习地址
http://blog.sina.com.cn/s/blog_600e56a60102vqj2.html https://github.com/nwjs/nw.js/wiki/Manifest-For ...
- 图论trainning-part-2 C. The Largest Clique
C. The Largest Clique Time Limit: 3000ms Memory Limit: 131072KB 64-bit integer IO format: %lld ...
- php 投票
1.投票主界面(问题界面) <?php$db = new Mysqli("localhost","root","root"," ...
- 九度oj 题目1159:坠落的蚂蚁
题目描述: 一根长度为1米的木棒上有若干只蚂蚁在爬动.它们的速度为每秒一厘米或静止不动,方向只有两种,向左或者向右.如果两只蚂蚁碰头,则它们立即交换速度并继续爬动.三只蚂蚁碰头,则两边的蚂蚁交换速度, ...
- phpstorm 修改头部注释
点击“setting”->"File Templates" ->"PHP File Header"