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