App應用加固方案
可能面臨的風險
網路方面
1.竊聽風險(eavesdropping):第三方可以獲知通訊內容。
2.篡改風險(tampering):第三方可以修改通訊內容。
3.冒充風險(pretending):第三方可以冒充他人身份參與通訊。
本地方面
1.資料竊取,主要是對我們資源包括3d模型,聲音,UI,影像的保護。其次是對我們一些重要資訊保護,比如驗證的登入密碼。
2.原始碼被盜,分為兩步分,一部分對我們lua邏輯原始碼保護,另一部分對我們框架原始碼保護。
3.二次打包,主要在安卓部分,防止篡改邏輯,加入廣告,收集資料之類的攻擊,ios主要在越獄機器上會有這個風險。
4.記憶體修改,目前重要資料修改都是要通過伺服器驗證,所以這個問題不嚴重。
5.動態注入攻擊,主要保護動態庫的安全,防止注入篡改邏輯,跳過驗證之類。
加固方案
網路方面
1.針對這類問題應該直接使用https加入ssl驗證,或者自定客戶端和伺服器雙向驗證加密我們的資料。在資料傳輸階段達到一個比較安全的程度。
2.針對IM也同時應該加密,不過伺服器那邊如果加入SSH驗證會很大影響伺服器效率,所以目前待解。
本地方面
本地資源和重要資料
資源和業務原始碼都是同一類本地資源,目前是用祕鑰使用對稱加密的方式加密,在執行時進行解密。所以重要的是對祕鑰的保護。同理自動登入儲存的祕鑰一樣。
IOS
在ios下,目前登入密碼使用md5加密儲存在ios系統下的keychain。在正常系統下,比較安全。但在越獄機器上,黑客可以很容易的獲取到裡面的資料,所以建議:儲存在keychain裡的祕鑰,應該不是最終使用的登入密碼,應該增加加密機制,在執行時生成。
對資源加解密的祕鑰直接硬編碼在程式碼裡,這也是非常不安全的,目前有兩個建議
1.統一從伺服器獲取,然後加密後儲存在keychain,同樣在執行時生成,將安全等級提升到登入驗證等級。
2.將硬編碼的祕鑰不要明文儲存,分散隱藏在程式碼中,利用一系列演算法,在執行時生成。
更高階一點的加密方式,不在記憶體中使用明文祕鑰,使用白盒加密祕鑰
白盒加密技術的核心思想是把祕鑰隱藏起來, 加密執行過程中, 記憶體中不會出現祕鑰的值. 現在通用的技術是查詢表技術, 即把祕鑰隱藏在查詢表中,可以看看Chow的關於白盒AES的奠基性文章white-box cryptography and an aes implementation, 國內也有人做, 看看肖雅瑩的畢業論文"白盒密碼及AES與SMS4演算法的實現"可以對白盒加密有一個感性的認識. 所以, 通過查詢表技術隱藏祕鑰, 使得攻擊者逆向也好, dump記憶體也罷, 就不會直接看到祕鑰的值, 這跟把祕鑰放到so中增加逆向分析難度有質的區別. 白盒加密的攻擊需要從數學理論上去分析, 這無疑會極大增加破解難度. 白盒加密的研究現狀是公佈出來的論文並不多, 給你一個參考網址, http://www.whiteboxcrypto.com/. 我相信國內外都有安全公司和實驗室在研究白盒加密, 只不過都沒公佈出來. 從移動網際網路到IoT領域, 終端安全問題會越來越突出, 預測白盒加密這種軟體解決方案會越來越重要, 因為成本更低. 白盒加密的安全度目前來看是可以值得信任的, 當然這個世界上沒有絕對的安全, 白盒加密也會被破, 就是攻擊成本的問題啦.
Android
使用Android自身的金鑰庫(KeyStore)。在某些擁有硬體加密的機器上,可以得到更好的安全性,特性有:
1,金鑰材料可以繫結安全硬體
2,金鑰材料無法匯出裝置
3,金鑰材料永遠不進入應用程式,加解密和簽名時僅僅利用系統程式完成。最極端情況下即使應用程式被破解,攻擊者也最多能用金鑰來加解密,但不能匯出金鑰材料
不同的是,android沒有一個系統位置儲存祕鑰,只有一個系統級加密庫,能保證加解密過程不被破解。所謂硬體加密,指加密到Trusted Execution Environment (TEE) or Secure Element
(SE)。TEE是主處理器上的一個隔離區域,SE是一個晶片,TEE比SE功能更強。
二次打包的防護
篡改檢測 檢測只是一個過程,有大量的同類的攻擊包括二次打包,動態注入,後面有對這類攻擊的解決辦法。
IOS
Android
主要可以做的有
1.檢查APK的簽名
2.校驗APK的完整性
3.校驗classes.dex檔案的完整性
這類情況都是被篡改。
對靜態分析的防護
對抗反編譯
我們被反編譯風險主要在最上層的高階語言,oc和java,對於這部分沒有辦法保證真的安全,只能這增加分析難度,隱藏我們程式的入口。對OC和java程式碼都應該做混淆。
需要注意的是,重要的邏輯不要再oc和java直接實現,目前我們沒有這個風險。
lua程式碼如果可能也應該做混淆,當原始碼真的洩露,也能增加分析複雜度。
其次記憶體安全需要特別注意,在
1.在任何認證和資料加密之前。永遠不要再記憶體中儲存任何資料。
2.不要用oc或者java例項變數儲存祕鑰和重要資料,應該手動申請記憶體來儲存,同時也要手動釋放。
3.同樣不要用例項儲存祕鑰和資料的指標
4.任何時候,當重要資料不要被需要的時候,立即對其清理。比如,當應用從後臺掛起的時候。
重要的資料也不要用oc和java的變數儲存,記憶體應該手動申請
高階一點方法,獲取已知反編譯工具的漏洞,利用這些漏洞,讓反編譯我們程式時自動丟擲異常。
對抗靜態分析
除了必要的混淆程式碼,C/C++程式碼分析非常困難,目前可以用的防護
1.去除符號,增加複雜度。
對抗動態分析
阻止偵錯程式
IOS有自己特性可以直接在程式開始就阻止偵錯程式,對初級攻擊者有明顯的防護作用。
檢測偵錯程式
通過使用行內函數,在程式各個地方隱藏檢查點,檢查出篡改可能。
執行庫完整檢查
可以通過檢查記憶體地址空間,檢查執行庫的完整,查出篡改可能。
篡改響應
當檢測到程式被篡改或者攻擊時,直接拒絕執行。同時也可使用一些隱藏防護手段,迷惑攻擊者。
1.擦除使用者資料
2.禁止網路訪問,阻止在程式裡除錯到伺服器
3.報告機制,收集攻擊資訊到伺服器
相關文章
- Android應用加固的簡單實現方案Android
- 某APP加固產品方案淺析APP
- Android應用加固的簡單實現方案(二)Android
- 走在安全前列的公牛如何做App 應用加固?APP
- ios安全加固 ios 加固方案iOS
- APP加固APP
- iOS應用加固--程式碼混淆iOS
- 幾維安全SDK應用加固,全線5折為APP保駕護航APP
- 應用程式退休(Application Retirement)解決方案APPREM
- 應急加固1
- 工控主機加固解決方案
- iOS應用加固為什麼也那麼重要?iOS
- 應急加固【簡單】
- 【iOS開發】iOS App的加固保護原理:使用ipaguard混淆加固iOSAPP
- iOS移動應用安全加固:保護您的App免受惡意攻擊的重要步驟iOSAPP
- Native APP(原生應用)、Web App(Web應用)、Hybrid App(混合應用) 優缺點分析APPWeb
- 智慧斷路器應用方案之智慧路燈杆應用方案
- 微信小程式、流應用、原生應用app、輕應用微信小程式APP
- 輕鬆部署 Laravel 應用 | 《12. 安全加固 - 使用金鑰登入》Laravel
- 用uni-app開發app應用登陸APP
- 頂象端加固保障App安全與合規APP
- 安卓移動應用程式碼安全加固系統設計及實現安卓
- 輕鬆部署 Laravel 應用 | 《11. 安全加固 - 避免使用根使用者》Laravel
- Application全域性應用APP
- appfabric 簡單應用APP
- Android應用優化方案Android優化
- 應用系統整合方案(一)
- 應用系統整合方案(二)
- 應用系統整合方案(三)
- 企業WIFI安全應用方案WiFi
- IPSec應用方案設計
- 智慧斷路器應用方案之工廠智慧用電方案
- F5 API加固解決方案有了解的嗎?API
- DataGuard之Apply Services(redo應用和SQL應用)APPSQL
- 15、資料庫加固-redis 加固資料庫Redis
- 知物由學 | SO加固如何提升Android應用的安全性?Android
- HarmonyOS Next智慧家居系統安全加固:加解密技術的深度應用解密
- 為了保護公司的App安全,我用遍了市面上的加固產品APP