日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

iOS APP 安全测试

發(fā)布時間:2023/12/31 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 iOS APP 安全测试 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、ipa包加殼

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

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

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

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

2、敏感信息存儲位置

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

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

  越獄手機(jī)都可以查看任意APP的沙盒,包括系統(tǒng)APP的沙盒。還有iOS的系統(tǒng)目錄等。

3、設(shè)備安全(越獄,丟失)

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

4、APP反編譯(逆向工程)

  所有的APP都是可以反編譯的,所以 很關(guān)鍵的數(shù)據(jù) 最好通過接口獲取。

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

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

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

    可以這樣處理:

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

5、代碼內(nèi)容加密(對稱加密/非對稱加密)

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

  這樣也只是增加了黑客獲取關(guān)鍵數(shù)據(jù)的難度。

6、安全密鑰更新周期

  密鑰要定期更換。比如 3個月 或半年換一次,如果密鑰是從接口通過非對稱加密 獲取的,直接修改服務(wù)端就可以了。

  如果密鑰是寫在代碼里的。就等APP升級新的版本的時候,新版本的APP和其對應(yīng)的接口版本 都 修改為新的密鑰 就可以了。

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

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

7、代碼混淆

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

8、接口安全(雙向加密)

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

  像微信、QQ、支付寶這種 安全性高的,通信兩邊的數(shù)據(jù) 收發(fā) 都 應(yīng)該 進(jìn)行加密的。

9、通訊安全,第三方庫漏洞

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

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

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

  10、敏感信息安全加密

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

  11、通訊網(wǎng)絡(luò)安全

  黑客最主要的還是通過網(wǎng)絡(luò)來獲取 他們想要的數(shù)據(jù)(網(wǎng)絡(luò)的安全級別是最高的)。如果恰好 你的APP 加密密鑰 明文 保存到了沙盒里 或者 你的 數(shù)據(jù)通信 還沒有進(jìn)行加密,恭喜你,你的數(shù)據(jù)和裸奔沒啥區(qū)別。。

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

    舉個搞笑的栗子:

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

  所以不要讓自己的數(shù)據(jù)裸奔。。。

回到頂部

  12、代碼調(diào)試信息安全管理

    代碼方面:

    12.1、在release環(huán)境下 NSLog不要打印日志 否則iOS系統(tǒng)日志里都可以查看到,在.pch文件中加下面的幾行代碼就可以解決。很早大家都這么做了。

1 #ifdef DEBUG
2 #define NSLog(...) NSLog(__VA_ARGS__)
3 #define debugMethod() NSLog(@"%s", __func__)
4 #else
5 #define NSLog(...)
6 #define debugMethod()
7 #endif

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

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

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

    但是一般開發(fā)的 測試環(huán)境 的HTTPS 不是CA頒發(fā)的,而是自簽名證書,訪問的也不是域名,而是IP。所以可以在測試環(huán)境 忽略證書和域名,代碼如下:

1 #ifdef DEBUG
2         manager.securityPolicy.allowInvalidCertificates = YES;
3         manager.securityPolicy.validatesDomainName = NO;
4 #endif

  答疑:

  像上文中提到的 接口模擬HTTPS 進(jìn)行通信,基本上是破解不了的。非對稱加密畢竟還是 很安全的。

  黑客也是有時間成本的,有性價比的。文中多次 寫到,可以增加破解的難度,不是這樣做了 就一定 不會被破解。

  有人會覺得 在 代碼中 加密了 反正也 能被破解,那還加啥密,反正沒啥卵用。(比如 關(guān)鍵數(shù)據(jù) 加密 后 存到代碼里)

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

  再比如:有幾個房間放著同樣價值的東西(賬戶數(shù)據(jù)、聊天數(shù)據(jù)等)。但這幾個房間,有的是全封閉防炸彈的,有的就只是一個木門,有的甚至門都是開著的,你會選擇哪個。。
  這就像為什么現(xiàn)在 iOS 系統(tǒng)的越獄速度越來越慢,不是說越獄人員的水平變低了,而是現(xiàn)在越獄的用戶越來越少,像盤古這種公司通過越獄獲得的盈利也越來越少了,自然投入的精力就會變少。

  關(guān)鍵數(shù)據(jù)加密后,存到代碼里,這樣總比你直接把明文保存到代碼中更難破解,我們要做的是讓黑客知道,你要來惹我,你就必須付出更多的時間和精力。

總結(jié)

以上是生活随笔為你收集整理的iOS APP 安全测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。