티스토리 뷰
취약점 소개
안드로이드 시스템은 애플리케이션의 데이터를 백업할 수 있는 기능을 제공하는데,
처음에는 구글 클라우드를 통한 백업만 가능했으나
아이스크림 샌드위치(4.0) 버전으로 업데이트 이후 사용자 로컬 PC에 데이터를 저장할 수 있게 되었다.
이를 로컬 백업 또는 전체 백업이라 하는데,
사용자는 전체 백업을 통해서 apk 파일, 데이터, 파일 등을 USB를 통해 사용자 PC에 저장할 수 있다.
클라우드 백업과 전체 백업의 차이는 다음과 같다.
🤍 클라우드 백업을 했을 때는 데이터가 클라우드에서 관리되므로
외부 유출이 적고 직접 관리하지 않아도 되어 다소 안전하지만,
🖤 전체 백업은 사용자가 직접 백업을 진행하므로 데이터 유출에 대한 위험이 있다.
만약 이러한 과정에서 원치 않은 데이터나 파일이 백업된다면 보안 위협이 될 수 있다.
데이터를 강제로 백업했을 때 시스템에 위협이 될 수 있는 공격을 수행해본다.
취약점 진단 수행
안드로이드는 AndroidManifest.xml 파일에 포함된
⭐ allowBackup 속성을 따라 백업하게 되는데,
값이 없거나 false로 설정되어 있다면 전체 백업이 불가하다.
이 값이 true일 때만 백업이 가능하고, 기본 값은 백업을 하지 않는 것이다.
먼저 인시큐어뱅크 앱의 매니페스트 파일(AndroidManifest.xml)을 살펴본다.
allowBackup 속성
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.Holo.Light.DarkActionBar">
allowBackup 속성이 true로 설정되어 있어, 전체 백업이 가능하다고 판단된다.
adb backup 명령어
전체 백업은 안드로이드 SDK의 ADB 명령을 수행하여 할 수 있다.
기본적으로는 💻 adb backup
명령어로 수행하며,[-f]
, [-apk | -noapk]
, [-obb | -noobb]
, [-shared | -noshared]
, [-all]
옵션 등을 결합하여 수행할 수 있다.
각 옵션들의 내용은 다음과 같다.
우리는 인시큐어뱅크 앱에 대해서만 백업을 수행해볼 것이므로
💻 adb backup com.android.insecurebankv2 -f insecurebankv2.ab 명령어로
인시큐어뱅크 앱에 대한 백업을 수행한다.
백업 수행 과정
백업 수행을 명령하고 나면,
Now unlock your device and confirm the backup operation
이라는 메시지가 뜨며 NOX 장치에 아래와 같은 입력창이 뜬다.
비밀번호를 설정하고 백업 버튼을 누르면
쉘에 위치했던 디렉터리에 백업 파일이 설정한 파일명대로 생성된다.
ABP(ABE) 사용
insecurebankv2.ab 파일은 deflate 알고리즘으로 압축되어
⚠ 일반적인 방법으로 압축 해제가 불가하므로 ABP(Android Backup Processor) 를 사용한다.
ABE의 abp.jar가 있는 디렉터리로 이동한뒤
💻 java -jar abp.jar unpack insecurebankv2.ab insecurebankv2.tar 명령을 수행하면,
파일 정보가 나타나고 백업 시 설정했던 비밀번호를 입력해야 한다.
아래 그림처럼 insecurebankv2.ab 파일이 insecurebankv2.tar 파일로 잘 추출되었다.
🟫 (여기서, abe의 버전이 업데이트되면서 실행이 잘 되지 않는 경우가 많아
진단에 수행했던 프로그램을 첨부하오니 아래 프로그램을 쓰시면 된다.)
추출 결과를 확인해보면,_manifest
파일과 db 디렉터리의 데이터베이스 파일,
sp 폴더의 공유 환경설정 파일이 포함되어 있다.
이 파일들은 현재 쉘에서 위치한 디렉터리의 apps 디렉터리에 추출되었다.
리스트로 저장
위 파일들의 목록을
💻 tar -tf insecurebankv2.tar > insecurebankv2.list 명령어를 통해 리스트로 저장해두자.
앞서 우리는 3.2 로컬 암호화 이슈(링크)의
com.android.insecurebankv2_preferences.xml 파일에서
서버 접속 정보를 확인할 수 있었다.
전체 백업을 통해 동일 파일이 백업된 것을 확인할 수 있었는데,
이 파일의 변조를 통해 공격자가 만든 서버에 접속하도록 하는 공격을 수행해보자.
파일 변조
파일을 변조한 후, insecurebankv2.list 파일을 활용하여 역순으로 복원한다.
즉, 변조한 파일을 포함하여 백업 파일을 복원하는 것이다.
먼저, 💻 star -c -v -f insecurebankv2_new.tar -no-dirslash list=insecurebankv2.list 명령어로
insecurebankv2.list에 있는 파일만 새로 생성할 tar 아카이브에 포함한다.
이후, insecurebankv2_new.tar 파일이 생성되고,
이를 다시 deflate 알고리즘으로 압축하면 된다.
이 파일을 💻 adb restore insecurebankv2_new.ab 명령어로 복원하고
애플리케이션 로그인을 수행하면 변조된 서버 ip로 접속하게 된다.
이렇게 되면 변조된 서버로 정보를 보내 사용자 정보,
암호화되지 않은 중요한 정보 등을 탈취할 수도 있는 것이다.
대응 방안
안드로이드 전체 백업 기능을 사용하려면
AndroidManifest.xml 파일의 allowBackup 속성을 true로 설정해야 하는데,
백업 기능을 제한하기 위해 false로 설정한다.
또는 allowBackup 속성을 아예 삭제한다.
<application>
android:allowBackup="false"
...
백업을 제한한 후 백업 파일 생성을 시도해본다.
아래와 같이 백업이 정상적으로 이루어졌을 때의 파일인
insecurebankv2.ab의 용량 10KB와 다르게,
⛔ 백업이 제한된 설정에서 백업을 시도했을 때의
insecurebankv2_false.ab 파일의 용량이 0KB로 나타난다.
즉, 비어있는 파일로, 백업에 실패한 것이다.
본 취약점 또한 개발 과정에서 간단한 설정으로 공격을 예방할 수 있다.
하지만 사용자가 파일 저장소나 자신의 기기에 대해
이중 보안을 적용하는 것도 중요하다고 사료된다.
'WEB&APP 진단 > Android' 카테고리의 다른 글
3.4 안드로이드 인시큐어뱅크 앱 취약점 - 중요 정보 하드코딩 취약점 (0) | 2022.09.15 |
---|---|
3.2 안드로이드 인시큐어뱅크 앱 취약점 - 로컬 암호화 취약점 (0) | 2022.09.02 |
3.1 안드로이드 인시큐어뱅크 앱 취약점 - 브로드캐스트 리시버 결함 (0) | 2022.08.15 |
2.2 취약점 진단 및 분석 도구 실습 - ADB(Android Debug Bridge) 기능 활용 (0) | 2022.04.08 |
2.1 취약점 진단 및 분석 도구 실습 - ADB(Android Debug Bridge) 개요와 기본 사용법 (0) | 2022.04.06 |
- Thanks for comming.
- 오늘은
- 명이 방문했어요
- 어제는
- 명이 방문했어요