應用沙盒

Android 平台利用基於 Linux 用戶的保護來識別和隔離應用程序資源。這將應用程序彼此隔離並保護應用程序和系統免受惡意應用程序的侵害。為此,Android 為每個 Android 應用程序分配一個唯一的用戶 ID (UID) 並在其自己的進程中運行它。

Android 使用 UID 來設置內核級應用程序沙箱。內核通過標準 Linux 工具(例如分配給應用程序的用戶和組 ID)在進程級別強制應用程序和系統之間的安全性。默認情況下,應用程序不能相互交互並且對操作系統的訪問權限有限。如果應用 A 試圖做一些惡意的事情,例如讀取應用 B 的數據或未經許可撥打電話,它會被阻止,因為它沒有適當的默認用戶權限。沙箱簡單、可審計,並且基於幾十年前的 UNIX 風格用戶進程和文件權限分離。

由於應用程序沙箱位於內核中,因此此安全模型擴展到本機代碼和操作系統應用程序。內核之上的所有軟件,例如操作系統庫、應用程序框架、應用程序運行時和所有應用程序,都在應用程序沙箱中運行。在某些平台上,開發人員受限於特定的開發框架、API 集或語言。在 Android 上,對於強制執行安全性所需的應用程序的編寫方式沒有限制;在這方面,本機代碼與解釋代碼一樣被沙箱化。

保護

通常,要在正確配置的設備中突破應用程序沙箱,必須危及 Linux 內核的安全性。但是,與其他安全功能類似,實施應用程序沙箱的個別保護並非無懈可擊,因此縱深防禦對於防止單個漏洞導致操作系統或其他應用程序受到威脅非常重要。

Android 依靠多種保護措施來強制實施應用程序沙箱。這些強制措施是隨著時間的推移而引入的,並顯著加強了原始的基於 UID 的自由訪問控制 (DAC) 沙箱。以前的 Android 版本包括以下保護:

  • 在 Android 5.0 中,SELinux 提供了系統和應用程序之間的強​​制訪問控制 (MAC) 分離。但是,所有第三方應用程序都在相同的 SELinux 上下文中運行,因此應用程序間隔離主要由 UID DAC 強制執行。
  • 在 Android 6.0 中,SELinux 沙箱被擴展為跨物理用戶邊界隔離應用程序。此外,Android還設置安全默認值用於應用程序數據:對於具有應用targetSdkVersion >= 24 ,其與應用的主目錄從751改變到700。默認DAC權限本私人應用數據提供更安全的默認(儘管應用程序可能會覆蓋這些默認值) .
  • 在的Android 8.0,所有的應用程序被設置為與運行seccomp-bpf濾波器限制了系統調用其的應用程序被允許使用,從而加強該應用/內核邊界。
  • 在的Android 9與所有非特權的應用程序targetSdkVersion >= 28必須在個體的SELinux沙箱運行,基於每個應用程序的基礎提供MAC。這種保護改進了應用程序分離,防止覆蓋安全默認值,並且(最重要的是)防止應用程序使其數據世界可訪問。
  • 在 Android 10 中,應用程序對文件系統的原始視圖有限,無法直接訪問 /sdcard/DCIM 等路徑。然而,應用保持其特定的包路徑完全原始訪問,通過任何適用的方法,如作為返回Context.getExternalFilesDir() 。

共享文件的準則

將應用程序數據設置為全球可訪問是一種糟糕的安全做法。每個人都可以訪問,並且不可能僅將訪問權限限制為預期的接收者。這種做法導致信息洩露洩漏和混淆代理漏洞,並且是針對具有敏感數據的應用程序(例如電子郵件客戶端)的惡意軟件的最愛目標。在Android中9和更高,共享文件這種方式被明確禁止用於與應用targetSdkVersion>=28

在共享文件時,不要讓應用程序數據可供全世界訪問,而是使用以下準則:

  • 如果您的應用程序需要與另一個應用程序共享文件,使用內容提供商。內容提供商與適當的粒度和沒有世界可訪問的UNIX權限的許多缺點共享數據(有關詳細信息,請參閱內容提供商基礎)。
  • 如果您的應用程序有文件真正應該是世界上訪問(如照片),他們必須是針對特定媒體(照片,視頻和音頻文件只),並使用存儲MediaStore類。 (有關如何添加媒體項目的詳細信息,請參閱從共享存儲訪問的媒體文件。)

存儲運行權限控制通過MediaStore訪問強類型集合。為了訪問弱類型的文件如PDF和MediaStore.Downloads類,應用程序必須使用意圖像ACTION_OPEN_DOCUMENT意圖。

為了使Android的10行為,使用requestLegacyExternalStorage清單屬性,並按照應用程序的權限的最佳實踐

  • 清單標誌默認值是true對應用定位的Android 9(或更低)。
  • 默認值是應用定位的Android 10.要暫時選擇在應用定位的Android 10的過濾存儲視圖,清單標誌的值設置為虛假true
  • 安裝程序使用受限權限將允許用於非沙盒存儲的應用程序列入白名單。未列入白名單的應用程序被沙盒化。