- xss
- login form
- NoSQL
- mongoDB
- Frida
- DOM
- Android Backup
- UnCrackable
- blind sql injection
- getCachedIntrospectionResults
- Hackthebox cat
- HacktheBox Mobile
- nginx
- Directory traversal
- MariaDB
- CVE-2022-22965
- PortSwigger
- JAVA ClassLoader 취약점
- File Upload
- HackTheBox
- CVE-2014-0094
- HackTheBox APKey
- mstg
- UnCrackable level 1
- Xamarin 분석
- Android 6.0
- XALZ 압축해제
- SeeTheSharpFlag
- JSP
- CVE-2010-1622
- Today
- Total
끄적끄적
[HackTheBox] Cat (Feat. Android Back Up) 본문
배경 지식
안드로이드 6.0 이상부터는 앱에 대한 데이터를 자동으로 백업하도록 설정되어 있다. 해당 앱 데이터는 Google Drive에 업로드(최대 25MB) 되어 보존되며, Google 계정 사용자 인증 정보에 따라 보호된다.
기본 백업 파일
- 공유 환경설정 파일 -> Class별 Manifest
- 앱 내부 저장소에 저장된 파일: getFilesDir(), getDir(String, int) -> Preferce
- 디렉터리 파일: getDatabasePath(String), SQLiteOpenHelper Class -> .db 파일 등
- 디렉터리의 외부 저장소에 있는 파일: getExternalFilesDir(String) -> 앱에서 사용한 SD 카드 저장소내 파일
일시적으로 필요한 파일(캐시)은 백업 파일에서 제외된다.
특징
- 사용자가 두 개의 기기를 소유하고 있더라도 백업 데이터는 기기별로 존재
- 사용자가 기기 한 대를 초기화한 다음 같은 계정으로 기기를 설정할 경우 새로운 데이터 백업이 저장
- 사용하지 않은 데이터 세트는 일정기간 활동이 없으면 자동으로 삭제
- 데이터의 양이 25MB를 초과할 경우, 클라우드 데이터 백업 중지
1, 2번 특징으로 공격자가 백업 파일로 부터 유효한 데이터를 얻기 위해서는 기기를 획득해야 한다. 분석 환경이 Android 파일 시스템에 접근할 수 없는 경우에는 백업 데이터를 통해 민감한 정보를 포함하고 있는지 여부를 확인할 수 있다.
자동 백업 조건
- 사용자가 기기에 백업 사용을 설정
- 마지막 백업 후 24시간 이상 경과
- 기기가 유휴(휴식) 상태
- 기기가 Wi-Fi 네트워크에 연결되어 있는 경우
관련 설정
Android 6.0 이상을 타겟팅 하는 앱은 자동으로 백업이 진행된다. 이를 막기 위해서는 앱 매니페스트 파일에서 "android:alowbackup"에 부울 값을 할당한다.
<manifest ...>
<application android:allowBackup="true".... >
....
</application>
</manifest>
자동 백업을 일반적으로 모든 데이터를 백업하기 때문에 민감한 데이터는 XML 규칙을 정의하여 백업 대상을 정의하는 것이 좋다.
1. 매니페스트에서 <application> 요소에 "android:fullBackupContent" 속성 추가 및 백업 규칙을 표함하는 XML 파일 설정
<application ...
android:fullBackupContent="@xml/my_backup_rules">
</application>
2. /res/xml/ 디렉터리에 "my_backup_rules" XML 파일 생성 후 <include>와 <exclude> 요소를 사용하여 규칙을 추가
아래 설정은 device.xml을 제외한 모든 공유 환경설정을 백업(상세 내용은 Reference [1] 참고)
<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
<include domain="sharedpref" path="."/>
<exclude domain="sharedpref" path="device.xml"/>
</full-backup-content>
백업 파일 추출하기
위와 같이 매니페스트내에 백업 파일이 존재하는 경우 adb에 backup 옵션을 사용하여 백업 데이터를 추출할 수 있다.
adb backup -f (ad/ab) [App Package Name]
이렇게 추출된 데이터는 "abe.jar"를 통해 압축 파일 형태로 변환할 수 있다.
Reference [3] 참고
java -jar abe.jar unpack [ad/ab file] [output file name].tar
HackTheBox, CAT
Android Backup과 관련된 문제로 Reference [4]를 참고하면 된다.
Step 1. "abe.jar" 패지키 파일로 "cat.ab" 을 압축 파일 형태로 변환
명령어
java -jar abe.jar unpack cat.ab cat.tar
Step 2. "tar" 압축 해제 후, Astrogrep 프로그램을 사용하여 디렉터리 내 유효 데이터 확인
아래와 같이 해당 앱이 사용하였던 내외부 저장소에 대한 데이터가 백업된 것을 확인할 수 있다.
- 내부 저장소: Preference, SQLite DB 등
- 외부 저장소: 사진 등
Step 3. 외부 저장소에서 사진 파일이 존재하는 것을 확인 후 접근
Step 4. Flag 값 확인
Flag 값은 해당 사진 어딘가에 적혀있다.
마치며
안드로이드 백업 파일은 기기를 실제 소유한 상태에서 유효한 데이터를 습득할 수 있기 때문에, 파일 시스템에 접근할 수 없는 경우(루팅 미제공) 민감한 데이터를 저장하고 사용하는지 혹은 파라미터 값 추측 등의 데이터를 습득하고자 할때 사용할 수 있다.
추가로, 이러한 환경에서 파라미터 변조를 통한 백엔드 단의 점검을 수행하고자 하는 경우 Frida를 사용하여 Request 파라미터 값 설정하는 로직을 후킹하여 사용하면 된다.
Reference
[1] 자동 백업으로 사용자 데이터 백업, https://developer.android.com/guide/topics/data/autobackup?hl=ko
[2] 안드로이드의 백업 기능, https://developer.android.com/guide/topics/data/backup?hl=ko#Choosing
[3] abe.jar github, https://github.com/nelenkov/android-backup-extractor/releases
[4] HackThebox Cat, https://app.hackthebox.com/challenges/cat
'Security > Mobile' 카테고리의 다른 글
[HacktheBox] SeeTheSharpFlag (feat. Xamarin) (0) | 2022.05.27 |
---|---|
[HackTheBox] APKey (0) | 2022.05.24 |
[ERROR] jadx is running low on memory (0) | 2022.04.16 |
[iOS] 분석 연대기 (0) | 2022.04.14 |
[iOS] IPA Dump for iOS Frida Dump(Feat. Window) (0) | 2022.04.12 |