외로운 Nova의 작업실

insecurebankv2 - 런타임 조작 본문

Mobile App Penetesting/Android App Vulnerability

insecurebankv2 - 런타임 조작

Nova_ 2023. 5. 27. 19:05

- 취약점 소개

전에 매니페스트 파일의 debuggable 속성을 true로 하면 안됨을 배웠습니다. 만약 true로 하게되면 디버깅을 통해 악의적인 행동을 할 수 있습니다. 이번에는 디버깅을 통해 런타임 조작이 어떻게 이루어지는지 알아보겠습니다. 악의적인 행동은 로그인 없이 dinesh 유저의 패스워드를 변경하는 것입니다.

 

- 취약점 진단

먼저, 녹스플레이어에서 인시큐어뱅크 앱이 사용하고 있는 포트를 알아냅니다.

adb jdwp

저는 4202 포트입니다. 이포트를 포트포워딩해줍니다.

adb forward tcp:1111 jdwp:4202

이제 jdb를 이 포트에 붙여줍니다.

jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=1111

그러면 디버깅할 준비가 되었습니다. 먼저, 보통 OnCreate()함수로 액티비티가 시작하기때문에 OnCreate()함수에 브레이크포인트를 걸어줍니다.

stop in com.android.insecurebankv2.ChangePassword.onCreate

그리고 ChangePassword 액티비티를 실행시켜줍니다.

adb shell am start -n com.android.insecurebankv2/.ChangePassword

라인이 75번인데, 이를 직접 확인해보기위해 smali 코드를 봐보겠습니다.

실제 75번라인에 onCreate()함수를 실행시키는 코드가 있습니다. .ChangePassword액티비티는 uname 인텐트로 로그인했던 유저의 아이디를 받아옵니다. uname을 검색해보겠습니다.

85번줄에서 인텐트로 받아오는 것을 확인할 수 있습니다. 85번줄까지 실행시키고 인텐트로 받은 uname을 변조시켜보겠습니다.

위 명령어로 변조를 시킨후 run 명령어를 통해 액티비티를 실행시켜줍니다.

그러면 로그인없이 dinesh 유저이름이 들어가게도비니다. 이제 Jack@123$으로 변경해보겠습니다.

이후 dinesh로 Jack@123$비밀번호를 사용해서 로그인하면 로그인이 잘됩니다.

 

- 취약점 대응 방안

매니페스트 파일에서 debuggable 속성을 false로 해줍니다. 또한 소스코드 난독화를 통해 이러한 취약점을 쉽게 찾을 수 없도록 보호합니다. 

Comments