mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-15 17:28:13 +00:00
Translated ['mobile-pentesting/android-app-pentesting/README.md', 'mobil
This commit is contained in:
parent
651c842b4f
commit
8bb70d8dbc
3 changed files with 127 additions and 88 deletions
|
@ -303,6 +303,7 @@
|
|||
* [Reversing Native Libraries](mobile-pentesting/android-app-pentesting/reversing-native-libraries.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)
|
||||
* [Webview Attacks](mobile-pentesting/android-app-pentesting/webview-attacks.md)
|
||||
* [iOS Pentesting Checklist](mobile-pentesting/ios-pentesting-checklist.md)
|
||||
* [iOS Pentesting](mobile-pentesting/ios-pentesting/README.md)
|
||||
|
|
|
@ -65,34 +65,34 @@ adb pull /data/app/com.android.insecurebankv2- Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
|
|||
```
|
||||
## 静的解析
|
||||
|
||||
まず、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の文字列を見るだけで、**パスワード**、**URL** ([https://github.com/ndelphit/apkurlgrep](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
|
||||
|
||||
[ここで](apk-decompilers.md)言及されているデコンパイラのいずれかを使用すると、_Manifest.xml_を読むことができます。また、**apk**ファイルの拡張子を**.zip**に変更して**解凍**することもできます。\
|
||||
[ここで](apk-decompilers.md)言及されているいずれかのデコンパイラを使用すると、_Manifest.xml_を読むことができます。また、**apk**ファイルの拡張子を**.zip**に**変更**し、**解凍**することもできます。\
|
||||
マニフェストを読むことで、以下の脆弱性を見つけることができます。
|
||||
|
||||
* まず、アプリケーションが**デバッグ可能**かどうかを確認してください。本番のAPKでは(他の人が接続できるようにするため)デバッグ可能ではありません。マニフェストで属性`debuggable="true"`を探すことで、アプリケーションがデバッグ可能かどうかを確認できます。例:`<application theme="@2131296387" debuggable="true"`
|
||||
* まず、アプリケーションが**デバッグ可能**かどうかを確認してください。本番のAPKはデバッグ可能ではありません(そうでなければ他の人が接続できます)。マニフェストで属性`debuggable="true"`を探すことで、アプリケーションがデバッグ可能かどうかを確認できます。例:`<application theme="@2131296387" debuggable="true"`
|
||||
* [ここで](drozer-tutorial/#is-debuggeable)、電話でデバッグ可能なアプリケーションを見つけて悪用する方法を学びます。
|
||||
* **バックアップ**:**`android:allowBackup`**属性は、USBデバッグを有効にしたユーザーがアプリケーションデータをバックアップおよび復元できるかどうかを定義します。バックアップフラグがtrueに設定されている場合、デバイスがルート化されていなくても、攻撃者はadbを介してアプリケーションデータのバックアップを取得できます。したがって、カードの詳細、パスワードなどの機密情報を処理および保存するアプリケーションは、この設定を明示的に**false**に設定する必要があります。デフォルトでは、これを防ぐために**true**に設定されています。
|
||||
* `<application android:allowBackup="false"`
|
||||
* **NetworkSecurity:** アプリケーションのネットワークセキュリティは、**`android:networkSecurityConfig="@xml/network_security_config"`**でデフォルト値を上書きすることができます。その名前のファイルを**res/xml**に配置することができます。このファイルでは、証明書のピンやHTTPトラフィックを許可するかどうかなど、重要なセキュリティ設定を構成します。ここで設定できるすべてのことについての詳細情報は[こちら](./#network-security)で読むことができますが、次の例は特定のドメインに対してHTTPトラフィックを設定する方法についてのものです:
|
||||
* **NetworkSecurity:** アプリケーションのネットワークセキュリティは、**`android:networkSecurityConfig="@xml/network_security_config"`**でデフォルト値を上書きすることができます。その名前のファイルは、_**res/xml.**_に配置される場合があります。このファイルでは、証明書ピンやHTTPトラフィックを許可するかどうかなど、重要なセキュリティ設定を構成します。ここで構成できるすべての設定についての詳細情報はこちらで読むことができますが、次の例はいくつかのドメインに対してHTTPトラフィックを設定する方法についてのものです:
|
||||
* `<domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">formation-software.co.uk </domain></domain-config>`
|
||||
* **エクスポートされたアクティビティ**:マニフェスト内のエクスポートされたアクティビティをチェックしてください。これは危険な場合があります。後で動的解析で[この動作を悪用する方法](./#exploiting-exported-activities-authorisation-bypass)を説明します。
|
||||
* **コンテンツプロバイダー**:エクスポートされたプロバイダーが公開されている場合、興味深い情報にアクセス/変更できる可能性があります。動的解析では、[これらを悪用する方法](./#exploiting-content-providers-accessing-and-manipulating-sensitive-information)を学びます。
|
||||
* `android:name="android.support.FILE_PROVIDER_PATHS"`という属性内の**FileProviders**の設定を確認してください。[FileProvidersについての詳細はこちらを読んでください](./#fileprovider)。
|
||||
* **コンテンツプロバイダー**:エクスポートされたプロバイダーが公開されている場合、興味深い情報にアクセス/変更できる場合があります。動的解析では、[これらを悪用する方法](./#exploiting-content-providers-accessing-and-manipulating-sensitive-information)を学びます。
|
||||
* `android:name="android.support.FILE_PROVIDER_PATHS"`内の**FileProviders**の設定を確認してください。[FileProvidersについての詳細はこちらを読んでください](./#fileprovider)。
|
||||
* **公開されたサービス**:サービスが内部で何を行っているかによって、脆弱性が悪用される可能性があります。動的解析では、[これらを悪用する方法](./#exploiting-services)を学びます。
|
||||
* **ブロードキャストレシーバー**:[悪用の可能性がある方法](./#exploiting-broadcast-receivers)を学びます。
|
||||
* **URLスキーム**:スキームを管理するアクティビティのコードを読み、ユーザーの入力を管理する際の脆弱性を探します。[URLスキームについての詳細はこちら](./#url-schemes)。
|
||||
* **minSdkVersion**、**targetSDKVersion**、**maxSdkVersion**:これらはアプリが実行されるAndroidのバージョンを示しています。セキュリティの観点から、古いバージョンをサポートすることは、既知の脆弱性のあるAndroidのバージョンを実行することを許可するため、重要です。
|
||||
* **ブロードキャストレシーバー**:[これらを悪用する方法](./#exploiting-broadcast-receivers)については、後で説明します。
|
||||
* **URLスキーム**:スキームを管理するアクティビティのコードを読み、ユーザーの入力を管理する際の脆弱性を探してください。[URLスキームについての詳細情報はこちらを参照してください](./#url-schemes)。
|
||||
* **minSdkVersion**、**targetSDKVersion**、**maxSdkVersion**:これらはアプリが実行されるAndroidのバージョンを示しています。セキュリティの観点から、古いバージョンをサポートすることは、既知の脆弱性のあるAndroidのバージョンで実行されることを許可することを意味します。
|
||||
|
||||
**resources.arsc/strings.xml**を読むことで、いくつかの興味深い情報を見つけることができます。
|
||||
|
||||
|
@ -102,32 +102,13 @@ APKの文字列を見るだけで、**パスワード**、**URL** ([https://gith
|
|||
|
||||
### タップジャッキング
|
||||
|
||||
**タップジャッキング**は、**悪意のあるアプリケーション**が起動し、**被害者アプリケーションの上に配置**される攻撃です。被害者アプリを視覚的に隠し、ユーザーがそれと対話するように見せかけながら、実際には被害者アプリに対して操作を行っています。
|
||||
|
||||
この攻撃に対して脆弱なアプリを検出するためには、Androidマニフェストで**エクスポートされたアクティビティ**を検索する必要があります(インテントフィルタを持つアクティビティはデフォルトで自動的にエクスポートされます)。エクスポートされたアクティビティを見つけたら、**必要なパーミッションがあるかどうかを確認**することが重要です。なぜなら、**悪意のあるアプリケーションもそのパーミッションが必要**だからです。\
|
||||
最後に、コード内で**`setFilterTouchesWhenObscured`**の設定があるかどうかを確認することが重要です。これが**`true`**に設定されている場合、ボタンは自動的に無効になる可能性があります。
|
||||
```markup
|
||||
<Button android:text="Button"
|
||||
android:id="@+id/button1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:filterTouchesWhenObscured="true">
|
||||
</Button>
|
||||
```
|
||||
[**qark**](https://github.com/linkedin/qark)を`--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk`のパラメータと共に使用して、潜在的な**Tapjacking**の脆弱性をテストするための悪意のあるアプリケーションを作成することができます。\
|
||||
この種の機能を実装した例のプロジェクトは、[**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp)で見つけることができます。
|
||||
|
||||
対策は比較的簡単で、開発者は他のビューによってカバーされている場合にタッチイベントを受け取らないように選択することができます。[Android Developer’s 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に設定します。有効にすると、フレームワークは、ビューのウィンドウが他の表示ウィンドウによって隠されている場合に受け取ったタッチを破棄します。その結果、ビューは、トースト、ダイアログ、または他のウィンドウがビューのウィンドウの上に表示されている場合にタッチを受け取りません。
|
||||
|
||||
### タスクハイジャッキング
|
||||
|
||||
**`launchMode`**を**`singleTask`**に設定し、**`taskAffinity`**を定義しない**アクティビティ**は、タスクハイジャッキングの脆弱性があります。つまり、**アプリケーション**がインストールされ、実際のアプリケーションよりも先に起動された場合、**実際のアプリケーションのタスクをハイジャック**することができます(ユーザーは**実際のアプリケーションを使用していると思い込んで**悪意のあるアプリケーションとやり取りします)。
|
||||
**`launchMode`**が**`singleTask`**に設定され、**`taskAffinity`**が定義されていない**アクティビティ**は、タスクハイジャッキングの脆弱性があります。これは、**アプリケーション**がインストールされ、実際のアプリケーションよりも先に起動された場合、**アプリケーションのタスクをハイジャック**できることを意味します(したがって、ユーザーは**実際のアプリケーションを使用していると思い込んでいる間に悪意のあるアプリケーション**とやり取りしています)。
|
||||
|
||||
詳細は以下を参照してください:
|
||||
詳細はこちら:
|
||||
|
||||
{% content-ref url="android-task-hijacking.md" %}
|
||||
[android-task-hijacking.md](android-task-hijacking.md)
|
||||
|
@ -137,32 +118,12 @@ android:filterTouchesWhenObscured="true">
|
|||
|
||||
**内部ストレージ**
|
||||
|
||||
内部ストレージに作成されたファイルは、**アプリケーション**のみがアクセスできます。この保護はAndroidによって実装されており、ほとんどのアプリケーションには十分です。しかし、開発者はしばしば`MODE_WORLD_READBALE`および`MODE_WORLD_WRITABLE`を使用して、これらのファイルに別のアプリケーションへのアクセスを許可しますが、これにより他のアプリ(悪意のあるアプリ)がそれらにアクセスすることは制限されません。\
|
||||
**静的**解析では、これらの**モード**の使用をチェックし、**動的**解析では作成されたファイルの**許可**をチェックします(おそらくいくつかのファイルはグローバルに読み取り/書き込み可能です)。\
|
||||
[この脆弱性についての詳細と修正方法はこちらを参照してください。](https://manifestsecurity.com/android-application-security-part-8/)
|
||||
|
||||
**外部ストレージ**
|
||||
|
||||
SDカードなどの**外部ストレージ**に作成されたファイルは、**グローバルに読み取りおよび書き込み可能**です。外部ストレージはユーザーによって取り外され、また任意のアプリケーションによって変更される可能性があるため、**外部ストレージを使用して機密情報を保存しないでください**。\
|
||||
信頼できないソースからのデータと同様に、**外部ストレージからのデータを処理する際には入力検証を実行**する必要があります。動的ローディングの前に、実行可能ファイルやクラスファイルを外部ストレージに保存しないことを強くお勧めします。アプリが外部ストレージから実行可能ファイルを取得する場合は、ファイルを署名し、動的ローディングの前に暗号的に検証する必要があります。\
|
||||
情報は[こちら](https://manifestsecurity.com/android-application-security-part-8/)から取得しました。
|
||||
|
||||
外部ストレージは`/storage/emulated/0`、`/sdcard`、`/mnt/sdcard`で**アクセス**できます。
|
||||
|
||||
{% hint style="info" %}
|
||||
Android 4.4(**API 17**)以降、SDカードにはアプリケーションごとに特定のディレクトリにアクセスを**制限するディレクトリ構造**があります。これにより、悪意のあるアプリケーションが他のアプリのファイルに読み取りまたは書き込みアクセスを取得することが防止されます。
|
||||
{% endhint %}
|
||||
|
||||
**クリアテキストで保存された機密データ**
|
||||
|
||||
* **共有プリファレンス**:Androidは、各アプリケーションが簡単にxmlファイルを`/data/data/<packagename>/shared_prefs/`のパスに保存できるようにします。そして、そのフォルダにクリアテキストで機密情報を見つけることができる場合があります。
|
||||
* **データベース**:Androidは、各アプリケーションが簡単にsqliteデータベースを`/data/data/<packagename>/databases/`のパスに保存できるようにします。そして、そのフォルダにクリアテキストで機密情報を見つけることができる場合があります。
|
||||
|
||||
内部ストレージに作成されたファイルは、アプリケーションのみがアクセスできます。この保護はAndroidによって実装されており、ほとんどのアプリケーションには十分です。ただし、開発者はしばしば`MODE_WORLD_READBALE`および`MODE_WORLD_WRITABLE`を使用して、これらのファイルに別のアプリケーションへのアクセスを許可しますが、これにより他のアプリ
|
||||
### 破損したTLS
|
||||
|
||||
**すべての証明書を受け入れる**
|
||||
|
||||
何らかの理由で、ホスト名が一致しない場合でも、開発者はすべての証明書を受け入れることがあります。以下のようなコード行で証明書を受け入れることがあります:
|
||||
何らかの理由で、開発者は時々すべての証明書を受け入れます。たとえば、ホスト名が次のようなコード行と一致しない場合でも、以下のようなコード行を使用します。
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
|
@ -346,7 +307,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
|||
|
||||
**機密情報の漏洩**
|
||||
|
||||
**アクティビティは結果を返すこともできます**。エクスポートされて保護されていないアクティビティが、**`setResult`**メソッドを呼び出し、**機密情報を返す**場合、機密情報の漏洩が発生します。
|
||||
**アクティビティは結果を返すこともできます**。エクスポートされて保護されていないアクティビティが、**`setResult`**メソッドを呼び出して**機密情報を返す**場合、機密情報の漏洩が発生します。
|
||||
|
||||
#### タップジャッキング
|
||||
|
||||
|
@ -363,7 +324,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
|||
[**サービスとは何かを思い出したい場合は、こちらを読んでください。**](android-applications-basics.md#services)\
|
||||
サービスのアクションは、`onStartCommand`メソッドで開始されます。
|
||||
|
||||
サービスは基本的には**データを受け取り**、**処理**し、**応答**(またはしない場合もあります)するものです。したがって、アプリケーションがいくつかのサービスをエクスポートしている場合は、コードを**チェック**して何をしているのかを理解し、機密情報の抽出、認証手段のバイパスなどを**動的に**テストする必要があります。\
|
||||
サービスは基本的には**データを受け取り**、**処理**し、**応答**を返す(または返さない)ものです。したがって、アプリケーションがいくつかのサービスをエクスポートしている場合、それが何をしているのかを理解するために**コード**をチェックし、機密情報の抽出、認証手段のバイパスなどを**動的に**テストする必要があります。\
|
||||
[**Drozerを使用してサービスを悪用する方法を学びましょう。**](drozer-tutorial/#services)
|
||||
|
||||
### **ブロードキャストレシーバの悪用**
|
||||
|
@ -371,7 +332,7 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
|||
[**ブロードキャストレシーバとは何かを思い出したい場合は、こちらを読んでください。**](android-applications-basics.md#broadcast-receivers)\
|
||||
ブロードキャストレシーバのアクションは、`onReceive`メソッドで開始されます。
|
||||
|
||||
ブロードキャストレシーバは特定のタイプのメッセージを待機しています。レシーバがメッセージをどのように処理するかによって、脆弱性がある可能性があります。\
|
||||
ブロードキャストレシーバは特定のタイプのメッセージを待機しています。レシーバがメッセージを処理する方法によって、脆弱性がある可能性があります。\
|
||||
[**Drozerを使用してブロードキャストレシーバを悪用する方法を学びましょう。**](./#exploiting-broadcast-receivers)
|
||||
|
||||
### **スキーム/ディープリンクの悪用**
|
||||
|
@ -417,9 +378,9 @@ URLのパス内にパラメータを使用しているディープリンクが
|
|||
|
||||
### 不十分なトランスポート層保護
|
||||
|
||||
* **証明書の検査の欠如:** Androidアプリケーションは、それに提示された証明書の正当なチェーンを信頼された(ルート)証明書に戻すことができません。ほとんどのアプリケーションは警告を無視し、自己署名証明書を受け入れます。一部のアプリケーションは代わりにトラフィックをHTTP接続経由で送信します。
|
||||
* **弱いハンドシェイクの交渉:** アプリケーションとサーバーはSSL/TLSハンドシェイクを実行しますが、MITM攻撃に対して脆弱な暗号スイートを使用します。したがって、攻撃者はその接続を簡単に復号することができます。
|
||||
* **プライバシー情報の漏洩:** アプリケーションはセキュアなチャネルを介して認証を行うことが多いですが、その他の接続は非セキュアなチャネルを介して行われます。これはアプリケーションのセキュリティに貢献しません。なぜなら、セッションクッキーやユーザーデータなどの他の機密データが悪意のあるユーザーによって傍受される可能性があるからです。
|
||||
* **証明書の検査の不足:** Androidアプリケーションは、自己署名証明書を受け取ることができる任意の証明書を無視して受け入れることがあります。一部のアプリケーションは、トラフィックをHTTP接続経由で送信します。
|
||||
* **弱いハンドシェイクの交渉:** アプリケーションとサーバーはSSL/TLSハンドシェイクを実行しますが、MITM攻撃に対して脆弱な暗号スイートを使用します。したがって、攻撃者はその接続を簡単に復号化できます。
|
||||
* **プライバシー情報の漏洩:** アプリケーションはセキュアなチャネルを介して認証を行うことがありますが、その他の接続は非セキュアなチャネルを介して行われます。これは、セッションクッキーやユーザーデータなどの他の機密データが悪意のあるユーザーによって傍受される可能性があるため、アプリケーションのセキュリティには貢献しません。
|
||||
|
||||
提示された3つのシナリオのうち、**証明書の正当性を検証する方法**について説明します。他の2つのシナリオは、サーバーの**TLS設定**とアプリケーションが**暗号化されていないデータを送信**するかどうかに依存します。ペンテスターは、サーバーのTLS設定を自分でチェックし、[こちら](../../network-services-pentesting/pentesting-web/#ssl-tls-vulnerabilites)で**機密情報が暗号化されていない/脆弱な**チャネルを介して送信されていないかを検出する必要があります。\
|
||||
この種の脆弱性を発見し修正する方法の詳細は[**こちら**](https://manifestsecurity.com/android-application-security-part-10/)を参照してください。
|
||||
|
@ -446,7 +407,7 @@ URLのパス内にパラメータを使用しているディープリンクが
|
|||
* この保護をバイパスするために**Frida**(以下で説明)を使用することもできます。Burp+Frida+Genymotionの使用方法については、[こちらのガイド](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)を参照してください。
|
||||
* [**objection**](frida-tutorial/objection-tutorial.md)を使用して、**自動的にSSLピニングをバイパス**することもできます: `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
* **MobSFの動的解析**を使用して、**自動的にSSLピニングをバイパス**することもできます(以下で説明)。
|
||||
* ま
|
||||
* まだキャプチャしていないトラフィックがあると思う場合は、**iptablesを使用してトラフィックをburpに転送**することもできます。この
|
||||
### **メモリのダンプ - Fridump**
|
||||
|
||||
アプリケーションがパスワードやニーモニックなど、保存すべきでない機密情報をメモリ内に保存していないかを確認します。
|
||||
|
@ -533,43 +494,43 @@ 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は、**diff/Compare**分析や**VirusTotal**の統合も可能です(_MobSF/settings.py_にAPIキーを設定し、有効にする必要があります: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)。また、`VT_UPLOAD`を`False`に設定すると、ファイルの代わりに**ハッシュ**がアップロードされます。
|
||||
MobSFは、分析の**diff/比較**と**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スクリプトも使用されます。
|
||||
デフォルトでは、**SSLピニング**、**ルート検出**、**デバッガ検出**のバイパス、および**興味深いAPIのモニタリング**のためにいくつかのFridaスクリプトも使用されます。
|
||||
MobSFはまた、エクスポートされたアクティビティを**呼び出し**、それらのスクリーンショットを**取得**してレポートに**保存**することもできます。
|
||||
|
||||
動的テストを**開始**するには、緑色のボタン "**Start Instrumentation**" を押します。Fridaスクリプトによって生成されたログを表示するには "**Frida Live Logs**" を押し、フックされたメソッドの呼び出し、渡された引数、および返された値を表示するには "**Live API Monitor**" を押します(これは "Start Instrumentation" を押した後に表示されます)。
|
||||
MobSFはまた、独自の**Fridaスクリプト**をロードすることもできます(MobSFに結果を送信するためにFridayスクリプトの`send()`関数を使用します)。また、ロードできる**いくつかの事前に書かれたスクリプト**もあります(`MobSF/DynamicAnalyzer/tools/frida_scripts/others/`に追加することもできます)。スクリプトを選択し、"**Load**" を押し、"**Start Instrumentation**" を押します(そのスクリプトのログを "**Frida Live Logs**" 内で表示できます)。
|
||||
MobSFはまた、独自の**Fridaスクリプト**をロードすることもできます(MobSFに結果を送信するためにFridayスクリプトの`send()`関数を使用します)。また、ロードできる**いくつかの事前書かれたスクリプト**もあります(`MobSF/DynamicAnalyzer/tools/frida_scripts/others/`に追加することもできます)。スクリプトを選択し、"**Load**" を押し、"**Start Instrumentation**" を押します(そのスクリプトのログを "**Frida Live Logs**" 内で表示できます)。
|
||||
|
||||
![](<../../.gitbook/assets/image (215).png>)
|
||||
|
||||
さらに、いくつかの補助的なFrida機能があります:
|
||||
さらに、いくつかの補助的なFrida機能があります:
|
||||
|
||||
* **ロードされたクラスの列挙**: ロードされたすべてのクラスを表示します
|
||||
* **文字列のキャプチャ**: アプリケーションの使用中にキャプチャされたすべての文字列を表示します(非常にノイズが多いです)
|
||||
* **文字列の比較のキャプチャ**: 非常に便利です。比較された2つの文字列と結果(TrueまたはFalse)を表示します。
|
||||
* **クラスメソッドの列挙**: クラス名(例: "java.io.File")を入力すると、クラスのすべてのメソッドを表示します。
|
||||
* **クラスパターンの検索**: パターンに一致するクラスを検索します
|
||||
* **クラスメソッドのトレース**: クラス全体をトレースします(クラスのすべてのメソッドの入力と出力を表示します)。デフォルトでは、MobSFはいくつかの興味深いAndroid APIメソッドをトレースします。
|
||||
* **ロードされたクラスの列挙**:ロードされたすべてのクラスを表示します
|
||||
* **文字列のキャプチャ**:アプリケーションの使用中にキャプチャされたすべての文字列を表示します(非常にノイズが多いです)
|
||||
* **文字列の比較のキャプチャ**:非常に便利です。比較された2つの文字列と結果(TrueまたはFalse)を表示します。
|
||||
* **クラスメソッドの列挙**:クラス名(例:"java.io.File")を入力すると、クラスのすべてのメソッドを表示します。
|
||||
* **クラスパターンの検索**:パターンに一致するクラスを検索します
|
||||
* **クラスメソッドのトレース**:クラス全体をトレースします(クラスのすべてのメソッドの入力と出力を表示します)。デフォルトでは、MobSFはいくつかの興味深いAndroid APIメソッドをトレースします。
|
||||
|
||||
使用する補助モジュールを選択したら、"**Start Intrumentation**" を押して、すべての出力を "**Frida Live Logs**" で確認できます。
|
||||
|
||||
**シェル**
|
||||
|
||||
MobSFには、動的分析ページの一番下に、いくつかの**adb**コマンド、**MobSFコマンド**、および一般的な**シェルコマンド**が含まれています。いくつかの興味深いコマンド:
|
||||
MobSFには、動的分析ページの一番下に、いくつかの**adb**コマンド、**MobSFコマンド**、および一般的な**シェルコマンド**を使用できるシェルも用意されています。いくつかの興味深いコマンド:
|
||||
```bash
|
||||
help
|
||||
shell ls
|
||||
|
@ -580,13 +541,13 @@ receivers
|
|||
```
|
||||
**HTTPツール**
|
||||
|
||||
HTTPトラフィックがキャプチャされると、キャプチャされたトラフィックの見た目は「**HTTP(S) Traffic**」の下に見えるか、より見やすいビューは「**Start HTTPTools**」の緑のボタンで表示されます。2番目のオプションから、キャプチャされたリクエストをBurpやOwasp ZAPのようなプロキシに**送信**することができます。\
|
||||
そのためには、_Burpを起動してください --> Interceptをオフにしてください --> 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を起動してください -->_ _Interceptをオフにしてください --> MobSB HTTPToolsでリクエストを選択_ --> "**Send to Fuzzer**" を押してください --> ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)) のようなプロキシアドレスを選択してください。
|
||||
|
||||
MobSFで動的解析を終えたら、「**Start Web API Fuzzer**」を押して、HTTPリクエストを**ファズ**し、脆弱性を探すことができます。
|
||||
|
||||
{% hint style="info" %}
|
||||
MobSFで動的解析を行った後、プロキシ設定が誤っている場合、GUIから修正することができません。プロキシ設定を修正するには、以下の手順を実行してください:
|
||||
MobSFで動的解析を行った後、プロキシの設定が誤っている場合、GUIから修正することができません。プロキシの設定を修正するには、以下の手順を実行してください:
|
||||
```
|
||||
adb shell settings put global http_proxy :0
|
||||
```
|
||||
|
@ -642,7 +603,7 @@ 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`ファイルに集約されており、各企業やテスターは必要なものを分析するために独自のルールを作成することができます。
|
||||
|
||||
|
@ -719,13 +680,13 @@ APKの難読化を解除するためのステップバイステップガイド
|
|||
|
||||
- リソースをInputStreamとしてロードする
|
||||
- 結果をFilterInputStreamを継承したクラスにフィードして復号化する
|
||||
- いくつかの無駄な難読化を行い、リバースエンジニアから数分間の時間を無駄にする
|
||||
- いくつかの無駄な難読化を行い、リバーサーの時間を数分無駄にする
|
||||
- 復号化された結果をZipInputStreamにフィードしてDEXファイルを取得する
|
||||
- 最終的に、`loadDex`メソッドを使用して生成されたDEXをリソースとしてロードする
|
||||
- 最終的に`loadDex`メソッドを使用して生成されたDEXをリソースとしてロードする
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuardは、Androidの難読化ツールによって実行された難読化プロセスを逆転させます。これにより、コードの検査やライブラリの予測を含むさまざまなセキュリティ分析が可能になります。**
|
||||
**DeGuardは、Androidの難読化ツールによって実行された難読化のプロセスを逆転させます。これにより、コードの検査やライブラリの予測など、さまざまなセキュリティ分析が可能になります。**
|
||||
|
||||
難読化されたAPKをプラットフォームにアップロードできます。
|
||||
|
||||
|
@ -739,7 +700,7 @@ APKiDは、APKの作成方法に関する情報を提供します。多くの**
|
|||
|
||||
### マニュアル
|
||||
|
||||
[このチュートリアルを読んで、**カスタム難読化を逆向きにする**いくつかのトリックを学びましょう](manual-deobfuscation.md)
|
||||
[このチュートリアルを読んで、**カスタム難読化の解除方法**についていくつかのトリックを学びましょう](manual-deobfuscation.md)
|
||||
|
||||
## ラボ
|
||||
|
||||
|
@ -778,10 +739,10 @@ AndroL4bは、ubuntu-mateをベースにしたAndroidセキュリティ仮想マ
|
|||
HackenProofのバウンティは、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
|
||||
|
||||
**Web3ペントestingの経験を積む**\
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新し
|
||||
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネ
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。これは私たちの独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)に参加するか、[**Telegramグループ**](https://t.me/peass)に参加するか、私を**Twitter**で[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォローしましょう。**
|
||||
* 自分のハッキングテクニックを共有するために、[**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks)と[**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出しましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で私を[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
|
||||
* 自分のハッキングテクニックを共有するために、[**hacktricksリポジトリ**](https://github.com/carlospolop/hacktricks)と[**hacktricks-cloudリポジトリ**](https://github.com/carlospolop/hacktricks-cloud)にPRを提出してください。
|
||||
|
||||
</details>
|
||||
|
|
77
mobile-pentesting/android-app-pentesting/tapjacking.md
Normal file
77
mobile-pentesting/android-app-pentesting/tapjacking.md
Normal file
|
@ -0,0 +1,77 @@
|
|||
# タップジャッキング
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ会社**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロード**したいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を見つけてください。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksのグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**telegramグループ**](https://t.me/peass)に**参加**するか、**Twitter**で[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**をフォロー**してください。
|
||||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出**してください。
|
||||
|
||||
</details>
|
||||
|
||||
## **基本情報**
|
||||
|
||||
**タップジャッキング**は、**悪意のあるアプリケーション**が起動し、**被害者のアプリケーションの上に配置**される攻撃です。被害者のアプリを視覚的に隠すと、ユーザーインターフェースはユーザーをだまして相互作用させるように設計されていますが、実際には被害者のアプリで操作が行われていることをユーザーに知らせません。
|
||||
|
||||
### 検出
|
||||
|
||||
この攻撃に対して脆弱なアプリを検出するには、Androidマニフェストで**エクスポートされたアクティビティ**を検索する必要があります(インテントフィルタを持つアクティビティはデフォルトで自動的にエクスポートされます)。エクスポートされたアクティビティを見つけたら、**必要なパーミッションがあるかどうかを確認**してください。なぜなら、**悪意のあるアプリケーションもそのパーミッションが必要になるからです**。
|
||||
|
||||
### 保護
|
||||
|
||||
#### Android 12(API 31,32)以降
|
||||
|
||||
[**このソースによると**](https://www.geeksforgeeks.org/tapjacking-in-android/)、Android 12(API 31および30)以降では、タップジャッキング攻撃は自動的に防止されます。したがって、アプリケーションが脆弱であっても、**それを悪用することはできません**。
|
||||
|
||||
#### **`setFilterTouchesWhenObscured`**
|
||||
|
||||
属性**`setFilterTouchesWhenObscured`**がtrueに設定されている場合、Androidのバージョンが低い場合でもこの脆弱性の悪用を防ぐことができます。\
|
||||
たとえば、**ボタンが隠されている場合に自動的に無効になる**ように、**`true`**に設定されます。
|
||||
```markup
|
||||
<Button android:text="Button"
|
||||
android:id="@+id/button1"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:filterTouchesWhenObscured="true">
|
||||
</Button>
|
||||
```
|
||||
## Exploitation
|
||||
|
||||
### タップジャッキング-ExportedActivity
|
||||
|
||||
最新のAndroidアプリケーションである**タップジャッキング攻撃**(攻撃対象アプリケーションの**エクスポートされたアクティビティ**の前に呼び出す)は、[**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity)で見つけることができます。
|
||||
|
||||
使用方法については、**READMEの指示に従ってください**。
|
||||
|
||||
### FloatingWindowApp
|
||||
|
||||
**FloatingWindowApp**を実装したサンプルプロジェクトは、他のアクティビティの上に配置してクリックジャッキング攻撃を実行するために使用できます。[**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp)(少し古いですが、apkをビルドするのに成功を祈ります)。
|
||||
|
||||
### Qark
|
||||
|
||||
{% hint style="danger" %}
|
||||
このプロジェクトは現在メンテナンスされておらず、この機能は正常に動作しなくなっているようです。
|
||||
{% endhint %}
|
||||
|
||||
[**qark**](https://github.com/linkedin/qark)を使用して、`--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk`のパラメータを使用して、悪意のあるアプリケーションを作成し、**タップジャッキング**の脆弱性をテストすることができます。
|
||||
|
||||
対策は比較的簡単で、開発者は他のビューによってカバーされた場合にタッチイベントを受け取らないように選択することができます。[Android Developer’s 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に設定します。有効にすると、フレームワークは、ビューのウィンドウが他の可視ウィンドウによって隠されている場合に受け取ったタッチを破棄します。その結果、ビューは、トースト、ダイアログ、または他のウィンドウがビューのウィンドウの上に表示される場合にはタッチを受け取らなくなります。
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* **サイバーセキュリティ企業**で働いていますか? **HackTricksで会社を宣伝**したいですか?または、**PEASSの最新バージョンを入手**したいですか、またはHackTricksをPDFでダウンロードしたいですか?[**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)をチェックしてください!
|
||||
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)を発見しましょう。独占的な[**NFT**](https://opensea.io/collection/the-peass-family)のコレクションです。
|
||||
* [**公式のPEASS&HackTricksグッズ**](https://peass.creator-spring.com)を手に入れましょう。
|
||||
* [**💬**](https://emojipedia.org/speech-balloon/) [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter**で私をフォローしてください[**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**。**
|
||||
* **ハッキングのトリックを共有するには、PRを** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **と** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **に提出してください。**
|
||||
|
||||
</details>
|
Loading…
Reference in a new issue