1. 程式人生 > >iOS APP 如何做才安全

iOS APP 如何做才安全

wap xcode 我是真的 應該 服務端 容易 測試環境 屬性 無法

iOS應用的安全性 常常被大家忽視。

iOS 如何做才安全:

1、首先,我們可以通過iTunes 下載 AppStore的ipa文件(蘋果 把開發者上傳的ipa包 進行了加殼再放到AppStore中),所以我們從AppStore下載的ipa都是加殼的,所以不能直接用來反編譯。

得到ipa文件 可以分析APP 裏包含的一些資源,如:圖片、plist文件、靜態wap頁、.bundle 等。

所以不要 在plist文件、項目中的靜態文件中 存儲關鍵的信息,如果要保存,記得 對稱加密(這樣可以增加破解的難度)。

如果是越獄的手機,從 手機上的PP助手下載的ipa包 都是 脫殼之後的,可以直接用來反編譯。

2、我們可以用軟件 查看 APP的沙盒,查看裏面存儲的 文件:sqlite、plist(NSUserdefault會存到Library下的Preferences中 的 plist文件中)、圖片等,NSUserdefault 中不要保存關鍵信息,如果要保存,還是加密吧。。sqlite也是這樣子的。

iOS 8.3之前 不越獄的手機也可以 直接用MAC上的PP助手、iTool 來查看 任何APP的沙盒(系統APP除外)。iOS 8.3之後就不行了。

越獄手機 都可以查看任意APP的沙盒,包括系統APP的沙盒。還有iOS的系統目錄等。

3、越獄手機 直接用PP助手下載的就是 脫殼的ipa,所以不用再脫了。對AppStore下載的ipa包 可以用工具對加殼的ipa 進行脫殼,再用IDA、Hopper 進行反編譯,進行分析 ,可以得到 近乎易懂的 偽代碼。但是反編譯後的代碼 要 一個方法一個方法的去分析,類似面向過程編程。。當然也有工具 去提取 項目中的所有.h文件。不過 反編譯 終歸是個 耐心的活,急躁的人容易砸電腦。

4、所有的APP都是可以反編譯的,所以 很關鍵的數據 最好通過接口獲取。

那麽接口如何保證安全呢。首先用HTTPS,雖然HTTPS已經很安全了,但是數據也是有可能被破解的,這個後面會介紹。。所以 接口一定要自己加密。

非對稱加密(RSA)現在 還是沒有辦法破解的,但是因為 非對稱加密的效率低,所以很少有企業將所有的接口都用非對稱加密。

接口如果用對稱加密,密鑰 放到代碼裏 是能被反編譯出來的。如果你的 APP的安全性很高,就不要把密鑰 寫到代碼裏。

可以這樣處理:

先通過非對稱加密的接口 獲取密鑰,然後 再在 後面的 接口通信中 用這個密鑰進行加密。這樣做 就類似 HTTPS 的簡化版實現了。安全性很高。目前應該 是不能破解的。

5、根據APP的安全性,也可以把 關鍵數據 寫在代碼裏,可以保存的是加密後的數據。比如,我給一個變量賦值:U2FsdGVkX1+rN+sgpLmOYTqoVhRRerZj9oobZAIPzjo=,你不知道 我這個字符串解密後是 123456,我只是使用的時候才解密處理用。

這樣也只是 增加了 黑客獲取 關鍵數據的難度。

6、密鑰要定期更換。比如 3個月 或半年換一次,如果密鑰是從接口通過非對稱加密 獲取的,直接修改服務端就可以了。
如果密鑰是寫在代碼裏的。就等APP升級新的版本的時候,新版本的APP和其對應的接口版本 都 修改為新的密鑰 就可以了。

舊的接口版本和APP版本還用以前的密鑰,等強制更新的時候才會失效。

如果一個APP 一個密鑰用上幾年都不變 ,是很危險的。離職的人員都可以直接用以前 的代碼 來獲取相關的數據。特別是 支付相關的,有的服務端甚至沒有 去校驗支付的金額或其他數據,導致 離職人員用1分錢 可以買到 任何價格的 線上產品(服務端這種在線上環境留後門的安全性問題,我是真的遇到有人這麽搞)。。

7、最好能 進行 代碼混淆,能增加反編譯的難度,當然只是增加了難度,還是能破解的。但是 代碼混淆 的 性價比是很高的,就是你這邊付出了 一點時間,而黑客 就要多付出幾十倍 的時間。。其實 接口 自己加密 的性價比也很高。

8、接口返回的數據 最好也進行 加密。比如,現在大家都連我的熱點,或者代理服務器,我是有可能 直接 獲取你的APP的 HTTPS 解密後的json數據(如何獲取相見《逆向工程》)。當然,如果你覺得 你的APP返回的json數據都是 不重要的,也可以不對數據進行加密。

像微信、QQ、支付寶這種 安全性高的,通信兩邊的數據 收發 都 應該 進行加密的。

9、像HTTPS本身 是否有漏洞這種我們就不去說了。就 去年iOS的AFNetworking 漏洞事件,完全是 代碼的問題。雖然不是HTTPS的安全機制的問題。但是 黑客還是能很容易拿到HTTPS解密後的數據。

去年iOS的AFNetworking曝SSL漏洞 就涉及2.5萬個APP。 有的銀行的APP,只用了HTTPS,通信都不加密,就很容易拿到明文數據了。有的APP裏的各種數據都 采用復雜的加密算法,破解人員看到都煩,去破解這個APP的時間還不如去搞其他的幾個APP。

HTTPS 本身是安全的。但是數據還是可能被破解。所以 不要覺得 我只用HTTPS 就安全了。理論上 說任何 的 協議、代碼都是可能有漏洞的,只是有的現在 還沒被發現或破解,並不代表一直不能被破解。。

10、黑客不會 去一個手機一個手機的 把沙盒數據 拿出來 來看每個用戶的數據(黑客也不可能拿到你的手機)。但是如果黑客撿到 你的手機 ,都不用登陸微信 就可以 通過微信APP的沙盒 拿到你和小三的偷情聊天記錄、能拿到你的銀行卡號,你的手機號(很多APP都把手機號、銀行卡號、聊天記錄 明文保存在沙盒裏)。。你是不是會覺得微信 怎麽這麽low。我們只是拿微信舉個例子,微信還不會這麽low。

11、黑客 最主要的還是通過網絡來獲取 他們想要的數據(網絡的安全級別是最高的)。如果恰好 你的APP 加密密鑰 明文 保存到了沙盒裏 或者 你的 數據通信 還沒有進行加密,恭喜你,你的數據和裸奔沒啥區別。。

有人說:“我就做了個聊天的APP,沒啥機密信息。再說 大家連的都是 公司的wifi、4G網絡,不會有問題的,所以我的通信才不加密,麻煩。”

舉個搞笑的栗子:

你現在在飛機場,連著免費wifi,正在和副總裁在微信裏 談著 價值100個億的創意的時候,聊天記錄已經被 黑客 抓包獲取 ,然後賣給競爭對手了。。(只是舉個例子,微信的加密是相當安全的,微信很多的通訊還是用的HTTP,但是就算你拿到他們數據,也是無法解密的。這裏舉例用微信,只是為了方便大家理解。免費wifi確實有可能是黑客設的坑,新聞上經常報道)。

所以不要讓自己的數據裸奔。。。

12、代碼方面:

.1、在release環境下 NSLog 不要打印日誌 否則iOS系統日誌裏都可以查看到,在.pch文件中加下面的幾行代碼就可以解決。很早大家都這麽做了。

現在很多APP的部分頁面開始使用 Swift,在Swift 文件中是允許用 NSLog 的語法來打印,但是 不要這麽做,因為 這樣 就會導致這段代碼在 release環境 中也可以正常輸出。通過 PP助手、iTools,可以直接 查看 iOS的系統日誌。也可以直接 通過Xcode-Window-Devices - 點最下面的向上的小箭頭,來看日誌。

所以Swift中打印 還是用 print吧。

.2、AFNetworking 的 allowInvalidCertificates 屬性 要設置成 false,validatesDomainName屬性 設置成true。否則 HTTPS通信就可以被解密。這塊涉及到AFnetworking 去年的通信漏洞 就不詳述了。

但是一般開發的 測試環境 的HTTPS 不是CA頒發的,而是自簽名證書,訪問的也不是域名,而是IP。所以可以在測試環境 忽略證書和域名。

iOS APP 如何做才安全