デバッグ可能なアプリケーションの悪用

Reading time: 8 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

ルートおよびデバッグ可能チェックのバイパス

この投稿のセクションは、投稿の要約です https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0

Androidアプリをデバッグ可能にし、チェックをバイパスする手順

アプリをデバッグ可能にする

内容は 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」がアクティブであることを示しています。

https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png

これらの手順は、アプリケーションがデバッグ可能であり、特定のセキュリティチェックをデバッガを使用してバイパスできることを保証し、アプリケーションの動作のより詳細な分析や変更を促進します。

ステップ2では、フラグ値を814267972に変更することが含まれ、これはバイナリで110000101101000000100010100として表されます。

脆弱性の悪用

ボタンとテキストビューを含む脆弱なアプリケーションを使用したデモが提供されました。最初にアプリケーションは「Crack Me」と表示します。目的は、ソースコードを変更せずに、実行時に「Try Again」から「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メソッドにブレークポイントを設定し、その実行を制御しました。
  • localsnext、およびsetコマンドを使用してローカル変数を検査および変更し、「Try Again」メッセージを「Hacked」に変更しました。
  • 修正されたコードはrunコマンドを使用して実行され、アプリケーションの出力がリアルタイムで変更されました。

この例は、デバッグ可能なアプリケーションの動作がどのように操作できるかを示し、アプリケーションのコンテキスト内でデバイスへのシェルアクセスを取得するなど、より複雑な悪用の可能性を強調しています。

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする