백업에 대한 보안 권장사항
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
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"
플래그를 사용하면 됩니다. 이 플래그는 Android 12부터 이름을 disableIfNoEncryptionCapabilities
로 바꾸고 true
로 설정해야 합니다.
표준 Android 백업 시스템을 사용할 수 없는 경우
표준 Android 백업 시스템을 사용할 수 없는 경우 백업 데이터를 안전하게 저장하고 백업에서 제외할 데이터를 지정하는 것이 더 복잡해집니다. 이는 코드 수준에서 지정해야 하므로 오류가 발생하기 쉽고 데이터 유출 위험이 있습니다. 이 시나리오에서는 구현을 정기적으로 테스트하여 예상되는 백업 동작이 변경되지 않았는지 확인하는 것이 좋습니다.
리소스
이 페이지에 나와 있는 콘텐츠와 코드 샘플에는 콘텐츠 라이선스에서 설명하는 라이선스가 적용됩니다. 자바 및 OpenJDK는 Oracle 및 Oracle 계열사의 상표 또는 등록 상표입니다.
최종 업데이트: 2025-07-26(UTC)
[[["이해하기 쉬움","easyToUnderstand","thumb-up"],["문제가 해결됨","solvedMyProblem","thumb-up"],["기타","otherUp","thumb-up"]],[["필요한 정보가 없음","missingTheInformationINeed","thumb-down"],["너무 복잡함/단계 수가 너무 많음","tooComplicatedTooManySteps","thumb-down"],["오래됨","outOfDate","thumb-down"],["번역 문제","translationIssue","thumb-down"],["샘플/코드 문제","samplesCodeIssue","thumb-down"],["기타","otherDown","thumb-down"]],["최종 업데이트: 2025-07-26(UTC)"],[],[],null,["# Security recommendations for backups\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-CODE: Code Quality](https://mas.owasp.org/MASVS/10-MASVS-CODE)\n\nOverview\n--------\n\nApp backups aim to preserve users' data so that it can later be restored to a\nnew device or in case of data loss. Existing security recommendations regarding\napp backups are nuanced, varying between Android versions and device\nmanufacturers. The common theme is that these recommendations aim at ensuring\nthat no sensitive data is leaked.\n\nThe Standard Android Backup system provides the most secure, robust, and easiest\nsolution for apps to back up their data to the cloud or to transfer data to a\nnew device through [Auto Backup](/identity/data/autobackup)(which is [enabled by default](/identity/data/backup), requires\nno work to implement and can also be extended) and [key-value backup](/guide/topics/data/keyvaluebackup). We\nrecommend using this solution because it stores the resulting backup data in\ndirectories that cannot be accessed by other 3p apps, as well as facilitating\nencryption at rest, encryption in transit, and configurations allowing for the\nexclusion of sensitive data from backups.\n\nIf instead an app implements a backup solution that is not reliant on the\nStandard Android Backup system, this could increase the likelihood of mistakes\nleading to leaks of sensitive data. Examples of non-standard backup solutions\nexposing user data to leaks include apps offering an \"export\" or \"backup\"\ncapability that creates a copy of the app data in directories readable by other\napps, and which is hence prone to being leaked (either directly or through other\nvulnerabilities).\n\nImpact\n------\n\nFollowing security recommendations when setting up app backups prevents the\npotential leak of sensitive data that backups might include. Depending on the\nactual data and on the attacker's intentions, sensitive data leak may lead to\ninformation disclosure, user impersonation, and financial loss.\n\nMitigations\n-----------\n\n### Use the Standard Android Backup system\n\nThe Standard Android Backup system always encrypts backup data in transit and at\nrest. This encryption is applied regardless of the Android version in use and of\nwhether your device has a lock screen. Starting from Android 9, if the device\nhas a lock screen set, then the backup data is not only encrypted, but encrypted\nwith a key not known to Google (the lock screen secret protects the encryption\nkey, thus enabling end-to-end encryption).\n\nIn general remember to follow the [data storage](/training/data-storage) and [security\nguidelines](/privacy-and-security/risks/sensitive-data-external-storage).\n\nIf your backup includes particularly sensitive data, then we recommend to either\nexclude this data or, if you cannot exclude it, require end-to-end encryption as\ndescribed in the following section.\n\n#### Excluding data from backup\n\nYou can specify which data to exclude from a backup using a rules file,\nconventionally called `backup_rules.xml`and placed in the `res/xml` app folder.\nThere are some differences in how backup rules are configured depending on the\nversion of Android that's used:\n\n- [For Android versions 12 (API level 31) and higher](/guide/topics/data/autobackup#include-exclude-android-12), add an `android:dataExtractionRules` attribute to the `\u003capplication\u003e` element within the `AndroidManifest.xml`:\n- xml `xml\n \u003capplication android:name=\"com.example.foo\" android:dataExtractionRules=\"@xml/backup_rules_extraction\"\u003e\n ...\n \u003c/application\u003e`\n\nThen, [configure](/guide/topics/data/autobackup#include-exclude-android-12) the `backup_rules.xml` file according to the\ndata persistence and security requirements of the application, following the\n[updated configuration format](/guide/topics/data/autobackup#xml-syntax-android-12).\n\nThe format required for the `backup_rules.xml` file configuration allows\ndevelopers to define custom backup rules for both Cloud and [Device-To-Device\n(D2D) transfers](/about/versions/12/behavior-changes-12#xml-changes). If the `\u003cdevice-transfer\u003e`attribute is not set, all the\napplication data will be transferred during a D2D migration. It is important to\nhighlight that even if the target application targets Android 12 or higher, a\nseparate file with [an additional set of backup rules](/identity/data/autobackup#include-exclude-android-11) should always be\nspecified for devices running Android 11 (API level 30) or lower.\n\n- [For Android versions 11 and lower](/guide/topics/data/autobackup#include-exclude-android-11), add an `android:fullBackupContent` attribute to the `\u003capplication\u003e` element within the `AndroidManifest.xml`:\n- xml `xml\n \u003capplication android:name=\"com.example.foo\" android:fullBackupContent=\"@xml/backup_rules_full\"\u003e\n ...\n \u003c/application\u003e`\n\nThen, configure the `backup_rules.xml` file according to the data persistence\nand security requirements of the application using the syntax reported in the\n[back up user data](/guide/topics/data/autobackup#include-exclude-android-11) article.\n\n#### Requiring end-to-end encryption\n\nIf you can't exclude sensitive data from your backup, then we recommend\nrequiring end-to-end encryption which means allowing backups only on Android 9\nor higher and only when the lock screen is set. You can achieve this by using\nthe `requireFlags=\"clientSideEncryption\"`flag, which needs to be renamed to\n`disableIfNoEncryptionCapabilities` and set to `true` starting from [Android\n12](/identity/data/autobackup#include-exclude-android-12).\n\n### If you can't use the Standard Android Backup system\n\nIf you can't use the Standard Android Backup system, then securely storing your\nbackup data as well as specifying which data to exclude from your backup is more\ncomplex. This needs to be specified at code level and is consequently\nerror-prone, risking data leaks. In this scenario, it is also recommended to\nregularly test your implementation to ensure that there has been no alteration\nto the expected backup behavior.\n\nResources\n---------\n\n- [Description of the allowBackup attribute](/guide/topics/manifest/application-element#allowbackup)\n- [File-Based Encryption](https://source.android.com/docs/security/features/encryption/file-based)\n- [D2D transfer behavior changes](/about/versions/12/behavior-changes-12#functionality-changes)\n- [Back up user data with Auto Backup](/identity/data/autobackup)\n- [Back up key-value pairs with Android Backup Service](/identity/data/keyvaluebackup)\n- [Control backup on Android 12 or higher](/guide/topics/data/autobackup#include-exclude-android-12)\n- [Control backup on Android 11 and lower](/guide/topics/data/autobackup#include-exclude-android-11)\n- [Understanding PII in Google's contracts and policies](https://support.google.com/analytics/answer/7686480)\n- [Test backup and restore](/identity/data/testingbackup)\n- [Cryptography](/guide/topics/security/cryptography)\n- [Android Keystore system](/training/articles/keystore)\n- [ADB](/tools/adb)\n- [Developer options](/studio/debug/dev-options)"]]