끄적끄적

[HackTheBox] Cat (Feat. Android Back Up) 본문

Security/Mobile

[HackTheBox] Cat (Feat. Android Back Up)

Go0G 2022. 5. 23. 22:59

배경 지식

안드로이드 6.0 이상부터는 앱에 대한 데이터를 자동으로 백업하도록 설정되어 있다. 해당 앱 데이터는 Google Drive에 업로드(최대 25MB) 되어 보존되며, Google 계정 사용자 인증 정보에 따라 보호된다.

기본 백업 파일

  • 공유 환경설정 파일 -> Class별 Manifest
  • 앱 내부 저장소에 저장된 파일: getFilesDir(), getDir(String, int) -> Preferce
  • 디렉터리 파일: getDatabasePath(String), SQLiteOpenHelper Class -> .db 파일 등
  • 디렉터리의 외부 저장소에 있는 파일: getExternalFilesDir(String) -> 앱에서 사용한 SD 카드 저장소내 파일

일시적으로 필요한 파일(캐시)은 백업 파일에서 제외된다.

특징

  1. 사용자가 두 개의 기기를 소유하고 있더라도 백업 데이터는 기기별로 존재
  2. 사용자가 기기 한 대를 초기화한 다음 같은 계정으로 기기를 설정할 경우 새로운 데이터 백업이 저장
  3. 사용하지 않은 데이터 세트는 일정기간 활동이 없으면 자동으로 삭제
  4. 데이터의 양이 25MB를 초과할 경우, 클라우드 데이터 백업 중지

1, 2번 특징으로 공격자가 백업 파일로 부터 유효한 데이터를 얻기 위해서는 기기를 획득해야 한다. 분석 환경이 Android 파일 시스템에 접근할 수 없는 경우에는 백업 데이터를 통해 민감한 정보를 포함하고 있는지 여부를 확인할 수 있다.

자동 백업 조건

  1. 사용자가 기기에 백업 사용을 설정
  2. 마지막 백업 후 24시간 이상 경과
  3. 기기가 유휴(휴식) 상태
  4. 기기가 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

ab to tar

Step 2. "tar" 압축 해제 후, Astrogrep 프로그램을 사용하여 디렉터리 내 유효 데이터 확인

아래와 같이 해당 앱이 사용하였던 내외부 저장소에 대한 데이터가 백업된 것을 확인할 수 있다.

  • 내부 저장소: Preference, SQLite DB 등
  • 외부 저장소: 사진 등

내부 저장소
외부 저장소

Step 3. 외부 저장소에서 사진 파일이 존재하는 것을 확인 후 접근

Astrogrep의 Exclusions Tab
디렉터리 내 사진 파일

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
Comments