iOS安全 對本地檔案的保護

來源:互聯網
上載者:User

標籤:

開篇先扯幾句題外話,許多朋友都問我怎麼不寫防啊,我確實有點猶豫。
hackers總是想象如果自己是開發人員會怎麼寫,然後才能找到入手點。同理,開發人員們也要想象自己是hackers會怎麼做,才能採取相應的防禦措施。然後,就是一場遞迴的博弈。
拿越獄檢測這件事來說,起初大家只需判斷有無安裝Cydia就好了,hackers們說好,那我就不安裝Cydia也可以動手腳。開發人員們又說,那你一定得用的上MobileSubstrate,bash,ssh吧,我去檢測手機有沒有安裝這些工具。可是又有什麼用呢?你判斷什麼我繞過去什麼。

 

當class-dump大肆流行,函數符號都被暴露,開發人員想盡辦法藏起自己的敏感函數代碼。hackers們也知道class-dump的死穴在哪裡,於是新的檢索辦法油然而生。也就說,當一個防禦手段成為流行,它就不會再是個讓hackers大罵“真特麼費勁”的防禦手段了。比如之前介紹的一個小技巧:記憶體資料擦除  ,hackers知道開發人員都去擦資料了,那我hook memset在你擦之前去讀就好了。開發人員說:我直接寫硬碟上然後刪除!hackers說:難道你沒聽說過檔案恢複?



OK,貧的有點多了,本文介紹一下防禦相關的話題————iOS的資料保護API。

 

 

資料保護API


檔案系統中的檔案、keychain中的項,都是加密儲存的。當使用者解鎖裝置後,系統通過UDID密鑰和使用者設定的密碼產生一個用於解密的密碼密鑰,存放在記憶體中,直到裝置再次被鎖,開發人員可以通過Data Protection API 來設定檔案系統中的檔案、keychain中的項應該何時被解密。

1)檔案保護

 

 

  1. /* 為filePath檔案設定保護等級 */  
  2. NSDictionary *attributes = [NSDictionary dictionaryWithObject:NSFileProtectionComplete  
  3.                                                        forKey:NSFileProtectionKey];  
  4. [[NSFileManager defaultManager] setAttributes:attributes  
  5.                                  ofItemAtPath:filePath  
  6.                                         error:nil];  

 

 

 

  1. //檔案保護等級屬性列表  
  2. NSFileProtectionNone                                    //檔案未受保護,隨時可以訪問 (Default)  
  3. NSFileProtectionComplete                                //檔案受到保護,而且只有在裝置未被鎖定時才可訪問  
  4. NSFileProtectionCompleteUntilFirstUserAuthentication    //檔案收到保護,直到裝置啟動且使用者第一次輸入密碼  
  5. NSFileProtectionCompleteUnlessOpen                      //檔案受到保護,而且只有在裝置未被鎖定時才可開啟,不過即便在裝置被鎖定時,已經開啟的檔案還是可以繼續使用和寫入  



 

2)keychain項保護

 

  1. /* 設定keychain項保護等級 */  
  2. NSDictionary *query = @{(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,  
  3.                         (__bridge id)kSecAttrGeneric:@"MyItem",  
  4.                         (__bridge id)kSecAttrAccount:@"username",  
  5.                         (__bridge id)kSecValueData:@"password",  
  6.                         (__bridge id)kSecAttrService:[NSBundle mainBundle].bundleIdentifier,  
  7.                         (__bridge id)kSecAttrLabel:@"",  
  8.                         (__bridge id)kSecAttrDescription:@"",  
  9.                         (__bridge id)kSecAttrAccessible:(__bridge id)kSecAttrAccessibleWhenUnlocked};    
  10.       
  11. OSStatus result = SecItemAdd((__bridge CFDictionaryRef)(query), NULL);  

 

  1. //keychain項保護等級列表  
  2. kSecAttrAccessibleWhenUnlocked                          //keychain項受到保護,只有在裝置未被鎖定時才可以訪問  
  3. kSecAttrAccessibleAfterFirstUnlock                      //keychain項受到保護,直到裝置啟動並且使用者第一次輸入密碼  
  4. kSecAttrAccessibleAlways                                //keychain未受保護,任何時候都可以訪問 (Default)  
  5. kSecAttrAccessibleWhenUnlockedThisDeviceOnly            //keychain項受到保護,只有在裝置未被鎖定時才可以訪問,而且不可以轉移到其他裝置  
  6. kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly        //keychain項受到保護,直到裝置啟動並且使用者第一次輸入密碼,而且不可以轉移到其他裝置  
  7. kSecAttrAccessibleAlwaysThisDeviceOnly                  //keychain未受保護,任何時候都可以訪問,但是不能轉移到其他裝置  



 

 

 

應用執行個體


把一段資訊infoStrng字串寫進檔案,然後通過Data Protection API設定保護。

 

 

  1. NSString *documentsPath =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];  
  2. NSString *filePath = [documentsPath stringByAppendingPathComponent:@"DataProtect"];  
  3. [infoString writeToFile:filePath  
  4.              atomically:YES   
  5.                encoding:NSUTF8StringEncoding  
  6.                   error:nil];  
  7. NSDictionary *attributes = [NSDictionary dictionaryWithObject:NSFileProtectionComplete  
  8.                                                        forKey:NSFileProtectionKey];  
  9. [[NSFileManager defaultManager] setAttributes:attributes  
  10.                                  ofItemAtPath:filePath  
  11.                                         error:nil];  


裝置鎖屏(帶密碼保護)後,即使是越獄機,在root許可權下cat讀取那個檔案資訊也會被拒絕。

 

 

 

 

 

註:轉自部落格http://www.cnblogs.com/ios8/p/ios-data-protect.html。

(轉)iOS安全 對本地檔案的保護

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.