
0. 용어 설명 및 선행 지식
https://developer.android.com/identity/data/backup
Data backup overview | Identity | Android Developers
Data backup overview Stay organized with collections Save and categorize content based on your preferences. Users often invest significant time and effort creating an identity, adding data, and customizing settings and preferences within your app. Preservi
developer.android.com
해당 취약점에 관한 내용들은 공식 문서를 참조하여 작성하였습니다
Android에서 지원하는 데이터 백업 / 복원 방법은 위의 그림과 같습니다
기기간 전송은 이름 그대로 케이블을 통하여 데이터를 전송하는 방법입니다
Key-Value Backup은 Key-Value 형태로 데이터를 백업하는 방법으로 백업 데이터는 Google 계정에 연결된
Android Backup Service Cloud에 저장됩니다 앱마다 최대 5MB 저장이 가능하며, 개발자가 코드를 직접 구현해야한다는
특징이 있습니다
Auto Backup은 앱의 내부/외부, 파일 시스템 등 앱의 전체 데이터를 자동으로 백업하는 방법으로 백업데이터는
사용자 Google Drive에 저장됩니다 앱마다 최대 25MB 저장이 가능하며, allowBackup 속성을 True로 설정하면
코드 구현 없이 자동으로 백업을 수행합니다
마지막으로 adb를 통해 수동으로 백업하는 adb backup이 있습니다 Full Backup이라고도 부릅니다
Full backup의 경우, Android 12 이상부터 지원을 중단한걸로 알고 있으나 위의 그림과 같이 Android 14에서 테스트한 결과,
정상 작동하는걸로 확인하였습니다
@ android:allowBackup 속성
해당 속성은 위에서 언급한 방법들의 백업 허용 여부를 결정하는 속성이며, default 값은 true입니다
해당 속성이 true일 경우, 위의 방법들을 통한 백업이 가능합니다
1. 취약점 설명
@ 취약점이 되기 위한 조건 : android:allowBackup 속성이 true일 경우
해당 취약점은 allowBackup 속성이 true일 때, 백업을 통해 앱에 저장된 데이터를 빼내는 취약점입니다
가장 큰 특징은 앱의 패키지 이름만 알고 있다면 루팅을 하지 않고도 백업을 통해 데이터를 빼낼 수 있다는 점입니다
2. 공격
1. Full Backup으로 데이터 빼내기
https://sourceforge.net/projects/android-backup-processor/
android-backup-processor
Download android-backup-processor for free. Android adb backup extractor and packer. None
sourceforge.net
해당 공격을 수행하기 위해서는 android-backup-toolkit 도구와 java가 설치되어 있어야합니다
링크를 클릭하여 다운로드 합니다
1. shell에서 adb backup -f <저장할 이름> <패키지이름> 명령어를 입력합니다
2. 그러면 위의 그림과 같은 화면이 뜹니다 이 때 비밀번호를 입력하지 않고 백업을 진행합니다
3. java -jar abp.jar -debug unpack <ab파일이름> <tar파일이름> 명령어를 입력합니다
- android-backup-toolkit - android-backup-processor - executable 경로로 이동한 상태에서 명령어를 입력해야합니다
4. 데이터가 성공적으로 추출됩니다
3. 대응 방안
https://developer.android.com/privacy-and-security/risks/backup-best-practices
백업에 대한 보안 권장사항 | Security | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 백업에 대한 보안 권장사항 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. OWASP 카테고리: MASVS-CODE: 코
developer.android.com
https://developer.android.com/guide/topics/manifest/application-element#allowbackup
<application> | App architecture | Android Developers
애플리케이션의 선언입니다. 이 요소는 애플리케이션의 각 구성요소를 선언하는 하위 요소를 포함하며 모든 구성요소에 영향을 줄 수 있는 속성을 가지고 있습니다. 이러한 속성 중 다수(예: 아
developer.android.com
대응 방안은 공식 문서를 참고하여 작성하였습니다
1. allowBackup 속성을 False로 변경
android:allowBackup 속성을 False로 변경하면 해당 취약점에 대응할 수 있습니다
위의 그림에서 왼쪽은 allowBackup 속성을 false, 오른쪽은 true로 설정하였을 때의 백업 파일입니다
true로 설정한 경우에는 백업에 성공하지만 false일 경우에는 크기부터가 다르고 압축 해제조차 되지 않습니다
하지만 필자가 AVD에서 테스트한 결과, 해당 속성을 False로 설정하여도 적용되지 않는 케이스가 존재하였습니다
위의 그림은 Android 9에서 테스트하였을 때의 결과이며, allowBackup 속성을 false로 설정하면 정상적으로 대응 할 수 있었습니다
하지만 Android 14에서는 allowBackup 속성을 false로 설정하더라도 백업을 통해 데이터 추출이 가능하였습니다
( 실제 디바이스로는 태스트 해보지 못하였기에 AVD만의 문제가 아닌가 생각이 듭니다 )
2. 백업에 제외될 파일 명시
https://developer.android.com/identity/data/autobackup#XMLSyntax
자동 백업으로 사용자 데이터 백업 | Identity | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 자동 백업으로 사용자 데이터 백업 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 앱의 자동 백업은 A
developer.android.com
여건상, allowBackup 속성을 False로 설정할 수 없을 경우 백업에 제외될 파일을 명시하여 대응할 수 있습니다
해당 대응방안의 경우, Android OS 버전에 따라 대응 방법이 나뉩니다 ( 문법은 위의 공식 문서를 참조 )
@ Android 11 이하의 경우
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app">
<application
android:allowBackup="true"
android:fullBackupContent="@xml/backup_rules"> <!-- 백업룰 설정 -->
</application>
</manifest>
AndroidManifest에서 fullBackupContent 속성을 설정해주며 포함 / 제외할 파일을 명시한 xml 파일을 선택해줍니다
<!-- backup_rules.xml-->
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<!-- <include /> 포함할 파일 명시-->
<exclude domain="sharedpref" path="."/> <!-- sharedpref 디렉토리 제외 -->
<exclude domain="database" path="."/> <!-- db 디렉토리 제외 -->
</full-backup-content>
포함 / 제외할 파일을 명시한 xml 파일을 작성해줍니다
include 태그에는 백업에 포함할 파일을 명시하고 exclude 태그에는 제외할 파일을 명시합니다
@ Android 12 이상의 경우
필자가 AVD에서 Android 14로 테스트한 결과, 적용되지 않았습니다 하지만 코드를 명시합니다
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.app">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules">
</application>
</manifest>
AndroidManifest에서 dataExtractionRules 속성을 설정해주며, 포함 / 제외할 파일을 명시한 xml 파일을 선택해줍니다
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules xmlns:tools="http://schemas.android.com/tools">
<cloud-backup>
<!-- <include .../>-->
<exclude domain="database" path="." />
<exclude domain="sharedpref" path="." />
</cloud-backup>
<device-transfer>
<!-- <include />-->
<exclude domain="database" path="." />
<exclude domain="sharedpref" path="." />
<exclude domain="external" path="./" />
</device-transfer>
</data-extraction-rules>
포함 / 제외할 파일을 명시한 xml 파일을 작성해줍니다
Android 11 이하일 때와는 다르게 클라우드 백업, D2D 백업을 수행할 때 포함 / 제외할 파일을 따로 명시할 수 있습니다
3. 데이터 암호화
앱에 저장되는 데이터를 암호화한다면 백업을 통해 데이터가 추출되더라도 데이터를 열람할 수 없습니다
데이터 암호화는 안전하지 않은 암호화 시리즈를 참고바랍니다
'Project > RedAlienShop' 카테고리의 다른 글
6. RedAlienshop - Frida Detection and Bypass 취약점 (2) | 2025.04.17 |
---|---|
5. RedAlienshop - Developer Option Detection and Bypass 취약점 (1) | 2025.04.15 |
4. RedAlienshop - Emulator Detection and Bypass 취약점 (0) | 2025.04.15 |
3. RedAlienshop - Root Detection and Bypass 취약점 (0) | 2025.04.10 |
1. RedAlienshop - Application Debuggable 취약점 (1) | 2025.04.02 |
IT / Android
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!