Android/InsecureBankv2

인시큐어뱅크 앱 취약점 - 취약한 액티비티 컴포넌트

박연준 2023. 7. 3. 21:05

인시큐어뱅크 앱 취약점 - 취약한 액티비티 컴포넌트

취약점 소개

안드로이드 액티비티는 애플리케이션을 구성하는 가장 기본적인 구성 단위 중 하나로 안드로이드 애플리케이션과 사용자 간에 상호 작용에 필요한 기능을 제공한다.

액티비티는 AndroidManifest.xml의 <activity> 요소에 선언하며 하나의 애플리케이션은 하나 이상의 액티비티로 구성된다. 특정 액티비티는 MainActivity, 매니페스트에 메인 액티비티로 선언한다.

MainActivity는 애플리케이션 시작 시 나타나는 화면이며, 애플리케이션 실행 후 조건에 따라 설정된 액티비티가 호출된다.

만약 새로운 액티비티 시작 시 기존에 실행된 액티비티는 시스템에서 스택에 저장되고 새로운 액티비티가 실행된다.

다시 기존에 액티비티를 실행하기 위해 뒤로가기 버튼을 누르면 기존에 저장한 스택에서 다시 불러와 액티비티 화면이 실행된다.

애플리케이션 액티비티가 보안적으로 취약하면 로직을 무시하고 공격자가 필요한 액티비티를 강제로 호출해서 권한이 없는 사용자가 특정 액티비티에 접근해서 권한 없이 특정 기능을 활성화 할 수 있다.

예를 들면 로그인 과정을 수행하지 않고 계좌 이체 화면으로 바로 넘어가 사용할 수있게 되는 취약점이 있다.

취약점 진단

AndroidMainfest.xml 파일에는 <activity>태그로 액티비티가 선언되어 있으며 exported=true가 되어있는 것들이 있다.

intent-filter가 없으면 default는 flase지만 intent-filter가 있다면 default는 true가 된다.

 

adb shell am start -n com.android.insecurebankv2/.ChangePassword 를 명령프롬포트에서 입력하면 패스워드 변경 액티비티가 실행된다. 하지만 username 텍스트 필드가 비활성화 되서 username을 입력할 수 없기에 비밀번호 변경이 불가능하다.

 

adb로는 권한이 없어도 무조건 실행되기 때문에 권한 검사를 할 수 없어서 Drozer로 진단했다.

 

 

드로저를 실행해 다음 명령어를 실행하면 현재 노출된 액티비티 정보 목록을 검색해 볼 수 있다. 액티비티에선 exported 속성이 존재하는데 true로 선언이 되어 있으면 외부에서 실행 가능한 상태로 노출되며 flase로 선언시 외부에서 실행할 수 없다.

맨 마지막 줄에 ChangePassword 액티비티가 있는데 이미 노출되고 있음을 파악할 수 있다.

 

드로저 창에서 run app.activity.start—component com.android.insecurebankv2 com.android.inseucrebankv2.ChangePassword 명령어를 입력하고 실행하면 아까와 같이 ChangePassword 액티비티가 실행된다.

 

드로저 창에서 run app.activity.start—component com.android.insecurebankv2 com.android.insecurebankv2.ChangeaPassword —extra string uname jack 명령어를 입력하면 아이디 값이 들어가 있는 상태로 액티비티가 실행된다.

 

기존의 비밀번호를 변경한다. 패스워드는 대, 소문자, 특수문자가 섞여야 변경되기 때문에 최대한 어렵게 번경한다.

 

비밀번호를 변경하고 로그아웃해서 변경된 패스워드로 다시 로그인해보면 다음과 같은 화면이 잘 나오는 것을 확인할 수 있다.

 

 

대응 방안

Android Manifest.xml을 확인한 후 Android:exported=”true”를 false로 변경한다. exported는 외부 애플리케이션 launch 가능 여부를 나타내는 속성이다. 해당 속성이 true이면 다른 애플리케이션에서 액티비티를 실행할 수 있고 false인 경우엔 동일한 애플리케이션에서만 실행할 수 있거나 같은 사용자 ID를 가진 애플리케이션만 실행이 가능하다.

 

변경 후 다음과 같이 drozer에서 액티비티 권한 목록을 확인해보면 ChangePassword는 없는 것으로 확인된다.