Android/InsecureBankv2

인시큐어뱅크 앱 취약점 - 런타임 조작

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

인시큐어뱅크 앱 취약점 - 런타임 조작

취약점 소개

런타임 조작 취약점이란 앱이 실행되는 도중 메모리상에 악의적인 행동을 하는 취약점이다.

취약점 진단

모든 기능이 메모리상에 올라가야 런타임 조작이 가능하기 떄문에 jdb에 사용할 인시큐어뱅크 앱 디버깅 포트 번호를 확인한다.

 

인시큐어뱅크 앱을 실행 후 앱 디버깅 포트 번호를 확인하면 다음과 같이 4053 이라는 디버깅 포트가 나왔다.

 

adb를 통해 디버깅 포트를 로컬 포트로 포트포워딩 해준 후 jdb 명령어를 통해 로컬 디버깅 포트로 연결한다.

 

로그인을 하지 않고 패스워드를 변경하기 위해서는 ChangePassword 액티비티를 컴포넌트 취약점을 사용하여 강제로 실행시켜야 한다.

nox_adb shell am start -n com.android.insecurebankv2/.ChangePassword 명령어를 입력한다.

 

입력하면 인시큐어뱅크 앱이 패스워드 변경 페이지로 이동된 것을 확인할 수 있다.

비정상적으로 실행한 페이지이기 때문에 임의로 유저네임에 입력이 불가하다.

 

클래스가 시작할 때는 onCreate 함수를 통해 실행되기 떄문에 정확한 위치를 알기 위하여 디컴파일 했던 ChangePassword.smail 파일을 확인했다.

 

다음과 같이 smail 코드의 86번째 줄을 브레이크 포인터로 설정한 후 this.uname을 jack으로 메모리 조작을 한다.

 

그럼 인시큐어뱅크 앱에서 다음과 같이 uname이 jack이라고 잘 변경된 것을 확인할 수 있다.

따라서 이렇게 런타임 조작 취약점을 통해서 앱이 실행되는 도중 메모리 조작을 해보았다.

 

 

대응 방안

AndroidManifest.xml 파일의 디버깅 관련 옵션을 false로 설정한다.