读《Android 安全架构深究》
Android 安全架構(gòu)深究
安全是一個(gè)非常立體而豐富得概念。在不同的場(chǎng)景下,安全有著不同的含義。
比如對(duì)于網(wǎng)絡(luò)傳輸,安全指的是傳輸?shù)臄?shù)據(jù)不會(huì)被其他人看到、篡改、偽造及仿冒,傳輸?shù)臄?shù)據(jù)不會(huì)遭到破壞,數(shù)據(jù)從發(fā)送端發(fā)送出來到接收端接收到,可以保持完整準(zhǔn)確。
再比如在操作系統(tǒng)層面,可以從用戶和進(jìn)程兩個(gè)角度來看安全。從用戶的角度來看,即是非授權(quán)的用戶,無法訪問未被授權(quán)訪問的數(shù)據(jù)。相信剛剛接觸 Unix-like 系統(tǒng)的朋友,對(duì)于 "Permission denied" 的報(bào)錯(cuò)都是煩不勝煩。這即是由于 Linux 上的普通用戶,不能隨意查看或修改其他用戶的數(shù)據(jù)。
而從進(jìn)程的角度來看,每個(gè)進(jìn)程都有自己的虛擬內(nèi)存空間,它們的運(yùn)行時(shí)數(shù)據(jù)相互之間完全隔離,通常情況下,除非是調(diào)試工具,否則一個(gè)進(jìn)程不能隨意訪問其它進(jìn)程的內(nèi)存空間,修改其它進(jìn)程的內(nèi)存數(shù)據(jù)。此外,進(jìn)程的執(zhí)行繼承執(zhí)行的用戶和用戶組的身份,因而對(duì)于不允許響應(yīng)用戶訪問得文件及數(shù)據(jù),進(jìn)程也被禁止訪問。
這些也是安全最主要的場(chǎng)景,及要解決的最主要的問題。
為了解決安全問題,在 Android 中有著兩大最根本的機(jī)制。一是權(quán)限管理及自主訪問控制,二是數(shù)據(jù)加密。
第一點(diǎn)主要由操作系統(tǒng)來實(shí)現(xiàn)。如同在 Linux 中那樣,系統(tǒng)中的每個(gè)文件都有著自己的所有者用戶,所有者組,以及針對(duì)系統(tǒng)中的用戶身份的權(quán)限模式,比如 權(quán)限模式為 0644 的文件,其所有者可以讀可以寫但不能執(zhí)行,其用戶組中的用戶和其它用戶可以讀但不能寫不能執(zhí)行。系統(tǒng)根據(jù)文件、數(shù)據(jù)的權(quán)限模式及執(zhí)行操作的用戶的身份,對(duì)所有的數(shù)據(jù)訪問進(jìn)行控制。基于 Unix-like 系統(tǒng)中一切皆文件的理念,對(duì)于設(shè)備的訪問如同對(duì)文件得訪問一樣。為了解決 Linux 系統(tǒng)中權(quán)限管理及訪問控制的粒度過粗的問題,而發(fā)明了 SELinux,進(jìn)一步細(xì)化進(jìn)程的權(quán)限管理及訪問控制。而 Android 社區(qū)也將 SELinux 引入 Android,并形成 SEAndroid。
而數(shù)據(jù)加密,則是將明文的數(shù)據(jù),轉(zhuǎn)為看上去非常隨機(jī)的密文,以防止未授權(quán)的人訪問我們想要保密的數(shù)據(jù)。密碼學(xué)上,加密算法主要分為加密密鑰和解密密鑰相同的對(duì)稱加密,及加密密鑰和解密密鑰不同但滿足一定的數(shù)學(xué)關(guān)系的非對(duì)稱加密。在 Android 平臺(tái)上,對(duì)于應(yīng)用層來說,數(shù)據(jù)加密主要由 Java 的 JCA 框架來實(shí)現(xiàn)。目前 JCA 框架的實(shí)現(xiàn)主要基于 OpenSSL 來完成,未來則可能遷移到 Google fork 的 OpenSSL 分支 boringssl 上。
基于這兩種最根本的安全機(jī)制,而設(shè)計(jì)了非常非常多的各種安全策略。
Android 應(yīng)用的沙箱模型是,為系統(tǒng)中運(yùn)行的幾乎所有應(yīng)用,無論是本地層的守護(hù)進(jìn)程也好,還是系統(tǒng)應(yīng)用進(jìn)程,亦或是用戶安裝的應(yīng)用,單獨(dú)分配用戶 ID,同時(shí)將不同應(yīng)用的數(shù)據(jù)單獨(dú)建立文件夾進(jìn)行保存,并為這些文件夾設(shè)置適當(dāng)?shù)臋?quán)限模式,以最小權(quán)限原則,防止應(yīng)用不當(dāng)?shù)臄?shù)據(jù)訪問。借助于 SEAndroid 的強(qiáng)制模式,系統(tǒng)中擁有著超高特權(quán)的守護(hù)進(jìn)程的操作權(quán)限被更細(xì)粒度地進(jìn)行控制,以防止守護(hù)進(jìn)程被攻破時(shí),而有不當(dāng)?shù)男袨椤?/p>
基于加密機(jī)制,而有了 Android 應(yīng)用程序安裝包的簽名驗(yàn)證,有了 HTTPS 的 PKI 體系中的身份認(rèn)證方法及數(shù)據(jù)加密傳輸,有了驗(yàn)證啟動(dòng)中對(duì)數(shù)據(jù)完整性的哈希驗(yàn)證,有了 VPN,有了票據(jù)存儲(chǔ)體系等,有了鎖屏界面,有了磁盤加密,有了 OTA 升級(jí)中的包合法性驗(yàn)證等等等。而加密時(shí)的加鹽,主要是為了防范攻擊者通過已有的密碼字典,而快速猜出密碼。
加密機(jī)制在用戶空間實(shí)現(xiàn)。不管是對(duì)稱加密算法,非對(duì)稱加密算法,還是哈希算法,MAC 算法,當(dāng)前都有許許多多的選擇。對(duì)于加密,還需要關(guān)注加密密鑰的強(qiáng)度,加密迭代的次數(shù),加密的模式,ECB 模式、CBC 模式還是其它,padding 的模式,前向安全性等等。此外還有復(fù)雜的 SSL/TLS 體系的 JSSE,及密鑰存儲(chǔ)值得關(guān)注。因而 Android 平臺(tái)的數(shù)據(jù)加密領(lǐng)域豐富多彩,非常有趣。
當(dāng)然大多數(shù)安全策略的設(shè)計(jì),是同時(shí)基于兩種機(jī)制來實(shí)現(xiàn)的。
權(quán)限管理及自主訪問控制,數(shù)據(jù)加密機(jī)制,以及基于這兩者而創(chuàng)建的各種安全策略,共同構(gòu)成了 Android 的安全架構(gòu)。
《Android 安全架構(gòu)深究》這本書即是對(duì) Android 安全架構(gòu)的比較全面的描述,但各個(gè)主題深度有限,再所難免。有興趣者自然可以挑選一些感興趣的主題,比如包管理系統(tǒng),應(yīng)用程序安裝包驗(yàn)證過程,票據(jù)存儲(chǔ),JCA 及 JSSE 等主題,以此書所述為基礎(chǔ),而通過閱讀系統(tǒng)源碼及其它相關(guān)資料,再做深入的研究。
參與安全事件的人,從立場(chǎng)的角度來看,可以分為攻方和守方。守方建立一整套一整套的安全機(jī)制和策略,來保護(hù)數(shù)據(jù),并抵御任何實(shí)現(xiàn)非授權(quán)訪問的企圖。而攻方則尋找既有系統(tǒng)中可能存在的漏洞,并利用這些漏洞來獲取更高的權(quán)限,執(zhí)行限制性的代碼,訪問任意的數(shù)據(jù),或者搞一些破壞。
目前國內(nèi)有著很多關(guān)于攻的書籍,講解怎么做漏洞挖掘,做反編譯,破解。而這本書則更多地是講解 Android 整個(gè)安全體系得構(gòu)建,主要講防,講建設(shè)。
盡管有很多地方,翻譯讀起來,明顯讓人能感覺是通過自動(dòng)翻譯完成的。但這本書還是帶給了我們對(duì)于 Android 整個(gè)安全體系架構(gòu)較為完整的認(rèn)識(shí)。這仍然是一本,整體讀起來讓人覺得開心的書。
愿每個(gè)人對(duì)這本書都能讀起來開心。
總結(jié)
以上是生活随笔為你收集整理的读《Android 安全架构深究》的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QUIC加密协议
- 下一篇: OkHttp实现分析之Websocket