ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • InsecureBankv2 분석 및 Hooking
    Hacking/Android 2020. 1. 8. 23:28

    이전에 풀었던 UnCrackable 문제보다는 쉬운 것 같지만

    연습이나 분석으로 굉장히 잘 알려진 InsecureBankv2.apk를 

    분석과 Hooking 해보려고 한다. KISA 교육가서 알게된 어플인데

    이런게 많을지도 모르겠지만 여튼 나름 재미있게 공부한 것 같다.



    클릭 : 우선 이전에 포스팅 했던 것처럼 디컴파일 등 필요한 사전 절차를 진행하자




    필요한 절차가 모두 끝났다면 이번 포스팅에서는 Nox 에뮬레이터를 이용해서

    분석 및 Hooking을 진행해보도록 하겠다. 환경은 Mac OS이다. 

    (환경은 알아서 본인에게 맞게!)





    참   고 *

    Nox를 Mac Book에서 사용할 때 종료되는 경우가 있다고 한다. 

    설치 후, VirtualBox Update를 권유하는 창이 뜨면 절대 하지말라고 한다.

    진행하면 자꾸 꺼진다는데 여튼 나는 안그래서 정확히 어떤 현상인지는 모르겠다.






    Nox를 다 설치했으면 adb를 이용해서 Nox에 붙자. 

    adb connect 127.0.0.1:62001




    이전 포스팅의 절차대로 frida-server도 올려주고 실행해주자!

    그리고 InsecureBankv2.apk도 Nox에 설치해주도록 하자.

    링크 : https://github.com/dineshshetty/Android-InsecureBankv2





    설치가 완료되었으면 이번에는 InsecureBankv2 Server를 돌려주어야한다.

    Local에서 돌려주면 된다. AndroidLabServer에가면 app.py가 있다.

    그걸 그냥 실행해주면 간단하게 진행할 수 있다.




    그럼 이제 모든 준비가 끝났다. 정말 쉽게 환경이 구축되었다:)

    ( 설명 하지 않은 내용들은 이전 포스팅 참고!! )





    앱을 실행시켜보자!!

    메인화면이다. 사용자로부터 아이디와 패스워드를 입력받고있다.

    우리가 셋팅되어있는 InsecureBankv2 서버를 실행시킨 이유는 바로 로그인 같이

    사용자의 정보가 저장된 데이터베이스 환경을 이용하기 위해서다.




    서버와의 셋팅을 마무리해야하기 때문에 Preferences 클릭




    Local에서 Server를 실행시키고 있기 때문에 Local ip를 넣어준다.





    그 뒤 로그인 화면에서 로그인을 하기위해





    아무 값이나 입력해보면 서버에서 확인할 수 있다.




    해당 화면에 대한 코드를 찾아서 분석해보자.

    가장 간단한 방법은 ID와 Password에 있는 Text를

    따라가는 것이다. "Username"을 이용해서 jd-gui에서 검색해보자.





    누가봐도 Login화면이다.. DoLogin.class를 살펴보도록하자.





    우리가 찾던 문자열을 발견할 수 있었다.. 

    postData( )는 http 프로토콜을 이용하여 post 방식으로 Data를 전달하고 있었는데

    두 가지로 진행되는 Post방식이 있었다. 바로 login과 devlogin이다. 패킷을 통해서 확인해보자.

    http를 이용하기 때문에 평문통신일 것이고 아주 쉽게 ID와 Passwd를 탈취할 수 있을 것이다.



    ID : "hello" / Passwd : "byebye"를 입력하고 로그인을 하면 평문으로 데이터가 보이는 것을 확인할 수 있다.

    또한 위의 코드에서 볼 수 있듯이 POST /login으로 진행되는 것을 확인할 수 있다.




    계속해서 찬찬히 코드를 보도록 하자. 이게 웬Girl ?? 숨겨진(?) ID가 있었다.

    개발자가 쉽게 이용하기위해 남겨둔 계정(?)이 코드에 그대로 박혀있었다.




    바로 "devadmin"이다. ID만 입력해도 로그인이 되도록 구현되어 있다는 것을

    확인할 수 있었다. devadmin으로 한 번 로그인 해보자. devadmin을 이용하면

    Password 없이도 로그인이 가능하며 POST /devlogin 형태로 진행된 것도 확인할 수 있었다.





    로그인하는 로직을 살짝만 살펴보자면 LoginActivity에서 performlogin( )이 호출된다.


    < LoginActivitiy의 onCreate( ) >



    < performlogin ( ) >

    Intent를 우리가 이동할 Activity로 (DoLogin.class) 정의한 뒤에

    Intent.putExtra( )를 이용해서 우리가 ID와 Password에 입력한 String을 Value로

    "passed_username"와 "passed_pasword"를 Key로 넘겨진다는 것을 알 수 있었다.


    그 이후에는 아까 설명한 것처럼 서버에 POST로 요청을 진행한다는 것을 확인할 수 있었다.


    * Intent는 다른 Activity를 실행시킬 때 사용하고 데이터를

    해당 Activity로 넘겨주고 싶을 때 putExtra( key, value )를 사용해서 값을 넘기며

    startActivitiy( Intent )를 호출하면 두 번째 Activity에서 getIntent( )를 통해

    새로운 Intent를 만들고 getExtra( ), getStringExtra( ) 등으로 값을 가져올 수 있다.




    DoLogin.class를 살펴보면 가져온 값을 사용하고 있는 것을 확인할 수 있다.


    참고 : https://blog.yena.io/studynote/2017/11/06/Android-Intent.html







    < 로그인 직후의 화면 >

    음.. 이 APK 역시 루팅을 탐지하는 로직이 존재한다는 것을

    확인할 수 있었다. 그럼 역시 마찬가지로 저 문자열을 찾아보자!




    PostLogin.class에 해당 문자열이 존재하고 있었다.

    /system/app/Superuser.apk가 있어서 doesSuperuserApkExist( )가

    참이되거나 doesSUexist( ) 함수의 return 값이 참이되면 

    bool 값이 true가 되어 루팅을 탐지하는 로직이다.





    현재 Nox의 /system/app/에는 Superuser.apk가 없으므로

    루팅이 된 것처럼 Superuser.apk를 만들어줘보았다.




    remount failed: Operation not permitted

    touch를 이용해서 만들 때 위와 같은 에러가 발생하면

    adb shell mount -o rw, remount /;

    진행해보자(에러 및 해결화면을 캡쳐했는데 실수로 지웠다..후..)




    그러고 나서 다시 "devadmin"으로 로그인해보았더니




    루팅된 Device가 되어버렸다. 마치 루팅 탐지에 걸린 것처럼

    되었다. 이렇게 진행한 이유는 Hooking으로 루팅 탐지를 우회해보려고:)




    Hooking 원리는 간단하다. 바로 showRootStatus( )에 있는 if문을

    보면된다. doesSuperuserApkExist( )와 doesSUexist( )의 return값을

    모두 false로 만들어서 루팅 탐지를 우회해볼 것이다.




    우선 doesSuperuserApkExist( )를 살펴보자. /system/app/에

    Superuser.apk가 존재하면 return값이 true가 되니까

    이 부분을 false로 만들어주고





    이번에는 doesSUexist( )의 return값을 false로 만들면 된다.

    그럼 Hooking Script를 한 번 만들어보자! 굉장히 간단하다.




    이렇게 만든 Hooking Script를 실행하면~?




    < Hooking 진행화면 >

    짜잔~ 루팅을 우회할 수 있다~ 깰꼼!




    그러면 이번에는 별개로 안드로이드 스튜디오를 이용하여

    AndroidManifest.xml을 분석해서 다른 취약점을 찾아보자!

    안드로이드 스튜디오로 InsecureBankv2.apk를 열어서 확인하면




    activity를 확인할 수 있다!! 인증절차가 딱히 없기 때문에

    취약점이 될 수 있다. 그러면 한 번 로그인 없이 

    로그인된 화면을 보도록 해보자~ 역시 아주 간단하다.




    adb shell am start com.android.insecurebankv2/com.android.insecurebankv2.PostLogin

    을 이용해서 인증하지 않는 취약점을 이용해 바로 PostLogin Activity가 보여지도록 해보겠다.

    * Activity : 사용자에게 UI가 있는 화면을 제공하는 역할을 함 *





    이런식으로 로그인 없이 바로 로그인 이후 화면을 볼 수 있다.


    나머지 분석들은 발견하는대로 추가하겠습니다:) 2020.01.08






    반응형

    'Hacking > Android' 카테고리의 다른 글

    Frida, adb 설정 & OWASP UnCrackable-Level1.apk  (0) 2019.12.29

    댓글

Designed by Tistory.