OWASP 類別:MASVS-CODE:程式碼品質
總覽
應用程式備份功能旨在保留使用者資料,以便日後還原至新裝置,或在資料遺失時使用。有關應用程式備份的現有安全性建議,安全性建議因 Android 版本和裝置製造商而異。這些建議的共同主題,就是確保不會有任何機密資料外洩。
標準 Android 備份系統提供最安全、最可靠且最簡單的解決方案,可讓應用程式將資料備份到雲端,或透過自動備份 (預設為啟用,無需任何實作工作,且可擴充) 和鍵/值備份,將資料轉移到新裝置。我們建議使用這個解決方案,因為它會將產生的備份資料儲存在其他第三方應用程式無法存取的目錄中,並且可協助進行靜態資料加密、傳輸中加密,以及設定可從備份中排除機密資料。
假使應用程式實作的備份解決方案不依附標準 Android 備份系統,可能會提高導致機密資料外洩的可能性。非標準備份解決方案會暴露使用者資料外洩的情形,包括提供「匯出」或「備份」功能的應用程式,在可由其他應用程式讀取的目錄中建立應用程式資料副本,因而容易外洩 (無論是直接或透過其他安全漏洞)。
影響
設定應用程式備份時,請遵循安全性建議,避免備份可能包含的機密資料外洩。視實際資料和攻擊者的意圖而定,機密資料外洩可能會導致資訊外洩、使用者冒用和財務損失。
因應措施
使用標準 Android 備份系統
標準 Android 備份系統一律會加密傳輸中的備份資料和靜態資料。無論您使用的 Android 版本,以及裝置是否設有螢幕鎖定,系統都會套用這項加密機制。自 Android 9 起,如果裝置已設定螢幕鎖定功能,備份資料不僅會加密,而且會使用 Google 無法得知的金鑰加密 (螢幕鎖定密碼會保護加密金鑰,因此可啟用端對端加密)。
如果備份檔案包含特別機密的資料,建議您排除這類資料,如果無法排除,請按照下文所述要求端對端加密。
從備份中排除資料
您可以使用名為 backup_rules.xml
的規則檔案,指定要從備份中排除哪些資料,並存放在 res/xml
應用程式資料夾中。備份規則的設定方式會因使用的 Android 版本而有所不同:
- 針對 Android 12 (API 級別 31) 以上版本,請在
AndroidManifest.xml
中的<application>
元素中加入android:dataExtractionRules
屬性: - xml
xml <application android:name="com.example.foo" android:dataExtractionRules="@xml/backup_rules_extraction"> … </application>
接著,按照更新後的設定格式,根據應用程式的資料持久性和安全性需求設定 backup_rules.xml
檔案。
backup_rules.xml
檔案設定檔所需的格式可讓開發人員為 Cloud 和裝置對裝置 (D2D) 轉移定義自訂備份規則。如果未設定 <device-transfer>
屬性,系統會在 D2D 遷移期間轉移所有應用程式資料。請特別注意,即使目標應用程式指定 Android 12 以上版本,仍必須為搭載 Android 11 (API 級別 30) 以下版本的裝置指定含有另一組備份規則的個別檔案。
- 適用於 Android 11 以下版本:請在
AndroidManifest.xml
中的<application>
元素中新增android:fullBackupContent
屬性: - xml
xml <application android:name="com.example.foo" android:fullBackupContent="@xml/backup_rules_full"> … </application>
接著,使用備份使用者資料文章中回報的語法,根據應用程式的資料持續性和安全性要求設定 backup_rules.xml
檔案。
必須要求端對端加密
如果您無法從備份中排除敏感資料,建議您要求端對端加密,也就是只在 Android 9 以上版本中允許備份,且必須設定鎖定畫面。您可以使用 requireFlags="clientSideEncryption"
標記達成此目的,但需要將其重新命名為 disableIfNoEncryptionCapabilities
,並從 Android 12 開始將其設為 true
。
如果您無法使用標準 Android 備份系統
如果您無法使用標準 Android 備份系統,則安全儲存備份資料,以及指定要從備份中排除哪些資料,會變得更加複雜。這項資訊必須在程式碼層級指定,因此容易發生錯誤,導致資料外洩。在這種情況下,建議您定期測試實作方式,確保預期的備份行為不會受到影響。
資源
- allowBackup 屬性的說明
- 檔案型加密
- D2D 轉移行為變更
- 使用自動備份功能備份使用者資料
- 使用 Android Backup Service 備份鍵/值組合
- 在 Android 12 以上版本中控制備份
- 在 Android 11 以下版本中控制備份功能
- 瞭解 Google 合約與政策中的個人識別資訊
- 測試備份與還原功能
- 密碼學
- Android KeyStore 系統
- ADB
- 開發人員選項