Broadcast Receiver 란?
Broadcast Receiver(브로드캐스트 리시버) 는 안드로이드에서 이벤트가 발생하면 보내는 브로드캐스트 신호를 받아 처리하는 역할을 수행한다. 이를 악용하면 공격자는 임의의 브로드캐스트를 생성하여 원하는 정보를 가로채거나 조작할 수 있다. Broadcast Receiver 는 AndroidManifast.xml 의 <receiver> 항목에 선언된다.
취약점 테스트용 앱인 Insecurebankv2 를 이용하여 실습해보자!
취약점 진단 (drozer)
인시큐어뱅크 앱을 디컴파일하면 AndroidManifest.xml 파일을 볼 수 있다.
위와 같이 리시버가 선언된 것을 볼 수 있고, exported 값이 true 로 되어 있어 외부 애플리케이션으로부터 intent 를 받을 수 있다. 브로드캐스트 신호를 받으면 MyBroadCastReceiver 라는 메서드에 설정된 작업을 수행할 것이다. MyBroadCastReceiver.class 를 보자.
브로드캐스트가 발생하면 onReceive() 에 정의된 것처럼 입력한 전화번호에 패스워드 변경 정보를 문자 메시지로 전송한다. 만약 전화번호 입력값이 없으면 "Phone number is null" 를 출력한다.
이제 drozer 를 이용하여 임의의 브로드캐스트를 생성하여 해당 애플리케이션으로 요청해보자.
dz> run app.broadcast.send --component com.android.insecurebankv2 com.android.insecurebankv2.MyBroadCastReceiver
그리고 나서 logcat 을 입력하여 확인해보면 아래와 같이 "Phone number is null" 이라는 메시지가 출력된 것을 볼 수 있다.
phone number 입력값이 없었기 때문이다. 이번에는 phone number 와 newpass 정보를 포함하여 브로드캐스트를 생성해보자.
dz> run app.broadcast.send --component com.android.insecurebankv2 com.android.insecurebankv2.MyBroadCastReceiver --extra string phonenumber 1234 --extra string newpass abcd
마찬가지로 logcat 을 입력하여 확인해보면 아래와 같이 기존 비밀번호 포함된 문자 메시지 내용을 볼 수 있다.
대응 방안
1. AndroidManifest.xml 파일에서 <receiver> 항목의 exported 값을 false 로 설정한다.
2. intent-filter 에 별도의 권한을 줘서 접근을 제한한다.
'모바일 앱 취약점' 카테고리의 다른 글
[모바일 앱 취약점] 안전하지 않은 Content Provider 접근 (0) | 2020.04.22 |
---|