hacktricks/mobile-pentesting/android-app-pentesting
2023-12-26 02:42:22 +00:00
..
drozer-tutorial Translated ['mobile-pentesting/android-app-pentesting/drozer-tutorial/RE 2023-08-27 20:07:11 +00:00
frida-tutorial Translated ['forensics/basic-forensic-methodology/specific-software-file 2023-12-26 02:42:22 +00:00
adb-commands.md Translated to Japanese 2023-07-07 23:42:27 +00:00
android-applications-basics.md Translated ['generic-methodologies-and-resources/exfiltration.md', 'gene 2023-09-03 01:45:18 +00:00
android-burp-suite-settings.md Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat 2023-09-28 20:14:46 +00:00
android-task-hijacking.md Translated ['generic-methodologies-and-resources/exfiltration.md', 'gene 2023-09-03 01:45:18 +00:00
apk-decompilers.md Translated to Japanese 2023-07-07 23:42:27 +00:00
avd-android-virtual-device.md Translated ['mobile-pentesting/android-app-pentesting/README.md', 'mobil 2023-10-05 10:27:09 +00:00
bypass-biometric-authentication-android.md Translated ['linux-hardening/privilege-escalation/docker-security/docker 2023-12-19 21:57:13 +00:00
content-protocol.md Translated to Japanese 2023-07-07 23:42:27 +00:00
exploiting-a-debuggeable-applciation.md Translated to Japanese 2023-07-07 23:42:27 +00:00
google-ctf-2018-shall-we-play-a-game.md Translated to Japanese 2023-07-07 23:42:27 +00:00
inspeckage-tutorial.md Translated to Japanese 2023-07-07 23:42:27 +00:00
install-burp-certificate.md Translated ['forensics/basic-forensic-methodology/specific-software-file 2023-12-26 02:42:22 +00:00
intent-injection.md Translated to Japanese 2023-07-07 23:42:27 +00:00
make-apk-accept-ca-certificate.md Translated ['generic-methodologies-and-resources/exfiltration.md', 'gene 2023-09-03 01:45:18 +00:00
manual-deobfuscation.md Translated to Japanese 2023-07-07 23:42:27 +00:00
react-native-application.md Translated to Japanese 2023-07-07 23:42:27 +00:00
README.md Translated ['mobile-pentesting/android-app-pentesting/README.md', 'mobil 2023-10-05 10:27:09 +00:00
reversing-native-libraries.md Translated ['mobile-pentesting/android-app-pentesting/reversing-native-l 2023-12-24 18:24:40 +00:00
smali-changes.md Translated ['mobile-pentesting/android-app-pentesting/smali-changes.md'] 2023-10-11 21:33:51 +00:00
spoofing-your-location-in-play-store.md Translated to Japanese 2023-07-07 23:42:27 +00:00
tapjacking.md Translated ['mobile-pentesting/android-app-pentesting/README.md', 'mobil 2023-08-25 14:07:30 +00:00
webview-attacks.md Translated ['linux-hardening/privilege-escalation/docker-security/docker 2023-12-19 21:57:13 +00:00

Androidアプリのペンテスト

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

HackenProofはすべての暗号バグバウンティの場です。

遅延なしで報酬を受け取る
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。

Web3ペンテストの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットですその成長期におけるweb3セキュリティをマスターしましょう。

Web3ハッカーレジェンドになる
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。

HackenProofでサインアップして、ハッキングから報酬を得ましょう!

{% embed url="https://hackenproof.com/register" %}

Androidアプリの基礎知識

Androidセキュリティに関連する最も重要な部分やAndroidアプリの中で最も危険なコンポーネントについて知るために、このページを読むことを強くお勧めします:

{% content-ref url="android-applications-basics.md" %} android-applications-basics.md {% endcontent-ref %}

ADBAndroid Debug Bridge

これはAndroidデバイスエミュレートまたは物理に接続するために必要な主要なツールです。
これにより、コンピュータからデバイスをUSBまたはネットワークで制御し、ファイルをコピーしたり、アプリをインストールまたはアンインストールしたり、シェルコマンドを実行したり、バックアップを作成したり、ログを読んだりすることができます。

adbの使用方法については、次のADBコマンドのリストを参照してください。

Smali

時には、アプリケーションのコードを変更して、隠された情報おそらくよく難読化されたパスワードやフラグにアクセスすることが興味深い場合があります。その場合、APKを逆コンパイルしてコードを変更し、再コンパイルすることが興味深いかもしれません。
このチュートリアルでは、APKを逆コンパイルし、Smaliコードを変更し、新しい機能を持つAPKを再コンパイルする方法を学ぶことができます。これは、動的解析中に行われるいくつかのテストの代替手段として非常に役立つ場合があります。常にこの可能性を念頭に置いてください。

その他の興味深いトリック

adb shell pm list packages
com.android.insecurebankv2

adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk

adb pull /data/app/com.android.insecurebankv2- Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk

静的解析

まず、APKを解析するためには、デコンパイラを使用してJavaコードを確認する必要があります。ここで利用可能なさまざまなデコンパイラに関する情報を読んでください

興味深い情報を探す

APKの文字列を見るだけで、パスワードURL (https://github.com/ndelphit/apkurlgrep)、APIキー、暗号化Bluetooth UUIDトークンなど、興味深い情報を検索できます...コード実行のバックドアや認証バックドア(アプリへのハードコードされた管理者資格情報)さえも探してください。

Firebase

特にFirebaseのURLに注意し、それが誤って設定されていないか確認してください。Firebaseとその悪用方法についての詳細情報はこちらを参照してください。

アプリケーションの基本的な理解 - Manifest.xml、strings.xml

ここで言及されているいずれかのデコンパイラを使用すると、_Manifest.xml_を読むことができます。また、apkファイルの拡張子を**.zip変更**し、解凍することもできます。
マニフェストを読むことで、以下の脆弱性を見つけることができます。

  • まず、アプリケーションがデバッグ可能かどうかを確認してください。本番のAPKはデバッグ可能ではないはずですそうでなければ他の人が接続できます。マニフェストで属性debuggable="true"を探すことで、アプリケーションがデバッグ可能かどうかを確認できます。例:<application theme="@2131296387" debuggable="true"
  • ここで、電話でデバッグ可能なアプリケーションを見つけて悪用する方法を学びます。
  • バックアップandroid:allowBackup属性は、USBデバッグを有効にしたユーザーがアプリケーションデータをバックアップおよび復元できるかどうかを定義します。バックアップフラグがtrueに設定されている場合、デバイスがルート化されていなくても、攻撃者はadbを介してアプリケーションデータのバックアップを取得できます。したがって、カードの詳細、パスワードなどの機密情報を処理および保存するアプリケーションは、この設定を明示的にfalseに設定する必要があります。デフォルトでは、これを防ぐためにtrueに設定されています。
  • <application android:allowBackup="false"
  • 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>
  • エクスポートされたアクティビティ:マニフェスト内のエクスポートされたアクティビティをチェックしてください。これは危険な場合があります。後で動的解析でこの動作を悪用する方法を説明します。
  • コンテンツプロバイダー:エクスポートされたプロバイダーが公開されている場合、興味深い情報にアクセス/変更できる場合があります。動的解析では、これらを悪用する方法を学びます。
  • android:name="android.support.FILE_PROVIDER_PATHS"という属性内のFileProvidersの設定を確認してください。FileProvidersについての詳細はこちらを読んでください
  • 公開されたサービス:サービスが内部で何を行っているかによって、脆弱性が悪用される可能性があります。動的解析では、これらを悪用する方法を学びます。
  • ブロードキャストレシーバー悪用の可能性がある方法を学びます。
  • URLスキーム:スキームを管理するアクティビティのコードを読み、ユーザーの入力を管理する際の脆弱性を探してください。URLスキームについての詳細情報はこちら
  • minSdkVersiontargetSDKVersionmaxSdkVersionこれらはアプリが実行されるAndroidのバージョンを示しています。セキュリティの観点から、古いバージョンをサポートすることは、既知の脆弱性のあるAndroidのバージョンで実行されることを許可することを意味します。

resources.arsc/strings.xmlを読むことで、いくつかの興味深い情報を見つけることができます。

  • APIキー
  • カスタムスキーマ
  • 他の開発者がこのファイルに保存した興味深い情報

タップジャッキング

タップジャッキングは、悪意のあるアプリケーションが起動し、被害者アプリケーションの上に配置される攻撃です。被害者アプリを視覚的に隠し、ユーザーがそれと対話するように見せかけながら、実際には被害者アプリに対して対話を行っています。
実際には、ユーザーは自分が実際のアプリを使用していると思っている間に、被害者アプリ上で操作を実行していることを知ることができません。

詳細については、以下を参照してください:

{% content-ref url="tapjacking.md" %} tapjacking.md {% endcontent-ref %}

タスクハイジャッキング

launchModesingleTaskであり、taskAffinityが定義されていないアクティビティは、タスクハイジャッキングの脆弱性があります。つまり、**アプリケーション

破損したTLS

すべての証明書を受け入れる

何らかの理由で、開発者は時々すべての証明書を受け入れます。たとえば、ホスト名が次のようなコード行と一致しない場合でもです。

SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

このテストを行う良い方法は、デバイス内でBurp CAの承認をせずに、Burpのようなプロキシを使用してトラフィックをキャプチャしようとすることです。また、Burpを使用して異なるホスト名の証明書を生成し、それを使用することもできます。

破損した暗号化

鍵管理プロセスの不備

一部の開発者は、機密データをローカルストレージに保存し、コード内でハードコード/予測可能なキーで暗号化します。これは行ってはいけません。リバースエンジニアリングによって攻撃者が機密情報を抽出することができる可能性があるためです。

安全でないおよび/または非推奨のアルゴリズムの使用

開発者は、非推奨のアルゴリズムを使用して認証のチェックデータの保存または送信を行うべきではありません。これらのアルゴリズムのいくつかには、RC4、MD4、MD5、SHA1などがあります。たとえば、パスワードを保存するためにハッシュが使用される場合、ソルトを使用したハッシュブルートフォース耐性が必要です。

その他のチェック

  • APKを難読化することをお勧めします。これにより、逆向きエンジニアリングの作業が攻撃者にとって困難になります。
  • アプリが機密情報(銀行アプリなど)である場合、モバイルがルート化されているかどうかを独自にチェックし、それに応じて動作する必要があります。
  • アプリが機密情報(銀行アプリなど)である場合、エミュレータが使用されているかどうかをチェックする必要があります。
  • アプリが機密情報(銀行アプリなど)である場合、実行する前に独自の整合性をチェックする必要があります。それが変更されたかどうかを確認するためです。
  • APKのビルドに使用されたコンパイラ/パッカー/難読化ツールをチェックするために、APKiDを使用します。

React Nativeアプリケーション

ReactアプリケーションのJavaScriptコードに簡単にアクセスする方法については、次のページを読んでください

{% content-ref url="react-native-application.md" %} react-native-application.md {% endcontent-ref %}

Xamarinアプリケーション

XamarinアプリケーションのC#コードに簡単にアクセスする方法については、次のページを読んでください:

{% content-ref url="../xamarin-apps.md" %} xamarin-apps.md {% endcontent-ref %}

スーパーパックされたアプリケーション

このブログ記事によると、スーパーパックはアプリケーションのコンテンツを1つのファイルに圧縮するメタアルゴリズムです。このブログでは、この種のアプリを解凍するアプリを作成する可能性について説明しています...そして、アプリケーションを実行し、ファイルシステムから解凍されたファイルを収集するより速い方法もあります。

自動静的コード分析

ツールmariana-trenchは、アプリケーションのコードをスキャンして脆弱性を見つけることができます。このツールには、既知のソース(ユーザーによって制御される入力場所をツールに示す)とシンク(悪意のあるユーザーの入力が損害を引き起こす可能性のある危険な場所をツールに示す)が含まれています。また、これらのルールは、脆弱性を示すソース-シンクの組み合わせを示しています。

この知識を活用して、mariana-trenchはコードをレビューし、可能な脆弱性を見つけます

漏洩した秘密情報

アプリケーションには、発見できるかもしれない秘密情報APIキー、パスワード、隠されたURL、サブドメインなどが含まれている場合があります。https://github.com/dwisiswant0/apkleaksのようなツールを使用してこれらの情報を発見できます。

バイオメトリック認証のバイパス

{% content-ref url="bypass-biometric-authentication-android.md" %} bypass-biometric-authentication-android.md {% endcontent-ref %}

その他の興味深い機能

その他のトリック

{% content-ref url="content-protocol.md" %} content-protocol.md {% endcontent-ref %}


HackenProofはすべての暗号バグバウンティの場所です。

遅延なしで報酬を受け取る
HackenProofのバウンティは、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。

Web3ペントestingの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです成長するWeb3セキュリティをマスターしましょう。

Web3ハッカーレジェンドになる
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。

HackenProofでサインアップして、ハッキングから報酬を得ましょう!

{% embed url="https://hackenproof.com/register" %}


動的解析

まず、アプリケーションとすべての環境Burp CA証明書、Drozer、Fridaなどをインストールできる環境が必要です。したがって、ルート化されたデバイスエミュレートされているかどうかに関係なくが非常におすすめです。

オンライン動的解析

https://appetize.io/無料アカウントを作成できます。このプラットフォームでは、APKをアップロードして実行することができるため、APKの動作を確認するのに便利です。

ウェブ上でアプリケーションのログを表示し、adbを介して接続することもできます。

ADB

物理デバイスを使用する

デバッグオプションを有効にする必要があります。また、ルート化できると良いです。

  1. 設定を開きます。
  2. (Android 8.0以降) システムを選択します。
  3. 端末についてを選択します。
  4. ビルド番号を7回押します。
  5. 戻り、開発者オプションを見つけます。

アプリケーションをインストールした後、最初に行うべきことは、それを試して調査し、それが何をするのか、どのように動作するのかを調べ、それに慣れることです。
MobSFの動的解析+pidcatを使用して、この初期の動的解析を実行することをお勧めします。これにより、MobSFが後で確認できる多くの興味深いデータをキャプチャしながら、アプリケーションの動作を学ぶことができます。

意図しないデータ漏洩

ログ

開発者はデバッグ情報を公開することがよくあります。そのため、READ_LOGS権限を持つアプリケーションは、それらのログにアクセスし、それを通じて機密情報を取得することができます。
アプリケーションを操作する際には、作成されたログを読むためにpidcat_(おすすめ、使用しやすく読みやすい)_またはadb logcatを使用して、機密情報を探します。

{% hint style="warning" %} Android 4.0以降の後のバージョンでは、アプリケーションは自分自身のログにのみアクセスできるようになりました。したがって、アプリケーションは他のアプリのログにアクセスすることはできません。
それでも、機密情報をログに記録しないことをお勧めします。 {% endhint %}

コピー/ペーストバッファのキャッシュ

Androidは、Androidアプリケーションでコピーペースト機能を提供するためのクリップボードベースのフレームワークを提供しています。しかし、これにより、他のアプリケーションが一部の機密データを含むクリップボードにアクセスできるという深刻な問題が発生します。機密な部分のコピー/ペースト機能は無効化する必要があります。たとえば、クレジットカードの詳細をコピーすることを無効にします。

クラッシュログ

アプリケーションが実行中にクラッシュし、ログをどこかに保存する場合、それらのログは、特にAndroidアプリケーションが逆アセンブルできない場合に、攻撃者にとって役立つ情報になる可能性があります。そのため、アプリケーションがクラッシュしたときにログを作成しないようにし、ログがネットワーク経由で送信される場合は、SSLチャネルを介して送信されることを確認してください。
ペンテスターとして、これらのログを確認してみてください。

サードパーティへの解析データの送信

多くのアプリケーションは、Google AdSenseなどの他のサービスを使用していますが、時には機密データやそのサービスに送信する必要のないデータが漏洩することがあります。これは、開発者が機能を適切に実装していないために発生する可能性があります。アプリケーションのトラフィックを傍受して、サードパーティに機密データが送信されているかどうかを確認できます。

SQLiteデータベース

ほとんどのアプリケーションは、情報を保存するために内部のSQLiteデータベースを使用します。ペンテスト中に作成されたデータベーステーブルカラムの名前、および保存されているデータを確認してください。そこには機密情報が含まれている可能性があります(これは脆弱性です)。
データベースは、/data/data/the.package.name/databasesのように/data/data/com.mwr.example.sieve/databasesに配置されるべきです。

データベースが機密情報を保存しており、暗号化されているが、アプリケーション内にパスワードが見つかる場合、それは依然として脆弱性です。

.tablesを使用してテーブルを列挙し、.schema <table_name>を使用してテーブルの列を列挙します。

Drozerエクスポートされたアクティビティ、コンテンツプロバイダ、サービスの攻撃

Drozerを使用すると、Androidアプリの役割を仮定し、他のアプリと対話することができます。Androidのプロセス間通信IPCメカニズムを利用したり、基礎となるオペレーティングシステムと対話したりするなど、インストールされたアプリケーションができることは何でもできますDrozerガイドから。

Drozerは、以下のセクションで学ぶように、エクスポートされたアクティビティ、エクスポートされたサービス、コンテンツプロバイダを攻撃するための便利なツールです。

エクスポートされたアクティビティの攻撃

Androidアクティビティとは何かを思い出したい場合は、こちらを読んでください。
また、アクティビティのコードはonCreateメソッドで始まることを覚えておいてください。

認証バイパス

アクティビティがエクスポートされている場合、外部のアプリからその画面を呼び出すことができます。したがって、機密情報を含むアクティビティがエクスポートされている場合、認証メカニズムをバイパスしてアクセスすることができます。
Drozerを使用してエクスポートされたアクティビティを攻撃する方法を学びましょう。

また、adbからエクスポートされたアクティビティを起動することもできます

  • パッケージ名はcom.example.demoです。
  • エクスポートされたアクティビティ名はcom.example.test.MainActivityです。
adb shell am start -n com.example.demo/com.example.test.MainActivity

注意: MobSFは、アクティビティのandroid:launchModeとしての_singleTask/singleInstance_の使用を悪意のあるものとして検出しますが、こちらによると、これは古いバージョンAPIバージョン<21でのみ危険です。

{% hint style="info" %} 注意:認証バイパスは常に脆弱性ではありません。バイパスの動作方法と公開される情報によって異なります。 {% endhint %}

機密情報の漏洩

アクティビティは結果を返すこともできます。エクスポートされて保護されていないアクティビティが、setResultメソッドを呼び出して機密情報を返す場合、機密情報の漏洩が発生します。

タップジャッキング

タップジャッキングが防止されていない場合、エクスポートされたアクティビティを悪用して、ユーザーに予期しない操作を実行させることができます。タップジャッキングとは何かについての詳細は、リンクを参照してください

コンテンツプロバイダの悪用 - 機密情報へのアクセスと操作

コンテンツプロバイダとは何かを思い出したい場合は、こちらを読んでください。
コンテンツプロバイダは基本的にはデータの共有に使用されます。アプリに利用可能なコンテンツプロバイダがある場合、それらから機密データを抽出することができるかもしれません。また、SQLインジェクションパストラバーサルの可能性もテストすることが重要です。これらは脆弱性のある可能性があります。
Drozerを使用してコンテンツプロバイダを悪用する方法を学びましょう。

サービスの悪用

サービスとは何かを思い出したい場合は、こちらを読んでください。
サービスのアクションは、onStartCommandメソッドで開始されます。

サービスは基本的にはデータを受け取り処理し、応答(またはしない場合もあります)するものです。したがって、アプリケーションがいくつかのサービスをエクスポートしている場合、それが何をしているのかを理解するためにコードをチェックし、機密情報の抽出、認証手段のバイパスなどを動的にテストする必要があります。
Drozerを使用してサービスを悪用する方法を学びましょう。

ブロードキャストレシーバの悪用

ブロードキャストレシーバとは何かを思い出したい場合は、こちらを読んでください。
ブロードキャストレシーバのアクションは、onReceiveメソッドで開始されます。

ブロードキャストレシーバは特定のタイプのメッセージを待機しています。レシーバがメッセージをどのように処理するかによって、脆弱性がある場合があります。
Drozerを使用してブロードキャストレシーバを悪用する方法を学びましょう。

スキーム/ディープリンクの悪用

MobSFのようなツールやこのスクリプトなどを使用して、ディープリンクを手動で検索できます。
adbまたはブラウザを使用して、宣言されたスキーム開くことができます。

{% code overflow="wrap" %}

adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]

{% endcode %}

パッケージ名を省略することができることに注意してください。モバイルは自動的にそのリンクを開くべきアプリを呼び出します。

{% code overflow="wrap" %}

<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>

{% endcode %}

実行されるコード

アプリで実行されるコードを見つけるために、ディープリンクによって呼び出されるアクティビティに移動し、**onNewIntent**という関数を検索します。

機密情報

ディープリンクを見つけるたびに、URLパラメータを介して機密データパスワードなどが送信されていないかを確認してください。なぜなら、他のアプリケーションがディープリンクをなりすましてそのデータを盗む可能性があるからです。

パス内のパラメータ

URLのパス内にパラメータを使用しているディープリンクがあるかどうかも確認する必要があります。例えば、https://api.example.com/v1/users/{username}のような場合、example://app/users?username=../../unwanted-endpoint%3fparam=valueのようにパストラバーサルを強制することができます。
アプリケーション内で正しいエンドポイントを見つけることができれば、オープンリダイレクト(パスの一部がドメイン名として使用される場合)、アカウント乗っ取りCSRFトークンなしでユーザーの詳細を変更でき、脆弱性のあるエンドポイントが正しいメソッドを使用している場合などを引き起こすことができます。詳細はこちらを参照してください。

その他の例

リンクに関する興味深いバグ報奨金レポートはこちらです。

不十分なトランスポート層保護

  • 証明書の検査の欠如: Androidアプリケーションは、自己署名証明書を受け取ることができる証明書の正当性を検証しません。多くのアプリケーションは警告を無視し、任意の自己署名証明書を受け入れます。一部のアプリケーションはHTTP接続を介してトラフィックを送信します。
  • 弱いハンドシェイクの交渉: アプリケーションとサーバーはSSL/TLSハンドシェイクを実行しますが、MITM攻撃に対して脆弱な暗号スイートを使用します。したがって、攻撃者はその接続を簡単に復号化できます。
  • プライバシー情報の漏洩: 多くの場合、アプリケーションはセキュアなチャネルを介して認証を行いますが、その他の接続は非セキュアなチャネルを介して行います。これはアプリケーションのセキュリティに貢献しません。なぜなら、セッションクッキーやユーザーデータなどの他の機密データが悪意のあるユーザーによって傍受される可能性があるからです。

提示された3つのシナリオから、証明書の正当性を検証する方法について説明します。他の2つのシナリオは、サーバーのTLS設定とアプリケーションが暗号化されていないデータを送信するかどうかに依存します。ペンテスターは、サーバーのTLS設定を自分でチェックし、機密情報が暗号化されていない/脆弱なチャネルを介して送信されていないかを検出する必要があります。
この種の脆弱性を発見し修正する方法の詳細はこちらを参照してください。

SSLピニング

デフォルトでは、SSL接続を行う際に、クライアントAndroidアプリはサーバーの証明書が信頼されたルート証明書に対して検証可能な信頼チェーンを持ち、要求されたホスト名と一致するかどうかをチェックします。これにより、**中間者攻撃MITM**の問題が発生します。
証明書ピニングでは、Androidアプリケーション自体がサーバーの証明書を含み、同じ証明書が提示された場合にのみデータを送信します。
機密情報が送信される可能性のあるサイトには、SSLピニングを適用することをお勧めします。

HTTPトラフィックの検査

まず、使用するプロキシツールおそらくBurp証明書インストールする必要があります。プロキシツールのCA証明書をインストールしない場合、プロキシで暗号化されたトラフィックは表示されません。
カスタムCA証明書をインストールする方法については、このガイドを読んでください

APIレベル24以上を対象とするアプリケーションの場合、デバイスにBurp CA証明書をインストールするだけでは不十分です。この新しい保護をバイパスするには、ネットワークセキュリティ構成ファイルを変更する必要があります。したがって、このファイルを変更してCA証明書を承認するか、このページを読んで、アプリケーションがデバイスにインストールされたすべての証明書を再度受け入れるようにする方法についてのチュートリアルを参照してください

SSLピニング

すでに2つ前でSSLピニングについて説明しました。アプリケーションでSSLピニングが実装されている場合、HTTPSトラフィックを検査するためにはそれをバイパスする必要があります。
ここでは、この保護をバイパスするために使用したいくつかのオプションを紹介します。

  • apk-mitmを使用して、自動的にapkを変更してSSLピニングをバイパスします。このオプションの最大の利点は、SSLピニングをバイパスするためにルート化が必要ないことですが、アプリケーションを削除して新しいものを再インストールする必要があり、これが常に機能するわけではありません。
  • この保護をバイパスするためにFrida以下で説明を使用することもできます。Burp+Frida+Genymotionの使用方法については、こちらのガイドを参照してください。
  • objectionを使用して、自動的にSSLピニングをバイパスすることもできます: objection --gadget com.package.app explore --startup-command "android sslpinning disable"
  • MobSFの動的解析を使用して、自動的にSSLピニングをバイパスすることもでき

メモリのダンプ - Fridump

アプリケーションがパスワードやニーモニックなど、保存すべきでない機密情報をメモリ内に保存していないかを確認します。

Fridump3を使用して、次のコマンドでアプリのメモリをダンプできます:

# With PID
python3 fridump3.py -u <PID>

# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"

これにより、./dumpフォルダにメモリがダンプされます。そこで、次のようにgrepを使用して検索できます

{% code overflow="wrap" %}

strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"

{% endcode %}

Keystoreにおける機密データ

Androidでは、Keystoreは機密データを保存するための最適な場所ですが、特権を持っていればそれにアクセスすることができます。アプリケーションはここに機密データを平文で保存する傾向があるため、ペントテストではrootユーザーまたはデバイスへの物理的アクセスを持つ人物がこのデータを盗むことができるかどうかを確認する必要があります。

たとえアプリがKeystoreにデータを保存していたとしても、データは暗号化されるべきです。

Keystore内のデータにアクセスするには、次のFridaスクリプトを使用できますhttps://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js

frida -U -f com.example.app -l frida-scripts/tracer-cipher.js

指紋/生体認証のバイパス

以下のFridaスクリプトを使用すると、Androidアプリケーションが実行している特定の機密領域を保護するために行っている指紋認証をバイパスすることができるかもしれません。

{% code overflow="wrap" %}

frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>

{% endcode %}

背景画像

アプリケーションをバックグラウンドに置くと、Androidはアプリケーションのスナップショットを保存します。そのため、アプリがフォアグラウンドに復元されると、アプリよりも先に画像の読み込みが開始されるため、アプリがより速く読み込まれたように見えます。

ただし、このスナップショットには機密情報が含まれている場合がありますので、スナップショットにアクセス権限を持つ人物がその情報を盗む可能性があります(アクセスするにはルート権限が必要です)。

スナップショットは通常、以下の場所に保存されます:/data/system_ce/0/snapshots

Androidは、FLAG_SECUREレイアウトパラメータを設定することで、スクリーンショットのキャプチャを防止する方法を提供しています。このフラグを使用すると、ウィンドウの内容はセキュアとして扱われ、スクリーンショットに表示されないようになり、非セキュアなディスプレイで表示されないようになります。

getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);

Androidアプリケーションアナライザー

このツールは、動的解析中にさまざまなツールを管理するのに役立ちます:https://github.com/NotSoSecure/android_application_analyzer

インテントインジェクション

この脆弱性は、Webセキュリティのオープンリダイレクトに似ています。クラスIntentParcelableであるため、このクラスに属するオブジェクトは、別のIntentオブジェクトの追加データとして渡すことができます
多くの開発者は、この機能を利用して、startActivity(...)sendBroadcast(...)などの危険なメソッドに埋め込まれたIntentを受け取り、それを渡すプロキシコンポーネント(アクティビティ、ブロードキャストレシーバー、サービス)を作成します。
これは危険です。なぜなら、攻撃者はアプリを強制的に起動させることができる非公開コンポーネントを起動させることができず、または攻撃者にコンテンツプロバイダへのアクセス権限を与えることができるからです。WebViewは、Intent.parseUri(...)メソッドを使用して、文字列からIntentオブジェクトにURLを変更し、それをstartActivity(...)に渡すこともあります。

Androidクライアントサイドインジェクションとその他

おそらく、Webからこの種の脆弱性については知っているでしょう。Androidアプリケーションでは、特に次の脆弱性に注意する必要があります

  • SQLインジェクション 動的クエリやコンテンツプロバイダを扱う場合は、パラメータ化されたクエリを使用していることを確認してください。
  • JavaScriptインジェクションXSS 任意のWebViewでJavaScriptとプラグインサポートが無効になっていることを確認してくださいデフォルトで無効になっています詳細はこちら
  • ローカルファイルインクルージョン: 任意のWebViewでファイルシステムアクセスが無効になっていることを確認してくださいデフォルトで有効になっていますwebview.getSettings().setAllowFileAccess(false);)。詳細はこちら
  • 永続的なクッキー: Androidアプリケーションがセッションを終了する場合、クッキーが取り消されない場合があります。また、クッキーがディスクに保存される場合もあります。
  • クッキーのセキュアフラグ

HackenProofはすべての暗号バグ報奨金の場所です。

遅延なしで報酬を受け取る
HackenProofの報奨金は、顧客が報奨金予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。

Web3ペントestingの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです成長するWeb3セキュリティをマスターしましょう。

Web3ハッカーレジェンドになる
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。

HackenProofでサインアップしてハッキングから報酬を得ましょう!

{% embed url="https://hackenproof.com/register" %}

自動解析

MobSF

静的解析

アプリケーションの脆弱性評価を行うための素晴らしいWebベースのフロントエンド。動的解析も実行できますただし、環境を準備する必要があります

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は、diff/Compare分析やVirusTotalの統合も可能です_MobSF/settings.py_にAPIキーを設定し、有効にする必要があります: VT_ENABLED = TRUE VT_API_KEY = <Your API key> VT_UPLOAD = TRUE)。また、VT_UPLOADFalseに設定すると、ファイルの代わりにハッシュがアップロードされます。

MobSFによるアシストされた動的分析

MobSFは、Androidでの動的分析にも非常に役立ちますが、その場合はMobSFとgenymotionをホストにインストールする必要がありますVMやDockerでは動作しません注意: まずgenymotionでVMを起動し、その後にMobSFを起動する必要があります MobSFの動的アナライザは以下のことができます:

  • アプリケーションデータのダンプURL、ログ、クリップボード、自分が作成したスクリーンショット、"Exported Activity Tester"によって作成されたスクリーンショット、メール、SQLiteデータベース、XMLファイル、およびその他の作成されたファイル。これらは自動的に行われますが、スクリーンショットは必要な時に押すか、すべてのエクスポートされたアクティビティのスクリーンショットを取得するために"Exported Activity Tester"を押す必要があります。
  • HTTPSトラフィックのキャプチャ
  • Fridaを使用してランタイム情報を取得する

Androidのバージョン5以降では、自動的にFridaを起動し、グローバルプロキシ設定をキャプチャトラフィックに設定します。テストされたアプリケーションからのトラフィックのみキャプチャされます。

Frida

デフォルトでは、Fridaスクリプトを使用して、SSLピニングルート検出デバッガ検出をバイパスし、興味深いAPIを監視します。 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" 内で表示できます)。

さらに、いくつかの補助的なFrida機能があります:

  • ロードされたクラスの列挙: ロードされたすべてのクラスを表示します
  • 文字列のキャプチャ: アプリケーションの使用中にキャプチャされたすべての文字列を表示します(非常にノイズが多いです)
  • 文字列の比較のキャプチャ: 非常に便利です。比較された2つの文字列と結果TrueまたはFalseを表示します。
  • クラスメソッドの列挙: クラス名(例: "java.io.File")を入力すると、クラスのすべてのメソッドを表示します。
  • クラスパターンの検索: パターンに一致するクラスを検索します
  • クラスメソッドのトレース: クラス全体をトレースしますクラスのすべてのメソッドの入力と出力を表示します。デフォルトでは、MobSFはいくつかの興味深いAndroid APIメソッドをトレースします。

使用する補助モジュールを選択したら、"Start Intrumentation" を押して、すべての出力を "Frida Live Logs" で確認できます。

シェル

MobSFには、動的分析ページの一番下に、いくつかのadbコマンド、MobSFコマンド、および一般的なシェルコマンドが含まれています。いくつかの興味深いコマンド:

help
shell ls
activities
exported_activities
services
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\)。

MobSFで動的解析を終えたら、「Start Web API Fuzzer」を押して、HTTPリクエストをファズし、脆弱性を探すことができます。

{% hint style="info" %} MobSFで動的解析を行った後、プロキシ設定が誤っている場合、GUIから修正することができません。プロキシ設定を修正するには、以下の手順を実行してください:

adb shell settings put global http_proxy :0

{% endhint %}

Inspeckageによるアシストされた動的解析

Inspeckageからツールを入手できます。
このツールは、フックを使用して、動的解析を実行する際にアプリケーションで何が起こっているかを知ることができます。

{% content-ref url="inspeckage-tutorial.md" %} inspeckage-tutorial.md {% endcontent-ref %}

Yaazhini

これは、GUIを使用して静的解析を実行するための優れたツールです。

Qark

このツールは、ソースコードまたはパッケージ化されたAPK内のいくつかのセキュリティ関連のAndroidアプリケーションの脆弱性を検索するために設計されています。このツールはまた、見つかった脆弱性の一部公開されたアクティビティ、インテント、タップジャッキングなどを悪用するための「Proof-of-Concept」展開可能なAPKとADBコマンドを作成することもできます。Drozerと同様に、テストデバイスをルート化する必要はありません。

pip3 install --user qark  # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java

ReverseAPK

  • 簡単な参照のためにすべての抽出されたファイルを表示します
  • APKファイルを自動的にJavaおよびSmali形式に逆コンパイルします
  • 一般的な脆弱性と動作のためのAndroidManifest.xmlの分析
  • 一般的な脆弱性と動作のための静的ソースコード分析
  • デバイス情報
  • インテント
  • コマンドの実行
  • SQLiteの参照
  • ロギングの参照
  • コンテンツプロバイダー
  • ブロードキャストレシーバー
  • サービスの参照
  • ファイルの参照
  • 暗号の参照
  • ハードコードされた秘密情報
  • URL
  • ネットワーク接続
  • SSLの参照
  • WebViewの参照
reverse-apk relative/path/to/APP.apk

SUPER Android Analyzer

SUPERは、Windows、MacOS X、Linuxで使用できるコマンドラインアプリケーションで、脆弱性を検出するために_.apk_ファイルを分析します。これは、APKを展開し、脆弱性を検出するための一連のルールを適用することによって行われます。

すべてのルールは、rules.jsonファイルに集約されており、各企業やテスターは必要なものを分析するために独自のルールを作成することができます。

最新のバイナリはダウンロードページからダウンロードしてください。

super-analyzer {apk_file}

StaCoAn

StaCoAnは、モバイルアプリケーションの静的コード解析を実行する開発者、バグバウンティハンター、倫理的ハッカーを支援するクロスプラットフォームツールです*。

このツールでは、モバイルアプリケーションファイル(.apkまたは.ipaファイルをStaCoAnアプリケーションにドラッグアンドドロップすると、視覚的でポータブルなレポートが生成されます。設定やワードリストを調整して、カスタマイズされた体験を得ることができます。

最新リリースをダウンロードしてください。

./stacoan

AndroBugs

AndroBugs Frameworkは、開発者やハッカーがAndroidアプリケーションの潜在的なセキュリティ脆弱性を見つけるのを支援するAndroid脆弱性分析システムです。
Windowsリリース

python androbugs.py -f [APK file]
androbugs.exe -f [APK file]

Androwarn

Androwarnは、主な目的はAndroidアプリケーションによって開発された潜在的な悪意のある振る舞いを検出し、ユーザーに警告することです。

検出は、アプリケーションのDalvikバイトコードSmali形式静的解析によって行われます。これには、androguardライブラリが使用されます。

このツールは、次のような「悪い」アプリケーションの一般的な振る舞いを探します:電話識別子の外部への漏洩、オーディオ/ビデオフローの傍受、PIMデータの変更、任意のコードの実行...

python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3

MARA Framework

MARAは、Mobile Application Reverse engineering and Analysis Frameworkの略です。これは、一般的に使用されるモバイルアプリケーションの逆向きエンジニアリングと分析ツールを組み合わせたツールであり、OWASPモバイルセキュリティの脅威に対してモバイルアプリケーションのテストを支援します。その目的は、このタスクをモバイルアプリケーション開発者とセキュリティ専門家にとってより簡単で使いやすくすることです。

以下のことができます:

  • 異なるツールを使用してJavaおよびSmaliコードを抽出する
  • smaliscaClassySharkandrobugsandrowarnAPKiDを使用してAPKを分析する
  • 正規表現を使用してAPKからプライベート情報を抽出する
  • マニフェストを分析する
  • pyssltesttestsslwhatwebを使用して見つかったドメインを分析する
  • apk-deguard.comを介してAPKの難読化を解除する

Koodous

マルウェアを検出するのに便利です:https://koodous.com/

コードの難読化/難読化解除

コードを難読化するために使用するサービスと設定によっては、秘密情報が難読化される場合とされない場合があります。

ProGuard

ProGuardは、Javaコードを縮小、最適化、難読化するためのオープンソースのコマンドラインツールです。バイトコードを最適化し、未使用の命令を検出および削除することができます。ProGuardは無料のソフトウェアであり、GNU General Public License、バージョン2で配布されています。

ProGuardはAndroid SDKの一部として配布され、リリースモードでアプリケーションをビルドする際に実行されます。

参照元:https://en.wikipedia.org/wiki/ProGuard_(software)

DexGuard

APKの難読化を解除するためのステップバイステップガイドはhttps://blog.lexfo.fr/dexguard.htmlにあります。

そのガイドから最後に確認したとき、Dexguardの動作モードは次のようでした

  • リソースをInputStreamとしてロードする
  • 結果をFilterInputStreamを継承したクラスにフィードして復号化する
  • いくつかの無駄な難読化を行い、リバースエンジニアから数分間の時間を無駄にする
  • 復号化された結果をZipInputStreamにフィードしてDEXファイルを取得する
  • 最終的に、loadDexメソッドを使用して生成されたDEXをリソースとしてロードする

DeGuard

DeGuardは、Androidの難読化ツールによって実行された難読化のプロセスを逆転させます。これにより、コードの検査やライブラリの予測など、さまざまなセキュリティ分析が可能になります。

難読化されたAPKをプラットフォームにアップロードできます。

Simplify

これは汎用のAndroid難読化解除ツールです。Simplifyはアプリを仮想的に実行してその動作を理解し、コードを最適化して同じ動作をするが人間にとって理解しやすいものにします。各最適化タイプはシンプルで汎用的であり、特定の難読化タイプは問題ありません。

APKiD

APKiDは、APKの作成方法に関する情報を提供します。多くのコンパイラパッカー難読化ツール、およびその他の奇妙なものを識別します。これはAndroidのPEiDです。

マニュアル

このチュートリアルを読んで、カスタムの難読化を解除するためのトリックを学びましょう

ラボ

Androl4b

AndroL4bは、ubuntu-mateをベースにしたAndroidセキュリティ仮想マシンであり、リバースエンジニアリングとマルウェア分析のためのさまざまなセキュリティギークと研究者からの最新のフレームワーク、チュートリアル、ラボを含んでいます。

OWASP

{% embed url="https://github.com/OWASP/owasp-mstg%0Ahttps://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06g-testing-network-communication" %}

Gitリポジトリ

https://github.com/riddhi-shree/nullCommunity/tree/master/Android
https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec

参考文献

詳細については、次を参照してください:

テストするために

HackenProofは、すべての暗号バグバウンティの場所です。

遅延なしで報酬を受け取る
HackenProofのバウンティは、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。

Web3ペントestingの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!