본문 바로가기

해킹-보안/모바일

브로드캐스트 리시버 취약점

반응형

설명


브로드캐스트 리시버는 디바이스에서 발생하는 이벤트 신호를 받아 처리하는 역할을 한다.
대표적으로 배터리 부족, 부팅 완료, 인증코드 입력 메시지 등이 있다.
배터리 부족 메시지는 배터리가 부족하면 모든 앱에 존재하는 브로드캐스트 리시버에게 배터리가 부족하다는 메시지를 

전송한다. 그리고 각 앱의 브로드캐스트 리시버는 수신한 메시지를 그대로 사용자에게 전송하여 사용자는 최종적으로 

배터리가 부족하다는 알림을 받게 된다. 이때 공격자는 임의의 브로드캐스트 신호를 생성하여 사용자가 받는 알림

(메시지, 전화 등)을 가로 채거나, 특정 상황에서 발생하는 작업을 우회하여 수행할 수 있다.



취약점 진단


브로드캐스트 리시버는 Androidmanifest.xml 파일에 <receiver> 요소로 정의된다.


MyBroadCastReceiver 메소드는 MyBroadCastReceiver.class 파일에 정의되어 있으며
비밀번호 업데이트를 알리는 SMS를 보내는 기능을 한다.



adb를 이용해 브로드캐스트를 임의로 생성하고 logcat으로 확인한다.
> nox_adb shell am broadcast -a theBroadcast -n com.android.insecurebankv2/.MyBroadCastReceiver



파라미터를 입력하지 않아 "Phone number is null" 메시지가 기록되므로 adb에서 파라미터를 포함하여
정상적으로 메시지를 발송한 뒤 로그캣으로 확인한다.
> nox_adb shell am broadcast -a theBroadcast -n com.android.insecurebankv2/.MyBroadCastReceiver -e phonenumber 1234 -e newpass test



로그캣 확인 결과, 기존에 사용하던 비밀번호가 평문으로 노출되는 것을 알 수 있다.


대응방안


Androidmanifest.xml 파일에 선언된 브로드캐스트 리시버의 android:exported 항목을 "false"로 설정한다.
선언된 각각의 브로드캐스트 리시버에 별도의 권한을 부여한다.
<receiver android:name="com.android.insecurebankv2.MyBroadCastReceiver"
android:exported="false">
<intent-filter>
action android:name="theBroadcast"/>
</intent-filter>
</receiver>



반응형