.. | ||
drozer-tutorial | ||
frida-tutorial | ||
adb-commands.md | ||
android-applications-basics.md | ||
android-burp-suite-settings.md | ||
android-task-hijacking.md | ||
apk-decompilers.md | ||
avd-android-virtual-device.md | ||
bypass-biometric-authentication-android.md | ||
content-protocol.md | ||
exploiting-a-debuggeable-applciation.md | ||
google-ctf-2018-shall-we-play-a-game.md | ||
inspeckage-tutorial.md | ||
intent-injection.md | ||
make-apk-accept-ca-certificate.md | ||
manual-deobfuscation.md | ||
react-native-application.md | ||
README.md | ||
reversing-native-libraries.md | ||
smali-changes.md | ||
spoofing-your-location-in-play-store.md | ||
webview-attacks.md |
Androidアプリのペンテスト
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
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 %}
ADB(Android Debug Bridge)
これはAndroidデバイス(エミュレートまたは物理)に接続するために必要な主要なツールです。
これにより、コンピュータからデバイスをUSBまたはネットワークで制御し、ファイルをコピーしたり、アプリをインストールまたはアンインストールしたり、シェルコマンドを実行したり、バックアップを作成したり、ログを読んだりすることができます。
adbの使用方法については、次のADBコマンドのリストを参照してください。
Smali
時には、アプリケーションのコードを変更して、隠された情報(おそらくよく難読化されたパスワードやフラグ)にアクセスすることが興味深い場合があります。その場合、APKを逆コンパイルしてコードを変更し、再コンパイルすることが興味深いかもしれません。
このチュートリアルでは、APKを逆コンパイルし、Smaliコードを変更し、新しい機能を持つAPKを再コンパイルする方法を学ぶことができます。これは、動的解析中に行われるいくつかのテストの代替手段として非常に役立つ場合があります。常にこの可能性を念頭に置いてください。
その他の興味深いトリック
- Playストアでの位置のスプーフィング
- APKのダウンロード: https://apps.evozi.com/apk-downloader/, https://apkpure.com/es/, https://www.apkmirror.com/, https://apkcombo.com/es-es/apk-downloader/
- デバイスから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
HackenProofはすべての暗号バグ報酬の場所です。
遅延なしで報酬を受け取る
HackenProofの報酬は、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
Web3ペントestingの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長するWeb3セキュリティをマスターしましょう。
Web3ハッカーレジェンドになる
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
HackenProofでサインアップしてハッキングから収益を得ましょう!
{% embed url="https://hackenproof.com/register" %}
静的解析
まず、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スキームとは何かについての詳細情報はこちらを参照してください。
- minSdkVersion、targetSDKVersion、maxSdkVersion:これらはアプリが実行されるAndroidのバージョンを示しています。セキュリティの観点から、古いバージョンをサポートすることは、既知の脆弱性のあるAndroidのバージョンを実行することを許可します。
resources.arsc/strings.xmlを読むことで、いくつかの興味深い情報を見つけることができます:
- APIキー
- カスタムスキーマ
- 開発者がこのファイルに保存する他の興味深い情報
タップジャッキング
タップジャッキングは、悪意のあるアプリケーションが起動し、被害者アプリケーションの上に配置される攻撃です。一度被害者アプリケーションを視覚的に隠すと、ユーザーインターフェースはユーザーをだましてそれと対話させ、その対話を被害者アプリケーションに渡します。
実際には、ユーザーは自分が実際に被害者アプリケーション上で操作を行っていることを知ることができません。
この攻撃に対して脆弱なアプリを検出するためには、Androidマニフェストでエクスポートされたアクティビティを検索する必要があります(インテントフィルタを持つアクティビティはデフォルトで自動的にエクスポートされます)。エクスポートされたアクティビティを見つけたら、**必要なパーミッションがあるかどうかを
<Button android:text="Button"
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:filterTouchesWhenObscured="true">
</Button>
qarkを--exploit-apk
パラメータと共に使用すると、潜在的なTapjackingの脆弱性をテストするための悪意のあるアプリケーションを作成することができます。
このような機能を実装したサンプルプロジェクトは、FloatingWindowAppで見つけることができます。
対策は比較的簡単で、開発者は他のビューによって覆われた場合にタッチイベントを受け取らないように選択することができます。Android Developer’s Referenceを使用します。
時には、ユーザーの完全な知識と同意のもとでアクションが実行されていることをアプリケーションが確認できることが重要です。例えば、許可リクエストの許可、購入の実行、広告のクリックなどです。残念ながら、悪意のあるアプリケーションは、意図したビューの目的を隠してユーザーにこれらのアクションを実行させようとするかもしれません。その対策として、フレームワークは、感度の高い機能へのアクセスを提供するビューのセキュリティを向上させるために使用できるタッチフィルタリングメカニズムを提供しています。
タッチフィルタリングを有効にするには、
setFilterTouchesWhenObscured(boolean)
を呼び出すか、android:filterTouchesWhenObscuredレイアウト属性をtrueに設定します。有効にすると、フレームワークは、ビューのウィンドウが他の可視ウィンドウによって隠されている場合に受け取ったタッチを破棄します。その結果、ビューは、トースト、ダイアログ、または他のウィンドウがビューのウィンドウの上に表示される場合にタッチを受け取りません。
タスクハイジャッキング
{% content-ref url="android-task-hijacking.md" %} android-task-hijacking.md {% endcontent-ref %}
安全でないデータの保存
内部ストレージ
内部ストレージに作成されたファイルは、アプリのみがアクセス可能です。この保護はAndroidによって実装されており、ほとんどのアプリケーションには十分です。しかし、開発者はしばしばMODE_WORLD_READBALE
およびMODE_WORLD_WRITABLE
を使用して、これらのファイルに別のアプリケーションへのアクセスを許可しますが、これにより他のアプリ(悪意のあるアプリ)がそれらにアクセスする制限はありません。
静的解析では、これらのモードの使用をチェックし、動的解析では作成されたファイルの許可をチェックします(おそらくいくつかのファイルはグローバルに読み取り/書き込み可能です)。
この脆弱性についての詳細情報と修正方法はこちらを参照してください。
外部ストレージ
SDカードなどの外部ストレージに作成されたファイルは、グローバルに読み取りおよび書き込み可能です。外部ストレージはユーザーによって取り外され、また任意のアプリケーションによって変更される可能性があるため、外部ストレージを使用して機密情報を保存しないでください。
信頼できないソースからのデータと同様に、外部ストレージからのデータを処理する際には入力検証を実行する必要があります。アプリが外部ストレージから実行可能ファイルを取得する場合は、ファイルを署名し、動的ローディングの前に暗号的に検証する必要があります。
情報はこちらから取得しました。
外部ストレージは/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/
パスに保存できるようにし、そのフォルダにクリアテキストで機密情報が含まれている場合があります。
破損したTLS
すべての証明書を受け入れる
何らかの理由で、ホスト名が一致しない場合でも、開発者はすべての証明書を受け入れることがあります。以下のようなコード行で証明書を受け入れることがあります。
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
破損した暗号化
鍵管理プロセスの不備
一部の開発者は、機密データをローカルストレージに保存し、コード内でハードコード化/予測可能な鍵で暗号化しています。これは行ってはいけません。逆向きエンジニアリングによって攻撃者が機密情報を抽出することができる可能性があるためです。
安全でないおよび/または非推奨のアルゴリズムの使用
開発者は、非推奨のアルゴリズムを使用して認証のチェック、データの保存または送信を行うべきではありません。これらのアルゴリズムのいくつかは、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#で書かれており、C#コードにアクセスするためにはapkからファイルを取得する必要があります。
7z r app.apk #Or any other zip decompression cmd
次に、xamarin-decompressを使用して、すべてのDLsLを展開します。
python3 xamarin-decompress.py -o /path/to/decompressed/apk
スーパーパックされたアプリケーション
このブログ記事によると、スーパーパックはアプリケーションのコンテンツを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 %}
その他の興味深い機能
- コードの実行:
Runtime.exec(), ProcessBuilder(), native code:system()
- SMSの送信:
sendTextMessage, sendMultipartTestMessage
native
と宣言されたネイティブ関数:public native, System.loadLibrary, System.load
- ネイティブ関数をリバースエンジニアリングする方法については、これを読んでください。
その他のトリック
{% 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接続のおかげで、エミュレータ内でDrozerとFridaを使用することができます。
ローカル動的解析
次のようなエミュレータを使用できます。
- Android Studio(x86とarmデバイスを作成でき、最新のx86バージョンではARMライブラリを使用できるため、遅いARMエミュレータは必要ありません)。
- イメージをインストールしてから削除しようとする場合は、Windowsの場合は
C:\Users\<User>\AppData\Local\Android\sdk\system-images\
、Macの場合は/Users/myeongsic/Library/Android/sdk/system-image
を使用できます。 - これは、主に使用するエミュレータであり、このページで設定方法を学ぶことができます。
- Genymotion (無料版:Personal Edition、アカウントを作成する必要があります。_潜在的なエラーを回避するためにVirtualBoxを備えたバージョンをダウンロードすることをお勧めします。_)
- Nox(無料ですが、FridaやDrozerはサポートしていません)。
{% hint style="info" %} どのプラットフォームでも新しいエミュレータを作成する際には、画面が大きいほどエミュレータの動作が遅くなることに注意してください。可能な限り小さい画面を選択してください。 {% endhint %}
ほとんどの人がGenymotionを使用すると思われるので、このトリックに注意してください。AppStoreなどのGoogleサービスをインストールするには、次の画像の赤でマークされたボタンをクリックする必要があります。
また、GenymotionのAndroid VMの設定では、Bridge Networkモードを選択できます(これは、ツールを使用して別のVMからAndroid VMに接続する場合に便利です)。
または、物理デバイスを使用することもできます(デバッグオプションを有効にし、ルート化できると便利です)。
- 設定。
- (Android 8.0以降)システムを選択します。
- 端末についてを選択します。
- ビルド番号を7回押します。
- 戻ると、開発者オプションが表示されます。
アプリケーションをインストールした後、最初に行うべきことは、アプリケーションを試して調査し、その動作や機能に慣れることです。
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またはブラウザを使用して、宣言されたスキームを開くことができます。
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ハンドシェイクを実行しますが、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ピニングをバイパス
Androidアプリケーションアナライザー
このツールは、動的解析中にさまざまなツールを管理するのに役立ちます:https://github.com/NotSoSecure/android_application_analyzer
インテントインジェクション
この脆弱性は、Webセキュリティのオープンリダイレクトに似ています。クラスIntent
はParcelable
であるため、このクラスに属するオブジェクトは、別の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ペントテストの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは、新しいインターネットです!成長する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_UPLOAD
をFalse
に設定すると、ファイルの代わりにハッシュがアップロードされます。
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スクリプトをロードすることもできます(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" で確認できます。
シェル
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コードを抽出する
- smalisca、ClassyShark、androbugs、androwarn、APKiDを使用してAPKを分析する
- 正規表現を使用してAPKからプライベート情報を抽出する
- マニフェストを分析する
- pyssltest、testssl、whatwebを使用して見つかったドメインを分析する
- apk-deguard.comを介してAPKの難読化を解除する
Koodous
マルウェアを検出するのに便利です:https://koodous.com/
HackenProofはすべての暗号バグバウンティのホームです。
遅延なしで報酬を受け取る
HackenProofのバウンティは、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
Web3ペントestingの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長する日々のWeb3セキュリティをマスターしましょう。
Web3ハッカーレジェンドになる
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
HackenProofでサインアップしてハッキングから収益を得ましょう!
{% embed url="https://hackenproof.com/register" %}
コードの難読化/難読化解除
コードを難読化するために使用するサービスと設定によっては、秘密情報が難読化される場合とされない場合があります。
ProGuard
ProGuardは、Javaコードを縮小、最適化、難読化するためのオープンソースのコマンドラインツールです。バイトコードを最適化し、未使用の命令を検出および削除することができます。ProGuardは無料のソフトウェアであり、GNU General Public License、バージョン2で配布されています。
ProGuardはAndroid SDKの一部として配布され、リリースモードでアプリケーションをビルドする際に実行されます。
出典:https://en.wikipedia.org/wiki/ProGuard_(software)
DexGuard
APKの難読化を解除するためのステップバイステップガイドはこちらで見つけることができます。
(そのガイドから)最後に確認したとき、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
参考文献
詳細については、以下を参照してください:
- https://appsecwiki.com/#/ リソースの素晴らしいリストです
- https://maddiestone.github.io/AndroidAppRE/ Androidクイックコース
- https://manifestsecurity.com/android-application-security/
- https://github.com/Ralireza/Android-Security-Teryaagh
テストする
HackenProofはすべての暗号バグ報奨金の場所です。
遅延なしで報酬を受け取る
HackenProofの報奨金は、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
Web3ペントestingの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるweb3セキュリティをマスターしましょう。
Web3ハッカーレジェンドになる
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
HackenProofでサインアップしてハッキングから報酬を得ましょう!
{% embed url="https://hackenproof.com/register" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを発見しましょう、私たちの独占的なNFTのコレクションを。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterで私をフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するために、hacktricks repo と hacktricks-cloud repo にPRを提出してください。