Translated ['src/mobile-pentesting/android-app-pentesting/README.md', 's

This commit is contained in:
Translator 2025-08-04 18:35:54 +00:00
parent 2bd8a3f7ce
commit 29140a5d4e
4 changed files with 249 additions and 96 deletions

View File

@ -322,6 +322,7 @@
- [Android APK Checklist](mobile-pentesting/android-checklist.md)
- [Android Applications Pentesting](mobile-pentesting/android-app-pentesting/README.md)
- [Accessibility Services Abuse](mobile-pentesting/android-app-pentesting/accessibility-services-abuse.md)
- [Android Applications Basics](mobile-pentesting/android-app-pentesting/android-applications-basics.md)
- [Android Task Hijacking](mobile-pentesting/android-app-pentesting/android-task-hijacking.md)
- [ADB Commands](mobile-pentesting/android-app-pentesting/adb-commands.md)

View File

@ -12,10 +12,10 @@ android-applications-basics.md
## ADB (Android Debug Bridge)
これは、Androidデバイスエミュレートまたは物理に接続するために必要な主なツールです。\
これは、Androidデバイスエミュレートされたものまたは物理的なもの)に接続するために必要な主なツールです。\
**ADB**は、コンピュータから**USB**または**ネットワーク**経由でデバイスを制御することを可能にします。このユーティリティは、**ファイルのコピー**、**アプリのインストール**と**アンインストール**、**シェルコマンドの実行**、**データのバックアップ**、**ログの読み取り**など、さまざまな機能を提供します。
以下の[**ADB Commands**](adb-commands.md)のリストを確認して、adbの使い方を学んでください。
adbの使い方を学ぶために、以下の[**ADB Commands**](adb-commands.md)のリストを確認してください。
## Smali
@ -24,11 +24,12 @@ android-applications-basics.md
## Other interesting tricks
- [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)
- **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)
- Extract APK from device:
- [Play Storeでの位置情報の偽装](spoofing-your-location-in-play-store.md)
- [Shizuku Privileged APIADBベースの非ルート特権アクセス](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を抽出する:
```bash
adb shell pm list packages
com.android.insecurebankv2
@ -60,7 +61,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**
@ -73,18 +74,18 @@ APKの**文字列**を確認するだけで、**パスワード**、**URL** ([ht
**Manifest.xml**から特定された**脆弱性**には以下が含まれます:
- **デバッグ可能なアプリケーション**: _Manifest.xml_ファイルでデバッグ可能として設定されたアプリケーション`debuggable="true"`)は、接続を許可するため、悪用のリスクがあります。デバッグ可能なアプリケーションを見つけて悪用する方法については、チュートリアルを参照してください。
- **バックアップ設定**: 機密情報を扱うアプリケーションには、`android:allowBackup="false"`属性を明示的に設定する必要があります。これにより、USBデバッグが有効な場合にadbを介した不正なデータバックアップを防ぎます。
- **バックアップ設定**: 機密情報を扱うアプリケーションには、`android:allowBackup="false"`属性を明示的に設定する必要があります。これにより、特にUSBデバッグが有効な場合にadbを介した不正なデータバックアップを防ぎます。
- **ネットワークセキュリティ**: _res/xml/_内のカスタムネットワークセキュリティ設定`android:networkSecurityConfig="@xml/network_security_config"`は、証明書ピンやHTTPトラフィック設定などのセキュリティ詳細を指定できます。特定のドメインに対してHTTPトラフィックを許可することが一例です。
- **エクスポートされたアクティビティとサービス**: マニフェスト内のエクスポートされたアクティビティとサービスを特定することで、悪用される可能性のあるコンポーネントを明らかにできます。動的テスト中のさらなる分析により、これらのコンポーネントを悪用する方法が明らかになります。
- **コンテンツプロバイダーとファイルプロバイダー**: 公開されたコンテンツプロバイダーは、不正アクセスやデータの変更を許可する可能性があります。ファイルプロバイダーの設定も注意深く確認する必要があります。
- **ブロードキャストレシーバーとURLスキーム**: これらのコンポーネントは悪用される可能性があり、特に入力脆弱性に対するURLスキームの管理方法に注意が必要です。
- **コンテンツプロバイダーとファイルプロバイダー**: 公開されたコンテンツプロバイダーは、データへの不正アクセスや変更を許可する可能性があります。ファイルプロバイダーの設定も注意深く確認する必要があります。
- **ブロードキャストレシーバーとURLスキーム**: これらのコンポーネントは悪用される可能性があり、特に入力脆弱性に対するURLスキームの管理方法に注意を払う必要があります。
- **SDKバージョン**: `minSdkVersion``targetSDKVersion``maxSdkVersion`属性は、サポートされているAndroidバージョンを示し、セキュリティ上の理由から古い脆弱なAndroidバージョンをサポートしないことの重要性を強調します。
**strings.xml**ファイルからは、APIキー、カスタムスキーマ、その他の開発者ートなどの機密情報が発見される可能性があり、これらのリソースの注意深いレビューが必要です。
### タップジャッキング
**タップジャッキング**は、**悪意のある** **アプリケーション**が起動され、**被害者アプリケーションの上に位置する**攻撃です。被害者アプリを視覚的に隠すと、そのユーザーインターフェースはユーザーを騙してそれ対話させるように設計されており、実際には被害者アプリに対してその対話を渡しています。\
**タップジャッキング**は、**悪意のある** **アプリケーション**が起動され、**被害者アプリケーションの上に位置する**攻撃です。被害者アプリを視覚的に隠すと、そのユーザーインターフェースはユーザーを騙してそれ対話させるように設計されており、実際には被害者アプリに対してその対話を渡しています。\
実際には、**ユーザーが被害者アプリでアクションを実行していることを知らないようにしています**。
詳細情報は以下を参照してください:
@ -103,14 +104,14 @@ tapjacking.md
android-task-hijacking.md
{{#endref}}
### 不安定なデータストレージ
### 不適切なデータストレージ
**内部ストレージ**
Androidでは、**内部**ストレージに**保存された**ファイルは、**作成した**アプリケーションのみが**アクセスできる**ように**設計されています**。このセキュリティ対策はAndroidオペレーティングシステムによって**強制され**、ほとんどのアプリケーションのセキュリティニーズには一般的に十分です。しかし、開発者は時折、`MODE_WORLD_READABLE``MODE_WORLD_WRITABLE`のようなモードを利用して、ファイルを異なるアプリケーション間で**共有**できるようにします。しかし、これらのモードは、他のアプリケーション(潜在的に悪意のあるものを含む)によるこれらのファイルへのアクセスを**制限しません**。
Androidでは、**内部**ストレージに**保存された**ファイルは、**作成した**アプリのみが**アクセスできる**ように**設計されています**。このセキュリティ対策はAndroidオペレーティングシステムによって**強制され**、ほとんどのアプリケーションのセキュリティニーズには一般的に十分です。しかし、開発者は時折、`MODE_WORLD_READABLE``MODE_WORLD_WRITABLE`のようなモードを利用して、ファイルを異なるアプリケーション間で**共有**できるようにします。しかし、これらのモードは、他のアプリケーション(潜在的に悪意のあるものを含む)によるこれらのファイルへのアクセスを**制限しません**。
1. **静的分析:**
- `MODE_WORLD_READABLE`および`MODE_WORLD_WRITABLE`の使用が**慎重に精査されるべきです**。これらのモードは、**意図しないまたは不正なアクセス**をファイルに対して**露出させる可能性があります**。
- `MODE_WORLD_READABLE`および`MODE_WORLD_WRITABLE`の使用が**注意深く検討されるべきです**。これらのモードは、**意図しないまたは不正なアクセス**をファイルに対して**露出させる可能性があります**。
2. **動的分析:**
- アプリによって作成されたファイルに設定された**権限**を**確認**します。特に、ファイルが**全世界に対して読み取りまたは書き込み可能に設定されているか**を**チェック**します。これは重大なセキュリティリスクを引き起こす可能性があり、デバイスにインストールされた**任意のアプリケーション**が、出所や意図に関係なく、これらのファイルを**読み取ったり変更したり**できるようになります。
@ -119,7 +120,7 @@ Androidでは、**内部**ストレージに**保存された**ファイルは
**外部ストレージ**上のファイルを扱う際には、いくつかの注意が必要です:
1. **アクセス可能性**:
- 外部ストレージ上のファイルは**全世界に対して読み取りおよび書き込み可能**です。これは、任意のアプリケーションやユーザーがこれらのファイルにアクセスできることを意味します。
- 外部ストレージ上のファイルは**全世界に対して読み取りおよび書き込み可能**です。つまり、任意のアプリケーションやユーザーがこれらのファイルにアクセスできます。
2. **セキュリティの懸念**:
- アクセスの容易さを考慮すると、**機密情報を外部ストレージに保存しないことが推奨されます**。
- 外部ストレージは取り外し可能であり、任意のアプリケーションによってアクセスされる可能性があるため、セキュリティが低下します。
@ -131,7 +132,7 @@ Androidでは、**内部**ストレージに**保存された**ファイルは
外部ストレージは`/storage/emulated/0``/sdcard``/mnt/sdcard`で**アクセス可能**です。
> [!TIP]
> Android 4.4**API 17**以降、SDカードにはアプリ専用のディレクトリ構造があり、**アプリがそのアプリ専用のディレクトリにのみアクセスできるように制限されています**。これにより、悪意のあるアプリケーションが他のアプリのファイルに対して読み取りまたは書き込みアクセスを得ることを防ぎます。
> Android 4.4**API 17**以降、SDカードには、**アプリ専用のディレクトリへのアクセスを制限するディレクトリ構造**があります。これにより、悪意のあるアプリケーションが他のアプリのファイルに対して読み取りまたは書き込みアクセスを得ることが防止されます。
**平文で保存された機密データ**
@ -142,7 +143,7 @@ Androidでは、**内部**ストレージに**保存された**ファイルは
**すべての証明書を受け入れる**
何らかの理由で、開発者はホスト名が一致しない場合でも、すべての証明書を受け入れることがあります。例えば、以下のようなコード行がある場合です:
何らかの理由で、開発者はホスト名がコードの行と一致しない場合でも、すべての証明書を受け入れることがあります。
```java
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
@ -162,9 +163,9 @@ A good way to test this is to try to capture the traffic using some proxy like B
### Other checks
- APKを**難読化する**ことを推奨します。これにより、攻撃者のリバースエンジニアリング作業が困難になります。
- アプリが機密性の高いものである場合(銀行アプリなど)、**モバイルがルート化されているかどうかを確認する独自のチェックを実行**し、適切に対処する必要があります。
- アプリが機密性の高いものである場合(銀行アプリなど)、**エミュレーターが使用されているかどうかを確認**する必要があります。
- アプリが機密性の高いものである場合(銀行アプリなど)、**実行前に自身の整合性を確認**し、変更されていないかを確認する必要があります。
- アプリが機密性が高い場合(銀行アプリなど)、**モバイルがルート化されているかどうかを確認する独自のチェックを実行**し、適切に対処する必要があります。
- アプリが機密性が高い場合(銀行アプリなど)、**エミュレーター**が使用されているかどうかを確認する必要があります。
- アプリが機密性が高い場合(銀行アプリなど)、**実行前に自身の整合性を確認**し、変更されていないかを確認する必要があります。
- [**APKiD**](https://github.com/rednaga/APKiD)を使用して、APKをビルドするために使用されたコンパイラ/パッカー/難読化ツールを確認します。
### React Native Application
@ -274,15 +275,15 @@ 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**は使いやすさと可読性のために好まれます。
開発者は、**デバッグ情報**を公開することに注意すべきです。これは機密データの漏洩につながる可能性があります。アプリケーションログを監視して機密情報を特定し保護するために、[**pidcat**](https://github.com/JakeWharton/pidcat)と`adb logcat`が推奨されます。**Pidcat**は使いやすさと可読性のために好まれます。
> [!WARNING]
> **Android 4.0以降**、**アプリケーションは自分のログにのみアクセスできる**ことに注意してください。したがって、アプリケーションは他のアプリのログにアクセスできません。\
> それでも、**機密情報をログに記録しない**ことを推奨します。
> **Android 4.0以降**、**アプリケーションは自分自身のログにのみアクセスできる**ことに注意してください。したがって、アプリケーションは他のアプリのログにアクセスできません。\
> それでも、**機密情報をログに記録しない**ことが推奨されます。
**Copy/Paste Buffer Caching**
Androidの**クリップボードベース**のフレームワークは、アプリ内でのコピー&ペースト機能を可能にしますが、**他のアプリケーション**がクリップボードにアクセスできるため、機密データが漏洩するリスクがあります。クレジットカードの詳細など、アプリケーションの機密セクションに対して**コピー/ペースト**機能を無効にすることが重要です。
Androidの**クリップボードベース**のフレームワークは、アプリ内でのコピー&ペースト機能を可能にしますが、**他のアプリケーション**がクリップボードにアクセスできるため、機密データが露出するリスクがあります。クレジットカードの詳細など、アプリケーションの機密セクションでは**コピー/ペースト**機能を無効にすることが重要です。
**Crash Logs**
@ -292,7 +293,7 @@ Androidの**クリップボードベース**のフレームワークは、アプ
**Analytics Data Sent To 3rd Parties**
アプリケーションは、Google Adsenseのようなサービスを統合することが多く、開発者による不適切な実装により機密データが**漏洩する**可能性があります。潜在的なデータ漏洩を特定するために、**アプリケーションのトラフィックを傍受し**、第三者サービスに送信される機密情報がないかを確認することをお勧めします。
アプリケーションは、Google Adsenseなどのサービスを統合することが多く、開発者不適切な実装により機密データが**漏洩する**可能性があります。潜在的なデータ漏洩を特定するために、**アプリケーションのトラフィックを傍受し**、第三者サービスに送信される機密情報がないかを確認することが推奨されます。
### SQLite DBs
@ -301,7 +302,7 @@ Androidの**クリップボードベース**のフレームワークは、アプ
データベースが機密情報を保存しており、**暗号化されている**が、アプリケーション内に**パスワード**が見つかる場合、それでも**脆弱性**です。
`.tables`を使用してテーブルを列挙し、`.schema <table_name>`使用してテーブルのカラムを列挙します。
`.tables`を使用してテーブルを列挙し、`.schema <table_name>`実行してテーブルのカラムを列挙します。
### Drozer (Exploit Activities, Content Providers and Services)
@ -326,7 +327,7 @@ You can also start an exported activity from adb:
```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でのみ危険なようです
**注意**: MobSFは、アクティビティの`android:launchMode`として_**singleTask/singleInstance**_の使用を悪意のあるものとして検出しますが、[これ](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750)によると、これは古いバージョンAPIバージョン< 21でのみ危険なようです
> [!TIP]
> 認証バイパスは常に脆弱性ではないことに注意してください。バイパスの動作とどの情報が公開されているかによります。
@ -359,7 +360,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
[**ブロードキャストレシーバーとは何かを再確認したい場合は、こちらをお読みください。**](android-applications-basics.md#broadcast-receivers)\
ブロードキャストレシーバーのアクションは`onReceive`メソッドで始まることを覚えておいてください。
ブロードキャストレシーバーは特定のメッセージを待機しています。レシーバーがメッセージをどのように処理するかによって、脆弱である可能性があります。\
ブロードキャストレシーバーは特定のメッセージを待機しています。レシーバーがメッセージをどのように処理するかによって、脆弱である可能性があります。\
[**Drozerを使用してブロードキャストレシーバーを悪用する方法を学びましょう。**](#exploiting-broadcast-receivers)
### **スキーム / ディープリンクの悪用**
@ -388,12 +389,12 @@ _パッケージ名を**省略する**ことができ、モバイルは自動的
**パス内のパラメータ**
**URLのパス内にパラメータを使用しているディープリンクがあるかどうかも確認する必要があります**。例えば、`https://api.example.com/v1/users/{username}` のように。この場合、`example://app/users?username=../../unwanted-endpoint%3fparam=value` のようにパストラバーサルを強制することができます。\
**URLのパス内にパラメータを使用しているディープリンクがあるかどうかも確認する必要があります**。例えば、`https://api.example.com/v1/users/{username}` のように。この場合、`example://app/users?username=../../unwanted-endpoint%3fparam=value` のようにパストラバーサルを強制することができます。\
アプリケーション内で正しいエンドポイントを見つけた場合、**オープンリダイレクト**(パスの一部がドメイン名として使用される場合)、**アカウント乗っ取り**CSRFトークンなしでユーザーの詳細を変更でき、脆弱なエンドポイントが正しいメソッドを使用している場合、およびその他の脆弱性を引き起こす可能性があります。詳細は[こちら](http://dphoeniixx.com/2020/12/13-2/)を参照してください。
**さらなる例**
リンクに関する[興味深いバグバウンティレポート](https://hackerone.com/reports/855618) (_/.well-known/assetlinks.json_)
リンクに関する[興味深いバグバウンティレポート](https://hackerone.com/reports/855618)_/.well-known/assetlinks.json_
### トランスポート層の検査と検証の失敗
@ -403,7 +404,7 @@ _パッケージ名を**省略する**ことができ、モバイルは自動的
#### 証明書の検証
**証明書の検証**に焦点を当てます。サーバーの証明書の整合性を確認することは、セキュリティを強化するために重要です。これは、安全でないTLS構成や暗号化されていないチャネルを介して機密データを送信することが重大なリスクをもたらす可能性があるためです。サーバー証明書の検証と脆弱性への対処に関する詳細な手順は、[**このリソース**](https://manifestsecurity.com/android-application-security-part-10/)で包括的に説明されています。
**証明書の検証**に焦点を当てます。サーバーの証明書の整合性を確認することは、セキュリティを強化するために重要です。これは、安全でないTLS構成や暗号化されていないチャネルを介して機密データを送信することが重大なリスクをもたらすため、重要です。サーバー証明書の検証と脆弱性への対処に関する詳細な手順は、[**このリソース**](https://manifestsecurity.com/android-application-security-part-10/)で包括的に説明されています。
#### SSLピンニング
@ -413,23 +414,23 @@ SSLピンニングは、アプリケーションがサーバーの証明書を
HTTPトラフィックを検査するには、**プロキシツールの証明書をインストールする必要があります**Burp。この証明書をインストールしないと、暗号化されたトラフィックはプロキシを通じて表示されない可能性があります。カスタムCA証明書のインストールに関するガイドは、[**こちらをクリック**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)してください。
**APIレベル24以上**をターゲットとするアプリケーションは、プロキシのCA証明書を受け入れるためにネットワークセキュリティ構成を変更する必要があります。このステップは、暗号化されたトラフィックを検査するために重要です。ネットワークセキュリティ構成を変更する手順については、[**このチュートリアルを参照**](make-apk-accept-ca-certificate.md)してください。
**APIレベル24以上**をターゲットにしたアプリケーションは、プロキシのCA証明書を受け入れるためにネットワークセキュリティ構成を変更する必要があります。このステップは、暗号化されたトラフィックを検査するために重要です。ネットワークセキュリティ構成の変更に関する指示は、[**このチュートリアル**](make-apk-accept-ca-certificate.md)を参照してください。
**Flutter**が使用されている場合は、[**このページ**](flutter.md)の指示に従う必要があります。これは、証明書をストアに追加するだけでは機能せず、Flutterには独自の有効なCAのリストがあるためです。
#### SSLピンニングのバイパス
SSLピンニングが実装されている場合、HTTPSトラフィックを検査するためにそれをバイパスする必要があります。この目的のために利用できるさまざまな方法があります:
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ピンニングをバイパスするために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)
#### 一般的なWeb脆弱性の検索
アプリケーション内で一般的なWeb脆弱性を検索することも重要です。これらの脆弱性を特定し、軽減するための詳細情報はこの要約の範囲を超えていますが、他の場所で広範にカバーされています。
アプリケーション内で一般的なWeb脆弱性を検索することも重要です。これらの脆弱性を特定し、軽減するための詳細情報はこの要約の範囲を超えていますが、他の場所で広範にカバーされています。
### Frida
@ -438,10 +439,10 @@ 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)
- Fridaを読み込む際に、[https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace)に示されているように、アンチデバッグ/アンチFridaメカニズムをバイパスすることを試みてください(ツール[linjector](https://github.com/erfur/linjector-rs))。
- ここで素晴らしい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))。
### **メモリのダンプ - Fridump**
@ -462,7 +463,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にデータを保存していても、そのデータは暗号化されているべきです。
@ -478,9 +479,9 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
```
### **バックグラウンド画像**
アプリケーションをバックグラウンドに置くと、Androidはアプリケーションの**スナップショット**を保存します。これにより、フォアグラウンドに復帰したときに、アプリが読み込まれる前に画像が読み込まれるため、アプリがより早く読み込まれたように見えます。
アプリケーションをバックグラウンドに置くと、Androidはアプリケーションの**スナップショット**を保存します。これにより、フォアグラウンドに復帰したときに、アプリが読み込まれる前に画像が読み込まれ、アプリがより早く読み込まれたように見えます。
しかし、このスナップショットに**機密情報**が含まれている場合、スナップショットにアクセスできる人はその情報を**盗む可能性**があります(アクセスするにはルート権限が必要です)。
しかし、このスナップショットに**機密情報**が含まれている場合、スナップショットにアクセスできる誰かがその情報を**盗む**可能性があります(アクセスするにはルート権限が必要です)。
スナップショットは通常、次の場所に保存されます: **`/data/system_ce/0/snapshots`**
@ -496,21 +497,21 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
開発者は、これらのインテントを処理し、`startActivity(...)``sendBroadcast(...)`などのメソッドに渡すプロキシコンポーネント(アクティビティ、サービス、ブロードキャストレシーバーなど)を作成することがよくありますが、これはリスクを伴います。
危険は、攻撃者がこれらのインテントを誤って誘導することによって、非エクスポートアプリコンポーネントをトリガーしたり、機密コンテンツプロバイダーにアクセスしたりできることにあります。注目すべき例は、`WebView`コンポーネントがURLを`Intent`オブジェクトに変換し、`Intent.parseUri(...)`を介して実行することで、悪意のあるインテント注入を引き起こす可能性があることです。
危険は、攻撃者がこれらのインテントを誤って誘導することによって、非エクスポートアプリコンポーネントをトリガーしたり、機密コンテンツプロバイダーにアクセスしたりできることにあります。注目すべき例は、`WebView`コンポーネントがURLを`Intent`オブジェクトに変換し、`Intent.parseUri(...)`を介して実行することで、悪意のあるインテント注入につながる可能性があることです。
### Essential Takeaways
- **Intent Injection**は、ウェブのオープンリダイレクト問題に似ています。
- 脆弱性は、`Intent`オブジェクトをエクストラとして渡すことに関与し、これが不正な操作を実行するためにリダイレクトされる可能性があります。
- 脆弱性は、`Intent`オブジェクトをエクストラとして渡すことに関与し、これがリダイレクトされて安全でない操作を実行する可能性があります。
- 攻撃者に非エクスポートコンポーネントやコンテンツプロバイダーを露出させる可能性があります。
- `WebView`のURLから`Intent`への変換は、意図しないアクションを促進する可能性があります。
### Android Client Side Injections and others
おそらく、あなたはウェブからこの種の脆弱性について知っているでしょう。Androidアプリケーションにおいては、これらの脆弱性に特に注意する必要があります
おそらく、あなたはこの種の脆弱性をウェブから知っているでしょう。Androidアプリケーションにおいては、これらの脆弱性に特に注意する必要があります
- **SQL Injection:** 動的クエリやコンテンツプロバイダーを扱う際は、パラメータ化されたクエリを使用していることを確認してください。
- **JavaScript Injection (XSS):** すべてのWebViewに対してJavaScriptとプラグインのサポートが無効になっていることを確認してください(デフォルトで無効)。 [More info here](webview-attacks.md#javascript-enabled).
- **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アプリケーションがセッションを終了するとき、クッキーが取り消されない場合や、ディスクに保存されることがあります。
- [**Secure Flag** in cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
@ -530,8 +531,8 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
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ファイルを作成、それも分析できます。
MobSFは**Android**(apk)**、IOS**(ipa) **およびWindows**(apx)アプリケーションを分析できます_WindowsアプリケーションはWindowsホストにインストールされたMobSFから分析する必要があります_。\
また、**Android**または**IOS**アプリのソースコードを含む**ZIP**ファイルを作成するとアプリケーションのルートフォルダーに移動し、すべてを選択してZIPファイルを作成、それも分析できます。
MobSFは**diff/Compare**分析を行い、**VirusTotal**を統合することも可能です_MobSF/settings.py_にAPIキーを設定し、次のように有効にする必要があります: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)。`VT_UPLOAD``False`に設定すると、**ハッシュ**がファイルの代わりに**アップロード**されます。
@ -552,20 +553,20 @@ Androidの**バージョン > 5**では、**Frida**が**自動的に起動**し
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**"内で見ることができます)。
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かを**表示**します。
- **文字列をキャプチャ**: アプリケーションを使用中にキャプチャされたすべての文字列を印刷します(非常にノイジーです
- **文字列比較をキャプチャ**: 非常に役立つ可能性があります。**比較されている2つの文字列**と、結果がTrueかFalseかを**表示**します。
- **クラスメソッドを列挙**: クラス名(例:"java.io.File")を入力すると、そのクラスのすべてのメソッドを印刷します。
- **クラスパターンを検索**: パターンでクラスを検索します
- **クラスメソッドをトレース**: **クラス全体をトレース**しますそのクラスのすべてのメソッドの入力と出力を確認します。デフォルトでは、MobSFは興味深いAndroid APIメソッドをいくつかトレースします。
使用したい補助モジュールを選択したら、"**Start Instrumentation**"を押す必要があり、すべての出力は"**Frida Live Logs**"に表示されます。
使用したい補助モジュールを選択したら、"**Start Intrumentation**"を押す必要があり、すべての出力は"**Frida Live Logs**"に表示されます。
**Shell**
@ -580,10 +581,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から修正できなくなることがあります。プロキシ設定を修正するには、次のコマンドを実行します
@ -605,7 +606,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
@ -614,7 +615,7 @@ qark --java path/to/specific/java/file.java
```
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
- すべての抽出されたファイルを簡単に参照できるように表示
- 参照用にすべての抽出ファイルを表示
- APKファイルを自動的にJavaおよびSmali形式にデコンパイル
- 一般的な脆弱性と動作のためにAndroidManifest.xmlを分析
- 一般的な脆弱性と動作のための静的ソースコード分析
@ -641,7 +642,7 @@ StaCoAnは、開発者、バグバウンティハンター、倫理的ハッカ
このコンセプトは、モバイルアプリケーションファイル(.apkまたは.ipaファイルをStaCoAnアプリケーションにドラッグアンドドロップすると、視覚的でポータブルなレポートが生成されるというものです。設定やワードリストを調整して、カスタマイズされた体験を得ることができます。
[最新リリースをダウンロード](https://github.com/vincentcox/StaCoAn/releases):
ダウンロード[最新リリース](https://github.com/vincentcox/StaCoAn/releases):
```
./stacoan
```
@ -657,9 +658,9 @@ androbugs.exe -f [APK file]
**Androwarn**は、Androidアプリケーションによって開発された潜在的な悪意のある動作を検出し、ユーザーに警告することを主な目的としたツールです。
検出は、アプリケーションのDalvikバイトコードの**静的析**を使用して行われ、**Smali**として表現されます。[`androguard`](https://github.com/androguard/androguard)ライブラリを使用しています。
検出は、アプリケーションのDalvikバイトコードの**静的析**を使用して行われ、**Smali**として表現されます。[`androguard`](https://github.com/androguard/androguard)ライブラリを使用しています。
このツールは、テレフォニー識別子の流出、音声/ビデオフローの傍受、PIMデータの変更、任意のコード実行などの**「悪い」アプリケーションの一般的な動作**を探します。
このツールは、次のような**「悪い」アプリケーションの一般的な動作**を探します: テレフォニー識別子の流出、音声/ビデオフローの傍受、PIMデータの変更、任意のコード実行...
```
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
```
@ -680,7 +681,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
### Koodous
マルウェアを検出するのに役立ちます: [https://koodous.com/](https://koodous.com)
マルウェアを検出するのに役立ちます[https://koodous.com/](https://koodous.com)
## コードの難読化/デオブフスケート
@ -688,7 +689,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
[Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>より): **ProGuard**は、Javaコードを縮小、最適化、難読化するオープンソースのコマンドラインツールです。バイトコードを最適化し、未使用の命令を検出して削除することができます。ProGuardはフリーソフトウェアで、GNU一般公衆ライセンスのバージョン2の下で配布されています。
[Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>より)**ProGuard**は、Javaコードを縮小、最適化、難読化するオープンソースのコマンドラインツールです。バイトコードを最適化し、未使用の命令を検出して削除することができます。ProGuardはフリーソフトウェアで、GNU一般公衆ライセンス第2版の下で配布されています。
ProGuardはAndroid SDKの一部として配布され、アプリケーションをリリースモードでビルドする際に実行されます。
@ -696,17 +697,17 @@ ProGuardはAndroid SDKの一部として配布され、アプリケーション
APKをデオブフスケートするためのステップバイステップガイドは[https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)で見つけることができます。
(そのガイドから) 最後に確認したとき、Dexguardの動作モードは以下の通りでした:
そのガイドから最後に確認したとき、Dexguardの動作モードは次のとおりでした:
- リソースをInputStreamとして読み込む;
- 結果をFilterInputStreamから継承したクラスに渡して復号化する;
- リバースエンジニアに数分の時間を無駄にさせるために無駄な難読化を行う;
- 復号化された結果をZipInputStreamに渡してDEXファイルを取得する;
- リソースをInputStreamとして読み込む
- 結果をFilterInputStreamから継承したクラスに渡して復号化する
- リバースエンジニアに数分の時間を無駄にさせるために無駄な難読化を行う
- 復号化された結果をZipInputStreamに渡してDEXファイルを取得する
- 最後に、`loadDex`メソッドを使用して結果のDEXをリソースとして読み込む。
### [DeGuard](http://apk-deguard.com)
**DeGuardは、Androidの難読化ツールによって行われた難読化プロセスを逆転させます。これにより、コード検査やライブラリの予測を含む多数のセキュリティ分析が可能になります。**
**DeGuardは、Androidの難読化ツールによって行われた難読化プロセスを逆転させます。これにより、コード検査やライブラリの予測など、数多くのセキュリティ分析が可能になります。**
難読化されたAPKを彼らのプラットフォームにアップロードできます。
@ -716,7 +717,7 @@ APKをデオブフスケートするためのステップバイステップガ
### [Simplify](https://github.com/CalebFenton/simplify)
これは**一般的なAndroidデオブフスケーター**です。Simplifyは**アプリを仮想的に実行**してその動作を理解し、その後**コードを最適化しようとします**。最適化の各タイプはシンプルで一般的であるため、使用される特定の難読化のタイプは関係ありません。
これは**汎用のAndroidデオブフスケーター**です。Simplifyは**アプリを仮想的に実行**してその動作を理解し、その後**コードを最適化しようとします**。最適化の各タイプはシンプルで一般的であるため、使用される特定の難読化のタイプは関係ありません。
### [APKiD](https://github.com/rednaga/APKiD)
@ -730,7 +731,7 @@ APKiDは**APKがどのように作成されたか**に関する情報を提供
### [Androl4b](https://github.com/sh4hin/Androl4b)
AndroL4bは、最新のフレームワーク、チュートリアル、およびリバースエンジニアリングとマルウェア分析のためのさまざまなセキュリティ専門家や研究者からのラボを含む、ubuntu-mateに基づいたAndroidセキュリティ仮想マシンです。
AndroL4bは、Ubuntu-mateに基づいたAndroidセキュリティ仮想マシンで、リバースエンジニアリングやマルウェア分析のための最新のフレームワーク、チュートリアル、ラボのコレクションを含んでいます。
## 参考文献

View File

@ -0,0 +1,145 @@
# Android Accessibility Service Abuse
{{#include ../../banners/hacktricks-training.md}}
## 概要
`AccessibilityService` は、障害のあるユーザーが Android デバイスと対話するのを助けるために作成されました。残念ながら、同じ **強力な自動化 API**(グローバルナビゲーション、テキスト入力、ジェスチャー配信、オーバーレイウィンドウ…)は、マルウェアによって武器化され、**完全なリモート制御**を取得するために使用される可能性があります _root 権限なしで_
現代の Android 銀行トロイの木馬やリモートアクセス型トロイの木馬RATである **PlayPraetor、SpyNote、BrasDex、SOVA、ToxicPanda** などは、同じレシピに従います:
1. 被害者を社会工学的に騙して、悪意のあるアクセシビリティサービスを有効にさせる(*BIND_ACCESSIBILITY_SERVICE* 権限は「高リスク」と見なされ、明示的なユーザーアクションが必要です)。
2. サービスを利用して
* 画面に表示されるすべての UI イベントとテキストをキャプチャする、
* 合成ジェスチャー(`dispatchGesture`)やグローバルアクション(`performGlobalAction`)を注入して、オペレーターが望む任意のタスクを自動化する、
* **TYPE_ACCESSIBILITY_OVERLAY** ウィンドウタイプを使用して、正当なアプリの上に全画面オーバーレイを描画する(`SYSTEM_ALERT_WINDOW` プロンプトなし!)、
* 被害者の代わりにシステムダイアログをクリックして、追加のランタイム権限を静かに付与する。
3. ユーザーが完全に正常な画面を見ている間に、データを抽出したり、**On-Device-Fraud (ODF)** をリアルタイムで実行したりします。
---
## 権限の要求
```xml
<!-- AndroidManifest.xml -->
<service
android:name="com.evil.rat.EvilService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"
android:exported="false">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data android:name="android.accessibilityservice"
android:resource="@xml/evil_accessibility_config"/>
</service>
```
コンパニオンXMLは、フェイクダイアログの見た目を定義します:
```xml
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/service_description"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric"
android:notificationTimeout="200"
android:canPerformGestures="true"
android:canRetrieveWindowContent="true"/>
```
---
## リモートUI自動化プリミティブ
```java
public class EvilService extends AccessibilityService {
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
// harvest text or detect foreground app change
}
// Simulate HOME / BACK / RECENTS …
private void navHome() { performGlobalAction(GLOBAL_ACTION_HOME); }
private void navBack() { performGlobalAction(GLOBAL_ACTION_BACK); }
private void openRecents() { performGlobalAction(GLOBAL_ACTION_RECENTS); }
// Generic tap / swipe
public void tap(float x, float y) {
Path p = new Path(); p.moveTo(x, y);
GestureDescription.StrokeDescription s = new GestureDescription.StrokeDescription(p, 0, 50);
dispatchGesture(new GestureDescription.Builder().addStroke(s).build(), null, null);
}
}
```
これらの2つのAPIだけで、攻撃者は次のことができます
* スクリーンのロックを解除し、銀行アプリを開き、そのUIツリーをナビゲートして、送金フォームを送信します。
* ポップアップするすべての権限ダイアログを承認します。
* Play Storeインテントを介して追加のAPKをインストール/更新します。
---
## 悪用パターン
### 1. オーバーレイフィッシング(認証情報収集)
透明または不透明な `WebView` がウィンドウマネージャに追加されます:
```java
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
MATCH_PARENT, MATCH_PARENT,
TYPE_ACCESSIBILITY_OVERLAY, // ⬅ bypasses SYSTEM_ALERT_WINDOW
FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL, // touches still reach the real app
PixelFormat.TRANSLUCENT);
wm.addView(phishingView, lp);
```
被害者は偽のフォームに認証情報を入力し、バックグラウンドアプリは同じジェスチャーを受け取ります - 疑わしい「他のアプリの上に描画する」プロンプトは表示されません。
> 詳細な例: *Accessibility Overlay Phishing* セクションは Tapjacking ページ内にあります。
### 2. デバイス上の詐欺自動化
**PlayPraetor** のようなマルウェアファミリーは、オペレーターが高レベルのコマンド(`init`, `update`, `alert_arr`, `report_list`, …)を発行できる持続的な WebSocket チャネルを維持します。このサービスは、これらのコマンドを上記の低レベルのジェスチャーに変換し、そのデバイスに関連付けられた多要素認証を簡単に回避するリアルタイムの不正取引を実現します。
### 3. スクリーンストリーミングとモニタリング
**MediaProjection API** と RTMP クライアントライブラリを組み合わせることで、RAT はライブフレームバッファを `rtmp://<c2>:1935/live/<device_id>` にブロードキャストし、Accessibility エンジンが UI を駆動している間、敵に完璧な状況認識を提供します。
---
## PlayPraetor コマンド&コントロールワークフロー
1. **HTTP(S) ハートビート** ハードコーディングされたリストを繰り返し、1つのドメインが `POST /app/searchPackageName` でアクティブな C2 に応答するまで。
2. **WebSocket (ポート 8282)** 双方向 JSON コマンド:
* `update` 新しい conf/APK をプッシュ
* `alert_arr` オーバーレイテンプレートを構成
* `report_list` ターゲットパッケージ名のリストを送信
* `heartbeat_web` キープアライブ
3. **RTMP (ポート 1935)** ライブスクリーン/ビデオストリーミング。
4. **REST エクスフィルトレーション**
* `/app/saveDevice` (フィンガープリンツ)
* `/app/saveContacts` | `/app/saveSms` | `/app/uploadImageBase64`
* `/app/saveCardPwd` (銀行クレデンシャル)
**AccessibilityService** は、これらのクラウドコマンドを物理的なインタラクションに変換するローカルエンジンです。
---
## 悪意のあるアクセシビリティサービスの検出
* `adb shell settings get secure enabled_accessibility_services`
* 設定 → アクセシビリティ → *ダウンロードしたサービス* Google Play からのアプリでないものを探す。
* MDM / EMM ソリューションは、サイドロードされたサービスをブロックするために `ACCESSIBILITY_ENFORCEMENT_DEFAULT_DENY` (Android 13+) を強制できます。
* 実行中のサービスを分析:
```bash
adb shell dumpsys accessibility | grep "Accessibility Service"
```
---
## アプリ開発者向けの強化推奨
* 敏感なビューに `android:accessibilityDataSensitive="accessibilityDataPrivateYes"` をマークする (API 34+)。
* `setFilterTouchesWhenObscured(true)``FLAG_SECURE` を組み合わせてタップ/オーバーレイのハイジャックを防ぐ。
* `WindowManager.getDefaultDisplay().getFlags()` または `ViewRootImpl` API をポーリングしてオーバーレイを検出する。
* `Settings.canDrawOverlays()` **または** 非信頼のアクセシビリティサービスがアクティブな場合は操作を拒否する。
---
## 参考文献
* [PlayPraetors evolving threat: How Chinese-speaking actors globally scale an Android RAT](https://www.cleafy.com/cleafy-labs/playpraetors-evolving-threat-how-chinese-speaking-actors-globally-scale-an-android-rat)
* [Android accessibility documentation Automating UI interaction](https://developer.android.com/guide/topics/ui/accessibility/service)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,14 +4,14 @@
## **基本情報**
**Tapjacking**は、**悪意のある** **アプリケーション**が起動し、**被害者アプリケーションの上に位置する**攻撃です。被害者アプリが視覚的に隠されると、そのユーザーインターフェースはユーザーを騙してそれに対話させるように設計されており、その間にその対話を被害者アプリに渡します。\
**Tapjacking**は、**悪意のある** **アプリケーション**が起動し、**被害者アプリケーションの上に位置する**攻撃です。被害者アプリが視覚的に隠されると、そのユーザーインターフェースはユーザーを騙してそれと対話させるように設計されており、同時にその対話を被害者アプリに渡します。\
実際には、**ユーザーが実際に被害者アプリでアクションを実行していることを知らないようにしています**。
### 検出
この攻撃に脆弱なアプリを検出するには、Androidマニフェスト内の**エクスポートされたアクティビティ**を検索する必要があります(インテントフィルターを持つアクティビティはデフォルトで自動的にエクスポートされることに注意してください)。エクスポートされたアクティビティを見つけたら、**それらが何らかの権限を必要とするか確認してください**。これは、**悪意のあるアプリケーションもその権限を必要とするためです**。
この攻撃に対して脆弱なアプリを検出するには、androidマニフェスト内の**エクスポートされたアクティビティ**を探す必要があります(インテントフィルターを持つアクティビティはデフォルトで自動的にエクスポートされることに注意してください)。エクスポートされたアクティビティを見つけたら、**それらが何らかの権限を必要とするか確認してください**。これは、**悪意のあるアプリケーションもその権限を必要とするためです**。
アプリの最小SDKバージョンを確認することもできます。**`AndroidManifest.xml`**ファイル内の**`android:minSdkVersion`**の値を確認してください。値が**30未満**の場合、そのアプリはTapjackingに脆弱です。
アプリの最小SDKバージョンを確認することもできます。**`AndroidManifest.xml`**ファイル内の**`android:minSdkVersion`**の値を確認してください。値が**30未満**の場合、そのアプリはTapjackingに対して脆弱です。
### 保護
@ -35,11 +35,11 @@ android:layout_height="wrap_content"
android:filterTouchesWhenObscured="true">
</Button>
```
## Exploitation
## エクスプロイト
### Tapjacking-ExportedActivity
最も**最近のAndroidアプリケーション**でTapjacking攻撃を実行するもの+ 攻撃対象アプリケーションのエクスポートされたアクティビティの前に呼び出すこと)が見つかるのは: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity)。
最も**最近のAndroidアプリケーション**でTapjacking攻撃を実行するもの+ 攻撃されたアプリケーションのエクスポートされたアクティビティの前に呼び出すこと)が見つかるのは: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity)。
**READMEの指示に従って使用してください**。
@ -50,26 +50,26 @@ android:filterTouchesWhenObscured="true">
### Qark
> [!CAUTION]
> このプロジェクトは現在メンテナンスされていないようで、この機能は正しく動作していないようです。
> このプロジェクトは現在メンテナンスされていないようで、この機能はもはや正しく動作していないようです。
`--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` パラメータを使用して[**qark**](https://github.com/linkedin/qark)を使用すると、可能な**Tapjacking**脆弱性をテストするための悪意のあるアプリケーションを作成できます。\
[**qark**](https://github.com/linkedin/qark)を`--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk`パラメータと共に使用して、可能な**Tapjacking**脆弱性をテストするための悪意のあるアプリケーションを作成できます。\
緩和策は比較的簡単で、開発者は別のビューに覆われているときにタッチイベントを受け取らないことを選択できます。[Android Developers Reference](https://developer.android.com/reference/android/view/View#security)を使用すると:
緩和策は比較的簡単で、開発者は別のビューに覆われているときにタッチイベントを受け取らないことを選択できます。[Android Developers Reference](https://developer.android.com/reference/android/view/View#security)を使用して:
> 時には、アプリケーションがユーザーの完全な知識と同意のもとでアクションが実行されていることを確認することが不可欠です。たとえば、権限リクエストを承認したり、購入を行ったり、広告をクリックしたりする場合です。残念ながら、悪意のあるアプリケーションは、ビューの意図された目的を隠すことによって、ユーザーを騙してこれらのアクションを実行させようとする可能性があります。これに対する対策として、フレームワークは、機密機能へのアクセスを提供するビューのセキュリティを向上させるために使用できるタッチフィルタリングメカニズムを提供します。
> 時には、アプリケーションがユーザーの完全な知識と同意のもとでアクションが実行されていることを確認することが不可欠です。たとえば、権限リクエストの承認、購入の実行、広告のクリックなどです。残念ながら、悪意のあるアプリケーションは、ビューの意図された目的を隠すことによって、ユーザーを騙してこれらのアクションを実行させようとする可能性があります。これに対する対策として、フレームワークは、敏感な機能へのアクセスを提供するビューのセキュリティを向上させるために使用できるタッチフィルタリングメカニズムを提供します。
>
> タッチフィルタリングを有効にするには、[`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29)を呼び出すか、android:filterTouchesWhenObscuredレイアウト属性をtrueに設定します。有効にすると、フレームワークは、ビューのウィンドウが別の可視ウィンドウによって覆われているときに受信したタッチを破棄します。その結果、トースト、ダイアログ、または他のウィンドウがビューのウィンドウの上に表示されるとき、ビューはタッチを受け取らなくなります。
---
## Accessibility Overlay Phishing (Banking-Trojan Variant)
## アクセシビリティオーバーレイフィッシング(バンキングトロイの木馬バリアント)
クラシックなTapjackingに加えて、現代のAndroidバンキングマルウェアファミリー例: **ToxicPanda**、BrasDex、Sovaなどは、**Accessibility Service**を悪用して、正当なアプリケーションの上にフルスクリーンのWebView **オーバーレイ**を配置し、ユーザー入力を下のビューに**転送する**ことができます。これにより、信憑性が大幅に向上し、攻撃者は資格情報、OTPを盗んだり、不正な取引を自動化したりすることができます。
クラシックなTapjackingに加えて、現代のAndroidバンキングマルウェアファミリー例: **ToxicPanda**、BrasDex、Sovaなどは、**Accessibility Service**を悪用して、正当なアプリケーションの上にフルスクリーンのWebView **オーバーレイ**を配置し、ユーザー入力を下のビューに**転送**できるようにします。これにより、信憑性が大幅に向上し、攻撃者は資格情報、OTPを盗んだり、不正な取引を自動化したりすることができます。
### 仕組み
1. 悪意のあるAPKは、非常に敏感な`BIND_ACCESSIBILITY_SERVICE`権限を要求し、通常は偽のGoogle/Chrome/PDFビューアーダイアログの背後にリクエストを隠します。
2. ユーザーがサービスを有効にすると、マルウェアは追加の危険な権限(`READ_SMS``SYSTEM_ALERT_WINDOW``REQUEST_INSTALL_PACKAGES`など)を付与するために必要なタップをプログラム的にシミュレートします。
3. **WebView**が膨張され、**`TYPE_ACCESSIBILITY_OVERLAY`**ウィンドウタイプを使用してウィンドウマネージャーに追加されます。オーバーレイは完全に不透明または半透明にレンダリングでき、元のタッチがバックグラウンドアクティビティに配信されるように*「透過的」*としてフラグを立てることができます(したがって、被害者はフィッシングフォームのみを見ている間に取引が実際に行われます)。
3. **WebView**が膨張され、**`TYPE_ACCESSIBILITY_OVERLAY`**ウィンドウタイプを使用してウィンドウマネージャーに追加されます。オーバーレイは完全に不透明または半透明にレンダリングでき、元のタッチがバックグラウンドアクティビティに配信されるように*「透過的」*としてフラグを立てることができます(したがって、取引は実際に行われ、犠牲者はフィッシングフォームのみを見ることになります)。
```java
WebView phishingView = new WebView(getApplicationContext());
phishingView.getSettings().setJavaScriptEnabled(true);
@ -86,19 +86,25 @@ PixelFormat.TRANSLUCENT);
wm.addView(phishingView, lp);
```
### 銀行トロイの典型的なワークフロー
* 現在開いている銀行/ウォレットアプリを特定するために、インストールされたパッケージをクエリする`QUERY_ALL_PACKAGES`
* 特定のアプリケーションロゴ、色、i18n文字列などを完璧に模倣した**HTML/JSオーバーレイテンプレート**をC2からダウンロードす
* オーバーレイを表示し、認証情報/PIN/パターンを収集す
* **Accessibility API**`performGlobalAction``GestureDescription`)を使用して、バックグラウンドでの転送を自動化する
* インストールされたパッケージをクエリする (`QUERY_ALL_PACKAGES`) ことで、現在開いている銀行/ウォレットアプリを特定します
* 特定のアプリケーションロゴ、色、i18n文字列などを完璧に模倣した**HTML/JSオーバーレイテンプレート**をC2からダウンロードします。
* オーバーレイを表示し、認証情報/PIN/パターンを収集します。
* **Accessibility API** (`performGlobalAction`, `GestureDescription`) を使用して、バックグラウンドでの送金を自動化します
### 検出と緩和
* `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE`を使用してインストールされたアプリのリストを監査す
* アプリケーション側(銀行/ウォレット):
- 敏感なビューに対して**`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`**Android 14+を有効にして、非Playストアサービスをブロックす
- `setFilterTouchesWhenObscured(true)``FLAG_SECURE`を組み合わせ
* `adb shell pm list packages -3 -e BIND_ACCESSIBILITY_SERVICE`を使用してインストールされたアプリのリストを監査します。
* アプリケーション側(銀行/ウォレット)から
- 敏感なビューに対して**`android:accessibilityDataSensitive="accessibilityDataPrivateYes"`**Android 14+を有効にして、非Playストアサービスをブロックします。
- `setFilterTouchesWhenObscured(true)``FLAG_SECURE`を組み合わせます
* システムの強化:
- *不明なソースからのインストール*と*信頼できないアプリのアクセシビリティ*を無効にする。
- PlayProtectを強制し、デバイスを最新の状態に保つ。
- *不明なソースからのインストール*と*信頼できないアプリのアクセシビリティ*を無効にします。
- PlayProtectと最新のデバイスを強制します。
フルリモートデバイス制御のためのAccessibility Servicesの活用に関する詳細は、以下を参照してください
{{#ref}}
accessibility-services-abuse.md
{{#endref}}
## 参考文献
* [Bitsight ToxicPanda Android Banking Malware 2025 Study](https://www.bitsight.com/blog/toxicpanda-android-banking-malware-2025-study)