From 51c54db8f40a3a16689a304db5855c144ce67bc5 Mon Sep 17 00:00:00 2001 From: Translator Date: Wed, 3 Sep 2025 12:23:04 +0000 Subject: [PATCH] Translated ['', 'src/mobile-pentesting/android-app-pentesting/README.md' --- .../android-app-pentesting/README.md | 622 ++++++++++-------- 1 file changed, 342 insertions(+), 280 deletions(-) diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index 5d2808c07..4dc7549c8 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -1,10 +1,11 @@ -# Android Applications Pentesting +# Androidアプリケーション Pentesting {{#include ../../banners/hacktricks-training.md}} -## Android Applications Basics +## Androidアプリケーションの基本 + +このページは、**Androidのセキュリティに関連する最重要部分と、Androidアプリケーション内で最も危険なコンポーネント**について知るために、まず読むことを強く推奨します: -このページを読むことを強くお勧めします。**Androidセキュリティに関連する最も重要な部分と、Androidアプリケーション内の最も危険なコンポーネント**について知るためです: {{#ref}} android-applications-basics.md @@ -12,24 +13,24 @@ android-applications-basics.md ## ADB (Android Debug Bridge) -これは、Androidデバイス(エミュレートされたものまたは物理的なもの)に接続するために必要な主なツールです。\ -**ADB**は、コンピュータから**USB**または**ネットワーク**経由でデバイスを制御することを可能にします。このユーティリティは、**ファイルのコピー**、**アプリのインストール**と**アンインストール**、**シェルコマンドの実行**、**データのバックアップ**、**ログの読み取り**など、さまざまな機能を提供します。 +これは、エミュレートされたデバイスでも実機でも、Androidデバイスに接続するために必要な主要なツールです。\ +**ADB** はコンピュータから **USB** または **Network** 経由でデバイスを制御できます。このユーティリティは、ファイルの双方向での**コピー**、アプリの**インストール**と**アンインストール**、**shell commands**の実行、データの**バックアップ**、ログの**閲覧**などの機能を提供します。 -以下の[**ADB Commands**](adb-commands.md)のリストを確認して、adbの使い方を学んでください。 +adbの使い方を学ぶには、次の[**ADB Commands**](adb-commands.md)の一覧を参照してください。 ## Smali -時には、**隠された情報**(おそらくよく難読化されたパスワードやフラグ)にアクセスするために、**アプリケーションコードを修正する**ことが興味深い場合があります。そのため、apkを逆コンパイルし、コードを修正して再コンパイルすることが興味深いかもしれません。\ -[**このチュートリアルでは、APKを逆コンパイルし、Smaliコードを修正して、新しい機能を持つAPKを再コンパイルする方法を学ぶことができます**](smali-changes.md)。これは、**動的分析中に提示されるいくつかのテストの代替手段として非常に役立つ**可能性があります。したがって、**この可能性を常に念頭に置いておいてください**。 +アプリケーションコードを変更して**隠された情報**(難読化されたパスワードやフラグなど)にアクセスすることが有用な場合があります。その際、apkをデコンパイルしてコードを修正し、再コンパイルすることが考えられます。\ +[**In this tutorial** you can **learn how to decompile and APK, modify Smali code and recompile the APK** with the new functionality](smali-changes.md)。これは、これから紹介する動的解析中のいくつかのテストの代替手段として非常に役立ちます。常にこの可能性を念頭に置いてください。 -## Other interesting tricks +## その他の興味深いテクニック -- [Play Storeでの位置情報の偽装](spoofing-your-location-in-play-store.md) -- [Shizuku Privileged API(ADBベースの非ルート特権アクセス)](shizuku-privileged-api.md) -- [安全でないアプリ内更新メカニズムの悪用](insecure-in-app-update-rce.md) -- [アクセシビリティサービスの悪用(Android RAT)](accessibility-services-abuse.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を抽出する: +- [Spoofing your location in Play Store](spoofing-your-location-in-play-store.md) +- [Shizuku Privileged API (ADB-based non-root privileged access)](shizuku-privileged-api.md) +- [Exploiting Insecure In-App Update Mechanisms](insecure-in-app-update-rce.md) +- [Abusing Accessibility Services (Android RAT)](accessibility-services-abuse.md) +- **Download APKs**: [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 adb shell pm list packages com.android.insecurebankv2 @@ -39,7 +40,7 @@ package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk ``` -- [APKEditor](https://github.com/REAndroid/APKEditor)を使用して、すべてのスプリットとベースAPKをマージします: +- [APKEditor](https://github.com/REAndroid/APKEditor) を使用して、すべての splits と base apks をマージする: ```bash mkdir splits adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits @@ -60,123 +61,126 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed ../../linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md {{#endref}} -## 静的分析 +## 静的解析 -まず、APKを分析するためには、**デコンパイラを使用してJavaコードを確認する必要があります**。\ -詳細な情報については、[**こちらをお読みください**](apk-decompilers.md)。 +まず、APKを解析する際はデコンパイラを使って**Javaコードを確認する**べきです。\ +[**利用可能なさまざまなデコンパイラに関する情報はこちらを参照してください**](apk-decompilers.md)。 ### 興味深い情報の探索 -APKの**文字列**を確認するだけで、**パスワード**、**URL** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep))、**API**キー、**暗号化**、**Bluetooth UUID**、**トークン**などの興味深い情報を検索できます... コード実行の**バックドア**や認証バックドア(アプリにハードコーディングされた管理者資格情報)も探してください。 +APKの**strings**を覗くだけで、**パスワード**、**URL**(https://github.com/ndelphit/apkurlgrep)、**APIキー**、**暗号化**、**Bluetooth UUID**、**トークン**などや興味深いものを検索できます。コード実行の**バックドア**や認証バックドア(アプリにハードコードされた管理者資格情報)も探してみてください。 **Firebase** -**FirebaseのURL**に特に注意を払い、設定が不適切でないか確認してください。[Firebaseについての詳細情報とその悪用方法については、こちらをご覧ください。](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) +**Firebase URL**には特に注意し、設定が不適切でないか確認してください。[Firebaseとは何か、及びそれを悪用する方法の詳細はこちら。](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md) ### アプリケーションの基本理解 - Manifest.xml, strings.xml -アプリケーションの**_Manifest.xml_**および**_strings.xml_**ファイルの**検査は、潜在的なセキュリティ脆弱性を明らかにすることができます**。これらのファイルは、デコンパイラを使用するか、APKファイルの拡張子を.zipに変更して解凍することでアクセスできます。 +アプリケーションの _Manifest.xml_ と _strings.xml_ ファイルを**調査することで潜在的なセキュリティ脆弱性が明らかになることがあります**。これらのファイルはデコンパイラで取得するか、APKの拡張子を .zip に変更して解凍して取得できます。 -**Manifest.xml**から特定された**脆弱性**には以下が含まれます: +**Manifest.xml** から特定できる脆弱性には次のようなものがあります: -- **デバッグ可能なアプリケーション**: _Manifest.xml_ファイルでデバッグ可能として設定されたアプリケーション(`debuggable="true"`)は、接続を許可するため、悪用のリスクがあります。デバッグ可能なアプリケーションを見つけて悪用する方法については、チュートリアルを参照してください。 -- **バックアップ設定**: 機密情報を扱うアプリケーションには、`android:allowBackup="false"`属性を明示的に設定する必要があります。これにより、特にUSBデバッグが有効な場合に、adbを介した不正なデータバックアップを防ぐことができます。 -- **ネットワークセキュリティ**: _res/xml/_内のカスタムネットワークセキュリティ構成(`android:networkSecurityConfig="@xml/network_security_config"`)は、証明書ピンやHTTPトラフィック設定などのセキュリティ詳細を指定できます。特定のドメインに対してHTTPトラフィックを許可することが一例です。 -- **エクスポートされたアクティビティとサービス**: マニフェスト内のエクスポートされたアクティビティとサービスを特定することで、悪用される可能性のあるコンポーネントを明らかにできます。動的テスト中のさらなる分析により、これらのコンポーネントを悪用する方法が明らかになります。 -- **コンテンツプロバイダーとファイルプロバイダー**: 公開されたコンテンツプロバイダーは、不正なアクセスやデータの変更を許可する可能性があります。ファイルプロバイダーの設定も注意深く確認する必要があります。 -- **ブロードキャストレシーバーとURLスキーム**: これらのコンポーネントは悪用される可能性があり、特に入力脆弱性に対するURLスキームの管理方法に注意を払う必要があります。 -- **SDKバージョン**: `minSdkVersion`、`targetSDKVersion`、`maxSdkVersion`属性は、サポートされているAndroidバージョンを示し、セキュリティ上の理由から古い脆弱なAndroidバージョンをサポートしないことの重要性を強調します。 +- **Debuggable Applications**: _Manifest.xml_ に `debuggable="true"` と設定されたアプリケーションは、接続を許可することで悪用につながるリスクがあります。デバイス上で debuggable なアプリを見つけて悪用する方法については、該当するチュートリアルを参照してください。 +- **Backup Settings**: `android:allowBackup="false"` 属性は、機密情報を扱うアプリでは明示的に設定しておくべきです。特に USBデバッグ が有効な場合に adb 経由で不正なデータバックアップを防ぐため重要です。 +- **Network Security**: _res/xml/_ 内のカスタムネットワークセキュリティ構成(`android:networkSecurityConfig="@xml/network_security_config"`)は、証明書ピンや HTTP トラフィック設定などのセキュリティ詳細を指定できます。例えば特定ドメインの HTTP トラフィックを許可する設定などが考えられます。 +- **Exported Activities and Services**: マニフェスト内でエクスポートされた activity や service を特定することで、悪用されうるコンポーネントが浮かび上がります。動的テスト中のさらなる解析でこれらをどのように悪用できるかが明らかになります。 +- **Content Providers and FileProviders**: 公開された content provider はデータへの不正アクセスや改ざんを許す可能性があります。FileProviders の設定も入念に確認してください。 +- **Broadcast Receivers and URL Schemes**: これらのコンポーネントは悪用される可能性があり、特に URL スキームの扱い方による入力脆弱性に注意する必要があります。 +- **SDK Versions**: `minSdkVersion`、`targetSDKVersion`、`maxSdkVersion` 属性はサポートする Android バージョンを示します。古く脆弱な Android バージョンをサポートしているとセキュリティ上の問題になります。 -**strings.xml**ファイルからは、APIキー、カスタムスキーマ、その他の開発者ノートなどの機密情報が発見される可能性があり、これらのリソースを注意深く確認する必要があります。 +**strings.xml** ファイルからは、APIキー、カスタムスキーマ、その他開発者のメモなどの機密情報が見つかることがあり、これらのリソースを注意深くレビューする必要があります。 -### タップジャッキング +### Tapjacking -**タップジャッキング**は、**悪意のある** **アプリケーション**が起動され、**被害者アプリケーションの上に位置する**攻撃です。被害者アプリを視覚的に隠すと、そのユーザーインターフェースはユーザーを騙してそれと対話させるように設計されており、実際には被害者アプリに対してその対話を渡しています。\ -実際には、**ユーザーが被害者アプリでアクションを実行していることを知らないようにしています**。 +**Tapjacking** は、**悪意のある** **アプリケーション** が起動して **被害アプリの上に重ねて表示される** 攻撃です。被害アプリを目に見えて覆い隠すと、悪意のある UI はユーザを騙して操作させ、その操作を被害アプリに渡します。\ +結果的に、ユーザは自分が実際に被害アプリ上で操作を行っていることに気づかないまま動作させられてしまいます。 + +詳しくは以下を参照してください: -詳細情報は以下を参照してください: {{#ref}} tapjacking.md {{#endref}} -### タスクハイジャック +### Task Hijacking -**`launchMode`**が**`singleTask`**に設定され、`taskAffinity`が定義されていない**アクティビティ**は、タスクハイジャックに対して脆弱です。これは、**アプリケーション**がインストールされ、実際のアプリケーションの前に起動されると、**実際のアプリケーションのタスクをハイジャックする**可能性があることを意味します(つまり、ユーザーは**悪意のあるアプリケーションを使用していると思い込んでいる**)。 +`launchMode` が **`singleTask`** に設定され、かつ `taskAffinity` が定義されていない **activity** は Task Hijacking の脆弱性があります。これは、別の **application** をインストールしてそれが本物のアプリより先に起動されると、**本物のアプリのタスクをハイジャックしてしまう**(ユーザは本物を使っているつもりで悪意のあるアプリを操作している)可能性があるという意味です。 + +詳細は以下を参照してください: -詳細情報は以下を参照してください: {{#ref}} android-task-hijacking.md {{#endref}} -### 不適切なデータストレージ +### Insecure data storage -**内部ストレージ** +**Internal Storage** -Androidでは、**内部**ストレージに**保存された**ファイルは、**作成した**アプリのみが**アクセスできる**ように**設計されています**。このセキュリティ対策はAndroidオペレーティングシステムによって**強制され**、ほとんどのアプリケーションのセキュリティニーズには一般的に十分です。しかし、開発者は時折、`MODE_WORLD_READABLE`や`MODE_WORLD_WRITABLE`のようなモードを利用して、ファイルを異なるアプリケーション間で**共有**できるようにします。しかし、これらのモードは、他のアプリケーション(潜在的に悪意のあるものを含む)によるこれらのファイルへのアクセスを**制限しません**。 +Android では、内部ストレージに**保存された**ファイルはそれを作成した**アプリのみがアクセスできるように設計**されています。このセキュリティは OS によって強制され、多くのアプリにとっては十分です。しかし開発者が `MODE_WORLD_READABLE` や `MODE_WORLD_WRITABLE` のようなモードを使ってファイルを他のアプリ間で共有することがあり、これらのモードは悪意あるアプリも含めた他のアプリからのアクセスを制限しません。 -1. **静的分析:** -- `MODE_WORLD_READABLE`および`MODE_WORLD_WRITABLE`の使用が**注意深く検討されるべきです**。これらのモードは、**意図しないまたは不正なアクセス**をファイルに**さらす可能性があります**。 -2. **動的分析:** -- アプリによって作成されたファイルに設定された**権限**を**確認**します。特に、ファイルが**全世界に対して読み取りまたは書き込み可能に設定されているか**を**チェック**します。これは重大なセキュリティリスクを引き起こす可能性があり、デバイスにインストールされた**任意のアプリケーション**が、出所や意図に関係なく、これらのファイルを**読み取ったり変更したり**できるようになります。 +1. **Static Analysis:** +- `MODE_WORLD_READABLE` と `MODE_WORLD_WRITABLE` の使用は**慎重に精査**してください。これらのモードはファイルを**意図しない、または不正なアクセス**に晒す可能性があります。 +2. **Dynamic Analysis:** +- アプリが作成するファイルに設定されている**パーミッション**を確認してください。具体的には、ファイルが世界中で読み取り/書き込み可能になっていないかをチェックします。これがあると、デバイスにインストールされた**任意のアプリ**がそれらのファイルを読み取ったり改変したりできる重大なリスクになります。 -**外部ストレージ** +**External Storage** -**外部ストレージ**上のファイルを扱う際には、いくつかの注意が必要です: +SDカードなどの**外部ストレージ**上のファイルを扱う際には、以下の注意が必要です: -1. **アクセス可能性**: -- 外部ストレージ上のファイルは**全世界に対して読み取りおよび書き込み可能**です。つまり、任意のアプリケーションやユーザーがこれらのファイルにアクセスできます。 -2. **セキュリティの懸念**: -- アクセスの容易さを考慮すると、**機密情報を外部ストレージに保存しないことが推奨されます**。 -- 外部ストレージは取り外し可能であり、任意のアプリケーションによってアクセスされる可能性があるため、セキュリティが低下します。 -3. **外部ストレージからのデータ処理**: -- 外部ストレージから取得したデータに対しては常に**入力検証を行う**必要があります。これは、データが信頼できないソースからのものであるため、重要です。 -- 外部ストレージに実行可能ファイルやクラスファイルを保存して動的に読み込むことは強く推奨されません。 -- アプリケーションが外部ストレージから実行可能ファイルを取得する必要がある場合、これらのファイルが**署名され、暗号的に検証されていることを確認**してから動的に読み込む必要があります。このステップは、アプリケーションのセキュリティの整合性を維持するために重要です。 +1. **Accessibility**: +- 外部ストレージ上のファイルは**グローバルに読み書き可能**です。つまり任意のアプリやユーザがアクセスできます。 +2. **Security Concerns**: +- アクセスが容易であるため、機密情報を外部ストレージに保存するべきではありません。 +- 外部ストレージは取り外し可能であり、任意のアプリによってアクセスされ得るため安全性が低いです。 +3. **Handling Data from External Storage**: +- 外部ストレージから取得したデータは常に**入力検証**を行ってください。外部ストレージのデータは信頼できないソースから来る可能性があるため重要です。 +- 外部ストレージに実行ファイルや class ファイルを置き、動的にロードすることは強く推奨されません。 +- どうしても外部ストレージから実行可能ファイルを取得して動的にロードする必要がある場合は、それらのファイルが**署名され、暗号的に検証**されていることを確認してください。これはアプリのセキュリティ整合性を保つ上で重要です。 -外部ストレージは、`/storage/emulated/0`、`/sdcard`、`/mnt/sdcard`で**アクセス可能**です。 +外部ストレージには /storage/emulated/0 , /sdcard , /mnt/sdcard でアクセスできます > [!TIP] -> Android 4.4(**API 17**)以降、SDカードには、**アプリ専用のディレクトリへのアクセスを制限するディレクトリ構造**があります。これにより、悪意のあるアプリケーションが他のアプリのファイルに対して読み取りまたは書き込みアクセスを得ることが防止されます。 +> Android 4.4(**API 17**)以降、SDカードにはアプリごとに専用のディレクトリ構造があり、アプリからはそのアプリ専用のディレクトリにのみアクセスが制限されます。これにより、悪意のあるアプリが別のアプリのファイルを読み書きすることを防げます。 **平文で保存された機密データ** -- **共有設定**: Androidは各アプリケーションが`/data/data//shared_prefs/`パスにXMLファイルを簡単に保存できるようにしており、そのフォルダ内に平文で機密情報が見つかることがあります。 -- **データベース**: Androidは各アプリケーションが`/data/data//databases/`パスにSQLiteデータベースを簡単に保存できるようにしており、そのフォルダ内に平文で機密情報が見つかることがあります。 +- **Shared preferences**: Android は各アプリが `/data/data//shared_prefs/` に XML ファイルを簡単に保存できる仕組みがあり、そのフォルダ内に平文で機密情報が保存されていることがあります。 +- **Databases**: Android は各アプリが `/data/data//databases/` に sqlite データベースを簡単に保存でき、そのフォルダ内に平文で機密情報が保存されていることがあります。 -### TLSの破損 +### Broken TLS -**すべての証明書を受け入れる** +**Accept All Certificates** -何らかの理由で、開発者は時々、ホスト名が一致しない場合でもすべての証明書を受け入れます。例えば、以下のようなコード行がある場合です: +なぜか開発者が、例えばホスト名が一致しない場合でもすべての証明書を受け入れてしまうことがあります。以下のようなコード行で: ```java SSLSocketFactory sf = new cc(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); ``` -A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it. +BurpのCAをデバイス内で許可せずに、Burpのようなプロキシを使ってトラフィックをキャプチャしてみるのが良いテスト方法です。また、Burpで別のホスト名用の証明書を生成してそれを使うこともできます。 ### Broken Cryptography -**Poor Key Management Processes** +**不適切なキー管理プロセス** -一部の開発者は、ローカルストレージに機密データを保存し、コード内にハードコーディングされた/予測可能なキーで暗号化します。これは、リバースエンジニアリングにより攻撃者が機密情報を抽出できる可能性があるため、行うべきではありません。 +一部の開発者は、機密データをローカルストレージに保存し、コード内にハードコード/予測可能なキーで暗号化してしまいます。これは避けるべきで、なぜなら一部のreversingによって攻撃者が機密情報を抽出してしまう可能性があるからです。 **Use of Insecure and/or Deprecated Algorithms** -開発者は、認証チェック、データの保存または送信を行うために**非推奨のアルゴリズム**を使用すべきではありません。これらのアルゴリズムには、RC4、MD4、MD5、SHA1などがあります。例えば、パスワードを保存するために**ハッシュ**を使用する場合、ソルトを使用したハッシュのブルートフォース**耐性**が必要です。 +開発者は**deprecated algorithms**を使って認可チェック、データの**保存**や**送信**を行うべきではありません。これらのアルゴリズムには RC4、MD4、MD5、SHA1 などがあります。例えばパスワードを保存するために**hashes**を使う場合は、ソルトを用いたブルートフォース耐性のあるハッシュを使用するべきです。 ### Other checks -- APKを**難読化する**ことを推奨します。これにより、攻撃者のリバースエンジニアリング作業が困難になります。 -- アプリが機密性が高い場合(銀行アプリなど)、**モバイルがルート化されているかどうかを確認する独自のチェックを実行**し、適切に対処する必要があります。 -- アプリが機密性が高い場合(銀行アプリなど)、**エミュレーター**が使用されているかどうかを確認する必要があります。 -- アプリが機密性が高い場合(銀行アプリなど)、**実行前に自身の整合性を確認**し、変更されていないかを確認する必要があります。 -- [**APKiD**](https://github.com/rednaga/APKiD)を使用して、APKをビルドするために使用されたコンパイラ/パッカー/難読化ツールを確認します。 +- 攻撃者によるreverse engineerの労力を難しくするために、**APKをobfuscate**することが推奨されます。 +- アプリが機微なものである場合(銀行アプリなど)、モバイルが**rooted**かどうかを独自にチェックし、それに応じた処理を行うべきです。 +- アプリが機微なものである場合(銀行アプリなど)、**emulator**が使われていないかをチェックするべきです。 +- アプリが機微なものである場合(銀行アプリなど)、実行前に**自身のintegrityをチェック**して改変されていないか確認するべきです。 +- どのcompiler/packer/obfuscatorが使われているかを確認するために [**APKiD**](https://github.com/rednaga/APKiD) を使用してください。 ### React Native Application -Read the following page to learn how to easily access javascript code of React applications: +Reactアプリケーションのjavascriptコードへ簡単にアクセスする方法を学ぶには、以下のページを読んでください: + {{#ref}} react-native-application.md @@ -184,7 +188,8 @@ react-native-application.md ### Xamarin Applications -Read the following page to learn how to easily access C# code of a xamarin applications: +XamarinアプリのC#コードへ簡単にアクセスする方法を学ぶには、以下のページを読んでください: + {{#ref}} ../xamarin-apps.md @@ -192,20 +197,21 @@ Read the following page to learn how to easily access C# code of a xamarin appli ### Superpacked Applications -According to this [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps... and a faster way which involves to **execute the application and gather the decompressed files from the filesystem.** +この[**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/)によると、superpackedはアプリのコンテンツを単一ファイルに圧縮するMetaアルゴリズムです。ブログではこの種のアプリを展開するアプリを作成する可能性について触れており、もう一つのより高速な方法として**アプリを実行してファイルシステムから解凍済みファイルを収集する**方法が述べられています。 ### Automated Static Code Analysis -The tool [**mariana-trench**](https://github.com/facebook/mariana-trench) is capable of finding **vulnerabilities** by **scanning** the **code** of the application. This tool contains a series of **known sources** (that indicates to the tool the **places** where the **input** is **controlled by the user**), **sinks** (which indicates to the tool **dangerous** **places** where malicious user input could cause damages) and **rules**. These rules indicates the **combination** of **sources-sinks** that indicates a vulnerability. +[**mariana-trench**](https://github.com/facebook/mariana-trench) はアプリケーションの**コード**を**スキャン**して**脆弱性**を発見できるツールです。このツールは、ツールに対して**入力がユーザによって制御される場所**を示す一連の**known sources**、悪意あるユーザ入力が被害を引き起こす可能性のある**危険な場所**を示す**sinks**、および**rules**を含みます。これらのrulesは、脆弱性を示すsources-sinksの**組み合わせ**を表します。 -With this knowledge, **mariana-trench will review the code and find possible vulnerabilities on it**. +この知識に基づいて、**mariana-trenchはコードをレビューし、そこにある可能性のある脆弱性を発見します**。 ### Secrets leaked -An application may contain secrets (API keys, passwords, hidden urls, subdomains...) inside of it that you might be able to discover. You could us a tool such as [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) +アプリケーションにはAPIキー、パスワード、隠しURL、サブドメインなどのsecretsが含まれている場合があり、これらを発見できることがあります。例えば [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks) のようなツールを使用できます。 ### Bypass Biometric Authentication + {{#ref}} bypass-biometric-authentication-android.md {{#endref}} @@ -219,6 +225,7 @@ bypass-biometric-authentication-android.md ### **Other tricks** + {{#ref}} content-protocol.md {{#endref}} @@ -229,154 +236,155 @@ content-protocol.md ## Dynamic Analysis -> First of all, you need an environment where you can install the application and all the environment (Burp CA cert, Drozer and Frida mainly). Therefore, a rooted device (emulated or not) is extremely recommended. +> まず最初に、アプリをインストールでき、かつ環境(Burp CA cert、Drozer、Frida など)を整えられる環境が必要です。したがって、rootedデバイス(エミュレートされたものでも可)が強く推奨されます。 ### Online Dynamic analysis -You can create a **free account** in: [https://appetize.io/](https://appetize.io). This platform allows you to **upload** and **execute** APKs, so it is useful to see how an apk is behaving. +[https://appetize.io/](https://appetize.io/) に**無料アカウント**を作成できます。このプラットフォームではAPKを**アップロード**して**実行**できるため、APKの挙動を確認するのに便利です。 -You can even **see the logs of your application** in the web and connect through **adb**. +ウェブ上で**アプリケーションのログを見る**こともでき、**adb**で接続することも可能です。 ![](<../../images/image (831).png>) -Thanks to the ADB connection you can use **Drozer** and **Frida** inside the emulators. +ADB接続のおかげで、エミュレータ内で**Drozer**や**Frida**を使用できます。 ### Local Dynamic Analysis #### Using an emulator -- [**Android Studio**](https://developer.android.com/studio) (You can create **x86** and **arm** devices, and according to [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**latest x86** versions **support ARM libraries** without needing an slow arm emulator). -- Learn to set it up in this page: +- [**Android Studio**](https://developer.android.com/studio)(**x86** および **arm** デバイスを作成できます。また、[**こちら**](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)によれば最新の x86 バージョンは遅い arm エミュレータを使わなくても ARM ライブラリをサポートします)。 +- セットアップ方法は以下のページで学べます: + {{#ref}} avd-android-virtual-device.md {{#endref}} -- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, you need to create an account. _It's recommend to **download** the version **WITH**_ _**VirtualBox** to avoid potential errors._) -- [**Nox**](https://es.bignox.com) (Free, but it doesn't support Frida or Drozer). +- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition、アカウント作成が必要です。_潜在的なエラーを避けるために_ _**VirtualBox付き**のバージョンを**ダウンロード**することを推奨します。_) +- [**Nox**](https://es.bignox.com)(無料ですが、FridaやDrozerはサポートしていません)。 > [!TIP] -> When creating a new emulator on any platform remember that the bigger the screen is, the slower the emulator will run. So select small screens if possible. +> 新しいエミュレータを作成する際、画面が大きいほどエミュレータは遅くなることを覚えておいてください。可能であれば小さい画面を選んでください。 -To **install google services** (like AppStore) in Genymotion you need to click on the red marked button of the following image: +GenymotionにGoogleサービス(AppStoreなど)をインストールするには、以下画像の赤で示したボタンをクリックする必要があります: ![](<../../images/image (277).png>) -Also, notice that in the **configuration of the Android VM in Genymotion** you can select **Bridge Network mode** (this will be useful if you will be connecting to the Android VM from a different VM with the tools). +また、**GenymotionのAndroid VMの設定**で**Bridge Network mode**を選択できる点に注意してください(これは、ツールを持つ別のVMからAndroid VMに接続する場合に有用です)。 #### Use a physical device -You need to activate the **debugging** options and it will be cool if you can **root** it: +デバッグオプションを有効にする必要があり、可能であれば**root**しておくと良いでしょう: 1. **Settings**. -2. (FromAndroid 8.0) Select **System**. -3. Select **About phone**. -4. Press **Build number** 7 times. -5. Go back and you will find the **Developer options**. +2. (Android 8.0以降) **System**を選択。 +3. **About phone**を選択。 +4. **Build number**を7回押す。 +5. 戻ると**Developer options**が表示されます。 -> Once you have installed the application, the first thing you should do is to try it and investigate what does it do, how does it work and get comfortable with it.\ -> I will suggest to **perform this initial dynamic analysis using MobSF dynamic analysis + pidcat**, so we will be able to **learn how the application works** while MobSF **captures** a lot of **interesting** **data** you can review later on. +> アプリをインストールしたら、まずそれを実行して何をするのか、どのように動作するのかを調査し、慣れてください。\ +> 初期のdynamic analysisは MobSF dynamic analysis + pidcat を使って行うことを推奨します。こうすることで、アプリがどのように動作するかを学びつつ、後で確認できる多くの興味深いデータを MobSF がキャプチャします。 ### Unintended Data Leakage **Logging** -開発者は、**デバッグ情報**を公開することに注意すべきです。これは機密データの漏洩につながる可能性があります。アプリケーションのログを監視して機密情報を特定し保護するために、[**pidcat**](https://github.com/JakeWharton/pidcat)と`adb logcat`を推奨します。**Pidcat**は使いやすさと可読性のために好まれます。 +開発者は**デバッグ情報**を公開しないよう注意する必要があります。これは機密データのleakにつながる可能性があります。アプリケーションのログを監視して機密情報を特定・保護するために、[**pidcat**](https://github.com/JakeWharton/pidcat) や `adb logcat` の使用が推奨されます。**Pidcat**は使いやすさと可読性の面で好まれます。 > [!WARNING] -> **Android 4.0以降**、**アプリケーションは自分のログにのみアクセスできる**ことに注意してください。したがって、アプリケーションは他のアプリのログにアクセスできません。\ -> それでも、**機密情報をログに記録しない**ことを推奨します。 +> Android 4.0以降のバージョンでは、**アプリは自分自身のログにしかアクセスできません**。したがってアプリは他のアプリのログにはアクセスできません。\ +> それでも、機密情報をログに出力しないことが推奨されます。 **Copy/Paste Buffer Caching** -Androidの**クリップボードベース**のフレームワークは、アプリ内でのコピー&ペースト機能を可能にしますが、**他のアプリケーション**がクリップボードにアクセスできるため、機密データが露出するリスクがあります。クレジットカードの詳細など、アプリケーションの機密セクションに対して**コピー/ペースト**機能を無効にすることが重要です。 +Androidの**クリップボードベースの**フレームワークはアプリ間でのコピー&ペースト機能を提供しますが、**他のアプリ**がクリップボードにアクセスできるため、機密データが公開されるリスクがあります。クレジットカード情報のような機密箇所については、コピー/ペースト機能を無効にすることが重要です。 **Crash Logs** -アプリケーションが**クラッシュ**し、**ログを保存**する場合、これらのログは攻撃者に役立つ可能性があります。特にアプリケーションがリバースエンジニアリングできない場合はそうです。このリスクを軽減するために、クラッシュ時にログを記録しないようにし、ログをネットワーク経由で送信する必要がある場合は、SSLチャネルを介して送信されることを確認してください。 +アプリが**クラッシュ**してログを保存する場合、これらのログは特にアプリがリバースできない場合に攻撃者に役立つことがあります。このリスクを緩和するため、クラッシュ時にログを記録しないようにし、もしログをネットワーク経由で送信する必要がある場合は必ずSSLチャネルで送信してください。 -ペンテスターとして、**これらのログを確認することをお勧めします**。 +pentesterとして、**これらのログを確認してみてください**。 **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`のようになります。 +ほとんどのアプリケーションは情報を保存するために**内部SQLiteデータベース**を使用します。ペンテスト中は作成された**データベース**、**テーブル名**や**カラム名**、および保存されている全ての**データ**を確認してください。ここで機密情報を見つけることがあり、それは脆弱性になります。\ +データベースは通常 `/data/data/the.package.name/databases` にあります(例:`/data/data/com.mwr.example.sieve/databases`)。 -データベースが機密情報を保存しており、**暗号化されている**が、アプリケーション内に**パスワード**が見つかる場合、それでも**脆弱性**です。 +データベースが機密情報を保存していて**encrypted**されていても、もしアプリケーション内で**password**を見つけられるなら、それは依然として**vulnerability**です。 -`.tables`を使用してテーブルを列挙し、`.schema `を実行してテーブルのカラムを列挙します。 +`.tables` を使ってテーブルを列挙し、`.schema ` を使ってテーブルのカラムを列挙してください。 ### Drozer (Exploit Activities, Content Providers and Services) -From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** allows you to **assume the role of an Android app** and interact with other apps. It can do **anything that an installed application can do**, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .\ -Drozer is s useful tool to **exploit exported activities, exported services and Content Providers** as you will learn in the following sections. +From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** はAndroidアプリの役割を引き受け、他のアプリとやり取りすることを可能にします。インストールされたアプリができることは何でも行うことができ、AndroidのInter-Process Communication (IPC) メカニズムを利用し、基盤となるOSと相互作用できます。.\ +Drozerは、exported activities、exported services、Content Providersを**exploit**するのに有用なツールです。これは以下のセクションで学びます。 ### Exploiting exported Activities [**Read this if you want to refresh what is an Android Activity.**](android-applications-basics.md#launcher-activity-and-other-activities)\ -Also remember that the code of an activity starts in the **`onCreate`** method. +また、Activityのコードは**`onCreate`**メソッドから始まることを覚えておいてください。 **Authorisation bypass** -Activityがエクスポートされると、外部アプリからその画面を呼び出すことができます。したがって、**機密情報**を含むActivityが**エクスポート**されている場合、**認証**メカニズムを**バイパス**してアクセスすることができます。 +Activityがexportedになっている場合、外部アプリからその画面を呼び出すことができます。したがって、**sensitive information**を含むActivityが**exported**されている場合、認証メカニズムを**bypass**してそれにアクセスできてしまう可能性があります。 [**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities) -You can also start an exported activity from adb: +adbからexported activityを起動することもできます: - PackageName is com.example.demo - Exported ActivityName is com.example.test.MainActivity ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` -**注意**: MobSFは、アクティビティの`android:launchMode`として_**singleTask/singleInstance**_の使用を悪意のあるものとして検出しますが、[これ](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750)によると、これは古いバージョン(APIバージョン<21)でのみ危険なようです。 +**NOTE**: MobSF will detect as malicious the use of _**singleTask/singleInstance**_ as `android:launchMode` in an activity, but due to [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), apparently this is only dangerous on old versions (API versions < 21). > [!TIP] -> 認証バイパスは常に脆弱性ではないことに注意してください。バイパスの動作とどの情報が公開されているかによります。 +> authorisation bypass が常に脆弱性であるとは限りません。バイパスの動作や公開される情報によって判断されます。 -**機密情報の漏洩** +**Sensitive information leakage** -**アクティビティは結果を返すこともできます**。もし、エクスポートされていて保護されていないアクティビティが**`setResult`**メソッドを呼び出し、**機密情報を返している**のを見つけた場合、機密情報の漏洩があります。 +**Activities can also return results**. エクスポートされ保護されていない activity が **`setResult`** メソッドを呼び出して **機密情報を返す** 場合、sensitive information leakage が発生します。 -#### タップジャッキング +#### Tapjacking -タップジャッキングが防止されていない場合、エクスポートされたアクティビティを悪用して**ユーザーに予期しないアクションを実行させる**ことができます。タップジャッキングについての詳細は[**こちらのリンクを参照してください**](#tapjacking)。 +Tapjacking が防止されていない場合、エクスポートされた activity を悪用して **ユーザに予期しない操作を行わせる** ことができます。詳細は[**what is Tapjacking follow the link**](#tapjacking)。 -### コンテンツプロバイダーの悪用 - 機密情報へのアクセスと操作 +### Exploiting Content Providers - Accessing and manipulating sensitive information -[**コンテンツプロバイダーについて復習したい場合はこれをお読みください。**](android-applications-basics.md#content-provider)\ -コンテンツプロバイダーは基本的に**データを共有する**ために使用されます。アプリに利用可能なコンテンツプロバイダーがある場合、そこから**機密データを抽出**できるかもしれません。また、**SQLインジェクション**や**パストラバーサル**の可能性をテストすることも興味深いです。これらは脆弱である可能性があります。 +[**Read this if you want to refresh what is a Content Provider.**](android-applications-basics.md#content-provider)\ +Content providers は基本的にデータを共有するために使われます。アプリに利用可能な content providers がある場合、そこから**機密情報を抽出**できる可能性があります。脆弱である可能性があるため、可能な **SQL injections** や **Path Traversals** のテストも重要です。 -[**Drozerを使用してコンテンツプロバイダーを悪用する方法を学びましょう。**](drozer-tutorial/index.html#content-providers) +[**Learn how to exploit Content Providers with Drozer.**](drozer-tutorial/index.html#content-providers) -### **サービスの悪用** +### **Exploiting Services** -[**サービスについて復習したい場合はこれをお読みください。**](android-applications-basics.md#services)\ -サービスのアクションは`onStartCommand`メソッドで始まることを覚えておいてください。 +[**Read this if you want to refresh what is a Service.**](android-applications-basics.md#services)\ +Service の処理は `onStartCommand` メソッドで開始されることを覚えておいてください。 -サービスは基本的に**データを受信**し、**処理**し、**応答**(またはしない)を返すものです。したがって、アプリケーションがいくつかのサービスをエクスポートしている場合は、**コードを確認**して何をしているのかを理解し、**動的にテスト**して機密情報を抽出したり、認証手段をバイパスしたりする必要があります。\ -[**Drozerを使用してサービスを悪用する方法を学びましょう。**](drozer-tutorial/index.html#services) +Service は基本的に**データを受け取り**、それを**処理**し、(場合によっては)**レスポンスを返す**ものです。したがって、アプリが何らかの services をエクスポートしている場合は、その動作を理解するために**コードを確認**し、機密情報の抽出や認証回避などを目的に**動的にテスト**するべきです。\ +[**Learn how to exploit Services with Drozer.**](drozer-tutorial/index.html#services) -### **ブロードキャストレシーバーの悪用** +### **Exploiting Broadcast Receivers** -[**ブロードキャストレシーバーについて復習したい場合はこれをお読みください。**](android-applications-basics.md#broadcast-receivers)\ -ブロードキャストレシーバーのアクションは`onReceive`メソッドで始まることを覚えておいてください。 +[**Read this if you want to refresh what is a Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\ +Broadcast Receiver の処理は `onReceive` メソッドで開始されることを覚えておいてください。 -ブロードキャストレシーバーは特定のメッセージを待機しています。レシーバーがメッセージをどのように処理するかによって、脆弱である可能性があります。\ -[**Drozerを使用してブロードキャストレシーバーを悪用する方法を学びましょう。**](#exploiting-broadcast-receivers) +Broadcast receiver は特定の種類のメッセージを待ち受けます。受信したメッセージの処理方法によっては脆弱になる可能性があります。\ +[**Learn how to exploit Broadcast Receivers with Drozer.**](#exploiting-broadcast-receivers) -### **スキーム / ディープリンクの悪用** +### **Exploiting Schemes / Deep links** -手動でディープリンクを探すことができ、MobSFのようなツールや[このスクリプト](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py)を使用できます。\ -**adb**や**ブラウザ**を使用して宣言された**スキーム**を**開く**ことができます: +deep links は手動で探すこともできます。MobSF のようなツールや [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) のようなスクリプトを使ってください。\ +宣言された **scheme** は **adb** や **browser** を使って **open** できます: ```bash adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name] ``` -_パッケージ名を**省略する**ことができ、モバイルは自動的にそのリンクを開くべきアプリを呼び出します。_ +_注意:**パッケージ名を省略すると**、モバイルはそのリンクを開くアプリを自動的に起動します._ ```html Click me @@ -385,82 +393,133 @@ _パッケージ名を**省略する**ことができ、モバイルは自動的 ``` **実行されるコード** -**アプリで実行されるコード**を見つけるために、ディープリンクによって呼び出されるアクティビティに移動し、関数**`onNewIntent`**を検索します。 +アプリ内で実行される**コードを特定するために**、deeplink によって呼び出される activity に移動し、関数 **`onNewIntent`** を検索してください。 ![](<../../images/image (436) (1) (1) (1).png>) **機密情報** -ディープリンクを見つけるたびに、**URLパラメータを介して機密データ(パスワードなど)を受信していないか確認する必要があります**。他のアプリケーションが**ディープリンクを偽装してそのデータを盗む可能性があるからです!** +deep link を見つけたら、毎回**URLパラメータ経由でパスワードなどの機密データを受け取っていないか**確認してください。そうしないと、他のアプリが**deep link を偽装してそのデータを盗む**可能性があります! -**パス内のパラメータ** +**Parameters in path** -**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 のパス内でパラメータを使用している deep link がないか**必ず確認してください**。例えば `https://api.example.com/v1/users/{username}` のような場合、`example://app/users?username=../../unwanted-endpoint%3fparam=value` のようにパストラバーサルを強制できる可能性があります。\ +アプリ内で正しいエンドポイントを見つけられれば、パスの一部がドメイン名として使われている場合の **Open Redirect**、CSRF トークンなしでユーザ詳細を変更できる場合の **account takeover**(脆弱なエンドポイントが適切なメソッドを使っている場合)など、さまざまな脆弱性を引き起こせます。詳細は [こちら](http://dphoeniixx.com/2020/12/13-2/) を参照してください。 -**さらなる例** +**More examples** -リンクに関する[興味深いバグバウンティレポート](https://hackerone.com/reports/855618)(_/.well-known/assetlinks.json_)。 +[interesting bug bounty report](https://hackerone.com/reports/855618)(リンクに関する報告、_/.well-known/assetlinks.json_)。 ### トランスポート層の検査と検証の失敗 -- **証明書はAndroidアプリケーションによって常に適切に検査されるわけではありません**。これらのアプリケーションは警告を見落とし、自己署名証明書を受け入れたり、場合によってはHTTP接続に戻ったりすることが一般的です。 -- **SSL/TLSハンドシェイク中の交渉は時々弱く**、安全でない暗号スイートを使用しています。この脆弱性により、接続が中間者攻撃(MITM)に対して脆弱になり、攻撃者がデータを復号化できるようになります。 -- **プライベート情報の漏洩**は、アプリケーションが安全なチャネルを使用して認証するが、他のトランザクションのために非安全なチャネルで通信する場合にリスクがあります。このアプローチは、セッションクッキーやユーザーの詳細などの機密データを悪意のあるエンティティによる傍受から保護できません。 +- **Certificates are not always inspected properly** by Android applications. 多くのアプリケーションは警告を無視して自己署名証明書を受け入れたり、場合によっては HTTP 接続に戻したりすることがよくあります。 +- **Negotiations during the SSL/TLS handshake are sometimes weak**, insecure な cipher suite を使用していることがあります。この脆弱性は接続を man-in-the-middle (MITM) 攻撃に対して脆弱にし、攻撃者がデータを復号できるようにします。 +- **Leakage of private information** は、アプリが一部の認証を安全なチャネルで行いながら、その他のやり取りで非暗号化チャネルを使う場合に発生するリスクです。この方法では、セッション cookie やユーザ情報などの機密データが悪意のある第三者に傍受される可能性から保護されません。 -#### 証明書の検証 +#### 証明書検証 -**証明書の検証**に焦点を当てます。サーバーの証明書の整合性を確認することは、セキュリティを強化するために重要です。これは、安全でないTLS構成や暗号化されていないチャネルを介して機密データを送信することが重大なリスクをもたらすため、重要です。サーバー証明書の検証と脆弱性への対処に関する詳細な手順は、[**このリソース**](https://manifestsecurity.com/android-application-security-part-10/)で包括的に説明されています。 +ここでは **certificate verification** に焦点を当てます。サーバーの証明書の整合性を検証することはセキュリティ強化のために不可欠です。不適切な TLS 設定や暗号化されていないチャネルでの機密データ送信は重大なリスクを招くため、サーバー証明書の検証と脆弱性への対応手順については [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) を参照してください。 -#### SSLピンニング +#### SSL Pinning -SSLピンニングは、アプリケーションがサーバーの証明書をアプリケーション内に保存された既知のコピーと照合するセキュリティ対策です。この方法は、MITM攻撃を防ぐために不可欠です。機密情報を扱うアプリケーションには、SSLピンニングの実装が強く推奨されます。 +SSL Pinning は、アプリがサーバーの証明書をアプリ内に格納された既知のコピーと照合するセキュリティ対策です。これは MITM 攻撃を防ぐために重要な手法であり、機密情報を扱うアプリケーションには SSL Pinning の実装が強く推奨されます。 -#### トラフィックの検査 +#### トラフィック検査 -HTTPトラフィックを検査するには、**プロキシツールの証明書をインストールする必要があります**(例:Burp)。この証明書をインストールしないと、暗号化されたトラフィックはプロキシを通じて表示されない可能性があります。カスタムCA証明書のインストールに関するガイドは、[**こちらをクリック**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)してください。 +HTTP トラフィックを検査するには、プロキシツールの証明書(例: Burp)を**インストールする必要があります**。この証明書をインストールしないと、暗号化されたトラフィックがプロキシで見えないことがあります。カスタム CA 証明書のインストール方法については [**click here**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine) を参照してください。 -**APIレベル24以上**をターゲットにしたアプリケーションは、プロキシのCA証明書を受け入れるためにネットワークセキュリティ構成を変更する必要があります。このステップは、暗号化されたトラフィックを検査するために重要です。ネットワークセキュリティ構成の変更に関する指示は、[**このチュートリアル**](make-apk-accept-ca-certificate.md)を参照してください。 +API Level 24 以降をターゲットにするアプリケーションは、プロキシの CA 証明書を受け入れるように Network Security Config の変更が必要です。暗号化トラフィックを検査するためにこの手順は重要です。Network Security Config の変更方法については [**refer to this tutorial**](make-apk-accept-ca-certificate.md) を参照してください。 -**Flutter**が使用されている場合は、[**このページ**](flutter.md)の指示に従う必要があります。これは、証明書をストアに追加するだけでは機能せず、Flutterには独自の有効なCAのリストがあるためです。 +もし **Flutter** を使用している場合は、[**this page**](flutter.md) の指示に従ってください。単に証明書をストアに追加するだけでは動作しないことがあり、Flutter は独自の有効な CA リストを使用しているためです。 -#### SSLピンニングのバイパス +#### Static detection of SSL/TLS pinning -SSLピンニングが実装されている場合、HTTPSトラフィックを検査するためにそれをバイパスする必要があります。この目的のためにさまざまな方法があります: +ランタイムでのバイパスを試す前に、まず APK 内で pinning がどこに強制されているかを素早くマップしてください。静的解析で場所を特定することで、フックやパッチの計画が立てやすくなり、正しいコードパスに集中できます。 -- **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) +Tool: SSLPinDetect +- Open-source static-analysis utility that decompiles the APK to Smali (via apktool) and scans for curated regex patterns of SSL/TLS pinning implementations. +- Reports exact file path, line number, and a code snippet for each match. +- Covers common frameworks and custom code paths: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, and Network Security Config XML pins. -#### 一般的なWeb脆弱性の検索 +Install +- Prereqs: Python >= 3.8, Java on PATH, apktool +```bash +git clone https://github.com/aancw/SSLPinDetect +cd SSLPinDetect +pip install -r requirements.txt +``` +使い方 +```bash +# Basic +python sslpindetect.py -f app.apk -a apktool.jar -アプリケーション内で一般的なWeb脆弱性を検索することも重要です。これらの脆弱性を特定し、軽減するための詳細な情報はこの要約の範囲を超えていますが、他の場所で広範にカバーされています。 +# Verbose (timings + per-match path:line + snippet) +python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v +``` +パターンルールの例 (JSON) +signaturesを使用または拡張して、独自/カスタムpinningスタイルを検出します。独自のJSONを読み込んで、大規模にスキャンできます。 +```json +{ +"OkHttp Certificate Pinning": [ +"Lcom/squareup/okhttp/CertificatePinner;", +"Lokhttp3/CertificatePinner;", +"setCertificatePinner" +], +"TrustManager Override": [ +"Ljavax/net/ssl/X509TrustManager;", +"checkServerTrusted" +] +} +``` +Notes and tips +- 大規模アプリの高速スキャンは multi-threading と memory-mapped I/O を利用;pre-compiled regex がオーバーヘッド/false positives を減らします。 +- Pattern collection: https://github.com/aancw/smali-sslpin-patterns +- 次にトリアージすべき典型的な検出対象: +- OkHttp: CertificatePinner usage, setCertificatePinner, okhttp3/okhttp package references +- Custom TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted overrides +- Custom SSL contexts: SSLContext.getInstance + SSLContext.init with custom managers +- Declarative pins in res/xml network security config and manifest references +- 一致した箇所を利用して、Frida hooks、static patches、または config reviews を dynamic testing の前に計画します。 + + + +#### SSL Pinning のバイパス + +SSL Pinning が実装されている場合、HTTPS トラフィックを調査するためにそれをバイパスする必要があります。これにはいくつかの方法があります: + +- Automatically **modify** the **apk** to **bypass** SSLPinning with [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). この方法の最大の利点は、SSL Pinning をバイパスするために 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**](frida-tutorial/objection-tutorial.md) を使って **自動的に SSL Pinning をバイパス** することもできます:**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` +- **MobSF dynamic analysis** を使って **自動的に SSL Pinning をバイパス** することも試せます(下で説明) +- まだキャプチャできていないトラフィックがあると思う場合は、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 脆弱性も検索することが重要です。これらの脆弱性の特定と緩和に関する詳細はこの要約の範囲外ですが、他の資料で広く扱われています。 ### Frida -[Frida](https://www.frida.re)は、開発者、リバースエンジニア、セキュリティ研究者のための動的インスツルメンテーションツールキットです。\ -**実行中のアプリケーションにアクセスし、実行時にメソッドをフックして動作を変更したり、値を変更したり、値を抽出したり、異なるコードを実行したりできます...**\ -Androidアプリケーションをペンテストするには、Fridaの使い方を知っておく必要があります。 +[Frida](https://www.frida.re) は開発者、リバースエンジニア、セキュリティ研究者向けの dynamic instrumentation toolkit です。\ +**実行中のアプリケーションにアクセスして、実行時にメソッドを hook し挙動を変えたり、値を変更・抽出したり、別のコードを実行したりできます...**\ +Android アプリを pentest したいなら、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) -- 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))。 +- Learn how to use Frida: [**Frida tutorial**](frida-tutorial/index.html) +- 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) +- Awesome な 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) に示されているように、linjector ツールを使って Frida をロードし、anti-debugging / anti-frida 機構を回避することを試みてください。(tool [linjector](https://github.com/erfur/linjector-rs)) -#### アンチインスツルメンテーションとSSLピンニングバイパスのワークフロー +#### Anti-instrumentation & SSL pinning bypass workflow {{#ref}} android-anti-instrumentation-and-ssl-pinning-bypass.md {{#endref}} -### **メモリダンプ - Fridump** +### **メモリのダンプ - Fridump** -アプリケーションがパスワードやニーモニックなど、保存すべきでない機密情報をメモリ内に保存しているかどうかを確認します。 +アプリがパスワードや mnemonic のように格納すべきでない機密情報をメモリ内に保存していないか確認してください。 -[**Fridump3**](https://github.com/rootbsd/fridump3)を使用して、アプリのメモリをダンプできます: +[**Fridump3**](https://github.com/rootbsd/fridump3) を使うと、次のようにアプリのメモリをダンプできます: ```bash # With PID python3 fridump3.py -u @@ -469,63 +528,63 @@ python3 fridump3.py -u frida-ps -Uai python3 fridump3.py -u "" ``` -これは、./dump フォルダーにメモリをダンプします。そこで、次のように grep できます: +これはメモリを ./dump フォルダにダンプし、そこで次のように grep できます: ```bash strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$" ``` ### **Keystore内の機密データ** -Androidでは、Keystoreは機密データを保存するのに最適な場所ですが、十分な権限があれば**アクセスすることが可能です**。アプリケーションはここに**平文で機密データを保存する傾向があるため**、ペンテストはルートユーザーとしてこれを確認する必要があります。さもなければ、物理的にデバイスにアクセスできる誰かがこのデータを盗むことができるかもしれません。 +AndroidではKeystoreが機密データを保存する最適な場所ですが、十分な権限があれば**アクセス可能**です。アプリはここに**sensitive data in clear text**を保存する傾向があるため、pentestsはroot userとして確認するべきです。物理的にデバイスにアクセスできる者がこのデータを盗むことができる可能性があります。 -アプリがKeystoreにデータを保存していても、そのデータは暗号化されているべきです。 +アプリがKeystoreにデータを保存している場合でも、そのデータは暗号化されているべきです。 -Keystore内のデータにアクセスするには、このFridaスクリプトを使用できます: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js) +Keystore内のデータにアクセスするには、次のFridaスクリプトを使用できます: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js) ```bash frida -U -f com.example.app -l frida-scripts/tracer-cipher.js ``` -### **指紋/生体認証バイパス** +### **Fingerprint/Biometrics Bypass** -次のFridaスクリプトを使用することで、Androidアプリケーションが特定の機密領域を保護するために実行している**指紋認証をバイパス**することが可能です: +以下の Frida script を使用すると、Android applications が **特定の機密領域を保護するために** 実行している **bypass fingerprint authentication** を回避できる場合があります: ```bash frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ``` ### **バックグラウンド画像** -アプリケーションをバックグラウンドに置くと、Androidはアプリケーションの**スナップショット**を保存します。これにより、フォアグラウンドに復帰したときにアプリがより早く読み込まれているように見えます。 +アプリをバックグラウンドにすると、Android は **アプリのスナップショット** を保存します。アプリがフォアグラウンドに復帰したとき、アプリ本体より先にその画像を読み込むことで、アプリの起動が速く見えるようになります。 -しかし、このスナップショットに**機密情報**が含まれている場合、スナップショットにアクセスできる誰かがその情報を**盗む可能性**があります(アクセスするにはルート権限が必要です)。 +しかし、この **アプリのスナップショット** に **機密情報** が含まれていると、スナップショットにアクセスできる人物が **その情報を盗む可能性** があります(アクセスには root が必要である点に注意)。 スナップショットは通常、次の場所に保存されます: **`/data/system_ce/0/snapshots`** -Androidは、FLAG_SECUREレイアウトパラメータを設定することで**スクリーンショットのキャプチャを防ぐ**方法を提供します。このフラグを使用すると、ウィンドウの内容は安全と見なされ、スクリーンショットに表示されたり、非安全なディスプレイで表示されたりするのを防ぎます。 +Android は **FLAG_SECURE を設定することでスクリーンショットの取得を防ぐ** レイアウトパラメータを提供します。このフラグを使用すると、ウィンドウの内容がセキュアとして扱われ、スクリーンショットに表示されたり、非セキュアなディスプレイで表示されるのを防ぎます。 ```bash getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); ``` ### **Android Application Analyzer** -このツールは、動的分析中に異なるツールを管理するのに役立ちます: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer) +このツールはダイナミック解析中に複数のツールを管理するのに役立ちます: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer) ### Intent Injection -開発者は、これらのインテントを処理し、`startActivity(...)`や`sendBroadcast(...)`などのメソッドに渡すプロキシコンポーネント(アクティビティ、サービス、ブロードキャストレシーバーなど)を作成することがよくありますが、これはリスクを伴います。 +開発者はしばしばこれらのIntentsを処理し、`startActivity(...)`や`sendBroadcast(...)`などのメソッドに渡すプロキシコンポーネント(activities、services、broadcast receivers)を作成しますが、これは危険を伴う場合があります。 -危険は、攻撃者がこれらのインテントを誤って誘導することによって、非エクスポートアプリコンポーネントをトリガーしたり、機密コンテンツプロバイダーにアクセスしたりできることにあります。注目すべき例は、`WebView`コンポーネントがURLを`Intent`オブジェクトに変換し、`Intent.parseUri(...)`を介して実行することで、悪意のあるインテント注入につながる可能性があります。 +この危険は、攻撃者がこれらのIntentsを誤誘導してnon-exportedなアプリコンポーネントをトリガーしたり、機密性の高いcontent providersにアクセスすることを許してしまう点にあります。代表的な例として、`WebView`が`Intent.parseUri(...)`でURLを`Intent`オブジェクトに変換し、それを実行することで、悪意あるIntent注入が発生する可能性があります。 ### Essential Takeaways -- **Intent Injection**は、ウェブのオープンリダイレクト問題に似ています。 -- 脆弱性は、`Intent`オブジェクトをエクストラとして渡すことに関与し、これが不正な操作を実行するためにリダイレクトされる可能性があります。 -- 攻撃者に非エクスポートコンポーネントやコンテンツプロバイダーを露出させる可能性があります。 -- `WebView`のURLから`Intent`への変換は、意図しないアクションを促進する可能性があります。 +- **Intent Injection** is similar to web's Open Redirect issue. +- エクスプロイトは`Intent`オブジェクトをextrasとして渡し、それがリダイレクトされて安全でない操作を実行させる方法を含みます。 +- 攻撃者にnon-exportedなコンポーネントやcontent providersを露出させる可能性があります。 +- `WebView`のURLから`Intent`への変換は意図しない動作を引き起こす可能性があります。 ### Android Client Side Injections and others -おそらく、あなたはウェブからこの種の脆弱性について知っているでしょう。Androidアプリケーションにおいては、これらの脆弱性に特に注意する必要があります: +おそらくWebでこの種の脆弱性について知っているでしょう。Androidアプリケーションでは特に以下の脆弱性に注意する必要があります: -- **SQL Injection:** 動的クエリやコンテンツプロバイダーを扱う際は、パラメータ化されたクエリを使用していることを確認してください。 -- **JavaScript Injection (XSS):** すべてのWebViewに対してJavaScriptおよびプラグインサポートが無効になっていることを確認してください(デフォルトで無効)。 [More info here](webview-attacks.md#javascript-enabled). -- **Local File Inclusion:** WebViewはファイルシステムへのアクセスを無効にする必要があります(デフォルトで有効) - `(webview.getSettings().setAllowFileAccess(false);)`。 [More info here](webview-attacks.md#javascript-enabled). -- **Eternal cookies**: Androidアプリケーションがセッションを終了するとき、クッキーが取り消されない場合や、ディスクに保存されることがあります。 +- **SQL Injection:** 動的クエリやContent-Providersを扱う際は、パラメータ化されたクエリを使用していることを確認してください。 +- **JavaScript Injection (XSS):** すべてのWebViewsでJavaScriptやPluginのサポートが無効になっていることを確認してください(デフォルトでは無効)。 [More info here](webview-attacks.md#javascript-enabled). +- **Local File Inclusion:** WebViewsはファイルシステムへのアクセスを無効にしておくべきです(デフォルトでは有効) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled). +- **Eternal cookies**: 多くの場合、Androidアプリがセッションを終了してもクッキーが取り消されない、あるいはディスクに保存されることがあります。 - [**Secure Flag** in cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags) --- @@ -538,51 +597,51 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); ![](<../../images/image (866).png>) -**アプリケーションの脆弱性評価**を行うための素晴らしいウェブベースのフロントエンドを使用します。動的分析も実行できますが、環境を準備する必要があります。 +**Vulnerability assessment of the application** を使いやすいWebベースのフロントエンドで実行します。動的解析も行うことができます(ただし環境の準備が必要です)。 ```bash docker pull opensecurity/mobile-security-framework-mobsf docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest ``` -MobSFは**Android**(apk)**、IOS**(ipa) **およびWindows**(apx)アプリケーションを分析できます(_WindowsアプリケーションはWindowsホストにインストールされたMobSFから分析する必要があります_)。\ -また、**Android**または**IOS**アプリのソースコードで**ZIP**ファイルを作成すると(アプリケーションのルートフォルダーに移動し、すべてを選択してZIPファイルを作成)、それも分析できます。 +Notice that MobSF can analyse **Android**(apk)**, IOS**(ipa) **and Windows**(apx) applications (_Windows applications must be analyzed from a MobSF installed in a Windows host_).\ +Also, if you create a **ZIP** file with the source code if an **Android** or an **IOS** app (go to the root folder of the application, select everything and create a ZIPfile), it will be able to analyse it also. -MobSFは**diff/Compare**分析を行い、**VirusTotal**を統合することもできます(_MobSF/settings.py_にAPIキーを設定し、`VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`を有効にする必要があります)。`VT_UPLOAD`を`False`に設定すると、**ハッシュ**がファイルの代わりに**アップロード**されます。 +MobSF also allows you to **diff/Compare** analysis and to integrate **VirusTotal** (you will need to set your API key in _MobSF/settings.py_ and enable it: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). You can also set `VT_UPLOAD` to `False`, then the **hash** will be **upload** instead of the file. -### MobSFによる支援された動的分析 +### Assisted Dynamic analysis with MobSF -**MobSF**は**Android**における**動的分析**にも非常に役立ちますが、その場合はホストにMobSFと**genymotion**をインストールする必要があります(VMやDockerでは動作しません)。_注:最初に**genymotionでVMを起動**し、**その後MobSFを起動**する必要があります。_\ -**MobSF動的アナライザー**は以下を行うことができます: +**MobSF** can also be very helpful for **dynamic analysis** in **Android**, but in that case you will need to install MobSF and **genymotion** in your host (a VM or Docker won't work). _Note: You need to **start first a VM in genymotion** and **then MobSF.**_\ +The **MobSF dynamic analyser** can: -- **アプリケーションデータをダンプ**(URL、ログ、クリップボード、あなたが撮ったスクリーンショット、"Exported Activity Tester"によって作成されたスクリーンショット、メール、SQLiteデータベース、XMLファイル、その他の作成されたファイル)。これらはすべて自動的に行われますが、スクリーンショットは撮りたいときにボタンを押す必要があります。または、すべてのエクスポートされたアクティビティのスクリーンショットを取得するために"Exported Activity Tester"を押す必要があります。 -- **HTTPSトラフィックをキャプチャ** -- **Frida**を使用して**ランタイム**の**情報**を取得 +- **Dump application data** (URLs, logs, clipboard, screenshots made by you, screenshots made by "**Exported Activity Tester**", emails, SQLite databases, XML files, and other created files). All of this is done automatically except for the screenshots, you need to press when you want a screenshot or you need to press "**Exported Activity Tester**" to obtain screenshots of all the exported activities. +- Capture **HTTPS traffic** +- Use **Frida** to obtain **runtime** **information** -Androidの**バージョン > 5**では、**Frida**が**自動的に起動**し、トラフィックを**キャプチャ**するためのグローバル**プロキシ**設定が行われます。テストされたアプリケーションからのトラフィックのみをキャプチャします。 +From android **versions > 5**, it will **automatically start Frida** and will set global **proxy** settings to **capture** traffic. It will only capture traffic from the tested application. **Frida** -デフォルトでは、SSLピンニング、**ルート検出**、**デバッガ検出**を**バイパス**し、**興味深いAPI**を**監視**するためにいくつかのFridaスクリプトを使用します。\ -MobSFはまた、**エクスポートされたアクティビティを呼び出し**、それらの**スクリーンショットを取得**し、レポート用に**保存**することもできます。 +By default, it will also use some Frida Scripts to **bypass SSL pinning**, **root detection** and **debugger detection** and to **monitor interesting APIs**.\ +MobSF can also **invoke exported activities**, grab **screenshots** of them and **save** them for the report. -動的テストを**開始**するには、緑のボタン"**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**"内で見ることができます)。 +To **start** the dynamic testing press the green bottom: "**Start Instrumentation**". Press the "**Frida Live Logs**" to see the logs generated by the Frida scripts and "**Live API Monitor**" to see all the invocation to hooked methods, arguments passed and returned values (this will appear after pressing "Start Instrumentation").\ +MobSF also allows you to load your own **Frida scripts** (to send the results of your Friday scripts to MobSF use the function `send()`). It also has **several pre-written scripts** you can load (you can add more in `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), just **select them**, press "**Load**" and press "**Start Instrumentation**" (you will be able to see the logs of that scripts inside "**Frida Live Logs**"). ![](<../../images/image (419).png>) -さらに、いくつかの補助的なFrida機能があります: +Moreover, you have some Auxiliary Frida functionalities: -- **読み込まれたクラスを列挙**:すべての読み込まれたクラスを表示します -- **文字列をキャプチャ**:アプリケーションを使用中にキャプチャされたすべての文字列を表示します(非常にノイジーです) -- **文字列比較をキャプチャ**:非常に便利です。**比較されている2つの文字列**と、結果がTrueかFalseかを表示します。 -- **クラスメソッドを列挙**:クラス名(例:"java.io.File")を入力すると、そのクラスのすべてのメソッドが表示されます。 -- **クラスパターンを検索**:パターンでクラスを検索します -- **クラスメソッドをトレース**:**クラス全体をトレース**します(そのクラスのすべてのメソッドの入力と出力を確認します)。デフォルトでは、MobSFは興味深いAndroid APIメソッドをいくつかトレースします。 +- **Enumerate Loaded Classes**: It will print all the loaded classes +- **Capture Strings**: It will print all the capture strings while using the application (super noisy) +- **Capture String Comparisons**: Could be very useful. It will **show the 2 strings being compared** and if the result was True or False. +- **Enumerate Class Methods**: Put the class name (like "java.io.File") and it will print all the methods of the class. +- **Search Class Pattern**: Search classes by pattern +- **Trace Class Methods**: **Trace** a **whole class** (see inputs and outputs of all methods of th class). Remember that by default MobSF traces several interesting Android Api methods. -使用したい補助モジュールを選択したら、"**Start Intrumentation**"を押すと、すべての出力が"**Frida Live Logs**"に表示されます。 +Once you have selected the auxiliary module you want to use you need to press "**Start Intrumentation**" and you will see all the outputs in "**Frida Live Logs**". **Shell** -Mobsfは、動的分析ページの下部にいくつかの**adb**コマンド、**MobSFコマンド**、および一般的な**シェル**コマンドを持つシェルも提供します。いくつかの興味深いコマンド: +Mobsf also brings you a shell with some **adb** commands, **MobSF commands**, and common **shell** **commands** at the bottom of the dynamic analysis page. Some interesting commands: ```bash help shell ls @@ -591,34 +650,34 @@ exported_activities services receivers ``` -**HTTPツール** +**HTTP tools** -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**"ボタンではより見やすい表示が得られます。後者から、キャプチャしたリクエストをBurpやOwasp ZAPなどの**プロキシ**に**送信**できます。\ +その方法は、_power on Burp -->_ _turn off Intercept --> in MobSB HTTPTools select the request_ --> "**Send to Fuzzer**" を押す --> _select the proxy address_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080))。 -MobSFで動的分析が終了したら、"**Start Web API Fuzzer**"を押して**HTTPリクエストをファズ**し、脆弱性を探します。 +MobSFでdynamic analysisを終えたら、"**Start Web API Fuzzer**"を押してhttpリクエストを**fuzz**し、脆弱性を探すことができます。 > [!TIP] -> MobSFで動的分析を実行した後、プロキシ設定が誤って構成される可能性があり、GUIから修正できなくなることがあります。プロキシ設定を修正するには、次のコマンドを実行します: +> MobSFでdynamic analysisを実行した後、プロキシ設定が誤って構成され、GUIから修正できない場合があります。次のコマンドでプロキシ設定を修正できます: > > ``` > adb shell settings put global http_proxy :0 > ``` -### Inspeckageを使用した支援動的分析 +### Assisted Dynamic Analysis with Inspeckage -ツールは[**Inspeckage**](https://github.com/ac-pm/Inspeckage)から入手できます。\ -このツールは、**動的分析**を実行している間に**アプリケーションで何が起こっているか**を知らせるためにいくつかの**フック**を使用します。 +You can get the tool from [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\ +このツールは**Hooks**を使用して、dynamic analysis中に**アプリケーション内で何が起きているか**を知らせてくれます。 ### [Yaazhini](https://www.vegabird.com/yaazhini/) -これは**GUIを使用した静的分析を実行するための優れたツール**です。 +GUIでstatic analysisを行うのに**優れたツール**です。 ![](<../../images/image (741).png>) ### [Qark](https://github.com/linkedin/qark) -このツールは、**ソースコード**または**パッケージ化されたAPK**のいずれかで、いくつかの**セキュリティ関連のAndroidアプリケーションの脆弱性**を探すように設計されています。このツールは、発見された脆弱性(公開されたアクティビティ、インテント、タップジャッキングなど)を悪用するための**「Proof-of-Concept」デプロイ可能APK**と**ADBコマンド**を作成することも**可能です**。Drozerと同様に、テストデバイスをルート化する必要はありません。 +このツールは、source codeまたはpackaged APKsのいずれかを対象に、複数のsecurity-relatedなAndroidアプリの脆弱性を検出するよう設計されています。ツールは"Proof-of-Concept"としてデプロイ可能なAPKやADBコマンドも生成でき、発見した脆弱性のいくつか(Exposed activities、intents、tapjacking...)を悪用することが可能です。Drozerと同様に、テストデバイスをrootする必要はありません。 ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -627,22 +686,22 @@ qark --java path/to/specific/java/file.java ``` ### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git) -- 参照用にすべての抽出ファイルを表示 -- APKファイルを自動的にJavaおよびSmali形式にデコンパイル -- 一般的な脆弱性と動作のためにAndroidManifest.xmlを分析 -- 一般的な脆弱性と動作のための静的ソースコード分析 +- 抽出されたすべてのファイルを表示して参照しやすくする +- APKファイルを自動的にJavaおよびSmali形式にデコンパイルする +- AndroidManifest.xmlを解析し、一般的な脆弱性や挙動を検出する +- 一般的な脆弱性や挙動を対象とした静的ソースコード解析 - デバイス情報 -- その他多数 +- その他 ```bash reverse-apk relative/path/to/APP.apk ``` ### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super) -SUPERは、Windows、MacOS X、Linuxで使用できるコマンドラインアプリケーションで、脆弱性を探すために_.apk_ファイルを分析します。これは、APKを解凍し、脆弱性を検出するための一連のルールを適用することによって行われます。 +SUPERはWindows、MacOS X、Linuxで使用できるコマンドラインアプリケーションで、_.apk_ファイルを解析して脆弱性を検出します。APKsを解凍し、一連のルールを適用してそれらの脆弱性を見つけます。 -すべてのルールは`rules.json`ファイルに集中しており、各企業やテスターは自分たちのニーズに応じて分析するための独自のルールを作成できます。 +すべてのルールは`rules.json`ファイルに集約されており、各企業やテスターは必要に応じて独自のルールを作成できます。 -最新のバイナリは[ダウンロードページ](https://superanalyzer.rocks/download.html)からダウンロードしてください。 +最新のバイナリは[download page](https://superanalyzer.rocks/download.html)からダウンロードしてください。 ``` super-analyzer {apk_file} ``` @@ -650,29 +709,29 @@ super-analyzer {apk_file} ![](<../../images/image (297).png>) -StaCoAnは、開発者、バグバウンティハンター、倫理的ハッカーがモバイルアプリケーションに対して[静的コード分析](https://en.wikipedia.org/wiki/Static_program_analysis)を行うのを支援する**クロスプラットフォーム**ツールです。 +StaCoAnは、モバイルアプリケーションに対して[static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis)を行う開発者、bugbounty hunters、ethical hackersを支援する**crossplatform**ツールです。 -このコンセプトは、モバイルアプリケーションファイル(.apkまたは.ipaファイル)をStaCoAnアプリケーションにドラッグアンドドロップすると、視覚的でポータブルなレポートが生成されるというものです。設定やワードリストを調整して、カスタマイズされた体験を得ることができます。 +コンセプトは、モバイルアプリケーションのファイル(.apk または .ipa ファイル)を StaCoAn アプリケーションにドラッグ&ドロップすると、視覚的で持ち運び可能なレポートを生成するというものです。設定や wordlists を調整してカスタマイズされた体験を得ることができます。 -ダウンロード[最新リリース](https://github.com/vincentcox/StaCoAn/releases): +ダウンロード[ latest release](https://github.com/vincentcox/StaCoAn/releases): ``` ./stacoan ``` ### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework) -AndroBugs Frameworkは、Androidアプリケーションの潜在的なセキュリティ脆弱性を開発者やハッカーが見つけるのを助けるAndroid脆弱性分析システムです。\ -[Windowsリリース](https://github.com/AndroBugs/AndroBugs_Framework/releases) +AndroBugs Framework は Android 脆弱性解析システムで、developers や hackers が Android applications の潜在的な security vulnerabilities を発見するのを支援します。\ +[Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases) ``` python androbugs.py -f [APK file] androbugs.exe -f [APK file] ``` ### [Androwarn](https://github.com/maaaaz/androwarn) -**Androwarn**は、Androidアプリケーションによって開発された潜在的な悪意のある動作を検出し、ユーザーに警告することを主な目的としたツールです。 +**Androwarn** は、Android アプリケーションによって行われる潜在的な悪意ある振る舞いを検出し、ユーザーに警告することを主目的としたツールです。 -検出は、アプリケーションのDalvikバイトコードの**静的解析**を使用して行われ、**Smali**として表現されます。[`androguard`](https://github.com/androguard/androguard)ライブラリを使用しています。 +検出は、アプリケーションの Dalvik bytecode を **Smali** として表現したものの **static analysis** を、[`androguard`](https://github.com/androguard/androguard) ライブラリで実行することで行われます。 -このツールは、次のような「悪い」アプリケーションの**一般的な動作**を探します:電話識別子の流出、音声/ビデオフローの傍受、PIMデータの変更、任意のコード実行... +このツールは、**common behavior of "bad" applications** のような次の挙動を検出します: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution... ``` python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ``` @@ -680,81 +739,84 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3 ![](<../../images/image (595).png>) -**MARA**は**モバイルアプリケーションの逆アセンブルおよび分析フレームワーク**です。これは、OWASPモバイルセキュリティ脅威に対してモバイルアプリケーションをテストするために、一般的に使用されるモバイルアプリケーションの逆アセンブルおよび分析ツールをまとめたツールです。その目的は、この作業をモバイルアプリケーションの開発者やセキュリティ専門家にとってより簡単で親しみやすくすることです。 +**MARA** is a **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework. モバイルアプリケーションの一般的なリバースエンジニアリングおよび解析ツールをまとめたツールで、OWASPのモバイルセキュリティ脅威に対するアプリのテストを支援します。目的は、モバイルアプリ開発者やセキュリティ担当者にとってこの作業をより簡単で扱いやすくすることです。 -以下のことが可能です: +できること: -- 異なるツールを使用してJavaおよびSmaliコードを抽出する -- [smalisca](https://github.com/dorneanu/smalisca)、[ClassyShark](https://github.com/google/android-classyshark)、[androbugs](https://github.com/AndroBugs/AndroBugs_Framework)、[androwarn](https://github.com/maaaaz/androwarn)、[APKiD](https://github.com/rednaga/APKiD)を使用してAPKを分析する -- 正規表現を使用してAPKからプライベート情報を抽出する -- マニフェストを分析する -- [pyssltest](https://github.com/moheshmohan/pyssltest)、[testssl](https://github.com/drwetter/testssl.sh)、[whatweb](https://github.com/urbanadventurer/WhatWeb)を使用して見つかったドメインを分析する -- [apk-deguard.com](http://www.apk-deguard.com)を介してAPKをデオブフスケートする +- さまざまなツールを使って Java および Smali コードを抽出する +- 以下を使用して APK を解析する: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD) +- 正規表現を使用して APK から機密情報を抽出する +- Manifest を解析する +- 見つかったドメインを以下で解析する: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) および [whatweb](https://github.com/urbanadventurer/WhatWeb) +- [apk-deguard.com] を使って APK の難読化を解除する ### Koodous -マルウェアを検出するのに役立ちます: [https://koodous.com/](https://koodous.com) +malware の検出に便利: [https://koodous.com/](https://koodous.com/) -## コードの難読化/デオブフスケート +## Obfuscating/Deobfuscating code -使用するサービスと設定によって、コードを難読化する際に秘密が難読化される場合とされない場合があります。 +使用するサービスや設定によって、コードを難読化した場合でも秘密情報が難読化される場合とされない場合があります。 ### [ProGuard]() -[Wikipedia](より): **ProGuard**は、Javaコードを縮小、最適化、難読化するオープンソースのコマンドラインツールです。バイトコードを最適化し、未使用の命令を検出して削除することができます。ProGuardはフリーソフトウェアで、GNU一般公衆ライセンス第2版の下で配布されています。 +From [Wikipedia](): **ProGuard** は Java コードを縮小、最適化、難読化するオープンソースのコマンドラインツールです。バイトコードの最適化や未使用命令の検出と削除が可能です。ProGuard はフリーソフトウェアで、GNU General Public License, version 2 の下で配布されています。 -ProGuardはAndroid SDKの一部として配布され、アプリケーションをリリースモードでビルドする際に実行されます。 +ProGuard は Android SDK の一部として配布され、アプリをリリースモードでビルドするときに実行されます。 ### [DexGuard](https://www.guardsquare.com/dexguard) -APKをデオブフスケートするためのステップバイステップガイドは[https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)で見つけることができます。 +apk の難読化解除に関するステップバイステップのガイドは [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) を参照してください。 -(そのガイドから)最後に確認したとき、Dexguardの動作モードは次のとおりでした: +(そのガイドによると) 最後に確認したときの DexGuard の動作モードは次の通りでした: -- リソースをInputStreamとして読み込む; -- 結果をFilterInputStreamから継承したクラスに渡して復号化する; -- リバースエンジニアに数分の時間を無駄にさせるために無駄な難読化を行う; -- 復号化された結果をZipInputStreamに渡してDEXファイルを取得する; -- 最後に、`loadDex`メソッドを使用して結果のDEXをリソースとして読み込む。 +- リソースを InputStream として読み込む +- FilterInputStream を継承したクラスに結果を渡して復号する +- リバースエンジニアの時間を少し浪費するために無駄な難読化を行う +- 復号した結果を ZipInputStream に渡して DEX ファイルを取り出す +- 最後に得られた DEX を `loadDex` メソッドを使って Resource としてロードする ### [DeGuard](http://apk-deguard.com) -**DeGuardは、Androidの難読化ツールによって行われた難読化プロセスを逆転させます。これにより、コード検査やライブラリの予測を含む多数のセキュリティ分析が可能になります。** +**DeGuard は Android の難読化ツールによって行われた難読化プロセスを逆にします。これによりコードの検査やライブラリの特定など、多くのセキュリティ解析が可能になります。** -難読化されたAPKを彼らのプラットフォームにアップロードできます。 +難読化された APK を彼らのプラットフォームにアップロードできます。 -### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app) +### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app -これは、Androidアプリの潜在的なセキュリティ脆弱性を見つけ、AndroidアプリコードをデオブフスケートするためのLLMツールです。GoogleのGeminiパブリックAPIを使用します。 +これは android アプリの潜在的なセキュリティ脆弱性を見つけ、android アプリのコードを deobfuscate するための LLM ツールです。Google's Gemini public API を使用します。 ### [Simplify](https://github.com/CalebFenton/simplify) -これは**一般的なAndroidデオブフスケーター**です。Simplifyは**アプリを仮想的に実行**してその動作を理解し、その後**コードを最適化しようとします**。最適化の各タイプはシンプルで一般的であるため、使用される特定の難読化のタイプは関係ありません。 +汎用の android deobfuscator です。Simplify はアプリをほぼ実行してその挙動を理解し、その後コードを最適化して同一の挙動を保ちつつ人間にとって理解しやすくしようとします。各最適化タイプは単純かつ汎用的なので、どのような特定の難読化手法が使われているかは問題になりません。 ### [APKiD](https://github.com/rednaga/APKiD) -APKiDは**APKがどのように作成されたか**に関する情報を提供します。多くの**コンパイラ**、**パッカー**、**難読化ツール**、およびその他の奇妙なものを特定します。これはAndroid用の[_PEiD_](https://www.aldeid.com/wiki/PEiD)です。 +APKiD は APK がどのように作られたかの情報を提供します。多くのコンパイラ、パッカー、オブフuscator(難読化ツール)やその他の怪しいものを識別します。Android における [_PEiD_](https://www.aldeid.com/wiki/PEiD) のような存在です。 -### マニュアル +### Manual -[カスタム難読化を逆転させる方法に関するいくつかのトリックを学ぶためにこのチュートリアルを読んでください](manual-deobfuscation.md) +[Read this tutorial to learn some tricks on **how to reverse custom obfuscation**](manual-deobfuscation.md) -## ラボ +## Labs ### [Androl4b](https://github.com/sh4hin/Androl4b) -AndroL4bは、Ubuntu-mateに基づいたAndroidセキュリティ仮想マシンで、リバースエンジニアリングやマルウェア分析のための最新のフレームワーク、チュートリアル、ラボのコレクションを含んでいます。 +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/#/) これは素晴らしいリソースのリストです -- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Androidのクイックコース +- [https://appsecwiki.com/#/](https://appsecwiki.com/#/) — 素晴らしいリソース集です +- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) — Android クイックコース - [https://manifestsecurity.com/android-application-security/](https://manifestsecurity.com/android-application-security/) - [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) +- [SSLPinDetect: Advanced SSL Pinning Detection for Android Security Analysis](https://petruknisme.medium.com/sslpindetect-advanced-ssl-pinning-detection-for-android-security-analysis-1390e9eca097) +- [SSLPinDetect GitHub](https://github.com/aancw/SSLPinDetect) +- [smali-sslpin-patterns](https://github.com/aancw/smali-sslpin-patterns) -## まだ試していない +## 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)