高质量解读《互联网企业安全高级指南》三部曲(技术篇)——移动应用安全
前言:
高效讀書,一張邏輯圖讀懂、讀薄書中重點。
注:下面文字只是對邏輯思維圖的”翻譯“,節(jié)省時間,只看圖即可。
移動應(yīng)用安全邏輯思維圖
?1.?? ?說明
1.1.?? ?互聯(lián)網(wǎng)公司的安全體系基本上以運維安全,應(yīng)用安全,業(yè)務(wù)安全三管齊下。而移動應(yīng)用安全則在應(yīng)用安全中占據(jù)半壁江山,尤其對于移動端產(chǎn)品為主的公司而言,SDL的主要實踐對象就是移動應(yīng)用
2.?? ?背景
2.1.?? ?隨著智能手機和其他移動設(shè)備的爆發(fā)式普及,移動應(yīng)用已成為互聯(lián)網(wǎng)公司業(yè)務(wù)重要的業(yè)務(wù)方向。本章中會以移動兩大平臺之一的安卓為主線,介紹移動應(yīng)用所面臨的安全風(fēng)險和解決方案
3.?? ?業(yè)務(wù)架構(gòu)分析
3.1.?? ?移動應(yīng)用很少會單獨存在,多數(shù)情況下會作為互聯(lián)網(wǎng)業(yè)務(wù)流程中的承載平臺出現(xiàn)。如果業(yè)務(wù)同時存在傳統(tǒng)Web頁面服務(wù)模式,兩者從邏輯上處于并行的關(guān)系,只是不同的表現(xiàn) ?
形式
3.2.?? ?作為一種運行在用戶控制設(shè)備上的應(yīng)用,業(yè)務(wù)服務(wù)端應(yīng)該假設(shè)客戶端提交的信息存在各種可能,在設(shè)計時需要關(guān)注哪些邏輯適合放在移動端,哪些邏輯需要保留在服務(wù)端
3.3.?? ?涉及業(yè)務(wù)核心數(shù)據(jù)的行為,例如游戲中的物品掉落,支付行為的判斷,賬號信息的更改等都需要在業(yè)務(wù)服務(wù)端進行判斷,而非客戶端
4.?? ?移動操作系統(tǒng)安全簡介
4.1.?? ?圖10-1是安卓系統(tǒng)的架構(gòu)和安全相關(guān)的介紹可以參看https://source.android.com/security/index.html
4.1.1.?? ?硬件設(shè)備:安卓可運行在范圍廣泛的硬件上,并且支持某些硬件特有的安全功能, 例如 ARM v6 的 eXecute-Never 功能
4.1.2.?? ?安卓操作系統(tǒng):底層為Linux內(nèi)核,所有設(shè)備資源都通過該層提供,包括相機、GPS
數(shù)據(jù)、藍(lán)牙、電話、網(wǎng)絡(luò)等服務(wù)
4.1.3.?? ?安卓應(yīng)用:通常使用Java開發(fā),運行在Dalvik/ART虛擬機中,除此之外還包括一些二進制的組件。應(yīng)用中不論是虛擬機還是二進制的部分都在相同的安全域,也就是該應(yīng)用的沙盒中
4.2.?? ?現(xiàn)代移動操作系統(tǒng)和早期操作系統(tǒng)相比有一定的優(yōu)勢,以Windows為例,在不斷更新的過程中,會被過去的理念和代碼實現(xiàn)所拖累。而安卓和iOS作為之后設(shè)計開發(fā)的操作系 統(tǒng),在設(shè)計上加入了一些新的理念
5.?? ?簽名管理
5.1.?? ?為了確定應(yīng)用的來源,無論安卓還是iOS都會對應(yīng)用的簽名進行檢查,確保用戶安裝的應(yīng)用來源可控
5.2.?? ?對于應(yīng)用開發(fā)方,應(yīng)該保護好本公司用于應(yīng)用簽名的私鑰,推薦的解決方案是建立簽名服務(wù)器
5.3.?? ?在同一家公司內(nèi)的應(yīng)用推薦使用相同的簽名密鑰, 避免不同的應(yīng)用使用不同的簽名,這樣不僅便于之后的發(fā)布和管理,在技術(shù)也便于之后可能存在的應(yīng)用間通信需求
6.?? ?應(yīng)用沙盒及權(quán)限
6.1.?? ?如之前所說,安卓和iOS作為之后設(shè)計開發(fā)的操作系統(tǒng),在設(shè)計上加入了一些新的理念,其中重要的一點是通過沙盒(Sandbox)對各應(yīng)用間的權(quán)限隔離,并在限定應(yīng)用行為邊界后,通過按需申請應(yīng)用權(quán)限的方式規(guī)范各應(yīng)用的行為,這樣就將單個應(yīng)用面臨的風(fēng)險和其他應(yīng)用以及操作系統(tǒng)相隔離
6.2.?? ?在安卓系統(tǒng)上,在接觸任何系統(tǒng)資源前,應(yīng)用都要通過權(quán)限檢查,如圖10-2所示
6.3.?? ?如何實現(xiàn)沙盒
6.3.1.?? ?安卓和iOS內(nèi)核都源自*nix類系統(tǒng)內(nèi)核,對應(yīng)用沙盒的技術(shù)實現(xiàn)都是基于操作系統(tǒng)提供的用戶機制。每個在系統(tǒng)上安裝的應(yīng)用,如果沒有特殊設(shè) 定(SYSTEM或者安卓中SHARED-UID模式),都會有系統(tǒng)分配給應(yīng)用一個獨特的用戶ID (UID),單憑該UID,應(yīng)用無法使用任何應(yīng)用外的設(shè)備資源。只有當(dāng)應(yīng)用在安裝時預(yù)先申請了某些系統(tǒng)權(quán)限后,才會被準(zhǔn)許進行權(quán)限對應(yīng)的操作
7.?? ?應(yīng)用安全風(fēng)險分析
7.1.?? ?在應(yīng)用和業(yè)務(wù)邏輯已經(jīng)剝離的情況下,仍然可能存在嚴(yán)重的安全風(fēng)險(接口和數(shù)據(jù)來源)
7.2.?? ?風(fēng)險列表示例
7.2.1.?? ?應(yīng)用間通信(IPC):提供接口的組件權(quán)限,信息泄露,本地的數(shù)據(jù)加密和文件權(quán)限等,以安卓為例,IPC 接 口包括 Content Provider, Broadcast Receiver, Activity, Service 等形式
7.2.2.?? ?遠(yuǎn)程數(shù)據(jù):開放端口接收數(shù)據(jù),接收的各類型文件,應(yīng)用的自動升級,數(shù)據(jù)傳輸明文等
7.2.3.?? ?兩類目標(biāo):用戶:內(nèi)容偽造,導(dǎo)致不能正確判斷,程序:代碼實現(xiàn)上的漏洞,代碼執(zhí)行, 權(quán)限竊取和繞過。從嚴(yán)重程度來看,首先需要注意遠(yuǎn)程來源數(shù)據(jù)
8.?? ?安全應(yīng)對
8.1.?? ?對于三方的選擇,建議選取保持更新的開源項目,查看項目升級日志中修補過的安全列表,確認(rèn)應(yīng)用中將要使用的版本是否已經(jīng)修補已知安全問題,并訂閱此項目的版本更新郵件,能在之后發(fā)布安全更新時第一時間評估影響
8.2.?? ?具體到自身代碼的引入的問題,需要符合最小化原則
8.2.1.?? ?對只需要應(yīng)用自身使用到的組件,不提供給其他應(yīng)用
8.2.2.?? ?對于不需要開放的端口,限定監(jiān)聽在特定的IP
8.2.3.?? ?對于本地保存的數(shù)據(jù)庫或文件等,嚴(yán)格的限定讀寫權(quán)限等
8.2.4.?? ?在需要時提供完善的認(rèn)證和加密機制
9.?? ?安全評估
9.1.?? ?代碼審計
9.1.1.?? ?iOS開發(fā)Xcode環(huán)境可使用整合的Clang Static Analyzer,而安卓Java代碼可以 使用FindBugs來完成代碼安全審計。具體審計范圍和使用可參考之后第II章“代碼審計”
9.2.?? ?應(yīng)用加固
9.2.1.?? ?目前有一些在線的應(yīng)用安全加固服務(wù)。用戶可上傳需要加固的應(yīng)用,服務(wù)器接收應(yīng)用后會從安全,逆向和調(diào)試難度等方面對應(yīng)用進行評估,并按照用戶需要提供在這些方面完 成更改后的版本供下載
10.?? ?關(guān)于移動認(rèn)證
10.1.?? ?為了方便用戶登錄認(rèn)證,通常移動應(yīng)用通過保存登錄信息或者加上簡單的本地認(rèn)證方式(如手勢密碼或者數(shù)字PIN碼)來使用戶免于輸入完整的流程
10.2.?? ?以支付寶為例,限定數(shù)額以下的付款甚至不需要認(rèn)證
10.2.1.?? ?這背后有很多需要背景數(shù)據(jù)收集,從第一次正常登錄時設(shè)備本身的信息,包括用戶日常操作行為收集的大數(shù)據(jù)等。在發(fā)現(xiàn)異常時,就會觸發(fā)完整的認(rèn)證過程了
10.2.2.?? ?當(dāng)然在攻擊者完全控制手機的情況,如果所有認(rèn)證信息的要素都可以通過手機獲取到,例如保存的認(rèn)證信息,動態(tài)認(rèn)證短信等,更多能夠做到的也只有提高攻擊的成本,而不能完全避免認(rèn)證信息的盜用
總結(jié)
以上是生活随笔為你收集整理的高质量解读《互联网企业安全高级指南》三部曲(技术篇)——移动应用安全的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 客栈管理系统java源代码_源码客栈项目
- 下一篇: 机器学习线性回归——概念梳理及非线性拟合