Android

앱 취약점 - 취약한 인증 메커니즘 분석 및 대응 방안

Ate1es 2021. 8. 13. 16:04

취약점 개요

 

취약한 인증은 정상적인 인증 절차를 우회하여 비정상적인 인증으로 접근 권한을 취득하는 취약점을 말한다.

일반적으로 다음과 같은경우 발생합니다.

 

  • 적절하지 않은 앱 퍼미션(권한) 설정 여부
  • 서비스 권한 상승 행위에 대한 통제 여부
  • 기능에 대한 제한 또는 우회 금지 여부
  • 불필요하거나 사용하지 않는 액티비티 제거 여부
  • 인텐트 사용데 대한 안정성 여부
  • 마스터 키 취약점 대응 여부

취약점 분석

 

인시큐어뱅크 앱을 이용하여, 로그인 인증 없이 권한을 우회해 보겠습니다.

AndroidManifest.xml 파일의 일부분

해당 액티비티를 보면 android:exported="true"로 설정이 되어있습니다. 이 경우 다른 액티비티에서 인증 없이 접근이 가능합니다.

 

adb를 사용해 확인해보겠습니다.

 

명령어 : < adb shell am start [앱이 설치된 주소]/[호출하고 싶은 패키지 주소] >

명령어 실행 결과 인텐트 생성됨

위 명령어로 인해 로그인 없이 송금이나 패스워드 변경 같은 메뉴를 선택할 수 있게 액티비티가 호출되었습니다.

 

원래는 로그인을 하면 이 화면이 띄워져야 하지만, 취약한 인증때문에 외부에서 이렇게 바로 접근이 가능하게 되어있습니다.

로그인 없이 로그인 인증 후 화면 출력

ADB 대신 Drozer 를 사용하여 점검할 수 도 있습니다.

 

Drozer 명령어 : < run app.activity.info -a com.android.insecurebankv2 > -- 노출된 액티비티 확인

Drozer 명령어 : < run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.PostLogin > -- 노출된 액티비티 실행

 

취약점 대응 방안

 

이 취약점 또한, 컴포넌트에 접근은 외부에 허락하지 않는 것이 안전합니다. android.exported 설정을 false로 해놓는 것이 권장되는 방안입니다.

설정 변경 후 코드