可能面臨的風(fēng)險(xiǎn)
網(wǎng)絡(luò)方面
1.竊聽(tīng)風(fēng)險(xiǎn)(eavesdropping):第三方可以獲知通信內(nèi)容峡碉。
2.篡改風(fēng)險(xiǎn)(tampering):第三方可以修改通信內(nèi)容。
3.冒充風(fēng)險(xiǎn)(pretending):第三方可以冒充他人身份參與通信。
本地方面
1.數(shù)據(jù)竊取,主要是對(duì)我們資源包括3d模型,聲音,UI爆价,圖像的保護(hù)。其次是對(duì)我們一些重要信息保護(hù),比如驗(yàn)證的登錄密碼铭段。
2.源碼被盜骤宣,分為兩步分,一部分對(duì)我們lua邏輯源碼保護(hù)序愚,另一部分對(duì)我們框架源碼保護(hù)涯雅。
3.二次打包,主要在安卓部分展运,防止篡改邏輯,加入廣告精刷,收集數(shù)據(jù)之類(lèi)的攻擊拗胜,ios主要在越獄機(jī)器上會(huì)有這個(gè)風(fēng)險(xiǎn)。
4.內(nèi)存修改怒允,目前重要數(shù)據(jù)修改都是要通過(guò)服務(wù)器驗(yàn)證埂软,所以這個(gè)問(wèn)題不嚴(yán)重。
5.動(dòng)態(tài)注入攻擊纫事,主要保護(hù)動(dòng)態(tài)庫(kù)的安全勘畔,防止注入篡改邏輯,跳過(guò)驗(yàn)證之類(lèi)丽惶。
加固方案
網(wǎng)絡(luò)方面
1.針對(duì)這類(lèi)問(wèn)題應(yīng)該直接使用https加入ssl驗(yàn)證炫七,或者自定客戶端和服務(wù)器雙向驗(yàn)證加密我們的數(shù)據(jù)。在數(shù)據(jù)傳輸階段達(dá)到一個(gè)比較安全的程度钾唬。
2.針對(duì)IM也同時(shí)應(yīng)該加密万哪,不過(guò)服務(wù)器那邊如果加入SSH驗(yàn)證會(huì)很大影響服務(wù)器效率,所以目前待解抡秆。
本地方面
本地資源和重要數(shù)據(jù)
資源和業(yè)務(wù)源碼都是同一類(lèi)本地資源奕巍,目前是用秘鑰使用對(duì)稱加密的方式加密,在運(yùn)行時(shí)進(jìn)行解密儒士。所以重要的是對(duì)秘鑰的保護(hù)的止。同理自動(dòng)登錄保存的秘鑰一樣。
IOS
在ios下着撩,目前登錄密碼使用md5加密保存在ios系統(tǒng)下的keychain诅福。在正常系統(tǒng)下,比較安全睹酌。但在越獄機(jī)器上权谁,黑客可以很容易的獲取到里面的數(shù)據(jù),所以建議:保存在keychain里的秘鑰憋沿,應(yīng)該不是最終使用的登錄密碼旺芽,應(yīng)該增加加密機(jī)制,在運(yùn)行時(shí)生成。
對(duì)資源加解密的秘鑰直接硬編碼在代碼里采章,這也是非常不安全的运嗜,目前有兩個(gè)建議
1.統(tǒng)一從服務(wù)器獲取,然后加密后保存在keychain,同樣在運(yùn)行時(shí)生成悯舟,將安全等級(jí)提升到登錄驗(yàn)證等級(jí)担租。
2.將硬編碼的秘鑰不要明文保存,分散隱藏在代碼中抵怎,利用一系列算法奋救,在運(yùn)行時(shí)生成。
更高級(jí)一點(diǎn)的加密方式反惕,不在內(nèi)存中使用明文秘鑰尝艘,使用白盒加密秘鑰
白盒加密技術(shù)的核心思想是把秘鑰隱藏起來(lái), 加密執(zhí)行過(guò)程中, 內(nèi)存中不會(huì)出現(xiàn)秘鑰的值. 現(xiàn)在通用的技術(shù)是查找表技術(shù), 即把秘鑰隱藏在查找表中,可以看看Chow的關(guān)于白盒AES的奠基性文章white-box cryptography and an aes implementation, 國(guó)內(nèi)也有人做, 看看肖雅瑩的畢業(yè)論文"白盒密碼及AES與SMS4算法的實(shí)現(xiàn)"可以對(duì)白盒加密有一個(gè)感性的認(rèn)識(shí). 所以, 通過(guò)查找表技術(shù)隱藏秘鑰, 使得攻擊者逆向也好, dump內(nèi)存也罷, 就不會(huì)直接看到秘鑰的值, 這跟把秘鑰放到so中增加逆向分析難度有質(zhì)的區(qū)別. 白盒加密的攻擊需要從數(shù)學(xué)理論上去分析, 這無(wú)疑會(huì)極大增加破解難度. 白盒加密的研究現(xiàn)狀是公布出來(lái)的論文并不多, 給你一個(gè)參考網(wǎng)址, http://www.whiteboxcrypto.com/. 我相信國(guó)內(nèi)外都有安全公司和實(shí)驗(yàn)室在研究白盒加密, 只不過(guò)都沒(méi)公布出來(lái). 從移動(dòng)互聯(lián)網(wǎng)到IoT領(lǐng)域, 終端安全問(wèn)題會(huì)越來(lái)越突出, 預(yù)測(cè)白盒加密這種軟件解決方案會(huì)越來(lái)越重要, 因?yàn)槌杀靖? 白盒加密的安全度目前來(lái)看是可以值得信任的, 當(dāng)然這個(gè)世界上沒(méi)有絕對(duì)的安全, 白盒加密也會(huì)被破, 就是攻擊成本的問(wèn)題啦.
Android
使用Android自身的密鑰庫(kù)(KeyStore)。在某些擁有硬件加密的機(jī)器上姿染,可以得到更好的安全性背亥,特性有:
1,密鑰材料可以綁定安全硬件
2悬赏,密鑰材料無(wú)法導(dǎo)出設(shè)備
3狡汉,密鑰材料永遠(yuǎn)不進(jìn)入應(yīng)用進(jìn)程,加解密和簽名時(shí)僅僅利用系統(tǒng)進(jìn)程完成闽颇。最極端情況下即使應(yīng)用進(jìn)程被破解盾戴,攻擊者也最多能用密鑰來(lái)加解密,但不能導(dǎo)出密鑰材料
不同的是兵多,android沒(méi)有一個(gè)系統(tǒng)位置保存秘鑰捻脖,只有一個(gè)系統(tǒng)級(jí)加密庫(kù),能保證加解密過(guò)程不被破解中鼠。所謂硬件加密可婶,指加密到Trusted Execution Environment (TEE) or Secure Element
(SE)。TEE是主處理器上的一個(gè)隔離區(qū)域援雇,SE是一個(gè)芯片矛渴,TEE比SE功能更強(qiáng)。
二次打包的防護(hù)
篡改檢測(cè) 檢測(cè)只是一個(gè)過(guò)程惫搏,有大量的同類(lèi)的攻擊包括二次打包具温,動(dòng)態(tài)注入,后面有對(duì)這類(lèi)攻擊的解決辦法筐赔。
IOS
Android
主要可以做的有
1.檢查APK的簽名
2.校驗(yàn)APK的完整性
3.校驗(yàn)classes.dex文件的完整性
這類(lèi)情況都是被篡改铣猩。
對(duì)靜態(tài)分析的防護(hù)
對(duì)抗反編譯
我們被反編譯風(fēng)險(xiǎn)主要在最上層的高級(jí)語(yǔ)言,oc和java茴丰,對(duì)于這部分沒(méi)有辦法保證真的安全达皿,只能這增加分析難度天吓,隱藏我們程序的入口。對(duì)OC和java代碼都應(yīng)該做混淆峦椰。
需要注意的是龄寞,重要的邏輯不要再oc和java直接實(shí)現(xiàn),目前我們沒(méi)有這個(gè)風(fēng)險(xiǎn)汤功。
lua代碼如果可能也應(yīng)該做混淆物邑,當(dāng)源碼真的泄露,也能增加分析復(fù)雜度滔金。
其次內(nèi)存安全需要特別注意色解,在
1.在任何認(rèn)證和數(shù)據(jù)加密之前。永遠(yuǎn)不要再內(nèi)存中存儲(chǔ)任何數(shù)據(jù)餐茵。
2.不要用oc或者java實(shí)例變量存儲(chǔ)秘鑰和重要數(shù)據(jù)冒签,應(yīng)該手動(dòng)申請(qǐng)內(nèi)存來(lái)存儲(chǔ),同時(shí)也要手動(dòng)釋放钟病。
3.同樣不要用實(shí)例存儲(chǔ)秘鑰和數(shù)據(jù)的指針
4.任何時(shí)候,當(dāng)重要數(shù)據(jù)不要被需要的時(shí)候刚梭,立即對(duì)其清理肠阱。比如,當(dāng)應(yīng)用從后臺(tái)掛起的時(shí)候朴读。
重要的數(shù)據(jù)也不要用oc和java的變量保存屹徘,內(nèi)存應(yīng)該手動(dòng)申請(qǐng)
高級(jí)一點(diǎn)方法,獲取已知反編譯工具的漏洞衅金,利用這些漏洞噪伊,讓反編譯我們程序時(shí)自動(dòng)拋出異常。
對(duì)抗靜態(tài)分析
除了必要的混淆代碼氮唯,C/C++代碼分析非常困難鉴吹,目前可以用的防護(hù)
1.去除符號(hào),增加復(fù)雜度惩琉。
對(duì)抗動(dòng)態(tài)分析
阻止調(diào)試器
IOS有自己特性可以直接在程序開(kāi)始就阻止調(diào)試器豆励,對(duì)初級(jí)攻擊者有明顯的防護(hù)作用。
檢測(cè)調(diào)試器
通過(guò)使用內(nèi)聯(lián)函數(shù)瞒渠,在程序各個(gè)地方隱藏檢查點(diǎn)良蒸,檢查出篡改可能。
運(yùn)行庫(kù)完整檢查
可以通過(guò)檢查內(nèi)存地址空間伍玖,檢查運(yùn)行庫(kù)的完整嫩痰,查出篡改可能。
篡改響應(yīng)
當(dāng)檢測(cè)到程序被篡改或者攻擊時(shí)窍箍,直接拒絕執(zhí)行串纺。同時(shí)也可使用一些隱藏防護(hù)手段丽旅,迷惑攻擊者。
1.擦除用戶數(shù)據(jù)
2.禁止網(wǎng)絡(luò)訪問(wèn),阻止在程序里調(diào)試到服務(wù)器
3.報(bào)告機(jī)制造垛,收集攻擊信息到服務(wù)器