Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

Android中增強安全性的Linux

作為Android 安全模型的一部分,Android使用增強安全性的Linux(SELinux)對所有進程,甚至是具有root / superuser特權(Linux功能)運行的進程都強制執行強制訪問控制(MAC)。許多公司和組織為Android的SELinux實施做出了貢獻。借助SELinux,Android可以更好地保護和限制系統服務,控制對應用程序數據和系統日誌的訪問,減少惡意軟件的影響,並保護用戶免受移動設備上代碼的潛在漏洞的侵害。

SELinux遵循默認拒絕的原則:拒絕任何未明確允許的內容。 SELinux可以在兩種全局模式下運行:

  • 允許模式,在其中記錄但拒絕強制拒絕。
  • 強制模式,在該模式下,將記錄強制執行權限拒絕。

Android包括處於強制模式的SELinux和默認情況下跨AOSP起作用的相應安全策略。在強制模式下,將阻止不允許的操作,內核將所有嘗試的違規記錄到dmesglogcat 。開發時,應在執行之前使用這些錯誤來完善軟件和SELinux策略。有關更多詳細信息,請參見實現SELinux

SELinux還支持按域的許可模式,在這種模式下,可以使特定的域(進程)許可,而將系統的其餘部分置於全局強制模式。域僅僅是在安全策略中標識一個過程或一組過程的標籤,安全策略將對所有標記有相同域的過程進行相同的處理。每個域的許可模式使SELinux可以逐步應用到系統的不斷增長的部分,並可以製定新服務的策略(同時保持其餘的系統強制執行)。

背景

Android安全模型部分基於應用程序沙箱的概念。每個應用程序都在自己的沙箱中運行。在Android 4.3之前,這些沙箱是通過在安裝時為每個應用程序創建唯一的Linux UID來定義的。 Android 4.3及更高版本使用SELinux進一步定義Android應用程序沙箱的邊界。

在Android 5.0及更高版本中,SELinux是在Android 4.3的許可版本和Android 4.4的部分實施的基礎上完全實施的。隨著這一變化,Android的從執法轉移的一組有限的關鍵領域(的installdnetdvoldzygote )至所有(60個以上的域)。特別:

  • 在Android 5.x及更高版本中,一切都處於強制模式。
  • init任何進程都不應在init域中運行。
  • 任何通用拒絕(對於block_devicesocket_devicedefault_service )都表明該設備需要特殊的域。

Android 6.0通過減少政策的寬鬆程度來加強系統性能,包括更好地隔離用戶,IOCTL過濾,減少公開服務的威脅,進一步收緊SELinux域以及/proc訪問的限制。

Android 7.0更新了SELinux配置,以進一步鎖定應用程序沙箱並減少攻擊面。此版本還將整體媒體服務器堆棧分解為較小的進程,以減小其權限範圍。有關更多詳細信息,請參閱使用更多Linux內核防禦來保護Android強化媒體堆棧

Android 8.0更新了SELinux以與Treble一起使用 ,該工具將較低層的供應商代碼與Android系統框架分開。此版本更新了SELinux策略,以允許設備製造商和SOC供應商更新其策略部分,構建其映像( vendor.imgboot.img等),然後獨立於平台更新這些映像,反之亦然。

雖然可以在設備上運行更高/更新的平台(框架)版本,但不支持相反的情況;供應商映像( vendor.img/odm.img )不能具有比平台( system.img )更高的版本。因此,較新的平台版本可能會引入SELinux兼容性問題,因為平台SELinux策略的版本高於該策略的供應商SELinux部分。 Android 8.0模型提供了一種保留兼容性以防止不必要的同時OTA的方法。

額外資源

有關構建有用的SELinux策略的幫助,請參考以下資源: