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 b
roadcast -a theBroadcast -n com.packege.example/ .MyBroadCastReceiver


am start -n "패키지명/액티비티 경로명"

  예) adb shell am start -n com.packege.example/ .ChangePassword

 

4. <provider> : Content Provider

콘텐츠 공급자에 대해 사용됨
adb shell am broadcast -a "브로드캐스트명"
예) adb shell am broadcast -a android.accounts.LOGIN_ACCOUNTS_CHANGED

 


 

💡 TIP!

   Drozer를 쓰면 앱의 퍼미션 확인 및 간단한 정보 수집을 하는데 유리하다!

   (드로저는 python2 버전을 사용해야함)