iOS App 自动登录的安全性分析
- 1 引子
Cookie 有时也用其复数形式Cookies, 指某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密).
如果Cookie 以明文的方式存储,那是危险的,如果Cookie 以明文的方式存储在易得到的地方那就更危险了。现在很多的一些公司的APP Cookie都直接放在 APP 应用程序程序下,
这样会导致很大的安全问题,有一些不需要越狱的工具就可以导出,天真的小白们还认为不越狱就安全了吗?
当我们每次输入一次账户密码后,退出程序,然后再进来时一般人是不需要再次输入密码的,那么App 肯定存储了登录用的Cookie或者账户密码信息,这些信息如果不保存得当,
即使iOS 设备不越狱,照样也是不安全的!
开发过APP的都知道一般将Cookie存储在cookie.binary或者keychain。
1.cookie.binary 可以不越狱通过工具导出,一般采取这种方式还要配合混合加密才行。
Safari 浏览器和iOS应用程序将永久cookie保存在Cookies.binarycookies文件中
用BinaryCookieReader.py 去读取 下载地址:
http://securitylearn.net/wp-content/uploads/tools/iOS/BinaryCookieReader.py
方法为: python
BinaryCookieReader.py /private/var/mobile/Containers/Data/Application/x-x-x/Library/Cookies/Cookies.binarycookies
2.根据苹果的介绍,iOS设备中的Keychain是一个安全的存储容器,可以用来为不同应用保存敏感信息比如用户名,密码,网络密码,认证令牌。
苹果自己用keychain来保存Wi-Fi网络密码,VPN凭证等等。它是一个sqlite数据库,位于/private/var/Keychains/keychain-2.db,其保存的所有数据都是加密过的。
开发者通常会希望能够利用操作系统提供的功能来保存凭证(credentials)而不是把它们(凭证)保存到NSUserDefaults,plist文件等地方。保存这些数据的原因是开发者不想用户每次都要登录,因此会把认证信息保存到设备上的某个地方并且在用户再次打开应用的时候用这些数据自动登录。
一般对于未越狱的手机,iOS App 一般将 Cookie 或者密码 存放在 iOS 设备的 keychain中就安全了,但是如果对于越狱的手机,存储在 keychain 中还是不安全的。
Keychain 的操作
SecItemCopyMatching
SecItemAdd
SecItemUpdate
SecItemDelete
SecItemCopyMatching 用于搜索。其他操作操作,SecItemAdd,SecItemUpdate,SecItemDelete 从字面上就能理解。具体的使用细节可以查看 Apple 的文档:Apple Keychain Services Reference。
关于keychain 开发
需要导入Security.framework
#import
“GegeKeyChainHelper.h"
@implementation
Gege
KeyChainHelper
NSString
*
const
KEY_USERNAME =
@"com.company.app.username"
;
NSString
*
const
KEY_PASSWORD =
@"com.company.app.password"
;
@implementation
GegeKeyChainHelper
+ (
NSMutableDictionary
*)getKeyChainQuery:(
NSString
*)service {
return [ NSMutableDictionary dictionaryWithObjectsAndKeys :
( id ) kSecClassGenericPassword ,( id ) kSecClass ,
service, ( id ) kSecAttrService ,
return [ NSMutableDictionary dictionaryWithObjectsAndKeys :
( id ) kSecClassGenericPassword ,( id ) kSecClass ,
service, ( id ) kSecAttrService ,