AndroidManifest파일 분석
AndroidManifest.xml이란 애플리케이션에 대한 필수적인 정보들을 안드로이드 System에 알려주는 설정파일이라고 생각하면 된다. AndroidManifest.xml파일 안에는 애플리케이션 component(Activity, Service, intent, content provider, brodcast Receivers)에 대한 노드를 포함하고 있다. apk파일 압축을 해제하면 AndroidManifest.xml 파일을 확인할 수 있다.
적절한 앱 퍼미션 설정 여부
1. 파일에 명시되어 있는 권한과 실제 App의 기능상 필요한 권한 비교
: APK 파일 내 AndroidManifest.xml 파일에 App이 사용하는 권한이 <user-permission>으로 명시되어 있다.
파일에 명시되어 있는 권한에 위험도가 높은 퍼미션을 사용할 경우 취약한 것으로 식별한다.
위험도가 높은 권한
안드로이드 6.0 Version이후부터 앱에서 필요한 권한이 존재할 때 사용자로부터 권한을 받게되었다.(이전에는 설치할 때 필요한 권한을 요구하는 로직이였음)
ACCESS_COARSE_LOCATION | 네트워크(Wi-Fi, 3G, 4G등)을 이용하여 단말기 위치를 식별한다. |
ACCESS_FINE_LOCATION | GPS와 네트워크를 이용한다. 때문에 ACCESS_FINE_LOCATION을 사용하면 더 정확한 위치를 알 수 있다. |
AUTHENTICATE_ACCOUNTS | 앱이 계정 생성, 암호 가져오기 및 설정을 포함하여 AccountManager의 계정 인증자의 기능을 사용할 수 있게한다. |
BLUETOOTH | 페어링 된 기기와 데이터를 송수신할 때 필요하다. |
BLUETOOTH_ADMIN | 환경설정에서 해주어야 하는 블루투스 관련 작업을 앱에서 수행할 때 필요하다. |
CALL_PHONE | 앱에서 전화걸기 권한을 허용한다. |
CAMERA | 앱에서 카메라 기능을 허용한다. |
Change_configuration | 앱이 언어 또는 전체 글꼴 크기와 같은 현재 구성을 변경할 수 있도록 허용합니다. |
Change_Network_state | 앱이 네트워크 연결 상태를 변경할 수 있도록 한다. |
Change_Wifi_Multicast_state | 앱이 Wi-Fi 멀티캐스트 모드로 들어갈 수 있도록 한다. |
Change_Wifi_State | 앱이 Wi-Fi 연결 상태를 변경할 수 있도록 한다. |
ACCOUNT_MANAGER | 앱이 AccountAuthenticators(계정인증자)를 호출하도록 허용한다. |
Modify_Audio_Settings | 앱이 전체 오디오 설정을 수정할 수 있도록 한다. |
Modify_Phone_State | 앱이 전원 켜기, mmi등 전화 상태를 수정할 수 있다. |
READ_CALENDAR | 앱이 사용자의 캘린더 데이터를 읽을 수 있도록 합니다. |
READ_CONTACTS | 앱이 사용자의 연락처 데이터를 읽을 수 있도록 허용합니다. |
READ_LOGS | 앱이 사용자의 통화 기록을 읽을 수 있도록 합니다. |
READ_PHONE_STATE | 앱이 현재 셀룰러 네트워크 정보, 진행 중인 통화 상태 및 PhoneAccount 장치에 등록된 모든 목록을 포함하여 전화 상태에 대한 읽기 전용 액세스를 허용합니다. |
READ_SMS | 앱이 SMS 메시지를 읽을 수 있도록 허용합니다. |
READ_EXTERNAL_STORAGE | 앱이 외부 저장소에서 읽을 수 있도록 허용합니다. |
RECEIVE_MMS | 앱이 수신 MMS 메시지를 모니터링하도록 허용합니다. |
RECEIVE_SMS | 앱이 SMS 메시지를 수신하도록 허용합니다. |
RECORD_AUDIO | 앱이 오디오를 녹음하도록 허용합니다. |
SEND_SMS | 앱이 SMS 메시지를 보낼 수 있도록 허용합니다. |
WRITE_APN_SETTINGS | 앱이 apn 설정을 작성하고 사용자 및 비밀번호와 같은 기존 apn 설정의 민감한 필드를 읽을 수 있도록 합니다. |
WRITE_CALENDAR | 앱이 사용자의 캘린더 데이터를 쓸 수 있도록 허용합니다. |
WRITE_CONTACTS | 앱이 사용자의 연락처 데이터를 쓸 수 있도록 합니다. |
WRITE_EXTERNAL_STORAGE | 앱이 외부 저장소에 쓸 수 있도록 합니다. |
WRITE_SETTINGS | 앱이 시스템 설정을 읽거나 쓸 수 있도록 합니다. |
WRITE_SYNC_SETTINGS | 앱이 동기화 설정을 쓸 수 있도록 허용합니다. |
https://developer.android.com/reference/android/Manifest.permission
위의 Site를 참조할 경우 현재 지원하는 User Pemission에 대한 설정을 볼 수 있다.
Android 4대 컴포넌트(BroadCast Receiver)
BroadCastReceiver는 4대 컴포넌트 중에 하나이다.
BroadCastReceiver의 역할은 단말기 안에서 이루어지는 수많은 일들을 대신해서 알려준다.
예를들어 배터리부족, SMS문자메시지, 전화가온다거나 하는 일들을 방송알림 해준다.
System이 보내고 앱이 받는 경우가 일반적이나, 앱이 앱에게 보내는 것도 가능하다. 즉, 앱간 통신수단으로 사용할 수 있다.
BroadCastReceiver를 구현하기 위해 2가지 방법이 존재한다. 코드상에서 BroadCastReceiver를 등록하는 동적인방법과 Manifest.xml에 <Receiver></Receiver>의 형태로 등록하는 정적인 방법이 존재한다.
1. 정적으로 Receiver 구현하기
Manifest.xml에 우선 BroadCastReceiver를 등록한다.
폴더 구조를 맞춰 작성한 후 .receiver.MyBroadCastReceiver 형식으로 name을 선언한다. 또한 BroadCastReceiver가 Action이벤트를 받도록 <Action> 태그를 등록한다.
그 후 BroadCastReceiver를 상속받아 onReceive()메서드를 오버라이딩한다.
onReceive()메서드는 intent-filter를 통해 걸러진 intent를 받아들이는 곳이다.
걸러진 intent의 Action값을 토스트로 띄우도록 코드를 짠다.
그 후 sendBroadCast를 인위적으로 발생시켜 해당 intent가 intent필터를 걸쳐 잘 걸러져서 BroadCastReceiver가 받는지 확인
2. 동적으로 Receiver 구현
'App 진단' 카테고리의 다른 글
안드로이드 진단 - NOX Setting (0) | 2021.10.26 |
---|---|
안드로이드 진단 - Activity 컴포넌트 취약점 (0) | 2021.10.25 |
안드로이드 진단 - firebase_crashlytics 에러 메시지 (0) | 2021.10.25 |
안드로이드 진단 - 루팅 우회 (Google SafetyNet) (0) | 2021.10.25 |
안드로이드 진단 - 난독화 솔루션에 대하여... (0) | 2021.10.25 |