mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/mobile-pentesting/android-app-pentesting/README.md', 's
This commit is contained in:
parent
bc22eeb7de
commit
5400ce3669
@ -337,6 +337,7 @@
|
||||
- [Manual DeObfuscation](mobile-pentesting/android-app-pentesting/manual-deobfuscation.md)
|
||||
- [React Native Application](mobile-pentesting/android-app-pentesting/react-native-application.md)
|
||||
- [Reversing Native Libraries](mobile-pentesting/android-app-pentesting/reversing-native-libraries.md)
|
||||
- [Shizuku Privileged Api](mobile-pentesting/android-app-pentesting/shizuku-privileged-api.md)
|
||||
- [Smali - Decompiling, Modifying, Compiling](mobile-pentesting/android-app-pentesting/smali-changes.md)
|
||||
- [Spoofing your location in Play Store](mobile-pentesting/android-app-pentesting/spoofing-your-location-in-play-store.md)
|
||||
- [Tapjacking](mobile-pentesting/android-app-pentesting/tapjacking.md)
|
||||
|
@ -12,19 +12,20 @@ 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
|
||||
|
||||
時には、**隠された情報**(おそらくよく難読化されたパスワードやフラグ)にアクセスするために、**アプリケーションコードを修正する**ことが興味深い場合があります。そのため、apkを逆コンパイルし、コードを修正して再コンパイルすることが興味深いかもしれません。\
|
||||
[**このチュートリアルでは、APKを逆コンパイルし、Smaliコードを修正して、新しい機能を持つAPKを再コンパイルする方法を学ぶことができます**](smali-changes.md)。これは、**動的分析中に提示されるいくつかのテストの代替手段として非常に役立つ可能性があります**。したがって、**この可能性を常に念頭に置いておいてください**。
|
||||
[**このチュートリアルでは、APKを逆コンパイルし、Smaliコードを修正して、新しい機能を持つAPKを再コンパイルする方法を学ぶことができます**](smali-changes.md)。これは、**動的分析中に提示されるいくつかのテストの代替手段として非常に役立つ**可能性があります。したがって、**この可能性を常に念頭に置いておいてください**。
|
||||
|
||||
## Other interesting tricks
|
||||
|
||||
- [Play Storeでの位置情報の偽装](spoofing-your-location-in-play-store.md)
|
||||
- [Shizuku Privileged API (ADBベースの非ルート特権アクセス)](shizuku-privileged-api.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
|
||||
@ -52,7 +53,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**
|
||||
|
||||
@ -60,23 +61,23 @@ APKの**文字列**を確認するだけで、**パスワード**、**URL** ([ht
|
||||
|
||||
### アプリケーションの基本理解 - Manifest.xml, strings.xml
|
||||
|
||||
アプリケーションの**_Manifest.xml_**および**_strings.xml_**ファイルの**検査は、潜在的なセキュリティ脆弱性を明らかにすることができます**。これらのファイルは、デコンパイラを使用するか、APKファイルの拡張子を.zipに変更してから解凍することでアクセスできます。
|
||||
アプリケーションの**_Manifest.xml_**および**_strings.xml_**ファイルの**検査は、潜在的なセキュリティ脆弱性を明らかにすることができます**。これらのファイルは、デコンパイラを使用するか、APKファイルの拡張子を.zipに変更して解凍することでアクセスできます。
|
||||
|
||||
**Manifest.xml**から特定された**脆弱性**には以下が含まれます:
|
||||
|
||||
- **デバッグ可能なアプリケーション**: _Manifest.xml_ファイルでデバッグ可能として設定されたアプリケーション(`debuggable="true"`)は、接続を許可するため、悪用のリスクがあります。デバッグ可能なアプリケーションを見つけて悪用する方法については、デバイス上のデバッグ可能なアプリケーションを見つけて悪用するチュートリアルを参照してください。
|
||||
- **デバッグ可能なアプリケーション**: _Manifest.xml_ファイルでデバッグ可能として設定されたアプリケーション(`debuggable="true"`)は、接続を許可するため、悪用のリスクがあります。デバッグ可能なアプリケーションを見つけて悪用する方法については、チュートリアルを参照してください。
|
||||
- **バックアップ設定**: 機密情報を扱うアプリケーションには、`android:allowBackup="false"`属性を明示的に設定して、特にUSBデバッグが有効な場合にadbを介した不正なデータバックアップを防ぐ必要があります。
|
||||
- **ネットワークセキュリティ**: _res/xml/_内のカスタムネットワークセキュリティ構成(`android:networkSecurityConfig="@xml/network_security_config"`)は、証明書ピンやHTTPトラフィック設定などのセキュリティ詳細を指定できます。特定のドメインに対してHTTPトラフィックを許可することが一例です。
|
||||
- **ネットワークセキュリティ**: _res/xml/_内のカスタムネットワークセキュリティ設定(`android:networkSecurityConfig="@xml/network_security_config"`)は、証明書ピンやHTTPトラフィック設定などのセキュリティ詳細を指定できます。特定のドメインに対してHTTPトラフィックを許可する例があります。
|
||||
- **エクスポートされたアクティビティとサービス**: マニフェスト内のエクスポートされたアクティビティとサービスを特定することで、悪用される可能性のあるコンポーネントを明らかにできます。動的テスト中のさらなる分析により、これらのコンポーネントを悪用する方法が明らかになります。
|
||||
- **コンテンツプロバイダーとファイルプロバイダー**: 公開されたコンテンツプロバイダーは、不正なアクセスやデータの変更を許可する可能性があります。ファイルプロバイダーの構成も注意深く確認する必要があります。
|
||||
- **ブロードキャストレシーバーとURLスキーム**: これらのコンポーネントは悪用される可能性があり、特にURLスキームが入力脆弱性に対してどのように管理されているかに注意を払う必要があります。
|
||||
- **SDKバージョン**: `minSdkVersion`、`targetSDKVersion`、および`maxSdkVersion`属性は、サポートされているAndroidバージョンを示し、セキュリティ上の理由から古い脆弱なAndroidバージョンをサポートしないことの重要性を強調します。
|
||||
- **コンテンツプロバイダーとファイルプロバイダー**: 公開されたコンテンツプロバイダーは、不正アクセスやデータの変更を許可する可能性があります。ファイルプロバイダーの設定も注意深く確認する必要があります。
|
||||
- **ブロードキャストレシーバーとURLスキーム**: これらのコンポーネントは悪用される可能性があり、特に入力脆弱性に対するURLスキームの管理方法に注意が必要です。
|
||||
- **SDKバージョン**: `minSdkVersion`、`targetSDKVersion`、`maxSdkVersion`属性は、サポートされているAndroidバージョンを示し、セキュリティ上の理由から古い脆弱なAndroidバージョンをサポートしないことの重要性を強調します。
|
||||
|
||||
**strings.xml**ファイルからは、APIキー、カスタムスキーマ、およびその他の開発者ノートなどの機密情報が発見される可能性があり、これらのリソースの注意深いレビューの必要性を強調しています。
|
||||
**strings.xml**ファイルからは、APIキー、カスタムスキーマ、その他の開発者ノートなどの機密情報が発見される可能性があり、これらのリソースを注意深く確認する必要があります。
|
||||
|
||||
### タップジャッキング
|
||||
|
||||
**タップジャッキング**は、**悪意のある** **アプリケーション**が起動され、**被害者アプリケーションの上に位置する**攻撃です。被害者アプリを視覚的に隠すと、そのユーザーインターフェースはユーザーを騙してそれと対話させるように設計されており、実際には被害者アプリに対してその対話を渡しています。\
|
||||
**タップジャッキング**は、**悪意のある** **アプリケーション**が起動され、**被害者アプリケーションの上に位置する**攻撃です。被害者アプリを視覚的に隠すと、そのユーザーインターフェースはユーザーを騙してそれに対話させるように設計されており、実際には被害者アプリに対してその対話を渡しています。\
|
||||
実際には、**ユーザーが被害者アプリでアクションを実行していることを知らないようにしています**。
|
||||
|
||||
詳細情報は以下を参照してください:
|
||||
@ -102,7 +103,7 @@ android-task-hijacking.md
|
||||
Androidでは、**内部**ストレージに**保存された**ファイルは、**作成した**アプリのみが**アクセスできる**ように**設計されています**。このセキュリティ対策はAndroidオペレーティングシステムによって**強制され**、ほとんどのアプリケーションのセキュリティニーズには一般的に十分です。しかし、開発者は時折、`MODE_WORLD_READABLE`や`MODE_WORLD_WRITABLE`のようなモードを利用して、ファイルを異なるアプリケーション間で**共有**できるようにします。しかし、これらのモードは、他のアプリケーション(潜在的に悪意のあるものを含む)によるこれらのファイルへのアクセスを**制限しません**。
|
||||
|
||||
1. **静的分析:**
|
||||
- `MODE_WORLD_READABLE`および`MODE_WORLD_WRITABLE`の使用が**注意深く精査されるべきです**。これらのモードは、**意図しないまたは不正なアクセス**にファイルを**さらす可能性があります**。
|
||||
- `MODE_WORLD_READABLE`および`MODE_WORLD_WRITABLE`の使用が**注意深く検討されるべきです**。これらのモードは、**意図しないまたは不正なアクセス**にファイルを**さらす可能性があります**。
|
||||
2. **動的分析:**
|
||||
- アプリによって作成されたファイルに設定された**権限**を**確認**します。特に、ファイルが**全世界に対して読み取りまたは書き込み可能に設定されているか**を**チェック**します。これは重大なセキュリティリスクを引き起こす可能性があり、デバイスにインストールされた**任意のアプリケーション**が、出所や意図に関係なく、これらのファイルを**読み取ったり変更したり**できるようになります。
|
||||
|
||||
@ -122,8 +123,8 @@ Androidでは、**内部**ストレージに**保存された**ファイルは
|
||||
|
||||
外部ストレージは`/storage/emulated/0`、`/sdcard`、`/mnt/sdcard`で**アクセス可能**です。
|
||||
|
||||
> [!NOTE]
|
||||
> Android 4.4(**API 17**)以降、SDカードには、**アプリ専用のディレクトリに対するアクセスを制限する**ディレクトリ構造があります。これにより、悪意のあるアプリケーションが他のアプリのファイルに対して読み取りまたは書き込みアクセスを得ることが防止されます。
|
||||
> [!TIP]
|
||||
> Android 4.4(**API 17**)以降、SDカードには、**アプリ専用のディレクトリへのアクセスを制限するディレクトリ構造**があります。これにより、悪意のあるアプリケーションが他のアプリのファイルに対して読み取りまたは書き込みアクセスを得ることが防止されます。
|
||||
|
||||
**平文で保存された機密データ**
|
||||
|
||||
@ -134,7 +135,7 @@ Androidでは、**内部**ストレージに**保存された**ファイルは
|
||||
|
||||
**すべての証明書を受け入れる**
|
||||
|
||||
何らかの理由で、開発者は時々、ホスト名が一致しない場合でもすべての証明書を受け入れます。例えば、以下のようなコード行がある場合です:
|
||||
何らかの理由で、開発者は時々、ホスト名が以下のようなコード行と一致しない場合でも、すべての証明書を受け入れます:
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
@ -149,13 +150,13 @@ A good way to test this is to try to capture the traffic using some proxy like B
|
||||
|
||||
**Use of Insecure and/or Deprecated Algorithms**
|
||||
|
||||
開発者は、認証チェック、データの保存または送信を行うために**非推奨のアルゴリズム**を使用すべきではありません。これらのアルゴリズムには、RC4、MD4、MD5、SHA1などがあります。例えば、パスワードを保存するために**ハッシュ**が使用される場合、ソルトを使用したハッシュのブルートフォース**耐性**が必要です。
|
||||
開発者は、認証チェック、データの保存または送信を行うために**非推奨のアルゴリズム**を使用すべきではありません。これらのアルゴリズムには、RC4、MD4、MD5、SHA1などがあります。例えば、パスワードを保存するために**ハッシュ**を使用する場合、ソルトを使用したハッシュのブルートフォース**耐性**が必要です。
|
||||
|
||||
### Other checks
|
||||
|
||||
- **APKを難読化する**ことを推奨します。これにより、攻撃者のリバースエンジニアリング作業が困難になります。
|
||||
- APKを**難読化する**ことを推奨します。これにより、攻撃者のリバースエンジニアリング作業が困難になります。
|
||||
- アプリが機密性の高いものである場合(銀行アプリなど)、**モバイルがルート化されているかどうかを確認する独自のチェックを実行**し、適切に対処する必要があります。
|
||||
- アプリが機密性の高いものである場合(銀行アプリなど)、**エミュレーターが使用されているかどうかを確認**する必要があります。
|
||||
- アプリが機密性の高いものである場合(銀行アプリなど)、**エミュレーター**が使用されているかどうかを確認する必要があります。
|
||||
- アプリが機密性の高いものである場合(銀行アプリなど)、**実行前に自身の整合性を確認**し、変更されていないかを確認する必要があります。
|
||||
- [**APKiD**](https://github.com/rednaga/APKiD)を使用して、APKをビルドするために使用されたコンパイラ/パッカー/難読化ツールを確認します。
|
||||
|
||||
@ -240,7 +241,7 @@ avd-android-virtual-device.md
|
||||
- [**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).
|
||||
|
||||
> [!NOTE]
|
||||
> [!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:
|
||||
@ -266,11 +267,11 @@ 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**
|
||||
|
||||
@ -284,7 +285,7 @@ Androidの**クリップボードベース**のフレームワークは、アプ
|
||||
|
||||
**Analytics Data Sent To 3rd Parties**
|
||||
|
||||
アプリケーションは、Google Adsenseのようなサービスを統合することが多く、開発者による不適切な実装により機密データが**漏洩する**可能性があります。潜在的なデータ漏洩を特定するために、**アプリケーションのトラフィックを傍受し**、第三者サービスに送信される機密情報がないかを確認することが推奨されます。
|
||||
アプリケーションは、Google Adsenseのようなサービスを統合することが多く、開発者による不適切な実装により機密データが**漏洩する**可能性があります。潜在的なデータ漏洩を特定するために、**アプリケーションのトラフィックを傍受し**、第三者サービスに送信される機密情報がないかを確認することをお勧めします。
|
||||
|
||||
### SQLite DBs
|
||||
|
||||
@ -318,9 +319,9 @@ 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]
|
||||
> 認証バイパスは常に脆弱性ではないことに注意してください。バイパスの動作とどの情報が公開されているかによります。
|
||||
|
||||
**機密情報の漏洩**
|
||||
@ -333,22 +334,22 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
|
||||
### コンテンツプロバイダーの悪用 - 機密情報へのアクセスと操作
|
||||
|
||||
[**コンテンツプロバイダーについて復習したい場合はこれをお読みください。**](android-applications-basics.md#content-provider)\
|
||||
[**コンテンツプロバイダーとは何かを再確認したい場合は、こちらをお読みください。**](android-applications-basics.md#content-provider)\
|
||||
コンテンツプロバイダーは基本的に**データを共有する**ために使用されます。アプリに利用可能なコンテンツプロバイダーがある場合、そこから**機密データを抽出**できるかもしれません。また、**SQLインジェクション**や**パストラバーサル**の可能性をテストすることも興味深いです。これらは脆弱である可能性があります。
|
||||
|
||||
[**Drozerを使用してコンテンツプロバイダーを悪用する方法を学びましょう。**](drozer-tutorial/index.html#content-providers)
|
||||
|
||||
### **サービスの悪用**
|
||||
|
||||
[**サービスについて復習したい場合はこれをお読みください。**](android-applications-basics.md#services)\
|
||||
[**サービスとは何かを再確認したい場合は、こちらをお読みください。**](android-applications-basics.md#services)\
|
||||
サービスのアクションは`onStartCommand`メソッドで開始されることを覚えておいてください。
|
||||
|
||||
サービスは基本的に**データを受信**し、**処理**し、**応答**(またはしない)を返すものです。したがって、アプリケーションがいくつかのサービスをエクスポートしている場合は、**コードを確認**して何をしているのかを理解し、機密情報を抽出したり、認証手段をバイパスしたりするために**動的にテスト**する必要があります。\
|
||||
サービスは基本的に**データを受信**し、**処理**し、**応答**(またはしない)を返すものです。したがって、アプリケーションがいくつかのサービスをエクスポートしている場合は、**コードを確認**して何をしているのかを理解し、**動的にテスト**して機密情報を抽出したり、認証手段をバイパスしたりする必要があります。\
|
||||
[**Drozerを使用してサービスを悪用する方法を学びましょう。**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **ブロードキャストレシーバーの悪用**
|
||||
|
||||
[**ブロードキャストレシーバーについて復習したい場合はこれをお読みください。**](android-applications-basics.md#broadcast-receivers)\
|
||||
[**ブロードキャストレシーバーとは何かを再確認したい場合は、こちらをお読みください。**](android-applications-basics.md#broadcast-receivers)\
|
||||
ブロードキャストレシーバーのアクションは`onReceive`メソッドで開始されることを覚えておいてください。
|
||||
|
||||
ブロードキャストレシーバーは、特定のメッセージを待機しています。レシーバーがメッセージをどのように処理するかによって、脆弱である可能性があります。\
|
||||
@ -381,17 +382,17 @@ _パッケージ名を**省略する**ことができ、モバイルは自動的
|
||||
**パス内のパラメータ**
|
||||
|
||||
**URLのパス内にパラメータを使用しているディープリンクがあるかどうかも確認する必要があります**。例えば、`https://api.example.com/v1/users/{username}` のように。この場合、`example://app/users?username=../../unwanted-endpoint%3fparam=value` のようにパスのトラバーサルを強制することができます。\
|
||||
アプリケーション内で正しいエンドポイントを見つけた場合、**オープンリダイレクト**(パスの一部がドメイン名として使用される場合)、**アカウント乗っ取り**(CSRFトークンなしでユーザーの詳細を変更でき、脆弱なエンドポイントが正しいメソッドを使用している場合)、およびその他の脆弱性を引き起こす可能性があります。詳細は[こちら](http://dphoeniixx.com/2020/12/13-2/)を参照してください。
|
||||
アプリケーション内で正しいエンドポイントを見つけた場合、**オープンリダイレクト**(パスの一部がドメイン名として使用される場合)、**アカウント乗っ取り**(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_)。
|
||||
|
||||
### トランスポート層の検査と検証の失敗
|
||||
|
||||
- **証明書はAndroidアプリケーションによって常に適切に検査されるわけではありません**。これらのアプリケーションは警告を見落とし、自己署名証明書を受け入れたり、場合によってはHTTP接続に戻ったりすることが一般的です。
|
||||
- **SSL/TLSハンドシェイク中の交渉は時々弱く**、安全でない暗号スイートを使用しています。この脆弱性により、接続が中間者攻撃(MITM)に対して脆弱になり、攻撃者がデータを復号化できるようになります。
|
||||
- **プライベート情報の漏洩**は、アプリケーションが安全なチャネルを使用して認証するが、他のトランザクションのために非安全なチャネルで通信する場合にリスクがあります。このアプローチは、セッションクッキーやユーザーの詳細などの機密データを悪意のあるエンティティからの傍受から保護できません。
|
||||
- **プライベート情報の漏洩**は、アプリケーションが安全なチャネルを使用して認証するが、他のトランザクションのために非安全なチャネルで通信する場合にリスクがあります。このアプローチは、セッションクッキーやユーザーの詳細などの機密データを悪意のあるエンティティによる傍受から保護できません。
|
||||
|
||||
#### 証明書の検証
|
||||
|
||||
@ -405,17 +406,19 @@ 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ピンニングをバイパスするためにルートが必要ないことですが、アプリケーションを削除して新しいものを再インストールする必要があり、これが常に機能するわけではありません。
|
||||
- **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脆弱性の検索
|
||||
|
||||
@ -427,10 +430,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の使い方を学ぶ: [**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)
|
||||
- ここで素晴らしい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**
|
||||
@ -452,9 +455,9 @@ 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にデータを保存していても、そのデータは暗号化されているべきです。
|
||||
アプリが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)
|
||||
```bash
|
||||
@ -468,7 +471,7 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app
|
||||
```
|
||||
### **バックグラウンド画像**
|
||||
|
||||
アプリケーションをバックグラウンドに置くと、Androidはアプリケーションの**スナップショット**を保存します。これにより、フォアグラウンドに復帰したときに、アプリがより早く読み込まれているように見えます。
|
||||
アプリケーションをバックグラウンドに置くと、Androidはアプリケーションの**スナップショット**を保存します。これにより、フォアグラウンドに復帰したときにアプリがより早く読み込まれているように見えます。
|
||||
|
||||
しかし、このスナップショットに**機密情報**が含まれている場合、スナップショットにアクセスできる誰かがその情報を**盗む**可能性があります(アクセスするにはルート権限が必要です)。
|
||||
|
||||
@ -491,7 +494,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
### Essential Takeaways
|
||||
|
||||
- **Intent Injection**は、ウェブのオープンリダイレクト問題に似ています。
|
||||
- 脆弱性は、`Intent`オブジェクトをエクストラとして渡すことに関与し、これが不安全な操作を実行するためにリダイレクトされる可能性があります。
|
||||
- 脆弱性は、`Intent`オブジェクトをエクストラとして渡すことに関与し、これがリダイレクトされて安全でない操作を実行する可能性があります。
|
||||
- 攻撃者に非エクスポートコンポーネントやコンテンツプロバイダーを露出させる可能性があります。
|
||||
- `WebView`のURLから`Intent`への変換は、意図しないアクションを促進する可能性があります。
|
||||
|
||||
@ -520,42 +523,42 @@ 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から分析する必要があります_)。\
|
||||
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`に設定すると、**ハッシュ**がファイルの代わりに**アップロード**されます。
|
||||
MobSFは**diff/Compare**分析を行い、**VirusTotal**を統合することも可能です(_MobSF/settings.py_にAPIキーを設定し、`VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`を有効にする必要があります)。`VT_UPLOAD`を`False`に設定すると、**ハッシュ**がファイルの代わりに**アップロード**されます。
|
||||
|
||||
### MobSFによる支援された動的分析
|
||||
|
||||
**MobSF**は**Android**における**動的分析**にも非常に役立ちますが、その場合はホストにMobSFと**genymotion**をインストールする必要があります(VMやDockerでは動作しません)。_注: **まずgenymotionでVMを起動し**、**その後MobSFを起動する必要があります。**_\
|
||||
**MobSF動的アナライザー**は以下のことができます:
|
||||
**MobSF**は**Android**における**動的分析**にも非常に役立ちますが、その場合はホストにMobSFと**genymotion**をインストールする必要があります(VMやDockerでは動作しません)。_注:最初に**genymotionでVMを起動**し、**その後MobSFを起動**する必要があります。_\
|
||||
**MobSF動的アナライザー**は以下を行うことができます:
|
||||
|
||||
- **アプリケーションデータをダンプ**(URL、ログ、クリップボード、あなたが撮ったスクリーンショット、"**Exported Activity Tester**"によって作成されたスクリーンショット、メール、SQLiteデータベース、XMLファイル、その他の作成されたファイル)。これらはすべて自動的に行われますが、スクリーンショットは撮りたいときにボタンを押す必要があります。または、すべてのエクスポートされたアクティビティのスクリーンショットを取得するために"**Exported Activity Tester**"を押す必要があります。
|
||||
- **アプリケーションデータをダンプ**(URL、ログ、クリップボード、あなたが撮ったスクリーンショット、"Exported Activity Tester"によって作成されたスクリーンショット、メール、SQLiteデータベース、XMLファイル、その他の作成されたファイル)。これらはすべて自動的に行われますが、スクリーンショットは、撮りたいときにボタンを押す必要があります。または、すべてのエクスポートされたアクティビティのスクリーンショットを取得するために"Exported Activity Tester"を押す必要があります。
|
||||
- **HTTPSトラフィックをキャプチャ**
|
||||
- **Frida**を使用して**ランタイム**の**情報**を取得
|
||||
|
||||
Androidの**バージョン > 5**では、**Frida**が**自動的に起動**し、トラフィックを**キャプチャ**するためのグローバル**プロキシ**設定が行われます。テストされたアプリケーションからのトラフィックのみをキャプチャします。
|
||||
Androidの**バージョン > 5**では、**Frida**が**自動的に起動**し、**トラフィックをキャプチャ**するためのグローバル**プロキシ**設定が行われます。テストされたアプリケーションからのトラフィックのみをキャプチャします。
|
||||
|
||||
**Frida**
|
||||
|
||||
デフォルトでは、SSLピンニング、**ルート検出**、**デバッガ検出**を**バイパス**し、**興味深いAPI**を**監視**するためにいくつかのFridaスクリプトを使用します。\
|
||||
MobSFはまた、**エクスポートされたアクティビティを呼び出し**、それらの**スクリーンショットを取得**し、レポート用に**保存**することもできます。
|
||||
|
||||
動的テストを**開始**するには、緑のボタン"**Start Instrumentation**"を押します。"**Frida Live Logs**"を押すとFridaスクリプトによって生成されたログが表示され、"**Live API Monitor**"を押すとフックされたメソッドへのすべての呼び出し、渡された引数、返された値が表示されます(これは"Start Instrumentation"を押した後に表示されます)。\
|
||||
MobSFは自分の**Fridaスクリプト**を読み込むこともできます(Fridaスクリプトの結果をMobSFに送信するには`send()`関数を使用します)。また、読み込むことができる**いくつかの事前に書かれたスクリプト**もあります(`MobSF/DynamicAnalyzer/tools/frida_scripts/others/`に追加できます)、それらを**選択**し、"**Load**"を押して"**Start Instrumentation**"を押すと、そのスクリプトのログを"**Frida Live Logs**"内で見ることができます。
|
||||
動的テストを**開始**するには、緑のボタン "**Start Instrumentation**" を押します。**Frida Live Logs**を押すと、Fridaスクリプトによって生成されたログが表示され、**Live API Monitor**を押すと、フックされたメソッドへのすべての呼び出し、渡された引数、返された値が表示されます(これは"Start Instrumentation"を押した後に表示されます)。\
|
||||
MobSFは、独自の**Fridaスクリプト**を読み込むこともできます(Fridaスクリプトの結果をMobSFに送信するには、`send()`関数を使用します)。また、読み込むことができる**いくつかの事前に書かれたスクリプト**もあります(`MobSF/DynamicAnalyzer/tools/frida_scripts/others/`に追加できます)。ただ**選択**し、"Load"を押し、"Start Instrumentation"を押すと、そのスクリプトのログを**Frida Live Logs**内で見ることができます。
|
||||
|
||||
.png>)
|
||||
|
||||
さらに、いくつかの補助的なFrida機能があります:
|
||||
|
||||
- **読み込まれたクラスを列挙**: すべての読み込まれたクラスを表示します
|
||||
- **文字列をキャプチャ**: アプリケーションを使用中にキャプチャされたすべての文字列を表示します(非常にノイジーです)
|
||||
- **文字列比較をキャプチャ**: 非常に便利です。**比較されている2つの文字列**と結果がTrueかFalseかを表示します。
|
||||
- **クラスメソッドを列挙**: クラス名(例:"java.io.File")を入力すると、そのクラスのすべてのメソッドが表示されます。
|
||||
- **クラスパターンを検索**: パターンでクラスを検索します
|
||||
- **クラスメソッドをトレース**: **クラス全体をトレース**します(そのクラスのすべてのメソッドの入力と出力を確認します)。デフォルトではMobSFは興味深いAndroid APIメソッドをいくつかトレースします。
|
||||
- **読み込まれたクラスを列挙**:すべての読み込まれたクラスを表示します
|
||||
- **文字列をキャプチャ**:アプリケーションを使用中にキャプチャされたすべての文字列を表示します(非常にノイジーです)
|
||||
- **文字列比較をキャプチャ**:非常に役立つ可能性があります。**比較されている2つの文字列**と、結果がTrueかFalseかを表示します。
|
||||
- **クラスメソッドを列挙**:クラス名(例:"java.io.File")を入力すると、そのクラスのすべてのメソッドが表示されます。
|
||||
- **クラスパターンを検索**:パターンでクラスを検索
|
||||
- **クラスメソッドをトレース**:**クラス全体をトレース**(そのクラスのすべてのメソッドの入力と出力を確認)。デフォルトでは、MobSFは興味深いAndroid APIメソッドをいくつかトレースします。
|
||||
|
||||
使用したい補助モジュールを選択したら、"**Start Intrumentation**"を押すと、すべての出力が"**Frida Live Logs**"に表示されます。
|
||||
使用したい補助モジュールを選択したら、"Start Instrumentation"を押すと、すべての出力が"Frida Live Logs"に表示されます。
|
||||
|
||||
**Shell**
|
||||
|
||||
@ -570,13 +573,13 @@ 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リクエストをファズ**し、脆弱性を探します。
|
||||
|
||||
> [!NOTE]
|
||||
> MobSFで動的分析を行った後、プロキシ設定が誤って構成される可能性があり、GUIから修正できなくなることがあります。プロキシ設定を修正するには、次のコマンドを実行します:
|
||||
> [!TIP]
|
||||
> MobSFで動的分析を実行した後、プロキシ設定が誤って構成される可能性があり、GUIから修正できなくなることがあります。プロキシ設定を修正するには、次のコマンドを実行します:
|
||||
>
|
||||
> ```
|
||||
> adb shell settings put global http_proxy :0
|
||||
@ -585,17 +588,17 @@ MobSFで動的分析を終えたら、"**Start Web API Fuzzer**"を押して**HT
|
||||
### Inspeckageを使用した支援動的分析
|
||||
|
||||
ツールは[**Inspeckage**](https://github.com/ac-pm/Inspeckage)から入手できます。\
|
||||
このツールは、**動的分析**を行っている間に**アプリケーションで何が起こっているか**を知らせるためにいくつかの**フック**を使用します。
|
||||
このツールは、**動的分析**を実行している間に**アプリケーションで何が起こっているか**を知らせるためにいくつかの**フック**を使用します。
|
||||
|
||||
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
||||
|
||||
これは**GUIを使用した静的分析を行うための優れたツール**です。
|
||||
これは**GUIを使用した静的分析を実行するための優れたツール**です。
|
||||
|
||||
.png>)
|
||||
|
||||
### [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
|
||||
@ -604,7 +607,7 @@ qark --java path/to/specific/java/file.java
|
||||
```
|
||||
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
|
||||
|
||||
- 参照用にすべての抽出ファイルを表示
|
||||
- すべての抽出されたファイルを簡単に参照できるように表示
|
||||
- APKファイルを自動的にJavaおよびSmali形式にデコンパイル
|
||||
- 一般的な脆弱性と動作のためにAndroidManifest.xmlを分析
|
||||
- 一般的な脆弱性と動作のための静的ソースコード分析
|
||||
@ -615,9 +618,9 @@ 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_ファイルを分析します。これは、APKを解凍し、一連のルールを適用して脆弱性を検出することによって行われます。
|
||||
|
||||
すべてのルールは`rules.json`ファイルに集中しており、各企業やテスターは自分たちの必要に応じて分析するための独自のルールを作成できます。
|
||||
すべてのルールは`rules.json`ファイルに集中しており、各企業やテスターは自分たちのニーズに応じて分析するための独自のルールを作成できます。
|
||||
|
||||
最新のバイナリは[ダウンロードページ](https://superanalyzer.rocks/download.html)からダウンロードしてください。
|
||||
```
|
||||
@ -647,7 +650,7 @@ androbugs.exe -f [APK file]
|
||||
|
||||
**Androwarn**は、Androidアプリケーションによって開発された潜在的な悪意のある動作を検出し、ユーザーに警告することを主な目的としたツールです。
|
||||
|
||||
検出は、アプリケーションのDalvikバイトコードの**静的解析**を使用して行われ、**Smali**として表現されます。[`androguard`](https://github.com/androguard/androguard)ライブラリを使用しています。
|
||||
検出は、アプリケーションのDalvikバイトコードを**静的分析**することで行われ、**Smali**として表現されます。[`androguard`](https://github.com/androguard/androguard)ライブラリを使用しています。
|
||||
|
||||
このツールは、次のような「悪い」アプリケーションの**一般的な動作**を探します: テレフォニー識別子の流出、音声/ビデオフローの傍受、PIMデータの変更、任意のコード実行...
|
||||
```
|
||||
@ -657,7 +660,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.png>)
|
||||
|
||||
**MARA**は**モバイルアプリケーションの逆アセンブルおよび分析フレームワーク**です。これは、OWASPモバイルセキュリティ脅威に対してモバイルアプリケーションをテストするために、一般的に使用されるモバイルアプリケーションの逆アセンブルおよび分析ツールをまとめたツールです。その目的は、この作業をモバイルアプリケーションの開発者やセキュリティ専門家にとってより簡単で親しみやすくすることです。
|
||||
**MARA**は**モバイルアプリケーションの逆コンパイルおよび分析フレームワーク**です。これは、OWASPモバイルセキュリティ脅威に対してモバイルアプリケーションをテストするために、一般的に使用されるモバイルアプリケーションの逆コンパイルおよび分析ツールをまとめたツールです。その目的は、この作業をモバイルアプリケーションの開発者やセキュリティ専門家にとってより簡単で親しみやすくすることです。
|
||||
|
||||
以下のことが可能です:
|
||||
|
||||
@ -665,7 +668,7 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
- [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)を使用して見つかったドメインを分析する
|
||||
- [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をデオブフスケートする
|
||||
|
||||
### Koodous
|
||||
@ -678,7 +681,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の一部として配布され、アプリケーションをリリースモードでビルドする際に実行されます。
|
||||
|
||||
@ -688,21 +691,21 @@ APKをデオブフスケートするためのステップバイステップガ
|
||||
|
||||
(そのガイドから)最後に確認したとき、Dexguardの動作モードは次のとおりでした:
|
||||
|
||||
- リソースをInputStreamとして読み込む;
|
||||
- 結果をFilterInputStreamから継承したクラスに渡して復号化する;
|
||||
- リバースエンジニアに数分の時間を無駄にさせるために無駄な難読化を行う;
|
||||
- 復号化された結果をZipInputStreamに渡してDEXファイルを取得する;
|
||||
- リソースをInputStreamとして読み込む;
|
||||
- 結果をFilterInputStreamから継承したクラスに渡して復号化する;
|
||||
- リバースエンジニアに数分の時間を無駄にさせるために無駄な難読化を行う;
|
||||
- 復号化された結果をZipInputStreamに渡してDEXファイルを取得する;
|
||||
- 最後に、`loadDex`メソッドを使用して結果のDEXをリソースとして読み込む。
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuardは、Androidの難読化ツールによって行われた難読化プロセスを逆転させます。これにより、コード検査やライブラリの予測を含む多数のセキュリティ分析が可能になります。**
|
||||
**DeGuardは、Androidの難読化ツールによって行われた難読化プロセスを逆転させます。これにより、コード検査やライブラリの予測など、数多くのセキュリティ分析が可能になります。**
|
||||
|
||||
難読化されたAPKを彼らのプラットフォームにアップロードできます。
|
||||
|
||||
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
|
||||
|
||||
これは、Androidアプリの潜在的なセキュリティ脆弱性を見つけ、AndroidアプリのコードをデオブフスケートするためのLLMツールです。GoogleのGeminiパブリックAPIを使用します。
|
||||
これは、Androidアプリの潜在的なセキュリティ脆弱性を見つけ、AndroidアプリコードをデオブフスケートするためのLLMツールです。GoogleのGeminiパブリックAPIを使用します。
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
@ -712,17 +715,17 @@ APKをデオブフスケートするためのステップバイステップガ
|
||||
|
||||
APKiDは**APKがどのように作成されたか**に関する情報を提供します。多くの**コンパイラ**、**パッカー**、**難読化ツール**、およびその他の奇妙なものを特定します。これはAndroid用の[_PEiD_](https://www.aldeid.com/wiki/PEiD)です。
|
||||
|
||||
### Manual
|
||||
### マニュアル
|
||||
|
||||
[カスタム難読化を逆アセンブルする方法に関するいくつかのトリックを学ぶためにこのチュートリアルを読んでください](manual-deobfuscation.md)
|
||||
[カスタム難読化を逆コンパイルする方法に関するいくつかのトリックを学ぶためにこのチュートリアルを読んでください](manual-deobfuscation.md)
|
||||
|
||||
## Labs
|
||||
## ラボ
|
||||
|
||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
||||
|
||||
AndroL4bは、Ubuntu-mateに基づいたAndroidセキュリティ仮想マシンで、リバースエンジニアリングやマルウェア分析のための最新のフレームワーク、チュートリアル、ラボのコレクションを含んでいます。
|
||||
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/#/) これは素晴らしいリソースのリストです
|
||||
@ -731,7 +734,7 @@ AndroL4bは、Ubuntu-mateに基づいたAndroidセキュリティ仮想マシン
|
||||
- [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh)
|
||||
- [https://www.youtube.com/watch?v=PMKnPaGWxtg\&feature=youtu.be\&ab_channel=B3nacSec](https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec)
|
||||
|
||||
## Yet to try
|
||||
## まだ試していない
|
||||
|
||||
- [https://www.vegabird.com/yaazhini/](https://www.vegabird.com/yaazhini/)
|
||||
- [https://github.com/abhi-r3v0/Adhrit](https://github.com/abhi-r3v0/Adhrit)
|
||||
|
@ -0,0 +1,123 @@
|
||||
# Shizuku Privileged API
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Shizukuは、**`app_process`を使用して特権のあるJavaプロセスを生成し**、選択された**AndroidシステムAPIをBinder経由で公開する**オープンソースサービスです。プロセスはADBが使用するのと同じ**`shell` UID権限で起動されるため、エクスポートされたAIDLインターフェースにバインドする任意のアプリケーション(またはターミナル)は、通常**`WRITE_SECURE_SETTINGS`、`INSTALL_PACKAGES`、`/data`内のファイルI/O**などを必要とする多くのアクションを**デバイスをルート化せずに**実行できます。
|
||||
|
||||
典型的な使用例:
|
||||
* ルート化されていないハンドセットからのセキュリティ監査
|
||||
* ブloatwareの削除 / システムアプリのデブロート
|
||||
* ブルーチーム/DFIRのためのログ、Wi-Fiキー、プロセスおよびソケット情報の収集
|
||||
* カスタムアプリやシェルスクリプトからのデバイス設定の自動化
|
||||
|
||||
---
|
||||
## 1. 特権サービスの開始
|
||||
|
||||
`moe.shizuku.privileged.api`は、3つの異なる方法で開始できます。結果として得られるBinderサービスは、すべての方法で同じように動作します。
|
||||
|
||||
### 1.1 ワイヤレスADB(Android 11+)
|
||||
1. **開発者オプション ➜ ワイヤレスデバッグ**を有効にし、デバイスをペアリングします。
|
||||
2. Shizukuアプリ内で**「ワイヤレスデバッグ経由で開始」**を選択し、ペアリングコードをコピーします。
|
||||
3. サービスは次回の再起動まで生存します(ワイヤレスデバッグセッションは起動時にクリアされます)。
|
||||
|
||||
### 1.2 USB / ローカルADBワンライナー
|
||||
```bash
|
||||
adb push start.sh \
|
||||
/storage/emulated/0/Android/data/moe.shizuku.privileged.api/
|
||||
|
||||
# spawn the privileged process
|
||||
adb shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh
|
||||
```
|
||||
同じスクリプトは**ネットワーク ADB**接続(`adb connect <IP>:5555`)を介して実行できます。
|
||||
|
||||
### 1.3 ルート化されたデバイス
|
||||
デバイスがすでにルート化されている場合は、次のコマンドを実行します:
|
||||
```bash
|
||||
su -c sh /data/adb/shizuku/start.sh
|
||||
```
|
||||
### 1.4 実行中であることの確認
|
||||
```bash
|
||||
adb shell dumpsys activity service moe.shizuku.privileged.api | head
|
||||
```
|
||||
成功した開始は、特権プロセスのPIDと共に `Running services (1)` を返します。
|
||||
|
||||
---
|
||||
## 2. アプリケーションからのバインディング
|
||||
サードパーティアプリは、`AndroidManifest.xml` 内に以下を必要とします:
|
||||
```xml
|
||||
<uses-permission android:name="moe.shizuku.manager.permission.API"/>
|
||||
```
|
||||
実行時にバインダーを取得します:
|
||||
```java
|
||||
IBinder binder = ShizukuProvider.getBinder();
|
||||
IPackageManager pm = IPackageManager.Stub.asInterface(binder);
|
||||
```
|
||||
この時点から、アプリは**`shell`ユーザー**が呼び出すことができる任意のメソッドを呼び出すことができます - 例えば:
|
||||
```java
|
||||
pm.installPackage(new Uri("file:///sdcard/app.apk"), null, 0, null);
|
||||
Settings.Global.putInt(resolver, Settings.Global.ADB_ENABLED, 1);
|
||||
```
|
||||
**170以上のShizuku対応アプリ**のキュレーションリストは[awesome-shizuku](https://github.com/timschneeb/awesome-shizuku)で管理されています。
|
||||
|
||||
---
|
||||
## 3. Rish – Termux内の昇格シェル
|
||||
Shizuku設定画面では**「ターミナルアプリでShizukuを使用」**が表示されます。これを有効にすると*rish*(`/data/local/tmp/rish`)がダウンロードされます。
|
||||
```bash
|
||||
pkg install wget
|
||||
wget https://rikka.app/rish/latest -O rish && chmod +x rish
|
||||
|
||||
# start elevated shell (inherits the binder connection)
|
||||
./rish
|
||||
whoami # ➜ shell
|
||||
id # uid=2000(shell) gid=2000(shell) groups=... context=u:r:shell:s0
|
||||
```
|
||||
### 3.1 有用なコマンド rish シェルから
|
||||
* 特定のパッケージの実行中プロセスをリストする:
|
||||
```bash
|
||||
ps -A | grep com.facebook.katana
|
||||
```
|
||||
* リスニングソケットを列挙し、それらをパッケージにマッピングする(例: **CVE-2019-6447 ES File Explorer**):
|
||||
```bash
|
||||
netstat -tuln
|
||||
for pid in $(lsof -nP -iTCP -sTCP:LISTEN -t); do
|
||||
printf "%s -> %s\n" "$pid" "$(cat /proc/$pid/cmdline)";
|
||||
done
|
||||
```
|
||||
* すべてのアプリケーションのログをダンプする:
|
||||
```bash
|
||||
logcat -d | grep -iE "(error|exception)"
|
||||
```
|
||||
* 保存されたWi-Fi資格情報を読む(Android 11 +):
|
||||
```bash
|
||||
cat /data/misc/wifi/WifiConfigStore.xml | grep -i "<ConfigKey>"
|
||||
```
|
||||
* バルクデブロート(例):
|
||||
```bash
|
||||
pm uninstall --user 0 com.miui.weather2
|
||||
```
|
||||
|
||||
---
|
||||
## 4. セキュリティ考慮事項 / 検出
|
||||
1. Shizukuは**ADBデバッグ**権限が必要であるため、_開発者オプション → USB/ワイヤレスデバッグ_を**有効**にする必要があります。
|
||||
組織はこれをMDMを通じてブロックするか、`settings put global development_settings_enabled 0`を使用できます。
|
||||
2. サービスは`moe.shizuku.privileged.api`という名前で自らを登録します。
|
||||
シンプルな`adb shell service list | grep shizuku`(またはエンドポイントセキュリティルール)がその存在を検出します。
|
||||
3. 機能は`shell`ユーザーがすでにできることに制限されており、**root**ではありません。
|
||||
`system`または`root`ユーザーを必要とする敏感なAPIには依然としてアクセスできません。
|
||||
4. セッションは**再起動後に生き残らない**、デバイスがルート化されておりShizukuがスタートアップデーモンとして構成されていない限り。
|
||||
|
||||
---
|
||||
## 5. 緩和策
|
||||
* 生産デバイスでUSB/ワイヤレスデバッグを無効にする。
|
||||
* `moe.shizuku.privileged.api`を公開しているBinderサービスを監視する。
|
||||
* SELinuxポリシー(Androidエンタープライズ)を使用して、管理されていないアプリケーションからAIDLインターフェースをブロックする。
|
||||
|
||||
---
|
||||
## 参考文献
|
||||
|
||||
- [Blog – Shizuku: Unlocking Advanced Android Capabilities Without Root](https://www.mobile-hacker.com/2025/07/14/shizuku-unlocking-advanced-android-capabilities-without-root/)
|
||||
- [Shizuku Official Documentation](https://shizuku.rikka.app/)
|
||||
- [awesome-shizuku – list of supported apps](https://github.com/timschneeb/awesome-shizuku)
|
||||
- [rish shell (privileged reverse-adb shell)](https://github.com/RikkaApps/Shizuku/blob/master/RISH.md)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
Loading…
x
Reference in New Issue
Block a user