
モバイル アプリは、ユーザーのパスワードから支払いの詳細まですべてを保存するデジタル金庫のようなものだと考えてください。侵入テスターとしてのあなたの仕事は、実際の攻撃者が侵入を試みる前に、金庫がしっかりと封印されていることを確認することです。このガイドでは、適切なツールの収集からコードとトラフィックの分析まで、モバイル侵入テストの全プロセスについて説明します。さあ、始めましょう!
私たちは、モバイル デバイスが私たちの延長のような世界に住んでいます。人々は携帯電話で銀行取引、ショッピング、交流を行うため、アプリのセキュリティを確保することが最も重要です。モバイル ペネトレーション テストが重要なのはそのためです。アプリに対する攻撃をシミュレートして弱点を明らかにし、開発者がパッチを適用できるように支援します。
あなたにとってのメリットは次のとおりです:
本質的に、モバイル ペネトレーション テストは、実際の攻撃者と同じように、アプリに侵入する独創的な方法を見つけて、まず弱点を修正することです。モバイル アプリには次のような特徴があるため、標準的な Web ペネトレーション テストとは異なります。
独自のプラットフォームで実行: Android と iOS にはそれぞれ独自のルール、セキュリティ モデル、癖があります。
デバイスにデータを保存する: 機密情報はローカルに保存される可能性があるため、デバイス固有のストレージを調べることが重要です。
API に大きく依存する: モバイル アプリは多くの場合、API を介してバックエンド サーバーと通信しますが、適切にテストされていない場合は、API が誤って構成されたり、脆弱になったりする可能性があります。
一般的な課題としては、ルート/ジェイルブレイクの検出、 SSL ピンニングのバイパス、クライアント側とサーバー側の両方のロジックの分析などが挙げられます。
中世の要塞を想像してみてください。攻撃者が狙う典型的な「弱点」は次のとおりです。
リバースエンジニアリングによって秘密を明らかにできるコード、または実行時に操作できるロジック。
これらのリスクの詳細については、 OWASP Mobile Top 10とMobile Application Security Testing Guide (MASTG)を参照してください。これらは、起こり得るすべての落とし穴を強調表示する地図のようなものです。
城を襲撃する前に、適切な防具と武器が必要です。侵入テストの用語で言えば、それは現実世界のデータに害を与えることなく安全に実験できる環境を設定することを意味します。Android と iOS の両方について基本を説明しましょう。
Android アプリをテストする場合、 Android EmulatorやGenymotionなどのツールを使用して仮想デバイスを起動できます。これらのエミュレータを使用すると、物理デバイスを必要とせずにアプリをすばやくインストールしてテストできます。セットアップの詳細な手順については、 このガイドを参照してください。
Android エミュレータ
ただし、物理デバイスを使用すると、特に現実世界のネットワーク状況、センサー、または生体認証をテストする必要がある場合は、より正確な結果が得られることが多いです。ルート チェックや詳細なデータ フォレンジックなどのより高度なテストを計画している場合は、実際のハードウェアがあることが大きな利点になります。
専用デバイスを購入または借りる場合は、一部の Android スマートフォンはルート化が容易であることに留意してください。ルート化により、オペレーティング システムへのより深いアクセスが可能になり、隠しファイルの分析、アプリの制限の回避、および高度な権限を必要とする強力なツールの実行が可能になります。
Android のルート化は、携帯電話のオペレーティング システムのスケルトン キーを見つけるようなものです。通常は、次の操作を行います。
各電話と OS バージョンには癖があるため、何度か試してみる覚悟が必要です。幸いなことに、デバイスを一度ルート化すると、工場出荷時の設定にリセットするかファームウェアをアップグレードしない限り、通常はそのままの状態が維持されます。iOS のジェイルブレイクは再起動後に失われる可能性があることに留意してください。そのため、Android ではテスト用のより永続的なプラットフォームが提供される場合があります。
常にお使いの携帯電話の信頼できるガイドに従ってください。不適切なルート化はソフトウェアを破損させたり、セキュリティホールを生じさせたりする可能性があります。そしてもちろん、始める前にデータをバックアップしてください! Pixel 3a のルート化の例
Burp Suite のようなプロキシを「スパイグラス」と考えてください。アプリに出入りするすべてのトラフィックを確認し、変更できます。安全でない通信、不完全な認証、または怪しいリクエストをキャッチできます。モバイル用のプロキシの設定は、iOS と Android で同様です。各プラットフォームの公式手順は、こちら で確認できます。
特定のフレームワークでは状況が複雑になります:
Xamarin は、カスタム ネットワーク ライブラリが原因で、システム全体のプロキシ設定を無視することがあります。
Flutter はプロキシを尊重する可能性がありますが、証明書のピン留めを強制し、トラフィックの表示をブロックする可能性があります。
これらのハードルを克服するには、コードを微調整したり、 FridaやObjectionなどのツールを使用してピン留めをオフにしたり、リバース プロキシ (例: mitmproxy ) を設定してトラフィックをキャプチャしたりすることができます。アプローチを適応させることも楽しみの 1 つです。
アプリがまだ Google Play ストアにない場合は (ペンテストではよくあることです)、サイドロードするAPK ファイルがある可能性があります。APK は、Google ドライブまたは直接ダウンロード リンクを通じて共有できます。もう 1 つの便利なオプションは、関係者に招待状を送信してテストを整理するFirebase App Distribution を使用することです。
iOS では、物理デバイスが最も本格的なテスト体験を提供します。 Face ID 、 Touch ID 、センサーなどのハードウェア固有の機能を詳しく調べながら、リアルなネットワーク インタラクションもキャプチャできます。個人用デバイスを購入または使用する場合、脱獄が簡単であることが知られているモデルを検討してください (すべての iPhone がこのプロセスに同じように適応しているわけではないため)。仮想 iOS デバイスが必要な場合は、 Corellium が強力なクラウドベースのテストを提供しますが、無料ではありません。ほとんどのテスターは、徹底的なチェックのために依然として物理デバイスに依存しています。
iOS の Jailbreaking は、 Apple がデバイスにかけた南京錠を外すのと同じような感覚です。ルート権限を取得して、微調整をインストールしたり、隠しファイル ディレクトリを探索したり、高度な侵入テスト スクリプトを実行したりできるようになります。人気のツールには、 unc0verやCheckra1n などがあります。最適な選択は、iOS のバージョンとデバイス モデルによって異なります。
覚えて:
また、デバイスを再起動すると特定のセキュリティ レイヤーが自動的に再アクティブ化されるため、電源を入れるたびに再度ジェイルブレイクする必要がある場合があることに注意してください。
iOS アプリはIPAファイルで提供されます。これは Android の APK に似ています。ジェイルブレイクされたスマートフォンでは、 Filzaなどのファイル マネージャーやSideloadlyなどのアプリを使用して IPA をインストールできます。より正式な方法としては、開発者はTestFlightを利用することが多いです。TestFlight を使用すると、メールでテスターを招待できます。リンクをタップするだけで、あとは iOS が処理します。
適切な環境を設定すること、つまり適切なデバイス (仮想または物理) を選択し、プロキシを構成し、アプリをサイドロードする方法を理解することで、アプリの内部動作を詳細に調査する準備が整います。多少の調整が必要になるかもしれませんが、完璧な設定ができたら、実際のペネトレーションテストを開始できます。
次に、アプリ自体の調査に移りましょう。ただし、完全に実行する必要はありません。これは、城の中に入る前に設計図を読むようなものです。コードや構成ファイル内のハードコードされた秘密、安全でない構成、その他の問題を探します。
ハードコードされた秘密
API キー、トークン、認証情報、暗号化キーは、ソース コード内に直接含まれることがあります。攻撃者がアプリをリバース エンジニアリングすると、最小限の労力でこれらの秘密を抜き出し、ユーザーやサービスになりすますことができます。
安全でない構成
権限が過度に緩い、デバッグ フラグが有効になっている、または署名が不適切であるなどの理由で、アプリの防御に穴があいてしまう可能性があります。iOS Info.plist の NSAllowsArbitraryLoads や android:debuggable="true" などの設定 1 つで、中間者 (MITM) 攻撃や保護されていないデバッグ攻撃が発生する可能性があります。
機密データの漏洩
セッション トークンや個人情報をデバイス (ログ、共有設定、ローカル ファイル) にプレーン テキストで保存すると、災害の原因になります。物理的にアクセスできる人や、ルート化/ジェイルブレイクされた電話を持っている人なら誰でも、ブルート フォース攻撃をしなくても、覗き見して貴重なデータを盗むことができます。
アプリのロジックと欠陥
多くの場合、根本的な問題は機能の実装方法に起因します。認証などの重要なチェックが欠落していたり、厳密に実施されていない場合、攻撃者は簡単に防御を回避できます。同様に、弱い暗号化機能や保護されていないアプリ コンポーネントも、アプリを調査する人にとっては容易な作業となります。
モバイル セキュリティ テスト ガイド (MSTG) では、静的分析を体系的に取り組むのに役立つ徹底的なチェックリストを提供しています。
さまざまなツールを使用すると、アプリを実行せずにコード、構成、バイナリを分析できます。
MobSF (モバイル セキュリティ フレームワーク)
使用方法: APK/IPA をプラグインすると、MobSF が詳細なレポートを生成します。潜在的な構成ミス、疑わしい権限、またはハードコードされたシークレットがリストされます。
ボーナス: いくつかの動的機能も備えており、優れたオールインワン ソリューションとなっています。
APKツール(Android)
使用方法: APK を逆コンパイルしてから再コンパイルして、中身を確認します。これは、AndroidManifest.xml の読み取り、リソースの調査、アプリの調整に最適です。
apktool d app.apk -o output_director
JADX (Android)
用途: Dalvik バイトコード (.dex) を読み取り可能な Java に変換します。API キーなどの潜在的な脆弱性を持つコード行を見つけるのに最適です。
jadx app.apk -d output_directory
クラスダンプ、ホッパー、ギドラ(iOS)
使用方法: Objective-C クラス ヘッダー (Class-Dump) を抽出したり、iOS バイナリ (Hopper/Ghidra) を逆アセンブルします。アプリが Swift 化されている場合は、Swift メタデータも表示されます。
Android アプリは、 APKTool 、 JADX 、 MobSFなどのツールを使用してAPKファイルから逆コンパイルできます。
このプロセスにより、ソース コード、アプリケーション構造、AndroidManifest.xml や .smali ファイルなどの機密コンポーネントが公開され、アプリのロジックや権限が公開される可能性があります。
クリアテキストトラフィックの許可
<application android:usesCleartextTraffic="true" />
攻撃者は、暗号化されていない (HTTP) 通信を悪用して盗聴や改ざんを行う可能性があります。
<application android:debuggable="true" />
デバイス (またはエミュレーター) を持っている人なら誰でも、デバッガーを接続して機密データやロジックを調べることができます。
public class ApiClient { private static final String API_KEY = "12345-abcdef-67890"; private static final String API_SECRET = "superSecretPassword123!"; }
APKTool または JADX を使用して簡単に逆コンパイルすると、これらのキーが明らかになり、攻撃者がアプリを偽装したり、不正にバックエンド サービスにアクセスしたりできるようになります。
<map> <string name="session_token">abc123XYZ987</string> <string name="user_email">user@example.com</string> </map>
トークンまたはユーザーの詳細がプレーンテキストで保存されている場合、ルート化されたデバイスはそれらを簡単に抽出できます。
<key>NSAppTransportSecurity</key> <dict>
<key>NSAllowsArbitraryLoads</key> <true/> </dict>
Apple はデフォルトで安全な接続を強制するため、これを無効にするとアプリが MITM リスクや暗号化されていないトラフィックにさらされることになります。
Class-Dump 、 Hopper Disassembler 、 Ghidraなどの逆コンパイル ツールは、Objective-C クラス、メソッド名、バイナリ ファイルなど、アプリのIPAファイルのコンテンツを抽出します。
静的分析が城の設計図を調べることなら、動的分析は城の中を歩き回りながらすべてのドアと窓をチェックすることです。アプリを実行して動作を観察し、リアルタイムで弱点を突けるかどうかを確認します。
ネットワーク通信
アプリのデータが転送中に漏洩していないことを確認してください。アプリが HTTP または不適切に構成された HTTPS に依存している場合、攻撃者が介入してデータを傍受したり、変更したりする可能性があります。SSL /TLS 証明書のピン留めが欠落しているか弱い場合も同様で、アプリが中間者 (MITM) 攻撃にさらされることになります。
認証と承認
ログイン画面とユーザー ロールが紙の上では適切に見えても、実際のテストは実行時に誰かがそれらを回避できるかどうかです。たとえば、攻撃者はセッション トークンを再利用したり推測したりできますか? アプリは正しくタイムアウトしますか、それともセッションを永久に開いたままにしますか?
ランタイム整合性とセキュリティチェック
多くのアプリは、デバイスがルート化されているか (Android)、またはジェイルブレイクされているか (iOS) を検出し、特定の機能の実行を拒否またはブロックしようとします。動的分析中は、アプリのコードにフックしてこれらのチェックをすり抜けることができるかどうかを確認し、とにかくテストを続行できるようにします。これらの対策を簡単に回避できる場合、攻撃者も同様に回避できます。
実行中のデータ漏洩
アプリは機密情報(パスワードやトークンなど)をプレーンテキストで記録していますか? アプリを切り替えたり、デバイスをバックグラウンドにしたりしても、機密データを含むキャプチャされた画面が表示されたままになっていますか? このような意図しない「パンくず」の痕跡は、攻撃者を宝物へと導く可能性があります。
APIとサーバー側検証
クライアントの観点からはアプリは安全に見えても、バックエンド API がユーザーの権限や入力を検証しない場合、攻撃者がリクエストをその場で微調整して不正アクセスを取得したり、システムを破壊したりする可能性があります。クライアントとサーバーの両方の動作を同時にテストすることが重要です。
モバイル セキュリティ テスト ガイド (MSTG) では、動的分析についても取り上げています。次に、留意すべきチェック事項をいくつか示します。
[ ] MSTG-RESILIENCE-1 : アプリは改ざんやリバースエンジニアリングの試みを検出し、防止します。
[ ] MSTG-RESILIENCE-2 : アプリはルート化またはジェイルブレイクされたデバイスを検出します。
[ ] MSTG-RESILIENCE-3 : アプリは実行時にコードとリソースの整合性を検証します。
[ ] MSTG-NETWORK-1 : アプリは強力な暗号化技術を使用してすべてのネットワークトラフィックを暗号化します。
[ ] MSTG-NETWORK-3 : アプリは該当する場合、証明書のピン留めを強制します。
[ ] MSTG-PLATFORM-1 : アプリはプラットフォームのセキュリティメカニズムのみに依存せず、独立してセキュリティ対策を実施します。
[ ] MSTG-AUTH-2 : アプリはセッションタイムアウトとユーザーの再認証要件を適切に実施します。
[ ] MSTG-STORAGE-4 : アプリは機密データをシステムログに記録しません。
[ ] MSTG-STORAGE-5 : アプリは機密データを安全でない場所に保存しません。
[ ] MSTG-CRYPTO-1 : アプリは実行時操作に最新の暗号化アルゴリズムを使用します。
これらは、実際のテストのためのロードマップのようなものだと考えてください。これらは、すべてのドアや窓を体系的に調べて、施錠されていることを確認するのに役立ちます。
コード検査に重点を置く SAST とは異なり、DAST はアプリの実行とチェックを中心に行います。以下は、そのプロセスをスムーズにする一般的なツールです。
Burp スイート/ OWASP ZAP
用途: どちらも、アプリとバックエンド サーバー間のトラフィックをキャプチャして変更できるインターセプト プロキシです。安全でないエンドポイント、セッションの欠陥、またはデータ漏洩を見つけるのに最適です。
フリーダ
用途: 実行中のプロセスにフックし、SSL ピンニング、ルート/ジェイルブレイク検出、またはその他のクライアント側の制限を回避するのに役立つ動的インストルメンテーション ツールキット。
一般的なFridaコマンド
アクション | 指示 |
---|---|
実行中のプロセスにアタッチする |
|
実行中のすべてのプロセスを一覧表示する |
|
カスタムスクリプトを挿入する |
|
トレース固有の機能 |
|
特定の関数をフックする |
|
ドロザー(Android)
用途: アクティビティ、サービス、ブロードキャスト レシーバー、コンテンツ プロバイダーなどの Android コンポーネントのセキュリティ上の弱点をスキャンすることに重点を置いています。
一般的なDrozerコマンド
アクション | 指示 |
---|---|
デバイスに接続する |
|
アクティビティを列挙する |
|
エクスポートされたアクティビティを操作する |
|
SQLインジェクションのテスト |
|
異議
使用方法: Frida 上に構築されていますが、SSL ピンニングの無効化やアプリのファイルシステムの調査などのタスク用のよりシンプルなコマンドを備えています。スクリプトの達人でない場合に最適です。
一般的な異議申し立てコマンド
アクション | 指示 |
---|---|
実行中のアプリにアタッチする |
|
SSLピンニングを無効にする |
|
アプリケーション情報を印刷 |
|
Burp Suiteなどのツールを介して Android トラフィックをルーティングすることで、テスターはリクエストを傍受して変更できます。たとえば、アプリが HTTP 経由で認証情報を送信したり、TLS 証明書を適切に検証できなかったりすると、攻撃者が中間者 (MITM)攻撃を実行する可能性があります。
POST /login HTTP/1.1 Host: api.example.com Content-Type: application/json { "username": "test_user", "password": "secret_password" }
セッション トークン、個人データ、または支払い情報が公開されたり、操作されたりする可能性があります。
03-09 12:34:56.789 1234 5678 I MyAppLogger: User token = "abc123XYZ987" 03-09 12:34:56.789 1234 5678 I MyAppLogger: Payment info: "card_number=4111111111111111"
ADB (または悪意のあるアプリ) を持っている人なら誰でもこれらのログを読み取って悪用する可能性があります。
安全でないアクティビティ / コンテンツプロバイダー
Drozer を使用すると、テスターは認証を必要としないエクスポートされたアクティビティまたはコンテンツ プロバイダーを検出できます。
drozer console connect run app.provider.query
content://com.example.app.provider/users
適切な権限なしにデータが返されると、攻撃者がユーザーの情報を読み取ったり変更したりする可能性があります。
FridaやObjectionなどのツールを使用すると、実行時にルート検出や SSL ピンニング チェックをバイパスできます。
frida -U -n com.example.app --eval "..." objection -g com.example.app explore android sslpinning disable android root disable ios sslpinning disable ios root disable
ルート化された携帯電話の攻撃者は、機密機能のテストやフックを継続して実行し、秘密を漏らしたり、アプリのロジックを改ざんしたりすることができます。
多くの iOS アプリは、ジェイルブレイクされた電話を検出すると実行されません。Fridaを使用すると、検出メソッドをフックしてオーバーライドできます。
Interceptor.attach(Module.findExportByName(null, "jailbreakDetectionFunction"), { onEnter: function (args) { console.log("Bypassed jailbreak check!"); // Force return a 'clean' status } });
攻撃者は侵害されたデバイス上でアプリを実行し、データやフックを調べます。
2023-03-09 12:34:56.789 MyApp[1234:5678] Payment info: card_number=4111111111111111 2023-03-09 12:34:56.789 MyApp[1234:5678] session_token=abc123XYZ987
ジェイルブレイクされたデバイスでは、または外部ログ収集を介して、攻撃者は機密データを直接収集します。
モバイル ペネトレーション テストとは何ですか?
実際の攻撃をシミュレートしてモバイル アプリの安全性をテストし、攻撃者よりも先に脆弱性を探します。
モバイル ペネトレーション テストが重要なのはなぜですか?
スマートフォンには膨大な量の個人情報や金融データが保存されているため、サイバー犯罪者にとって格好の標的となっています。
主な手順は何ですか?
どのようなツールが必要ですか?
トラフィック傍受用の Burp Suite または ZAP、スキャン用の MobSF、APKTool/JADX (Android)、Class-Dump/Hopper (iOS)、さらに Frida や Objection などのフック ツール。
どのくらいの頻度でペネトレーションテストを実施すべきでしょうか?
メジャーアップデート、新機能、またはインフラストラクチャの大幅な変更の後。理想的には、継続的なチェックのために CI/CD に統合します。
一般的な脆弱性とは何ですか?
安全でないデータストレージ、HTTPS なし、ハードコードされたシークレット、不十分なセッション管理、および API の構成ミス。
すべてを自動化できますか?
そうではありません。ツールは一部のスキャンを自動化できますが、手動テストでは、より厄介なロジックの欠陥や複雑なビジネス ルールが明らかになります。
Android と iOS の両方をテストする必要がありますか?
はい、それぞれに独自のセキュリティ モデルと落とし穴があります。
ペネトレーションテストは合法ですか?
アプリ所有者から明示的な許可を得ている場合は、もちろん可能です。そうでない場合は違法です。
どこから始めればいいでしょうか?
OWASP モバイル セキュリティ テスト ガイド (MASTG) を学習し、基本的なリバース エンジニアリングを習得し、オープン ソース アプリまたはサンプル ターゲットを使用して練習します。
モバイル ペネトレーション テストは壮大な冒険のようなものです。まず、装備 (ツールとデバイス) を集め、次に地形を偵察し(SAST)、最後に実践的なアプローチ (DAST) ですべての弱点を見つけます。これを定期的に実行し、発見した内容を報告することで、アプリの堅牢性とユーザーの安全を確保できます。
覚えておいてください: ソフトウェアは日々進化しており、脅威も同様です。開発ライフサイクルの継続的な一部としてペネトレーションテストを実施してください。王国を守る最善の方法は、決して油断しないことです。
この記事は、 Sekurnoのセキュリティ テスト エンジニアであるAnastasiia Tolkachovaが作成し、 Sekurnoの CTO であるAlex Rozhniatovskyiがレビューしました。Anastasiiaは、侵入テストとセキュリティ評価の実務経験が 5 年以上あります。彼女は、Web アプリケーション、インフラストラクチャ (オンプレミスとクラウドの両方)、モバイル プラットフォーム (iOS と Android) のテストを専門としています。彼女の専門知識は、ブラック ボックス、グレー ボックス、ホワイト ボックスの方法論に及び、脆弱性評価とソース コード セキュリティ レビューの熟練度も備えています。
Alexは開発とサイバーセキュリティの分野で 7 年間の経験があります。彼は AWS オープンソース コントリビューターであり、安全なコーディング手法の推進に尽力しています。彼の専門知識はソフトウェア開発とセキュリティのギャップを埋め、最新の Web アプリケーションを保護するための貴重な洞察を提供します。