Android Applications Pentesting

ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法:

経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るためにHackenProof Discordサーバーに参加しましょう!

ハッキングの洞察 ハッキングのスリルとチャレンジに深く入り込むコンテンツと関わる

リアルタイムハックニュース リアルタイムのニュースと洞察を通じて、ハッキングの世界を迅速に追いかける

最新の発表 最新のバグバウンティの開始や重要なプラットフォームの更新に関する情報を入手する

Discordに参加して、今日からトップハッカーと協力しましょう!

Androidアプリケーションの基礎

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

ADB(Android Debug Bridge)

これはAndroidデバイス(エミュレートされたものまたは物理的なもの)に接続するために必要な主要なツールです。 ADBは、コンピューターからデバイスを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
  • APKEditorを使用して、すべての分割されたAPKとベースAPKをマージします。

mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 1 | xargs -n1 -i adb pull {} splits
java -jar ../APKEditor.jar m -i splits/ -o merged.apk

# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed

静的解析

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

興味深い情報を探す

APKのstringsを見るだけで、パスワードURLAPIキー、暗号化Bluetooth UUIDトークンなど、興味深い情報を検索できます。コード実行のバックドアや認証バックドア(アプリにハードコードされた管理者資格情報)なども探してください。

Firebase

Firebase URLに特に注意し、それが適切に構成されているかどうかを確認してください。Firebaseについての詳細情報とその悪用方法についてはこちらを参照してください。

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

アプリケーションの_Manifest.xmlと**strings.xml_**ファイルの検査により、潜在的なセキュリティ脆弱性が明らかになることがあります。これらのファイルには、デコンパイラを使用するか、APKファイルの拡張子を.zipに変更して解凍することでアクセスできます。

Manifest.xmlから特定される脆弱性には次のものがあります:

  • デバッグ可能なアプリケーション:_Manifest.xml_ファイルでデバッグ可能に設定されたアプリケーション(debuggable="true")は、悪用につながる接続を許可するため、リスクをもたらします。デバッグ可能なアプリケーションの検出と悪用方法についての詳細は、デバイス上でデバッグ可能なアプリケーションを見つけて悪用するチュートリアルを参照してください。

  • バックアップ設定:機密情報を扱うアプリケーションでは、android:allowBackup="false"属性を明示的に設定して、USBデバッグが有効になっている場合にadb経由での未承認のデータバックアップを防止する必要があります。

  • ネットワークセキュリティ:_res/xml/_内のカスタムネットワークセキュリティ構成(android:networkSecurityConfig="@xml/network_security_config")は、証明書ピンやHTTPトラフィック設定などのセキュリティ詳細を指定できます。特定のドメインのHTTPトラフィックを許可する例があります。

  • エクスポートされたアクティビティとサービス:マニフェスト内のエクスポートされたアクティビティとサービスを特定すると、誤用される可能性のあるコンポーネントが明らかになります。動的テスト中のさらなる分析により、これらのコンポーネントをどのように悪用するかが明らかになります。

  • コンテンツプロバイダとFileProviders:公開されたコンテンツプロバイダは、データへの未承認アクセスや変更を許可する可能性があります。FileProvidersの構成も検討されるべきです。

  • ブロードキャストレシーバとURLスキーム:これらのコンポーネントは悪用される可能性があり、URLスキームが入力脆弱性のためにどのように管理されているかに特に注意する必要があります。

  • SDKバージョンminSdkVersiontargetSDKVersionmaxSdkVersion属性は、サポートされているAndroidバージョンを示し、セキュリティ上の理由から古い脆弱なAndroidバージョンをサポートしないことの重要性を強調します。

strings.xmlファイルからは、APIキー、カスタムスキーマ、その他の開発者ノートなどの機密情報が見つかる場合があり、これらのリソースを注意深く確認する必要があります。

タップジャッキング

タップジャッキングは、悪意のあるアプリケーション被害者アプリケーションの上に配置され、被害者アプリケーションを視覚的に隠すと、ユーザーインターフェースが設計され、ユーザーがそれとやり取りするように誤誘導される攻撃です。 実際には、ユーザーが自分が実際に被害者アプリケーションでアクションを実行していることを知らないようにしています。

詳細は以下で確認できます:

タスクハイジャッキング

launchModeが**singleTasktaskAffinityが定義されていない****アクティビティは、タスクハイジャッキングの脆弱性があります。つまり、アプリケーションがインストールされ、実際のアプリケーションよりも先に起動されると、実際のアプリケーションのタスクをハイジャックできます(ユーザーは実際のアプリケーションを使用していると思い込んで悪意のあるアプリケーション**とやり取りしています)。

詳細は以下で確認できます:

安全でないデータ保存

内部ストレージ

Androidでは、内部ストレージに保存されたファイルは、作成したアプリケーションのみがアクセスできるように設計されています。このセキュリティ対策はAndroidオペレーティングシステムによって強制され、ほとんどのアプリケーションのセキュリティニーズには一般的に十分です。ただし、開発者は時々、MODE_WORLD_READABLEMODE_WORLD_WRITABLEなどのモードを利用して、異なるアプリケーション間でファイルを共有することがあります。しかし、これらのモードは他のアプリケーション(悪意のあるものを含む)によるこれらのファイルへのアクセスを制限しません。

  1. 静的解析:

  • MODE_WORLD_READABLEMODE_WORLD_WRITABLEの使用が注意深く検討されていることを確認してください。これらのモードは、ファイルを意図しないアクセス未承認のアクセスにさらす可能性があります。

  1. 動的解析:

  • アプリケーションによって作成されたファイルに設定されたアクセス許可を確認してください。特に、ファイルが世界中で読み取りまたは書き込み可能に設定されているかどうかを確認してください。これは、デバイスにインストールされているどのアプリケーションでも、その起源や意図に関係なく、これらのファイルを読み取ったり変更したりできる可能性があるため、重大なセキュリティリスクを引き起こす可能性があります。

外部ストレージ

外部ストレージ(SDカードなど)のファイルを扱う場合は、次の注意が必要です:

  1. アクセシビリティ

  • 外部ストレージのファイルはグローバルに読み取りおよび書き込み可能です。つまり、どのアプリケーションやユーザーでもこれらのファイルにアクセスできます。

  1. セキュリティ上の懸念

  • アクセスが容易なため、外部ストレージに機密情報を保存しないことが推奨されています。

  • 外部ストレージは取り外し可能であり、どのアプリケーションでもアクセスできるため、セキュリティが低くなります。

  1. 外部ストレージからのデータの取り扱い

  • 外部ストレージから取得したデータには入力検証を常に行ってください。これは、データが信頼できないソースから取得されているため、重要です。

  • 外部ストレージから実行可能ファイルやクラスファイルを取得することは強く推奨されません。

  • アプリケーションが外部ストレージから実行可能ファイルを取得する必要がある場合は、これらのファイルが署名され、暗号的に検証されることを確認してから動的に読み込まれるようにしてください。この手順は、アプリケーションのセキュリティの整合性を維持するために重要です。

外部ストレージは/storage/emulated/0/sdcard/mnt/sdcardアクセスできます。

Android 4.4(API 17)以降、SDカードには、アプリケーションからそのアプリケーション専用のディレクトリにアクセスを制限するディレクトリ構造があります。これにより、悪意のあるアプリケーションが他のアプリケーションのファイルを読み取ったり書き込んだりすることが防止されます。

クリアテキストで保存された機密データ

  • 共有プリファレンス:Androidは、各アプリケーションが簡単にxmlファイルを/data/data/<packagename>/shared_prefs/に保存できるようにし、そのフォルダーにクリアテキストで機密情報を見つけることができる場合があります。

  • データベース:Androidは、各アプリケーションが簡単にsqliteデータベースを/data/data/<packagename>/databases/に保存できるようにし、そのフォルダーにクリアテキストで機密情報を見つけることができる場合があります。

破損したTLS

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

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

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

破損した暗号化

鍵管理プロセスの不備

一部の開発者は、機密データをローカルストレージに保存し、コード内でハードコード化/予測可能なキーで暗号化しています。これは行うべきではありません。逆向きの操作により、攻撃者が機密情報を抽出できる可能性があります。

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

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

その他のチェック

  • APKを難読化することをお勧めします。これにより、逆向きの作業が難しくなります。

  • アプリが機密情報を扱う場合(銀行アプリなど)、モバイルがルート化されているかどうかを独自にチェックし、それに応じて対応するべきです。

  • アプリが機密情報を扱う場合(銀行アプリなど)、エミュレータが使用されていないかを確認する必要があります。

  • アプリが機密情報を扱う場合(銀行アプリなど)、実行前に自己の整合性を確認する必要があります。

  • APKをビルドする際に使用されたコンパイラ/パッカー/難読化ツールを確認するためにAPKiDを使用します。

React Nativeアプリケーション

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

Xamarinアプリケーション

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

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

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

自動静的コード解析

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

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

漏洩した秘密情報

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

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

その他の興味深い機能

  • コード実行: Runtime.exec(), ProcessBuilder(), native code:system()

  • SMSの送信: sendTextMessage, sendMultipartTestMessage

  • nativeとして宣言されたネイティブ機能: public native, System.loadLibrary, System.load

  • ネイティブ機能を逆向きにする方法を学ぶには、こちらを読んでください

その他のテクニック


HackenProof Discordサーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう!

ハッキングの洞察 ハッキングのスリルと課題に深く入り込むコンテンツに参加しましょう

リアルタイムハックニュース リアルタイムのニュースと洞察を通じて、ハッキングの世界を最新の状態に保ちましょう

最新の発表 最新のバグバウンティの開始や重要なプラットフォームの更新情報を把握しましょう

**Discord**に参加して、今日からトップハッカーと協力を始めましょう!


動的解析

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

オンライン動的解析

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

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

ADB接続を介して、エミュレータ内でDrozerFridaを使用できます。

ローカル動的解析

エミュレータを使用する

  • Genymotion (無料版: Personal Edition、アカウントを作成する必要があります。潜在的なエラーを回避するために _VirtualBoxを使用したバージョンをダウンロードすることをお勧めします。)

  • Nox(無料ですが、FridaやDrozerをサポートしていません)。

どのプラットフォームでも新しいエミュレータを作成する際には、画面が大きいほどエミュレータの動作が遅くなります。可能であれば小さな画面を選択してください。

GenymotionにGoogleサービス(AppStoreなど)をインストールするには、次の画像の赤でマークされたボタンをクリックする必要があります:

また、GenymotionのAndroid VMの構成Bridge Networkモードを選択できます(これは、他のVMからAndroid VMに接続する場合に便利です)。

物理デバイスを使用する

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

  1. 設定

  2. (Android 8.0以降)システムを選択します。

  3. 端末についてを選択します。

  4. ビルド番号を7回押します。

  5. 戻り、開発者オプションが表示されます。

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

意図しないデータ漏洩

ログ

開発者は、デバッグ情報を公開することに注意する必要があります。これは機密データの漏洩につながる可能性があります。アプリケーションログを監視して機密情報を特定および保護するために、pidcatadb logcatというツールが推奨されています。Pidcatは使いやすさと可読性の点で好まれています。

Android 4.0より新しいバージョンでは、アプリケーションは自分自身のログにのみアクセスできるようになりました。つまり、アプリケーションは他のアプリのログにアクセスできません。 とはいえ、機密情報を記録しないことをお勧めします。

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

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ドキュメントによると、Drozerを使用すると、Androidアプリの役割を担い、他のアプリとやり取りすることができます。インストールされたアプリケーションができることは何でもできます。Androidのプロセス間通信(IPC)メカニズムを利用したり、基礎となるオペレーティングシステムとやり取りすることができます。 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)でのみ危険だとされています。

認可バイパスが常に脆弱性とは限らないことに注意してください。バイパスの動作方法や露出される情報によって異なります。

機密情報の漏洩

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

タップジャッキング

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

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

コンテンツプロバイダとは何かを確認したい場合はこちらを読んでください。 コンテンツプロバイダは基本的にデータを共有するために使用されます。アプリに利用可能なコンテンツプロバイダがある場合、そこから機密データを抽出することができるかもしれません。また、SQLインジェクションパストラバーサルをテストすることも興味深いです。なぜなら、これらは脆弱性を持っている可能性があるからです。

Drozerを使用してコンテンツプロバイダを悪用する方法を学ぶ

サービスの悪用

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

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

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

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

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

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

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

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

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

<!-- 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>

実行されるコード

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

機密情報

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

パス内のパラメータ

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

さらなる例

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

トランスポート層の検査と検証の失敗

  • Androidアプリケーションは、証明書を適切に検査しないことがあります。これらのアプリケーションが警告を見落としたり、自己署名証明書を受け入れたり、一部の場合はHTTP接続に戻ったりするのは一般的です。

  • SSL/TLSハンドシェイク中の交渉が弱い場合があり、安全でない暗号スイートが使用されています。この脆弱性により、接続は中間者攻撃に対して脆弱になり、攻撃者がデータを復号化できるようになります。

  • アプリケーションがセキュアチャネルを使用して認証した後、他のトランザクションに非セキュアチャネルを使用して通信すると、プライベート情報の漏洩のリスクがあります。このアプローチは、セッションクッキーやユーザーの詳細などの機密データを悪意のあるエンティティによる傍受から保護できません。

証明書の検証

証明書の検証に焦点を当てます。サーバーの証明書の整合性を検証してセキュリティを強化する必要があります。これは重要です。なぜなら、安全でないTLS構成や暗号化されていないチャネルを介して機密データを送信することは重大なリスクをもたらす可能性があるからです。サーバー証明書の検証と脆弱性の対処手順についての詳細は、このリソースが包括的なガイダンスを提供しています。

SSL Pinning

SSL Pinningは、アプリケーションがアプリケーション内に保存された既知のコピーに対してサーバーの証明書を検証するセキュリティ対策です。この方法は、MITM攻撃を防ぐために不可欠です。機密情報を取り扱うアプリケーションにはSSL Pinningの実装が強く推奨されます。

トラフィック検査

HTTPトラフィックを検査するには、プロキシツールの証明書(例:Burp)をインストールする必要があります。この証明書をインストールしないと、暗号化されたトラフィックはプロキシを介して表示されない場合があります。カスタムCA証明書をインストールする手順についてのガイドは、こちらをクリックしてください。

APIレベル24以上を対象とするアプリケーションでは、暗号化されたトラフィックを検査するためにネットワークセキュリティ構成を変更する必要があります。この手順は、暗号化されたトラフィックを検査するために重要です。ネットワークセキュリティ構成を変更する手順については、このチュートリアルを参照してください。

SSL Pinningのバイパス

SSL Pinningが実装されている場合、HTTPSトラフィックを検査するためにそれをバイパスする必要があります。この目的のためにさまざまな方法が利用可能です:

  • apk-mitmを使用してapkを自動的に変更してSSL Pinningをバイパスします。このオプションの最大の利点は、SSL Pinningをバイパスするためにルート権限が必要ないことですが、アプリケーションを削除して新しいものを再インストールする必要があり、これが常に機能するわけではありません。

  • この保護をバイパスするためにFrida(以下で説明)を使用できます。Burp+Frida+Genymotionの使用方法については、こちらのガイドを参照してください。

  • objectionを使用してSSL Pinningを自動的にバイパスすることもできます:objection --gadget com.package.app explore --startup-command "android sslpinning disable"

  • MobSFダイナミック解析を使用してSSL Pinningを自動的にバイパスすることもできます(以下で説明)。

  • キャプチャしていないトラフィックがあると考える場合は、iptablesを使用してトラフィックをburpに転送することができます。このブログを参照してください:https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62

一般的なWeb脆弱性の検索

アプリケーション内で一般的なWeb脆弱性を検索することも重要です。これらの脆弱性の特定と緩和に関する詳細情報は、この要約の範囲を超えて詳細に説明されています。

Frida

Frida は、開発者、リバースエンジニア、セキュリティ研究者向けの動的インストルメンテーションツールキットです。 実行中のアプリケーションにアクセスして、実行時にメソッドをフックして動作を変更したり、値を変更したり、値を抽出したり、異なるコードを実行したりできます。 Androidアプリケーションのペンテストを行う場合は、Fridaの使用方法を知っておく必要があります。

メモリのダンプ - Fridump

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

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

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

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

これにより、./dumpフォルダーにメモリがダンプされ、そこで次のようにgrepできます:

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

Keystore内の機密データ

Androidでは、Keystoreは機密データを保存するのに最適な場所ですが、十分な権限があればそれにアクセスすることができます。アプリケーションはここに機密データを平文で保存する傾向があるため、ペンテストでは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アプリケーションが実行している可能性がある特定の機密領域を保護するために行われる指紋認証をバイパスすることができます:

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

背景画像

アプリケーションをバックグラウンドに置くと、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

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

開発者はしばしば、これらのインテントを処理し、startActivity(...)sendBroadcast(...)などのメソッドに渡すアクティビティ、サービス、およびブロードキャストレシーバーなどのプロキシコンポーネントを作成しますが、これは危険です。

攻撃者がこれらのインテントを誤誘導して非公開のアプリコンポーネントをトリガーしたり、機密コンテンツプロバイダーにアクセスしたりすることを許可する危険があります。注目すべき例は、WebViewコンポーネントがIntent.parseUri(...)を介してURLをIntentオブジェクトに変換し、それらを実行することで、悪意のあるインテントインジェクションにつながる可能性があります。

要点

  • インテントインジェクションは、Webのオープンリダイレクトの問題に類似しています。

  • エクスプロイトは、Intentオブジェクトをエクストラとして渡すことにより、安全でない操作を実行するようにリダイレクトできます。

  • 非公開のコンポーネントやコンテンツプロバイダーを攻撃者にさらす可能性があります。

  • WebViewのURLからIntentへの変換は、意図しないアクションを容易にする可能性があります。

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

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

  • SQLインジェクション: 動的クエリやコンテンツプロバイダーを扱う場合は、パラメータ化されたクエリを使用していることを確認してください。

  • JavaScriptインジェクション(XSS): すべてのWebViewでJavaScriptとプラグインサポートが無効になっていることを確認してください(デフォルトで無効)。詳細はこちら

  • ローカルファイルインクルージョン: WebViewはファイルシステムへのアクセスが無効になっている必要があります(デフォルトで有効)- `(webview.getSettings().setAllowFileAccess(false);)。詳細はこちら

  • 永続クッキー: Androidアプリケーションがセッションを終了する場合、クッキーが取り消されないことがいくつかのケースであり、ディスクに保存される可能性があります


HackenProof Discordサーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう!

ハッキングの洞察 ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加

リアルタイムハックニュース リアルタイムのニュースと洞察を通じて、ハッキングの世界を追いかける

最新のアナウンス 最新のバグバウンティの開始や重要なプラットフォームの更新に関する情報を入手

**Discord**に参加して、今日からトップハッカーと協力を始めましょう!

自動解析

静的解析

アプリケーションの脆弱性評価を行うための素敵な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/比較分析とVirusTotalの統合も可能です(_MobSF/settings.py_にAPIキーを設定して有効にする必要があります: VT_ENABLED = TRUE VT_API_KEY = <Your API key> VT_UPLOAD = TRUE)。VT_UPLOADFalseに設定すると、ハッシュがファイルの代わりにアップロードされます。

MobSFによるアシストされたダイナミック分析

MobSFAndroidでのダイナミック分析にも非常に役立ちますが、その場合はホストに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 Live Logsを押すと、Fridaスクリプトによって生成されたログが表示され、Live API Monitorを押すと、フックされたメソッドへのすべての呼び出し、渡された引数、および返された値が表示されます(これは "Start Instrumentation" を押した後に表示されます)。 MobSFはまた、独自のFridaスクリプトを読み込むことができます(Fridayスクリプトの結果をMobSFに送信するには 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" で確認できます。

Shell

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リクエストをファズし、脆弱性を探します。

MobSFで動的解析を実行した後、プロキシ設定が誤って構成され、GUIから修正できない場合があります。プロキシ設定を修正するには、次の手順を実行します:

adb shell settings put global http_proxy :0

Inspeckageを使用したアシストされたダイナミック解析

Inspeckageからツールを入手できます。 このツールはいくつかのフックを使用して、ダイナミック解析を実行する際にアプリケーション内で何が起こっているかを知らせてくれます。

これはGUIを使用して静的解析を実行するための素晴らしいツールです

このツールは、ソースコードまたはパッケージ化されたAPK内のいくつかのセキュリティ関連のAndroidアプリケーションの脆弱性を探すように設計されています。このツールはまた、いくつかの見つかった脆弱性を悪用するための「プルーフ・オブ・コンセプト」デプロイ可能な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

  • 簡単な参照のためにすべての抽出されたファイルを表示します

  • APKファイルを自動的にJavaおよびSmali形式に逆コンパイルします

  • 一般的な脆弱性と動作のためのAndroidManifest.xmlの分析

  • 一般的な脆弱性と動作のための静的ソースコード分析

  • デバイス情報

  • その他

reverse-apk relative/path/to/APP.apk

SUPERは、Windows、MacOS X、Linuxで使用できるコマンドラインアプリケーションで、.apkファイルを解析して脆弱性を検出します。これは、APKを展開し、一連のルールを適用してこれらの脆弱性を検出します。

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

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

super-analyzer {apk_file}

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

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

最新リリースをダウンロード

./stacoan

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

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

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

検出は、アプリケーションのDalvikバイトコード(Smaliとして表現される)の静的解析によって行われ、androguardライブラリを使用しています。

このツールは、電話識別子の流出、オーディオ/ビデオフローの傍受、PIMデータの変更、任意のコード実行など、"悪い"アプリケーションの一般的な振る舞いを探します。

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

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

以下のことができます:

  • 異なるツールを使用してJavaおよびSmaliコードを抽出する

  • smaliscaClassySharkandrobugsandrowarnAPKiDを使用してAPKを分析する

  • 正規表現を使用してAPKからプライベート情報を抽出する

  • マニフェストを分析する

  • pyssltesttestsslwhatwebを使用して見つかったドメインを分析する

  • apk-deguard.comを介してAPKの難読化を解除する

Koodous

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

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

コードを難読化するために使用するサービスと構成によっては、秘密情報が難読化されるかどうかが異なることに注意してください。

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

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

APKの難読化を解除するためのステップバイステップガイドはこちらにあります

(そのガイドから) 最後に確認したとき、Dexguardの動作モードは次のとおりでした:

  • InputStreamとしてリソースをロードする

  • それを解読するためにFilterInputStreamを継承したクラスに結果をフィードする

  • いくつかの無駄な難読化を行い、リバーサーの時間を数分無駄にする

  • 解読された結果をZipInputStreamにフィードしてDEXファイルを取得する

  • 最終的にloadDexメソッドを使用して結果のDEXをリソースとしてロードする

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

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

これは一般的なAndroid難読化解除ツールです。Simplifyはアプリを仮想的に実行してその動作を理解し、コードを最適化しようとします。各最適化タイプは単純で一般的なため、使用される難読化の具体的なタイプは問題ありません。

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

マニュアル

このチュートリアルを読んで、カスタム難読化を逆転する方法について学びます

ラボ

AndroL4bは、リバースエンジニアリングとマルウェア分析のための最新のフレームワーク、チュートリアル、およびラボを含む、ubuntu-mateに基づいたAndroidセキュリティ仮想マシンです。

参考文献

まだ試していないもの

HackenProof Discordサーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう!

ハッキングの洞察 ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加しましょう

リアルタイムハックニュース リアルタイムのニュースと洞察を通じて、ハッキングの世界を最新の状態に保ちます

最新の発表 最新のバグバウンティの開始や重要なプラットフォームの更新に関する情報を入手しましょう

Discordに参加して、今日からトップハッカーと協力を始めましょう!

**htARTE(HackTricks AWS Red Team Expert)**で**ゼロからヒーローまでのAWSハッキング**を学びましょう!

HackTricksをサポートする他の方法:

Last updated