iOS APP 如何作才安全

原本 寫了一篇《iOS 如何作才安全--逆向工程 - Reveal、IDA、Hopper、https抓包 等》,發現文章有點雜,而且「iOS 如何作才安全」這部分寫的愈來愈多,以爲 分出來更清晰一點。因此拆成兩部分。 同時也是爲了你們能 共同討論,畢竟不是專業搞安全的,若是文中有錯誤 歡迎指正,共同進步。html

 

iOS應用的安全性 經常被你們忽視。算法

iOS 如何作才安全:sql

一、首先,咱們能夠經過iTunes 下載 AppStore的ipa文件(蘋果 把開發者上傳的ipa包 進行了加殼再放到AppStore中),因此咱們從AppStore下載的ipa都是加殼的,因此不能直接用來反編譯。編程

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

因此不要 在plist文件、項目中的靜態文件中 存儲關鍵的信息,若是要保存,記得 對稱加密(這樣能夠增長破解的難度)。安全

若是是越獄的手機,從 手機上的PP助手下載的ipa包 都是 脫殼以後的,能夠直接用來反編譯。服務器

 

二、咱們能夠用軟件 查看 APP的沙盒,查看裏面存儲的 文件:sqlite、plist(NSUserdefault會存到Library下的Preferences中 的 plist文件中)、圖片等,NSUserdefault 中不要保存關鍵信息,若是要保存,仍是加密吧。。sqlite也是這樣子的。微信

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

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

 

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

 

四、全部的APP都是能夠反編譯的,因此 很關鍵的數據 最好經過接口獲取。

那麼接口如何保證安全呢。首先用HTTPS,雖然HTTPS已經很安全了,可是數據也是有可能被破解的,這個後面會介紹。。因此 接口必定要本身加密。

非對稱加密(RSA)如今 仍是沒有辦法破解的,可是由於 非對稱加密的效率低,因此不多有企業將全部的接口都用非對稱加密。

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

能夠這樣處理:

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

 

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

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

 

六、密鑰要按期更換。好比 3個月 或半年換一次,若是密鑰是從接口經過非對稱加密 獲取的,直接修改服務端就能夠了。
若是密鑰是寫在代碼裏的。就等APP升級新的版本的時候,新版本的APP和其對應的接口版本 都 修改成新的密鑰 就能夠了。

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

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

 

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

 

八、接口返回的數據 最好也進行 加密。好比,如今你們都連個人熱點,或者代理服務器,我是有可能 直接 獲取你的APP的 HTTPS 解密後的json數據(如何獲取相見《逆向工程》)。固然,若是你以爲 你的APP返回的json數據都是 不重要的,也能夠不對數據進行加密。

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

 

九、像HTTPS自己 是否有漏洞這種咱們就不去說了。就 去年iOS的AFNetworking 漏洞事件,徹底是 代碼的問題。雖然不是HTTPS的安全機制的問題。可是 黑客仍是能很容易拿到HTTPS解密後的數據。

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

HTTPS 自己是安全的。可是數據仍是可能被破解。因此 不要以爲 我只用HTTPS 就安全了。理論上 說任何 的 協議、代碼都是可能有漏洞的,只是有的如今 還沒被發現或破解,並不表明一直不能被破解。。

 

十、黑客不會 去一個手機一個手機的 把沙盒數據 拿出來 來看每一個用戶的數據(黑客也不可能拿到你的手機)。可是若是黑客撿到 你的手機 ,都不用登錄微信  就能夠 經過微信APP的沙盒 拿到你和小三的偷情聊天記錄、能拿到你的銀行卡號,你的手機號(不少APP都把手機號、銀行卡號、聊天記錄 明文保存在沙盒裏)。。你是否是會以爲微信 怎麼這麼low。咱們只是拿微信舉個例子,微信還不會這麼low。

 

十一、黑客 最主要的仍是經過網絡來獲取 他們想要的數據(網絡的安全級別是最高的)。若是剛好 你的APP 加密密鑰 明文 保存到了沙盒裏 或者 你的 數據通訊 尚未進行加密,恭喜你,你的數據和裸奔沒啥區別。。

有人說:「我就作了個聊天的APP,沒啥機密信息。再說 你們連的都是 公司的wifi、4G網絡,不會有問題的,因此個人通訊纔不加密,麻煩。」

舉個搞笑的栗子:

你如今在飛機場,連着免費wifi,正在和副總裁在微信裏 談着 價值100個億的創意的時候,聊天記錄已經被 黑客 抓包獲取 ,而後賣給競爭對手了。。(只是舉個例子,微信的加密是至關安全的,微信不少的通信仍是用的HTTP,可是就算你拿到他們數據,也是沒法解密的。這裏舉例用微信,只是爲了方便你們理解。免費wifi確實有多是黑客設的坑,新聞上常常報道)。

因此不要讓本身的數據裸奔。。。

 

十二、代碼方面:

.一、在release環境下 NSLog 不要打印日誌 不然iOS系統日誌裏均可以查看到,在.pch文件中加下面的幾行代碼就能夠解決。很早你們都這麼作了。

#ifdef DEBUG
#define NSLog(...) NSLog(__VA_ARGS__)
#define debugMethod() NSLog(@"%s", __func__)
#else
#define NSLog(...)
#define debugMethod()
#endif

 

如今不少APP的部分頁面開始使用 Swift,在Swift 文件中是容許用 NSLog 的語法來打印,可是 不要這麼作,由於 這樣 就會致使這段代碼在 release環境 中也能夠正常輸出。經過 PP助手、iTools,能夠直接 查看 iOS的系統日誌。也能夠直接 經過Xcode-Window-Devices - 點最下面的向上的小箭頭,來看日誌。

因此Swift中打印 仍是用 print吧。

.二、AFNetworking 的 allowInvalidCertificates 屬性 要設置成 false,validatesDomainName屬性 設置成true。不然 HTTPS通訊就能夠被解密。這塊涉及到AFnetworking 去年的通訊漏洞 就不詳述了。

可是通常開發的 測試環境 的HTTPS 不是CA頒發的,而是自簽名證書,訪問的也不是域名,而是IP。因此能夠在測試環境 忽略證書和域名,代碼以下:

 

#ifdef DEBUG
        manager.securityPolicy.allowInvalidCertificates = YES;
        manager.securityPolicy.validatesDomainName = NO;
#endif

 

答疑:

像上文中提到的 接口模擬HTTPS 進行通訊,基本上是破解不了的。非對稱加密畢竟仍是 很安全的。

 

黑客也是有時間成本的,有性價比的。文中屢次 寫到,能夠增長破解的難度,不是這樣作了 就必定 不會被破解。

  

有人會以爲 在 代碼中 加密了 反正也 能被破解,那還加啥密,反正沒啥卵用。(好比 關鍵數據 加密 後 存到代碼裏)

打個比方:我裝個防盜門 反正也防不住賊,乾脆 就別裝門了,反正也沒啥卵用。

 

再好比:有幾個房間放着一樣價值的東西(帳戶數據、聊天數據等)。但這幾個房間,有的是全封閉防炸彈的,有的就只是一個木門,有的甚至門都是開着的,你會選擇哪一個。。
這就像爲何如今 iOS 系統的越獄速度愈來愈慢,不是說越獄人員的水平變低了,而是如今越獄的用戶愈來愈少,像盤古這種公司經過越獄得到的盈利也愈來愈少了,天然投入的精力就會變少。

 

 關鍵數據 加密 後 存到代碼裏 這樣總比 你直接把 明文保存 到代碼中,更難破解,咱們要作的是讓黑客知道,你要來惹我,你就必須付出更多的時間和精力。

 

歡迎關注個人 今日頭條號 名稱: 雲端夢想科技  

歡迎關注個人 微信公衆號:dreams2999

相關文章
相關標籤/搜索