Security/Mobile
[Android] intent 강제 호출(with 안드로이드 4대 컴포넌트)
z_9oo
2021. 11. 3. 12:43
앱에서 컴포넌트(Activity, Service, Broadcast Receiver, Content Provider)를
사용하기 위해서는 Manifest 파일 내에 각각 본문의 태그를 통해 선언해야 한다.
컴포넌트들은 각각 인텐트에 의해 활성화되며,
앱이 인텐트를 시스템에 발행시키면 시스템은 각 앱의 Manifest 파일에 선언된 intent-filter 에 기초하여
처리할 수 있는 인텐트를 컴포넌트를 찾게된다.
1. <activity> : Activity
• 주요 특징
- 뷰를 사용해 정보를 보여주고 사용자 액션에 반응하는 그래픽 사용자 인터페이스를 형성함
- android:name 속성으로 클래스 이름을 지정함
• 취약점개요
로직을 무시하고 공격자가 필요한 Activity를 강제로 호출하게 되면, 권한 없이 특정 기능을 활성화 할 수 있게됨
ex) 로그인 과정 없이 계좌이체 UI 접근
• 강제 호출 명령어
am start -n "패키지명/액티비티 경로명"
예) adb shell am start -n com.packege.example/ .DoTransfer
2. <service> : Service
• 주요 특징
- 화면에 보이지 않은 채 실행되며, 데이터 소스와 화면에 보이는 액티비티들을 업데이트하고 알림을 생성함
• 취약점개요
am start service -n "패키지명/서비스경로명"
예) am startservice -n com.example.echo/com.example.echo.echoservice
3. <receiver> : Broadcast Receiver
• 주요 특징
- 안드로이드에 존재하는 이벤트들이 발생하면 각 객체들로 적절한 브로드캐스트 메시지를 보내게 됨
- 이때 수신되는 인텐트에 반응하여 *사전에 정의해 놓은 작업을 수행해주는 역할을 함
- 인증코드 입력, 사진캡쳐
- receiver 태그를 추가하면 애플리케이션을 띄우지 않고서도 브로드 캐스트 수신자를 등록할 수 있음
• 취약점개요
adb shell am broadcast -a "브로드캐스트명"
예) 브로드캐스트 리시버 안에 있는 기능이 비밀번호 변경 기능이라면, 원래는 특정 앱만 사용해서 intent를 보낸 후 브로드캐스트리시버로 보내야 하지만 다른 앱이나 다른 사람이 intent를 보내어 브로드캐스트 리시버가 사용되게 할 수 있음
• 명령어
1) 브로드 캐스트 생성
adb shell am broadcast -a "브로드캐스트명"
ex) am broadcast -a theBroadcast -n com.packege.example/ .MyBroadCastReceiver
예) adb shell am start -n com.packege.example/ .ChangePassword
am start -n "패키지명/액티비티 경로명"
4. <provider> : Content Provider
콘텐츠 공급자에 대해 사용됨
adb shell am broadcast -a "브로드캐스트명"
예) adb shell am broadcast -a android.accounts.LOGIN_ACCOUNTS_CHANGED
💡 TIP!
Drozer를 쓰면 앱의 퍼미션 확인 및 간단한 정보 수집을 하는데 유리하다!
(드로저는 python2 버전을 사용해야함)