.. | ||
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 | ||
install-burp-certificate.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 | ||
tapjacking.md | ||
webview-attacks.md |
Androidアプリケーションの侵入テスト
ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert)!
HackTricksをサポートする他の方法:
- HackTricksで企業を宣伝したい場合やHackTricksをPDFでダウンロードしたい場合は、SUBSCRIPTION PLANSをチェックしてください!
- 公式PEASS&HackTricksグッズを入手する
- The PEASS Familyを発見し、独占的なNFTsのコレクションを見つける
- **💬 Discordグループ**に参加するか、telegramグループに参加するか、Twitter 🐦 @carlospolopmをフォローする
- HackTricksとHackTricks CloudのGitHubリポジトリにPRを提出して、あなたのハッキングテクニックを共有する
経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取るためにHackenProof Discordサーバーに参加しましょう!
ハッキングの洞察
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加する
リアルタイムハックニュース
リアルタイムのニュースと洞察を通じて、ハッキングの世界を追いかける
最新の発表
最新のバグバウンティの開始や重要なプラットフォームの更新について知る
Discordに参加して、今日からトップハッカーと協力しましょう!
Androidアプリケーションの基礎
Androidセキュリティに関連する最も重要な部分やAndroidアプリケーションの中で最も危険なコンポーネントについて知るには、このページを読むことを強くお勧めします:
{% content-ref url="android-applications-basics.md" %} android-applications-basics.md {% endcontent-ref %}
ADB(Android Debug Bridge)
これはAndroidデバイス(エミュレートされたものまたは物理的なもの)に接続するために必要な主要なツールです。
ADBは、コンピューターからデバイスを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/, https://github.com/kiber-io/apkd
- デバイスから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を見るだけで、パスワード、URL、APIキー、暗号化、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バージョン:
minSdkVersion
、targetSDKVersion
、maxSdkVersion
属性は、サポートされているAndroidバージョンを示し、セキュリティ上の理由から古い脆弱なAndroidバージョンをサポートしないことの重要性を強調します。
strings.xmlファイルからは、APIキー、カスタムスキーマ、その他の開発者ノートなどの機密情報が見つかる場合があり、これらのリソースを注意深く確認する必要があります。
タップジャッキング
タップジャッキングは、悪意のあるアプリケーションが起動し、被害者アプリケーションの上に配置される攻撃です。被害者アプリを視覚的に隠すと、ユーザーインターフェースが設計され、ユーザーがそれとやり取りするように誤誘導され、その間に相互作用を被害者アプリに渡します。
実際には、ユーザーが自分が実際に被害者アプリでアクションを実行していることを知らないようにしています。
詳細は以下で確認できます:
{% content-ref url="tapjacking.md" %} tapjacking.md {% endcontent-ref %}
タスクハイジャッキング
launchMode
が**singleTask
に設定され、taskAffinity
が定義されていないアクティビティは、タスクハイジャッキングの脆弱性があります。つまり、アプリケーションがインストールされ、実際のアプリケーションよりも先に起動されると、実際のアプリケーションのタスクをハイジャックできます(ユーザーは実際のアプリケーションを使用していると思い込んで悪意のあるアプリケーションとやり取り**している可能性があります)。
詳細は以下で確認できます:
{% content-ref url="android-task-hijacking.md" %} android-task-hijacking.md {% endcontent-ref %}
安全でないデータ保存
内部ストレージ
Androidでは、内部ストレージに保存されたファイルは、それを作成したアプリケーションだけがアクセスできるように設計されています。このセキュリティ対策はAndroidオペレーティングシステムによって強制され、ほとんどのアプリケーションのセキュリティニーズには一般的に適しています。ただし、開発者は時々、MODE_WORLD_READABLE
やMODE_WORLD_WRITABLE
などのモードを利用して、異なるアプリケーション間でファイルを共有することがあります。しかし、これらのモードは他のアプリケーションによるこれらのファイルへのアクセスを制限しない可能性があります。
- 静的解析:
MODE_WORLD_READABLE
やMODE_WORLD_WRITABLE
の使用が注意深く検討されていることを確認してください。これらのモードは、ファイルを意図しないかつ未承認のアクセスにさらす可能性があります。
- 動的解析:
- アプリケーションによって作成されたファイルに設定されたアクセス許可を確認してください。特に、ファイルが世界中で読み取りまたは書き込み可能に設定されているかどうかを確認してください。これは、デバイスにインストールされているどのアプリケーションでも、その出自や意図に関係なく、これらのファイルを読み取ったり変更したりできる可能性があるため、重大なセキュリティリスクを引き起こす可能性があります。
外部ストレージ
外部ストレージ(SDカードなど)のファイルを扱う際には、次の注意が必要です:
- アクセシビリティ:
- 外部ストレージ上のファイルはグローバルに読み取りおよび書き込み可能です。つまり、どのアプリケーションやユーザーでもこれらのファイルにアクセスできます。
- セキュリティ上の懸念:
- アクセスが容易であるため、外部ストレージに機密情報を保存しないことが推奨されています。
- 外部ストレージは取り外し可能であり、どのアプリケーションでもアクセスできるため、セキュリティが低くなります。
- 外部ストレージからのデータの取り扱い:
- 外部ストレージから取得したデータには入力検証を常に実行してください。これは、データが信頼できないソースから取得されたものであるため、重要です。
- 外部ストレージから実行可能ファイルやクラスファイルを取得し、動的に読み込むことは強く推奨されません。
- アプリケーションが外部ストレージから実行可能ファイルを取得する必要がある場合は、これらのファイルが署名され、暗号的に検証されることを確認してから、これらのファイルが動的に読み込まれる前に重要です。
外部ストレージは/storage/emulated/0
、/sdcard
、/mnt/sdcard
でアクセスできます。
{% hint style="info" %} Android 4.4(API 17)以降、SDカードには、アプリケーションからそのアプリケーション専用のディレクトリにアクセスを制限するディレクトリ構造があります。これにより、悪意のあるアプリケーションが他のアプリケーションのファイルを読み取ったり書き込んだりすることが防止されます。 {% endhint %}
クリアテキストで保存された機密データ
- 共有プリファレンス:Androidは、各アプリケーションが
/data/data/<packagename>/shared_prefs/
パスに簡単にxmlファイルを保存できるようにし、そのフォルダーにクリアテキストで機密情報を見つけることができる場合があります。 - データベース:Androidは、各アプリケーションが
/data/data/<packagename>/databases/
パスに簡単にsqliteデータベースを保存できるようにし、そのフォルダーにクリアテキストで機密情報を見つけることができる場合があります。
破損したTLS
すべての証明書を受け入れる
何らかの理由で、開発者は、たとえばホスト名が一致しない場合でも、以下のようなコード行ですべての証明書を受け入れることがあります:
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
破損した暗号化
鍵管理プロセスの不備
一部の開発者は、機密データをローカルストレージに保存し、コード内でハードコード化/予測可能なキーで暗号化しています。これは行うべきではありません。逆向きの操作により、攻撃者が機密情報を抽出できる可能性があります。
安全でないおよび/または非推奨のアルゴリズムの使用
開発者は、非推奨のアルゴリズムを使用して認証チェック、データの保存または送信を行うべきではありません。これらのアルゴリズムの一部には、RC4、MD4、MD5、SHA1などがあります。たとえばパスワードを保存するためにハッシュが使用されている場合、ソルトとともにハッシュブルートフォース耐性を持つべきです。
その他のチェック
- APKを難読化することをお勧めします。これにより、逆向きの作業が難しくなります。
- アプリが機密情報を扱う場合(銀行アプリなど)、モバイルがルート化されているかどうかを確認し、それに応じて対処するべきです。
- アプリが機密情報を扱う場合(銀行アプリなど)、エミュレータが使用されていないかを確認すべきです。
- アプリが機密情報を扱う場合(銀行アプリなど)、実行前に自己整合性を確認するべきです。
- APKiDを使用して、APKのビルドに使用されたコンパイラ/パッカー/難読化プログラムを確認します。
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 %}
その他の興味深い機能
- コード実行:
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 Discordサーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう!
ハッキングの洞察
ハッキングのスリルと課題に深く入り込むコンテンツに参加しましょう
リアルタイムのハックニュース
リアルタイムのニュースと洞察を通じて、ハッキングの世界を最新の状態に保ちます
最新のアナウンス
最新のバグバウンティの開始や重要なプラットフォームの更新情報を把握しましょう
Discordに参加して、今日からトップハッカーと協力を始めましょう!
動的解析
まず、アプリケーションとすべての環境(主にBurp CA証明書、Drozer、Frida)をインストールできる環境が必要です。したがって、ルート化されたデバイス(エミュレートされているかどうかに関係なく)を強くお勧めします。
オンライン動的解析
https://appetize.io/で無料アカウントを作成できます。このプラットフォームを使用すると、APKをアップロードして実行できるため、APKの動作を確認するのに便利です。
Web上でアプリケーションのログを表示し、adbを介して接続することもできます。
ADB接続を使用すると、エミュレータ内でDrozerとFridaを使用できます。
ローカル動的解析
エミュレータを使用する
- Android Studio(x86およびarmデバイスを作成でき、最新のx86 バージョンでは、遅いarmエミュレータを必要とせずにARMライブラリをサポートしています)。
- このページで設定方法を学びます:
{% content-ref url="avd-android-virtual-device.md" %} avd-android-virtual-device.md {% endcontent-ref %}
- Genymotion (無料版: Personal Edition、アカウントを作成する必要があります。潜在的なエラーを回避するために VirtualBoxを使用したバージョンをダウンロードすることをお勧めします。)
- Nox(無料ですが、FridaやDrozerをサポートしていません)。
{% hint style="info" %} どのプラットフォームでも新しいエミュレータを作成する際には、画面が大きいほどエミュレータが遅くなることに注意してください。可能であれば小さな画面を選択してください。 {% endhint %}
GenymotionにGoogleサービス(AppStoreなど)をインストールするには、次の画像の赤でマークされたボタンをクリックする必要があります:
また、GenymotionのAndroid VMの構成でBridge Network modeを選択できます(これは、他のVMからAndroid VMに接続する場合に便利です)。
物理デバイスを使用する
デバッグオプションを有効にし、ルート化できると便利です:
- 設定。
- (Android 8.0以降)システムを選択します。
- 端末についてを選択します。
- ビルド番号を7回押します。
- 戻り、開発者オプションが表示されます。
アプリケーションをインストールした後、最初に行うべきことは、それを試して調査し、どのように動作し、それに慣れるかを調べることです。
MobSF動的解析+pidcatを使用してこの初期の動的解析を実行することをお勧めします。これにより、アプリケーションの動作を学びながら、MobSFが後でレビューできる興味深いデータをキャプチャします。
意図しないデータ漏洩
ログ
開発者は、デバッグ情報を公に公開することに注意する必要があります。これは機密データの漏洩につながる可能性があります。ツールpidcatとadb logcat
を使用して、アプリケーションログを監視し、機密情報を特定および保護することが推奨されています。Pidcatは使いやすさと可読性の点で好まれています。
{% hint style="warning" %}
Android 4.0より新しいバージョンから、アプリケーションは自分自身のログにのみアクセスできるようになりました。つまり、アプリケーションは他のアプリのログにアクセスできません。
とはいえ、機密情報を記録しないことが依然として推奨されています。
{% endhint %}
コピー/ペーストバッファのキャッシング
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)でのみ危険だとされています。
{% 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]
{% 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ハンドシェイク中の交渉が弱い場合があり、安全でない暗号スイートが使用されています。この脆弱性により、接続は中間者攻撃に対して脆弱になり、攻撃者がデータを復号化できるようになります。
- アプリケーションがセキュアチャネルを使用して認証した後、他のトランザクションで非セキュアチャネルを介して通信すると、プライベート情報の漏洩のリスクがあります。このアプローチは、セッションクッキーやユーザーの詳細などの機密データを悪意のあるエンティティによる傍受から保護できません。
証明書の検証
証明書の検証に焦点を当てます。サーバーの証明書の整合性を検証してセキュリティを強化する必要があります。これは重要です。なぜなら、安全でないTLS構成や暗号化されていないチャネルを介して機密データを送信することは重大なリスクを引き起こす可能性があるからです。サーバー証明書の検証と脆弱性の対処の詳細な手順については、このリソースが包括的なガイダンスを提供しています。
SSL Pinning
SSL Pinningは、アプリケーションがアプリケーション内に保存された既知のコピーに対してサーバーの証明書を検証するセキュリティ対策です。この方法は、MITM攻撃を防ぐために不可欠です。SSL Pinningの実装は、機密情報を扱うアプリケーションに強く推奨されます。
トラフィック検査
HTTPトラフィックを検査するには、プロキシツールの証明書をインストールする必要があります(例:Burp)。この証明書をインストールしないと、暗号化されたトラフィックはプロキシを介して表示されない場合があります。カスタムCA証明書をインストールする手順についてのガイドは、こちらをクリックしてください。
APIレベル24以上を対象とするアプリケーションでは、トラフィックを暗号化して検査するために、ネットワークセキュリティ構成を変更してプロキシのCA証明書を受け入れる必要があります。この手順は、暗号化されたトラフィックを検査するために重要です。ネットワークセキュリティ構成を変更する手順については、このチュートリアルを参照してください。
SSL Pinningのバイパス
SSL Pinningが実装されている場合、HTTPSトラフィックを検査するためには、次のようなさまざまな方法があります:
- apk-mitmを使用してSSL Pinningをバイパスするためにapkを自動的に変更します。このオプションの最大の利点は、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アプリケーションのペントestingを行う場合は、Fridaの使用方法を知っておく必要があります。
- Fridaの使用方法を学ぶ:Fridaチュートリアル
- Fridaを使用したアクションのための「GUI」:https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security
- OjectionはFridaの使用を自動化するのに最適です:https://github.com/sensepost/objection , https://github.com/dpnishant/appmon
- ここでいくつかの素晴らしいFridaスクリプトを見つけることができます:https://codeshare.frida.re/
- アンチデバッギング/アンチ-Fridaメカニズムをバイパスしようとする場合は、Fridaを読み込む方法を示したhttps://erfur.github.io/blog/dev/code-injection-without-ptrace(ツールlinjector)
メモリのダンプ - 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
インテントインジェクション
開発者はしばしば、これらのインテントを処理し、startActivity(...)
やsendBroadcast(...)
などのメソッドに渡すアクティビティ、サービス、およびブロードキャストレシーバーなどのプロキシコンポーネントを作成しますが、これは危険です。
攻撃者がこれらのインテントを誤誘導して非公開のアプリコンポーネントをトリガーしたり、機密コンテンツプロバイダーにアクセスしたりすることを許可することによる危険があります。注目すべき例は、WebView
コンポーネントがIntent.parseUri(...)
を介してURLをIntent
オブジェクトに変換し、それを実行することで、悪意のあるインテントインジェクションにつながる可能性があります。
要点
- インテントインジェクションは、Webのオープンリダイレクトの問題に類似しています。
- エクスプロイトは、
Intent
オブジェクトをエクストラとして渡すことにより、安全でない操作を実行するようにリダイレクトできます。 - 非公開のコンポーネントやコンテンツプロバイダーを攻撃者にさらす可能性があります。
WebView
のURLからIntent
への変換は、意図しないアクションを容易にする可能性があります。
Androidクライアントサイドインジェクションおよびその他
おそらくWebからこの種の脆弱性については知っているでしょう。Androidアプリケーションでこの種の脆弱性に特に注意する必要があります:
- SQLインジェクション: 動的クエリやコンテンツプロバイダーを扱う場合は、パラメータ化されたクエリを使用していることを確認してください。
- JavaScriptインジェクション(XSS): すべてのWebViewsに対してJavaScriptとプラグインサポートが無効になっていることを確認してください(デフォルトで無効)。詳細はこちら。
- ローカルファイルインクルージョン: WebViewsはファイルシステムへのアクセスが無効になっている必要があります(デフォルトで有効)- `(webview.getSettings().setAllowFileAccess(false);)。詳細はこちら。
- 永続クッキー: Androidアプリケーションがセッションを終了する場合、クッキーが取り消されないことがいくつかのケースであり、それがディスクに保存される可能性があります
- クッキーのSecureフラグ
HackenProof Discordサーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう!
ハッキングの洞察
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加
リアルタイムハックニュース
リアルタイムのニュースと洞察を通じて、ハッキングの世界を追いかける
最新の発表
最新のバグバウンティの開始や重要なプラットフォームの更新に関する情報を入手
**Discord**に参加して、今日からトップハッカーと協力を始めましょう!
自動解析
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/比較分析と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 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リクエストをファズし、脆弱性を探します。
{% hint style="info" %} MobSFで動的解析を実行した後、プロキシ設定が誤って構成され、GUIから修正できない場合があります。プロキシ設定を修正するには、次の手順を実行します:
adb shell settings put global http_proxy :0
{% endhint %}
Inspeckageを使用したアシストされたダイナミック解析
Inspeckageからツールを入手できます。
このツールはいくつかのフックを使用して、ダイナミック解析を実行する際にアプリケーション内で何が起こっているかを知らせてくれます。
Yaazhini
これはGUIを備えた静的解析を実行するための優れたツールです
Qark
このツールは、ソースコードまたはパッケージ化された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
ReverseAPK
- 簡単な参照のためにすべての抽出されたファイルを表示します
- APKファイルを自動的にJavaおよびSmali形式に逆コンパイルします
- 一般的な脆弱性と動作のためのAndroidManifest.xmlを分析します
- 一般的な脆弱性と動作のための静的ソースコード分析
- デバイス情報
- その他
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 releases
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/
コードの難読化/難読化解除
コードを難読化するために使用するサービスと構成によっては、秘密情報が難読化されるかどうかが異なることに注意してください。
ProGuard
Wikipediaによると、ProGuardはJavaコードを縮小し、最適化し、難読化するオープンソースのコマンドラインツールです。バイトコードを最適化し、未使用の命令を検出して削除することができます。ProGuardはフリーソフトウェアであり、GNU General Public Licenseバージョン2の下で配布されています。
ProGuardはAndroid SDKの一部として配布され、リリースモードでアプリケーションをビルドする際に実行されます。
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セキュリティ仮想マシンです。
参考文献
- https://owasp.org/www-project-mobile-app-security/
- https://appsecwiki.com/#/ これは素晴らしいリソースのリストです
- https://maddiestone.github.io/AndroidAppRE/ Androidクイックコース
- https://manifestsecurity.com/android-application-security/
- https://github.com/Ralireza/Android-Security-Teryaagh
- https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec
まだ試していないもの
HackenProof Discordサーバーに参加して、経験豊富なハッカーやバグバウンティハンターとコミュニケーションを取りましょう!
ハッキングの洞察
ハッキングのスリルとチャレンジに深く入り込むコンテンツに参加しましょう
リアルタイムハックニュース
リアルタイムのニュースと洞察を通じて、ハッキングの世界を最新の状態に保ちます
最新の発表
最新のバグバウンティの開始や重要なプラットフォームの更新に関する情報を入手しましょう
Discordに参加して、今日からトップハッカーと協力を始めましょう!