1. 취약한 인증 매커니즘
취약한 인증 매커니즘은
앱에서 발생하는 정상적인 인증 절차를 우회
하여 잘못된 인증으로 접근 권한을 취득하는 취약점을 말한다.🎯 일반적인 취약한 인증 매커니즘 목록은 다음과 같다.
- 적절하지 않은 앱 퍼미션 설정 여부
- 서비스 권한 상승 행위에 대한 통제 여부
- 기능에 대한 제한 또는 우회 금지 여부
- 불필요하거나 사용하지 않는 엑티비티 제거 여부
- 마스터키 취약점 대응 여부
2. 실습
로그인 과정을 거치지 않고 어플리케이션 기능을 쓸 수 있는 취약점에 대하여 실습해보도록 한다.
추가적으로 해당 예제는 로그인 인증 우회와 더불어, Activity를 어플리케이션과 다른 pid를 가진 어플리케이션, 혹은 프로그램에 의해 호출될 수 있는 Activity 호출 취약점을 동시에 가지고 있다.
개요
AndroidManifest.xml에는 Activity, Service등의 속성이 저장되어 있다. 이때
android:exported="true"
로 설정되어 있는 경우 다른 어플리케이션 혹은 엑티비티에서 접근할 수 있다. 엑티비티의 경우 exported="true"
로 설정되어 있다면 다른 엑티비티에서 인증 없이 접근할 수 있다.코드 예시
취약점 분석
해당 xml 파일을 보면, DoLogin 로직은 로그인을 수행하는 엑티비티 같고, PostLogin은 로그인이 수행된 후 수행될 엑티비티로 보인다. adb를 이용하여 PostLogin을 호출해 보도록 한다.
🎯 adb에서 패키지를 호출하는 법은 다음과 같다
adb shell am start [앱이 설치된 주소]/[호출하고 싶은 패키지 주소]
🤪 여기서는 PostLogin을 호출해 보겠다.
adb shell am start com.android.insecurebankv2/.PostLogin
이처럼 Activity의 exported 속성이 true로 되어 있다면, 다른 앱 혹은 adb에서 해당 엑티비티를 호출할 수 있다.
drozer을 이용한 체크
drozer을 이용하면, exported되어있는 activity를 확인하고, 바로 체크할 수 있다.
# exported 되어있는 activity 체크 dz> run app.activity.info -a com.android.insecurebankv2 # 엑티비티 실행 dz> run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.PostLogin
3. 대응방안
3.1 컴포넌트 접근 제어
- 컴포넌트에 대한 접근은 외부에 허락하지 않는 것이 안전하다.
- 특별한 경우가 아니라면
android:exported
속성을 false로 설정하고, 만약 반드시 필요하다면 인텐트 필터로 추가적으로 검증한다.