ios安全系列(3)

来源:互联网 发布:鞍山市网络作家协会 编辑:程序博客网 时间:2024/06/09 19:29

1、隐私的问题

先说UUID,一直都在说,不要使用UUID在程序里面用来实现认证等功能。UUID也带来了很多隐私问题。

每个iphone都有一个唯一的标示 UDID. 号称不可改变,但在越狱终端上有UDID Faker之类的软件给您提供高级假冒服务(可以为每一个应用分配不同的UDID)。

UDID怎么算出来的?
UDID = SHA1(Serial Number + ECID + LOWERCASE (WiFi Address) + LOWERCASE(Bluetooth Address))

UDID原来是放开的,大家随便调用。

NSString *uniqueIdentifier = [device uniqueIdentifier]

但隐私问题出来,UDID唯一表示一个终端,那就差不多标示一个人了!如果配合其他的信息如位置等,就可以跟踪楼主了!开发个软件,可以监控女神的每时每刻的位置,位置不差1米。研究表明, 68%的应用悄悄的上传 UDIDs 。再配合一些社交网络里面的信息,就可以定位楼主了。

鉴于此, 苹果已正式宣布,不再接受访问iOS设备UDID的应用申请或应用更新苹果建议开发者转用由iOS 6提供的Vender和Advertising Identifier系统允许开发者访问。详情参考UIDevice Class Reference

苹果也建议生成一个随机数。。。

-(NSString*) uuid {

    CFUUIDRef puuid = CFUUIDCreate( nil );  
CFStringRef uuidString = CFUUIDCreateString( nil, puuid );
NSString * result = (NSString *)CFStringCreateCopy( NULL, uuidString);
CFRelease(puuid);
CFRelease(uuidString);
return [result autorelease];
}

该方法每次都会获取一个唯一的标识字符串,开发者可以在应用第一次启动时候调用一次,然后将该串存储起来,以便以后替代UDID来使用.但这就不能标示终端了。

2、本地数据安全的问题

1)备份

    itune备份到电脑了,电脑病毒可以窃取。

2)丢了手机

    尤其不设置pin码的,拿数据的安全就。。

3)恶意软件

    这个ios平台真的比较少,但也不能说没有。

ios的应用也是沙箱机制,很强大哦,前面的一篇文章介绍过。ios和android的沙箱不一样,android是每个进程一个UID,ios的应用都是一个用户mobile。

用户装完应用目录在:/var/mobile/Applications


开发ios应用时,数据常见的保存位置有:

  • Plist files
       里面保存一些配置信息,是XML格式, plutil等工具可以编辑。
        有人在里面存储用户名和密码。。。比如WordPress iPhone应用曾经。。
         可以使用 iExplorer and iBackupBot等工具下载plist文件,然后修改。有些玩游戏的同学可能会用到。


也可以用iBackupBot。看名字就知道这是通过读取pc的备份来获取plist文件的。ios的文件,都会备份到pc上。


在越狱的终端上修改起来就更方便了,比如 plutil and iFile。
你的工作就是先定位到plist.然后开始修理。


比如添加一行:

Add ‘EnableFirebreak’ key to the com.apple.mobileslideshow.plist

> Plutil –key EnableFirebreak –value yes com.apple.mobileslideshow.plist


  • Keychain
      这个东西前文已有介绍。建议读者先看看。 

ios安全团队对ios安全的认识http://blog.csdn.net/u011069813/article/details/9256233


Keychain首先是个Sqlite 数据库,里面存储一些小数据,比如认证等信息( usernames, passwords, encryption keys, certificates and private keys)。应用使用keychain service library/API (secItemAddsecItemDelete,secItemCopyMatching & secItemUpdate methods) 来访问keychain. keychain Sqlite database的位置: /private/var/Keychains/keychain-2.db.

  • Application’s home directory
  • Cache
  • Logs


待续。。。。