Exploiting a debuggeable application

디버그 가능한 애플리케이션의 취약점 이용

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

루트 및 디버그 가능한 체크 우회

이 게시물의 이 부분은 https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0에서 요약한 내용입니다.

안드로이드 앱을 디버그 가능하게 만들고 체크 우회하는 단계

앱을 디버그 가능하게 만들기

https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0을 기반으로 한 내용입니다.

  1. APK 디컴파일:

  • APK 디컴파일을 위해 APK-GUI 도구를 사용합니다.

  • android-manifest 파일에 android:debuggable=true를 삽입하여 디버깅 모드를 활성화합니다.

  • 수정된 애플리케이션을 재컴파일, 서명 및 zipalign합니다.

  1. 수정된 애플리케이션 설치:

  • adb install <application_name> 명령을 사용합니다.

  1. 패키지 이름 검색:

  • adb shell pm list packages –3를 실행하여 타사 애플리케이션을 나열하고 패키지 이름을 찾습니다.

  1. 앱이 디버거 연결을 기다리도록 설정:

  • 명령: adb shell am setup-debug-app –w <package_name>.

  • 참고: 이 명령은 애플리케이션을 시작하기 전에 매번 실행되어 디버거를 기다리도록 해야 합니다.

  • 지속성을 위해 adb shell am setup-debug-app –w -–persistent <package_name>을 사용합니다.

  • 모든 플래그를 제거하려면 adb shell am clear-debug-app <package_name>을 사용합니다.

  1. Android Studio에서 디버깅 준비:

  • Android Studio에서 _File -> Open Profile or APK_로 이동합니다.

  • 재컴파일된 APK를 엽니다.

  1. 주요 Java 파일에 중단점 설정:

  • MainActivity.java (특히 onCreate 메서드), b.java, ContextWrapper.java에 중단점을 설정합니다.

체크 우회

일부 시점에서 애플리케이션은 디버그 가능한지 확인하고 루트된 기기를 나타내는 이진 파일을 확인합니다. 디버거를 사용하여 앱 정보를 수정하고 디버깅 가능한 비트를 해제하며 검색된 이진 파일의 이름을 변경하여 이러한 체크를 우회할 수 있습니다.

디버그 가능한 체크에 대한:

  1. 플래그 설정 수정:

  • 디버거 콘솔의 변수 섹션에서 다음 위치로 이동합니다: this mLoadedAPK -> mApplicationInfo -> flags = 814267974.

  • 참고: flags = 814267974의 이진 표현은 11000011100111011110이며 "Flag_debuggable"이 활성화되어 있음을 나타냅니다.

이러한 단계를 통해 애플리케이션을 디버깅할 수 있으며 디버거를 사용하여 특정 보안 체크를 우회하여 애플리케이션의 동작을 더 깊이 분석하거나 수정할 수 있습니다.

2단계에서는 플래그 값을 814267972로 변경하며, 이는 이진으로 110000101101000000100010100로 표현됩니다.

취약점 이용

버튼과 텍스트뷰가 있는 취약한 애플리케이션을 사용하여 "Crack Me"라는 메시지가 표시되는 초기 상태에서 소스 코드를 수정하지 않고 런타임에서 메시지를 "Hacked"로 변경하는 것이 목표입니다.

취약점 확인

  • apktool을 사용하여 애플리케이션을 디컴파일하여 AndroidManifest.xml 파일에 액세스합니다.

  • AndroidManifest.xml에 android_debuggable="true"가 있는 경우 애플리케이션이 디버그 가능하고 취약할 수 있다는 것을 나타냅니다.

  • 코드를 수정하지 않고 디버그 가능한 상태를 확인하기 위해 apktool을 사용하는 것에 유의해야 합니다.

설정 준비

  • 프로세스는 에뮬레이터를 시작하고 취약한 애플리케이션을 설치한 다음 adb jdwp를 사용하여 수신 대기 중인 Dalvik VM 포트를 식별하는 것을 포함합니다.

  • JDWP (Java Debug Wire Protocol)는 고유한 포트를 노출하여 VM에서 실행 중인 애플리케이션을 디버깅할 수 있게 합니다.

  • 원격 디버깅을 위해 포트 포워딩이 필요하며, 그 후 JDB를 대상 애플리케이션에 연결합니다.

런타임에서 코드 주입

  • 중단점을 설정하고 애플리케이션 흐름을 제어하여 취약점을 이용했습니다.

  • classesmethods <class_name>와 같은 명령을 사용하여 애플리케이션의 구조를 확인했습니다.

  • onClick 메서드에 중단점을 설정하고 실행을 제어했습니다.

  • locals, next, set 명령을 사용하여 로컬 변수를 검사하고 수정하며, 특히 "Try

Last updated