외로운 Nova의 작업실
insecurebankv2 - 런타임 조작 본문
- 취약점 소개
전에 매니페스트 파일의 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로 해줍니다. 또한 소스코드 난독화를 통해 이러한 취약점을 쉽게 찾을 수 없도록 보호합니다.
'Mobile App Penetesting > Android App Vulnerability' 카테고리의 다른 글
insecurebankv2 - 인자전달값 조작 (0) | 2023.06.01 |
---|---|
insecurebankv2 - 안전하지 않은 HTTP 통신 (0) | 2023.05.29 |
insecurebankv2 - 안드로이드 백업 취약점 (0) | 2023.05.26 |
insecurebankv2 - 애플리케이션 디버깅 기능 (0) | 2023.05.22 |
insecurebankv2 - 안드로이드 키보드 캐시 이슈 (0) | 2023.05.21 |