드로저란?
: MWR InfoSecurity 에서 개발한 모바일 애플리케이션 취약점 진단 프레임워크인
Mercury 의 새로운 업데이트 버전
- 자동화된 테스팅이 가능
- 다양한 시나리오를 통해 취약점 점검이 가능
드로저 설치 과정
$ adb forward tcp:31415 tcp:31415
$ activate py2.7 # 파이썬 2.7 버전 가상환경으로 접근
$ drozer console connect
$ pip install protobuf pyOpenSSL twisted service_identity # 에러 발생시 설치
사용 가능한 드로저 모듈 목록 출력 : list
사용 가능한 드로저 패키지 모듈 목록 출력 : list.package
dz> list.package # 패키지 모듈 목록 출력
dz> list.activity # 액티비티 모듈 목록 출력
dz> list.service # 서비스 모듈 목록 출력
dz> list.broadcast # 브로드캐스트 모듈 목록 출력
dz> list.provider # 프로바이더 모듈 목록 출력
설치된 패키지 목록 확인 : run app.package.list
특정 단어로 설치된 패키지 확인 :
dz> run app.package.list f [string to be searched]
설치된 패키지 기본 정보 확인 : dz> run app.package.info a [package name]
AndroidManifest xml 파일 확인 : dz> run app.package.manifest [package
앱 취약점 자동 분석 : dz> run app.package.attacksurface [package
취약한 액티비티 컴포넌트
취약점 소개:
액티비티는 애플리케이션을 구성하는 기본적인 구성 단위 중 하나
애플리케이션과 사용자 간의 상호작용할 수 있는 화면을 제공
AndroidManifest.xml 의 <activity> 요소에 선언
취약하게 설정되어 있다면 , 인증 로직을 무시하고 필요한 액티비티 강제 호출 가능
권한 없는 액티비티에 접근이 가능
액티비티 확인:
<application> 요소 안에 여러 개의 < 가 포함
exported 속성 값이 true 이면 다른 애플리케이션에서 액티비티 실행 가능
Intent filter 가 포함되면 true 상태로 됨
exported 속성 값이 false 이면 같은 애플리케이션 혹은 같은 사용자 ID 만 실행 가능
식별한 액티비티 실행- ADB:
$ adb shell am start n [package name/component name]
$ adb shell am start n [package name/component name] e <KEY> <VALUE>
$ adb shell am start n com.android.insecurebankv2/. ChangePassword e uname jack
Starting: Intent {cmp =com.android. ChangePassword (has extras)
액티비티 식- Drozer:
dz> run app.activity.info a [package name]
(insecurebank에서는 액티비티 사용을 위한 Permission 이 설정되어 있지 않음)
식별한 액티비티 실행- Drozer:
dz> run app.activity.start component [package name] [component name]
dz> run app.activity.start component [package name] [component name] extra
[type] [key] [value]
대응방안:
Androidmanifest xml 에 선언된 android exported 속성을 false 로 설정
false 로 설정되는 경우 외부의 영향을 받지 않음
false 로 설정된 액티비티를 강제 실행하는 경우 "Permission Denial" 메시지 출력
취약한 콘텐츠 프로바이더 접근
취약점 소개
콘텐츠 프로바이더는 다른 애플리케이션에서 데이터베이스나 파일에 접근 가능하도록 인터페이스 제
공
콘텐츠 프로바이더에 접근하기 위해 URI 와 ContentResolver 필요
애플리케이션은 ContentResolver 를 이용하여 콘텐츠 프로바이더에 접근 가능하며 URI 를 이용
콘텐츠 프로바이더가 외부에 노출된 경우 외부에서 접근하여 데이터를 조회하거나 변경 가능
콘텐츠 프로바이더 확인
<provider
android:name=".TrackUserContentProvider"
android:authorities="com.android.insecurebankv2.TrackUserContentProvider"
android:exported="true" >
</provider>
콘텐츠 프로바이더 취약점 확인- ADB: $ adb shell content query uri [URI]
- content:// 콘텐츠 URI로 식별
- user_dictionary 제공업체의 권한
- words의 테이블 경로: content://user_dictionary/words
콘텐츠 프로바이더 취약점 확인- Drozer:
dz> run app.package.attacksurface [package
dz> run app.provider.info -a [package name]
dz> run scanner.provider.finduris -a [package name]
dz> run app.provider.query [uri]
대응방안
Androidmanifest xml 에 선언된 android exported 속성을 false 로 설정
false 로 설정되는 경우 외부의 영향을 받지 않음
False 로 설정된 콘텐츠 프로바이더에 강제로 요청하는 경우 "Permission Denial" 메시지 출력
취약한 브로드캐스트 리시버
취약점 소개:
브로드캐스트 리시버는 디바이스에서 발생하는 이벤트 신호를 받아 처리하는 역할
애플리케이션의 브로드캐스트 리시버에서 신호를 받아 정해진 작업 수행
Androidmanifest.xml 의 <receiver></receiver> 항목에 정의
공격자는 임의의 브로드캐스트 신호를 생성하여 사용자가 받는 알림 메시지 , 전화 등 을 가로 채거나
특정 상황에서 발생하는 작업을 우회하여 수행 가능
브로드캐스트 리시버 확인:
(Androidmanifest.xml 에 선언된 브로드캐스트 리시버 확인)
브로드캐스트 리시버 클래스 : MyBroadCastReceiver
브로드캐스트 이름 : theBroadcast
브로드캐스트 생성- ADB:
$ adb shell am broadcast a [action] n [package name/component name]
$ adb shell am broadcast a [action] n [package name/component name] -e <KEY> <VALUE>
브로드캐스트 생성- Drozer:
dz> run app.package.attacksurface [package name]
dz> run app.broadcast.info a [package name]
dz> run app.broadcast.send component component [package name]
[component name] extra [type] [key] [value]
대응방안
Androidmanifest.xml 에 선언된 브로드캐스트 리시버의 android:exported 항목을 false 로 설정
선언된 각각의 브로드캐스트 리시버에 별도의 권한 (Permission) 부여
취약한 인증 메커니즘
취약점 소개
정상적인 인증 절차를 우회하여 비정상적으로 인증 권한 획득
OWASP Mobile Top 10 2016 M4 에 해당
로그인 인증 우회
AndroidManifest.xml 의 취약한 액티비티를 통해 인증 우회
<application> 요소 안에 여러 개의 <activity> 확인
exported 속성 값 확인
로그인 인증 우회- ADB:
$ adb shell am start -n [package name/component name]
로그인 인증 우회- Drozer:
dz> run app.activity.info
dz> run app.activity.info -filter bank
dz> run app.activity.info -filter bank
dz> run app.activity.info -a [package name]
dz> run app.activity.start --component [package name] [component name]
대응방안
Androidmanifest.xml 에 선언된 android:exported 속성을 false 로 설정
false 로 설정된 경우 외부의 영향을 받지 않아 같은 UID 를 가진 앱 컴포넌트만 접근 가능
true 로 설정해야 하는 경우 <intent filter> 에서 별도 권한 설정
인증 우회의 경우 다양한 시나리오가 존재하므로 개발시 고려하여 적용
false 로 설정된 액티비티를 강제 실행하는 경우 "Permission 메시지 출력
최신 동향
- Appie 활용을 통한 앱 취약점 진단
- Inspeckage 활용을 통한 앱 취약점 진단
- 앱 서비스 자동화분석 MobSF
- AndroBugs 활용을 통한 앱 자동화 분석
- ostorlab 활용을 통한 앱 자동화 진단
'4-1. 2024-2 심화 스터디 > 안드로이드 모의 해킹' 카테고리의 다른 글
[2024.11.9] 프리다(Frida)를 이용한 안드로이드 앱 모의해킹 (0) | 2024.11.15 |
---|---|
[2024.11.2] 프리다(Frida)를 이용한 안드로이드 앱 모의해킹 (0) | 2024.11.02 |
[2024.10.25] 프리다(Frida)를 이용한 안드로이드 앱 모의해킹 (0) | 2024.10.28 |
[2024.09.21] 안드로이드 취약점 진단과 시큐어 코딩 (0) | 2024.09.26 |
[2024.09.14] 안드로이드 취약점 진단과 시큐어코딩 (0) | 2024.09.20 |