[InsecureBankv2] Runtime Manipulation

133210·2021년 8월 30일
0

InsecureBankv2

목록 보기
4/7
post-thumbnail

| Runtime Manipulation

  • 모바일 애플리케이션이 실행 중에 GDB, Cycript 등을 이용하여 동적으로 기능을 변경하는 것
  • 디버깅 과정 중에 런타임 조작이 가능한 것이기 때문에 AndroidManifest.xml의 debuggable 속성이 true로 설정되어 있어야 함

| 디버깅

  • 아래 명령어를 통해 jdb에 사용할 디버깅 포트를 찾음
nox_adb jdwp
  • Insecurebankv2 실행 전과 후 결과가 다름. 어플리케이션이 구동될 때마다 포트는 변경됨.

  • 해당 포트로 포트포워딩 후 JDB 연결
nox_adb forward tcp:11111 jdwp:4767
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=11111

  • drozer로 로그인 과정을 건너뛰고 비밀번호 변경 액티비티로 넘어감
  • exported="true"로 설정되어 있어 다른 액티비티에서 인증 없이 접근이 가능하기 때문
run app.activity.start --component com.android.insecurebankv2 com.android.insecurebankv2.ChangePassword
  • 그러면 Username이 공란으로 표시되며 ChangePassword 액티비티가 표시 됨

  • Username칸에 계정 정보를 넣기 위해 ChangePassword 액티비티가 실행 될 때 브레이크 포인트를 걸어야 함

  • apk 파일 디컴파일 시 나오는 smali 코드 확인

  • line 75에서 oncreate 함수 실행

  • line 85에서 등장하는 uname 변수에 계정 이름이 들어갈 것
  • jdb로 디버깅
set breakpoint com.android.insecurebankv2.ChangePassword.onCreate

  • onCreate에 breakpoint 설정
  • 이후 drozer로 ChangePassword 액티비티 강제 호출

  • smali 코드에서 확인한 것과 같이 line 75에 breakpoint가 걸리는 것을 확인 가능

  • next 명령을 통해 line 86까지 이동한 후 uname 변수에 값 지정
    line 85 동작 이후 uname 변수에 값을 넣을 수 있기 때문

  • 값이 들어간 것을 확인 후 run 명령어를 실행하면 어플리케이션에서 username에 jack이 들어간 것을 확인 가능

  • 이렇게 로그인 하지 않고도 원하는 사용자의 비밀번호를 바꿀 수 있음

  • 비밀번호 변경까지 성공한 log

| 대응방안

  • AndroidManifest.xml의 debuggable 속성을 false로 변경

0개의 댓글