Android的安全體系

https://source.android.com/tech/security/

1. 背景

2. 系統和內核層的安全性

3. 應用程序的安全性

 

1. 背景

Android爲移動設備提供了一套開源平臺和開發環境。

其主要的平臺編譯模塊是:

  • 設備硬件:Android運行於手機和平板等廣泛不同的硬件上,處理器各不相同,但確實可以利用一些特定硬件相關的安全能力,比如ARM v6 eXecute-Never.
  • 操作系統:操作系統的核心建立在Linux內核之上。所有設備資源,比如camera, gps, 藍牙,電話,網絡等,都通過操作系統得以獲取訪問(access)。
  • 應用程序運行時:大多應用程序由java編程並運行在Dalvik虛擬機上,然而,還有很多程序包括系統核心服務都是本地(native)程序或者包含本地庫。無論Dalvik還是本地程序都要在同樣的包含應用程序沙盒(Sandbox)的安全環境下運行,程序獲得一塊理想的文件系統可以用來寫入私有數據,包括數據庫和原始文件。

Android應用程序有兩個主要來源:

  • 預裝的應用程序:包括電話,郵件,日曆,聯繫人,瀏覽器。這些功能提供了設備的主要功能,可以被其他程序獲取訪問。預裝程序可能是Android源代碼的一部分,也可能是OEM廠商爲了特定的設備自行開發。
  • 用戶安裝的應用程序:Android提供了開源的開發環境支持第三方開發的應用程序。

1.1 Android平臺的安全架構

Android重新定義傳統操作系統的安全控制:

  • 保護用戶數據
  • 保護系統資源
  • 提供應用程序的隔離

爲了實現這些目標,Android提供了以下關鍵的安全特性:

  • 通過Linux內核在操作系統層面上健壯的安全性
  • 對所有應用程序強制的沙盒機制
  • 安全的內部通信(interprocess)
  • 應用程序簽名
  • 應用程序定義並由用戶賦予權限

 

2. 系統和內核層的安全性

在操作系統層級,Android平臺提供了Linux內核的安全性,包括IPC的安全機制來確保運行在不同進程間安全地通信。這些在操作系統層面上的安全性確保了本地代碼同樣也可以受到應用程序沙盒機制的制約。

2.1 Linux安全性

儘管Linux的歷史充滿了被無數開發者研究,攻擊或修復,如今的Linux已經成爲了一個受到很多企業和專家信任的安全穩定的內核。

作爲移動開發環境的基礎,Linux內核提供了Android一些關鍵的安全特性,包括:

  • 基於用戶的權限模式
  • 進程隔離
  • 安全IPC擴展機制
  • 去除不必要的和有潛在危險的內核部分

作爲一個多用戶的操作系統,一個基本的安全目標是隔離用戶彼此間的資源。

  • 防止用戶A讀取用戶B的文件
  • 確保用戶A不會消耗用戶B的內存
  • 確保用戶A不會消耗用戶B的CPU資源
  • 確保用戶A不會消耗用戶B的設備(比如電話,藍牙,GPS)

2.2 沙盒機制

Android平臺利用Linux基於用戶的保護方式用來識別和區分應用程序的資源。Android系統爲每一個應用程序分配一個唯一的用戶ID號(UID),進程以該用戶身份的獨立運行。這種方式與其他操作系統(包括傳統的Linux配置)的區別就在於後者的多用戶應用程序都運行在相同的用戶權限下。

這就建立起一個內核層面上的應用程序沙盒,使內核確保了應用程序與系統之間的安全性。默認情況下,應用程序間無法進行交互,如果程序A嘗試比如讀取程序B的數據或者在沒有權限的情況下打電話,那麼操作系統將防止它發生因爲程序A沒有合適的用戶等級。沙盒是簡單的,可審覈的,基於老的Unix風格的用戶分隔處理和文件權限。

由於應用程序的沙盒是在內核裏的,這種安全模型可以擴展到本地代碼和操作系統的程序。所有在內核層以上的軟件(包括操作系統庫,framewrok,運行時以及所有應用程序)都運行在應用程序沙盒之中。在一些平臺上,出於安全考慮,開發者被限制在特定的開發框架或者API組裏,而Android卻沒有這樣的限制。

在一些操作系統裏,內存崩潰錯誤往往會破壞設備的安全,Android不會這樣,內存崩潰只會允許強制代碼在該特定的程序上下文間執行,這種權限由操作系統建立。

2.3  系統分區和安全模式

系統分區包括內核,操作系統庫,運行時,framework和應用程序。這樣的分區設爲只讀。當用戶啓動設備進入安全模式時,僅應用程序可以訪問,確保了用戶可以啓動設備進入一個對於第三方軟件可以自由運行的環境。

2.4 文件系統權限
類UNIX系統的文件系統權限確保了用戶無法改變或讀取他人的文件。在Android上,每一個應用程序運行在自己的用戶下,除非開發者顯式地把文件暴露給其他程序,他人的程序同樣無法改變或讀取自己的文件。

2.5 密碼系統 (Cryptography)

Android爲用戶提供了一套加密系統API,包括一些標準公用的密碼算法比如AES, RSA, DSA, SHA. 此外,API還提供了比如SSL, HTTPS等更高等級的協議。

Android 4.0引入KeyChain類,允許用戶使用系統認證的存儲空間來存放私鑰和證書。

2.6 Root 

 默認情況下,僅有內核和一小部分核心程序運行於root權限下,Android並不會保護那些擁有root權限的用戶或程序被操作系統,內核或其他應用修改。一般情況下,root超級用戶擁有對應用程序和數據的完全訪問權,那些改變了Android設備權限獲取root權限的用戶增加了安全隱患和潛在漏洞。

優化Android設備的能力對於開發者來說是很重要的。在很多設備上,用戶有能力解鎖bootloader來安裝程序和改變系統,這些被改變的系統可能允許使用者爲了調試程序和系統而獲得root權限。爲了保護存在的用戶數據不被破壞,bootloader解鎖機制需要bootloader擦除任何存在的用戶數據作爲解鎖步驟的一部分,但是通過發掘內核的bug或者安全漏洞也可以獲取root權限。

對存儲在設備上的密鑰數據加密並不能保護來自root超級用戶的應用程序數據。應用程序可以加一層數據保護層,該層使用存儲於設備之外(比如服務器或者用戶密碼)的密鑰的加密方法。當密鑰沒有呈現時這種方法可以提供暫時的保護,但是在某些情況下密鑰必須提供給應用程序,然後使之獲得root用戶的權限。

保護來自root用戶的數據的一個更健壯的方案是使用硬件解決方案。OEM廠商可能會提供硬件解決方案來限制對特定內容的訪問,比如視頻播放的DRM,谷歌錢包的NFC存儲。

對於已丟失或被偷的設備,完全文件系統加密(full filesystem encryption)使用了設備密碼來保護加密的密鑰,這樣一來,即便修改了bootloader或系統在沒有設備密碼的情況下也無法充分獲得用戶的數據。

2.7 文件系統加密 (Filesystem Encryption)

Android 3.0及以後版本提供了完全文件系統加密,使用AES128所有用戶數據在內核里加密。加密的密鑰由AES128算法保護,該算法的密鑰來自用戶的密碼。

2.8 密碼保護

Android可以通過配置來認證用戶提供的密碼來獲取設備權限。是否使用密碼以及密碼的複雜程度規則可以由設備管理員設定。

2.9 設備管理員

Android 2.2及以後版本提供了Android設備管理員API,在系統層提供了設備管理員的特性。比如說,內置的郵件應用使用了這些API來增強交換數據(Exchange)的支持。通過郵件應用,Exchange管理員可以增強密碼策略。管理員同樣可以遠程擦除已丟失或偷竊的設備。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章