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 ...
随机推荐
- [九省联考2018] IIIDX 线段树+贪心
题目: 给出 k 和 n 个数,构造一个序列使得 d[i]>=d[i/k] ,并且字典序最大. 分析: 听说,当年省选的时候,这道题挡住了大批的高手,看上去十分简单,实际上那道弯段时间内是转不过 ...
- python3.x中的33个保留字
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32 Type " ...
- 【Java_多线程并发编程】JUC原子类——AtomicLong原子类
1. AtomicLong是基本原子类中的一种 AtomicLong是对长整形进行原子操作. 1.1 AtomicLong类的函数列表 // 构造函数 AtomicLong() // 创建值为init ...
- (38)zabbix中配置snmp监控
1.首先按照“snmp监控快速配置”文本文档在被监控的主机上安装.配置及启动snmp服务, 具体内容如下: 1).安装snmp yum install net-snmp* -y cp -a /etc/ ...
- Pycharm快捷键及Python常用转义符
不管是windows.xshell或者pycharm,学会使用快捷键都会使学习工作达到事半功倍的效果.这篇博客收集了部分常用的pycharm快捷键,分享给大家,希望对大家有用. 1. 常用快捷键 Py ...
- perl学习之:函数总结
一.进程处理函数 1.进程启动函数 函数名 eval 调用语法 eval(string) 解说 将string看作Perl语句执行.正确执行后,系统变量$@为空串,如果有错误,$@中为错误信息. 例子 ...
- 《UNIX环境高级编程》笔记——4.文件和目录
一.引言 本章描述文件系统的其他特征和文件的性质.有些背景知识需要注意,例如用户ID与文件权限.文件系统等. 二.函数stat.fstat.fstatat和lstat #include <sys ...
- 流程控制主while,for,python画金字塔,画9*9乘法表
5.6 自我总结 一.流程控制while 1.while while True: #while + 条件满足进行下面的循环 age = input('age:') #while 循环的内容 2.whi ...
- sklearn 快速入门教程
1. 获取数据 1.1 导入sklearn数据集 sklearn中包含了大量的优质的数据集,在你学习机器学习的过程中,你可以通过使用这些数据集实现出不同的模型,从而提高你的动手实践能力,同时这个过程也 ...
- PAT Basic 1010
1010 一元多项式求导 设计函数求一元多项式的导数.(注:x^n^(n为整数)的一阶导数为n*x^n-1^.) 输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过1000的整数). ...