モバイルアプリケーションセキュリティとは何か、なぜ重要なのか?
セキュリティテストの主な目的は、ソフトウェアアプリケーションやシステムにおける脆弱性や弱点を特定し軽減することで、脅威や攻撃から保護することです。しかし、モバイルアプリケーションセキュリティとは何であり、デスクトップやWebアプリケーションのセキュリティ対策とどう違うのでしょうか?モバイルアプリを保護する上で、この概念を理解することは不可欠です。
企業のサービスの66.8%がモバイルアプリケーション経由で消費されていることを考慮すると、これらのアプリのセキュリティをテストし、セキュリティ戦略を確立することは明白です。
企業は、Webアプリケーションやソースコードに使用される汎用ツールを使用してモバイルアプリケーションのセキュリティテストをカバーしたくなるかもしれませんが、モバイル固有のアタックサーフェス(Intents, URL Schemes, Permissions, Cross App Interaction, Shared Preferences...)、特定のクラスの脆弱性、OSの特性、およびモバイルアプリケーションの開発に使用できるフレームワークの数(Native, Flutter, Xamarin, React Native, Cordova, Ionic...)により、そのアプローチはすぐに限界を露呈するでしょう。したがって、「モバイルアプリケーションセキュリティとは何か?」という質問に真に答えるには、これらのモバイル固有の課題や脆弱性を深く理解する必要があります。
モバイルアプリセキュリティテスト(Mobile App Security Testing - MAST)は、モバイルアプリとセキュリティの領域を理解し、デバイスに保存されたデータ、バックエンドに転送されるデータ、およびバックエンドの脆弱性におけるアタックサーフェスを完全にカバーする必要があります。 ネイティブ、ハイブリッド、およびWebベースのモバイルアプリケーションをカバーする必要があります。各フレームワークには、ハードウェアにアクセスして対話するための独自のロジックがあり、正しく理解されていないと実際の危険をもたらす可能性があるためです。
モバイルアプリケーションセキュリティとは?
これは、ネイティブ、ハイブリッド、およびWebベースのモバイルアプリケーションの両方を考慮した包括的なテストを通じて、モバイルアプリケーションのアタックサーフェスを保護するプロセスです。
なぜモバイルアプリケーションセキュリティは重要なのか?
セキュリティの侵害は、データの盗難、金銭的損失、およびユーザーの信頼の失墜につながり、個人や企業に深刻な結果をもたらす可能性があるため、モバイルアプリケーションのセキュリティは極めて重要です。近年、注目を集めるモバイルアプリのハッキングが複数発生しており、モバイルアプリケーションセキュリティの重要性を物語っています。攻撃者がユーザーの携帯電話にスパイウェアをインストールすることを可能にしたWhatsAppのスパイウェア攻撃(2019年のWhatsApp Spyware Attack)や、攻撃者が航空会社のモバイルアプリとWebサイトの脆弱性を介して約38万人のユーザーの個人情報と財務情報にアクセスしたBritish Airwaysアプリ(2018年のBritish Airways App)などがあります。さらに、モバイルアプリケーションを保護することは、マルウェア、不正アクセス、およびその他の脆弱性から身を守るのに役立ち、ユーザーデータの整合性、機密性、可用性が維持されることを保証します。
Task hijacking(タスクハイジャック)は、ユーザーが通常のアプリケーションとやり取りしている間に、悪意のあるアプリケーションに機密データを漏洩させてしまうという、Androidの特定の動作によりモバイルアプリケーションに大きな影響を与えた複数の攻撃の1つです。
バンキングマルウェア(Banking malware)は2019年にタスクハイジャックを広範に悪用し(2020年には45%増加)、攻撃者がオンラインバンキングセッション中にユーザーの機密データや認証情報を傍受することを可能にしました。
また、モバイルアプリケーションはサードパーティの依存関係に大きく依存しているため、脆弱な依存関係によってアプリケーションのセキュリティが弱まるのを防ぐために、これらの依存関係を分析することが必須です。たとえば、最も使用されているDartパッケージの1つであるDioは、複数の深刻度の高い(High severity)問題に見舞われました。このことも、モバイルアプリケーションセキュリティとは何か、なぜそれを適切に管理しなければならないのかという重要性を浮き彫りにしています。
モバイルアプリケーションのセキュリティテストプロセスは、手動で実行することも、多様な手法を採用した自動化ツールを利用して実行することもできます。
- 出典: datareportal.com
モバイルアプリケーションセキュリティをテストする方法
ペネトレーションテスト(Penetration testing)
ペネトレーションテスト(ペンテスト)は、ソフトウェア開発ライフサイクル(SDLC)の後半の段階で、サードパーティのエンティティによって実施される、プロアクティブで体系的なセキュリティ評価プロセスです。テスターは、自動化ツールと手動の手法を使用して、ターゲットアプリケーションの脆弱性、設定ミス、弱点を特定します。
ペンテストは一般的に、規制上の要件を満たすために採用され、多くの場合、限られた時間内で特定の目標に合わせて調整されます。
効果的ではあるものの、費用と時間がかかるプロセスであり、ある時点での限られたビューしかキャプチャしません。モバイルアプリケーションのペンテストの期間は、アプリケーションの複雑さ、テストの深さ、ペンテストのスコープに応じて、通常1〜4週間です。
アプリ開発者は、3〜6週間ごとにアプリケーションストアにアップデートをリリースすることを目指しています。ペンテストをまばらな間隔で実施することは、開発チームのベロシティ(開発速度)と一致せず、ペンテストの期間の間に脆弱性が入り込む可能性があります。
自動化されたモバイルアプリケーションセキュリティテスト
自動化されたモバイルアプリケーションセキュリティテストは、さまざまなツールに依存してソフトウェアを分析し、潜在的な脆弱性を特定します。
自動化ツールは、ソフトウェア開発ライフサイクル(SDLC)にシームレスに統合され、継続的インテグレーションと継続的デリバリー(CI/CD)のパイプラインに組み込まれます。
これらのツールは費用対効果の高いソリューションを提供し、開発チームが定期的かつ迅速で効率的なセキュリティ評価を実施し、検出された問題に速やかに対処できるようにします。 アプリケーションコードの包括的なカバレッジを提供し、幅広いセキュリティの検出結果を発見することができ、潜在的な脅威に対する堅牢な防御を保証します。
自動化されたモバイルアプリケーションセキュリティテストはスケーラブルであり、多くのアプリケーションを抱える開発チームや高い開発ベロシティを持つ開発チームが、開発プロセスに影響を与えることなく変更をテストすることができます。
自動化されたモバイルアプリケーションセキュリティテストを導入している企業の96%が、ストアのセキュリティ要件やコンプライアンスを期限内に満たしており、83%が、高(high)および中(medium)の深刻度の検出結果を修正するというサービスレベル目標(SLO)を達成したと確認しています。
*出典: Gartner
自動化されたモバイルアプリケーションセキュリティテストツールの大きな欠点の1つは、報告される誤検知の数です。そのため、開発者を無駄な検出結果で溢れさせないように、誤検知の割合とポリシーを確認することが重要です。
バグバウンティ(Bug Bounty)
クラウドソーシングによるアプリセキュリティテスト(バグバウンティプログラム)は、モバイルアプリケーションのセキュリティテストのための追加の手段となります。
バグバウンティプログラムは、さまざまな経験レベルを持つ多様なテスターにセキュリティテストを開放することができます。プログラムの人気と評判によりますが、プログラム期間全体を通じてアクティブであるため、カバレッジは網羅的かつ継続的になり、テスターはセキュリティの欠陥を特定するためにさまざまなアプローチを持つことができます。
バグバウンティプログラムは、既存のセキュリティプロトコルに対する価値ある補完として機能しますが、社内のセキュリティプロセスの完全な代替として機能すべきではありません。アプリケーションのセキュリティテストは設計フェーズからリリースまで開始しなければならず、そうしなければ修正プロセスが非効率になり、攻撃者がセキュリティテストの不足を利用してこれらの脆弱性を悪用する可能性があるためです。
大きな課題の1つは、参加者から不正確または低品質の報告が殺到する可能性があることです。これにより、組織と研究者の間で頻繁なやり取りが発生し、時間とリソースが消費される可能性があります。数多くの誤検知や曖昧な報告を分類することはフラストレーションのたまる作業であり、正当なセキュリティ問題の解決を遅らせる可能性があります。
モバイルアプリケーションのセキュリティテスト手法
モバイルアプリケーションのセキュリティテストは、さまざまな手法に依存しており、これらはしばしば静的分析、動的分析、対話型/振る舞い分析、API/バックエンドテストに分類されます。ただし、これらの手法は相互に排他的なものではなく、重なり合う場合があることに留意してください。
静的分析
静的分析は、アプリケーションのソースコードまたはバイナリコード、および追加のリソースを分析して、特定のセキュリティ上の懸念を特定するテスト手法です。
これは、アプリのコードを実行することなく自動検査が可能な、多様な分析手法を通じて達成されます:
- Configuration Checks(設定チェック): 安全でない設定のチェック。これらの設定には、
AndroidManifest.xml、Info.plistの設定、Cordova Frameworkのパラメータ、ネットワーク設定などのプラットフォームパラメータが含まれます。 - 3rd Party Dependencies(サードパーティの依存関係): 既知の脆弱性を持つものを特定するために、アプリケーションの依存関係をフィンガープリント化します。依存関係はプラグインとして直接宣言されるか、アプリケーション内にコンパイルされる場合があります。
OpenSSLの依存関係は、モバイルアプリケーションにおける一般的なユースケースであり、脆弱なバージョンとともに出荷される可能性があります。 - Hardcoded Secrets(ハードコードされたシークレット): モバイルアプリケーションのソースコードに直接埋め込まれている、パスワード、APIキー、または暗号化キーなどのすべての機密情報を抽出します。
Cloud provider(クラウドプロバイダー)のキーやSSHプライベート証明書は、モバイルアプリケーションにおける一般的な深刻な検出結果です。 - Taint Analysis(テイント分析): モバイルアプリのコード内の機密情報(テイント)のフローや、ユーザー入力、システムリソース、ネットワーク通信などの外部エンティティとの対話を特定して追跡するために使用されます。この分析は、データ漏洩、インジェクション攻撃、または機密データの不適切な取り扱いに関連する潜在的なセキュリティ脆弱性を特定するために不可欠です。
動的分析
動的分析は、実際のデバイスまたはエミュレーター/シミュレーター/VM上でアプリケーションの振る舞いを監視するテストアプローチです。この方法は、アプリがサーバーと通信する場合など、アプリがアクティブに実行されているときにのみ顕在化する脆弱性を発見するのに特に有効です。 アプリケーションが実行されている間、動的分析は、機密データ、セッション管理、認証、承認プロセス、およびデータ送信分析に関するセキュリティの欠陥を特定するために、ファイルシステム(ストレージ、データベース)、プロセス間通信(IPC)、メモリアクセス、ネットワークとのすべてのやり取りを監視します。 Googleの統計によると、モバイルアプリケーションの20%が依然としてクリアテキストトラフィック(clear text traffic)を使用して通信しており、41%が不正または安全でないTLS設定を行っています。
対話型/振る舞い分析
動的分析に加えて、振る舞いテストはテストをアクティブに実行しながらアプリケーションの振る舞いを評価します。これはインストルメンテーション(instrumentation)を使用して、アプリ内のデータの流れを追跡および分析し、脆弱なモジュールを呼び出したり危険な引数を使用したりするすべての危険なパターンにフラグを立てます。
モバイルアプリケーションのインストルメンテーションには複数の手法が存在し、フレームワーク(ネイティブOS vs JavaScript vs .NET vs Flutter)に応じてアプリをインストルメントする適切な方法を選択するのは、モバイルアプリケーションセキュリティテスターの判断に委ねられます。
デバイスとの対話は手動または完全に自動化できますが、自動化が望ましく、テストはコード内の最大パスを検証するためにアプリケーションのカバレッジを最大化する必要があります。
API/バックエンド分析
API/バックエンド分析は、モバイルアプリケーションのセキュリティテストに不可欠です。API、バックエンド、および外部通信のスキャンに焦点を当てています。 この分析は、データ交換とデバイスと通信するバックエンドサーバーのセキュリティを評価します。 バックエンド分析の目的:
-
バックエンドサーバーのセキュリティの欠陥をチェックします。バックエンドはモバイルアプリケーションとWebアプリケーションの間で共通であることが多いため、複数の企業がこの部分を評価するために他のツールに依存する場合があります。ただし、一部の前提はWebブラウザによって適用されても、モバイルアプリケーション内では適用されない場合があるため、デバイスの視点から検証することが重要です。 たとえば、Webブラウザを介してアクセスするWebサイトでは、同一生成元ポリシー(
same-origin policy)が適用され、Webコンテンツが同じドメインのバックエンドサーバーとのみやり取りするように制限されます。これは、Webページで実行されているJavaScriptが、異なるドメインのデータに直接アクセスしたり操作したりできないことを意味します。このポリシーは、クロスサイトスクリプティング(XSS)攻撃やデータ侵害を防ぐためのセキュリティレイヤーを提供します。しかし、モバイルアプリケーションのコンテキストでは、この前提が常に適用されるとは限りません。モバイルアプリには、データを共有およびアクセスするためのより柔軟な方法があります。たとえば、ネイティブJavaScriptインターフェース、カスタムURLスキーム(custom URL schemes)、または同一生成元ポリシーの制限をバイパスできる特定のAPIを使用できます。この柔軟性はアプリの機能には有利ですが、潜在的なセキュリティリスクも導入します。 -
アプリケーションから送信されるデータのプライバシーをチェックします。アプリケーションは、広告、アナリティクス(analytics)、監視(monitoring)などにおいてサードパーティに大きく依存しているためです。ユーザーのデバイスから抽出されたデータは侵襲的すぎる場合があり、違法となる可能性があります。 一般的なユースケースは、
デバイスID(device IDs)、デバイスの場所、およびIPを収集するアナリティクスライブラリです。これらは個人を特定できる情報(PII)と見なされ、複数のプライバシー法がこのような慣行から保護しています。
自動化されたモバイルアプリケーションセキュリティテスト用ツールの種類
オープンソーステストツール
オープンソースツールは、モバイルアプリのセキュリティテストを開始するための貴重な出発点を提供します。 その費用対効果、透明性、共同開発により、組織はデジタル防衛を効果的にサポートできます。 サイバーセキュリティのプロファイルのグローバルコミュニティによって育成されたこれらのツールは、多用途性とカスタマイズ性を提供し、幅広いセキュリティテストのニーズをカバーします。
オープンソースのセキュリティテストツールには数多くの利点がありますが、潜在的な欠点を認識しておくことが不可欠です。これらには以下が含まれる場合があります:
- 限られたサポート: オープンソースツールは、商用の対応製品と同じレベルのカスタマーサポートを提供しない場合があります。ユーザーは多くの場合、支援を得るためにコミュニティフォーラムやドキュメントに依存します。
- 急な学習曲線: 一部のオープンソースツールはセットアップと使用が複雑な場合があり、ユーザーにとって大きな学習曲線を必要とします。
- エンタープライズ機能の欠如: 商用ツールはエンタープライズ環境向けに調整された高度な機能や統合オプションを提供する場合がありますが、オープンソースツールはそれらを提供しない場合があります。
- 品質のばらつき: オープンソースツールの品質は大きく異なる場合があり、すべてが重要なセキュリティ評価に適しているとは限りません。
- メンテナンスの課題: 組織は、セキュリティの脆弱性に対処するために、オープンソースツールが定期的に更新およびパッチ適用されていることを確認する必要があります。
- 手作業: モバイルアプリケーションのセキュリティテスト用オープンソースツールは、テスト環境とデバイスの準備、およびテストの実行に多くの手作業を必要とする傾向があります。
- 法的およびライセンスの問題: ユーザーは、オープンソースツールを使用する際のライセンス条項および潜在的な法的考慮事項を知っておく必要があります。
ソースコード分析ツール
複数の企業が、モバイルアプリケーションのセキュリティテストをカバーするためにソースコード分析(SAST)に依存しています。ソースコード分析ツールは、アプリケーションのソースコードの深く徹底的な検査を提供し、潜在的な脆弱性とセキュリティの弱点の早期発見を可能にします。それらは、安全でないデータストレージ(insecure data storage)、不適切な入力検証(improper input validation)、弱い認証メカニズムなどの問題を特定でき、開発者がアプリを展開する前にこれらの懸念事項に対処するのを助けます。さらに、ソースコード分析ツールは開発環境と統合されていることが多く、開発者がワークフローにセキュリティチェックを組み込むのに便利です。ただし、これらのツールはすべての脆弱性、特に実行時の動作(runtime behaviors)やサードパーティの依存関係に関連するものを捕捉できるとは限りません。ソースコード分析ツールの利点を最大化するには、組織はそれらを動的分析やAPI分析テストなどの他のテスト手法と組み合わせて、包括的なモバイルアプリケーションのセキュリティテストを行う必要があります。
モバイル固有のアプリケーションセキュリティテストツール
モバイルアプリケーションの独自のアタックサーフェスをカバーし、OSとフレームワークの特性を確実にサポートするため。開発とリリースのライフサイクル中にアプリケーションで3つの主要なタイプの分析を実行する、専門のモバイルアプリケーションセキュリティスキャナーを選択することをお勧めします。モバイルアプリケーションセキュリティスキャナーは、セキュリティの専門家と開発者の両方がアクセスできるユーザーフレンドリーなインターフェースを提供します。さまざまな既知の脆弱性についてモバイルアプリを迅速にスキャンし、組織が問題を効率的に特定して修復するのを助けます。CI/CDパイプラインとのシームレスな統合を提供し、使用の摩擦を減らします。さらに、それらは一般的に新たな脅威に対処するための定期的な更新を提供し、進化するセキュリティリスクからアプリケーションを保護し続けます。ただし、スキャナーはアプリケーションに固有の独自の脆弱性やカスタマイズされた脆弱性を発見できない場合があり、偽陰性(False Negative)を生成して特定のセキュリティ問題を見逃す可能性があります。これらのツールのコストも、特に小規模な組織にとっては欠点となる場合があります。
Ostorlabは効率的なモバイルアプリケーションセキュリティテスト方法論の実装をどのように支援できるか?
Ostorlabは、モバイルアプリのセキュリティの固有のニーズに合わせた包括的な機能とサービスのスイートを提供することで、効率的なモバイルアプリケーションセキュリティテスト(Mobile Application Security Testing)方法論の実装において極めて重要な役割を果たすことができます。
-
モバイルアプリセキュリティの専門化: Ostorlabはモバイルプラットフォームの課題に焦点を当て、モバイルアプリのセキュリティを専門としています。この専門化により、機能とサービスがモバイル中心の脅威に対処するために細かく調整されていることが保証されます。
-
自動化されたセキュリティテスト: Ostorlabは自動化されたセキュリティテスト機能を提供し、組織がセキュリティ評価を開発パイプラインにシームレスに統合できるようにします。この自動化により、セキュリティチェックがSDLC全体で一貫して適用されることが保証されます。
-
迅速で実用的な洞察: Ostorlabのツールは、モバイルアプリのセキュリティの迅速な評価を提供し、実用的な洞察と推奨事項を提供します。このスピードと明確さにより、開発チームはセキュリティの脆弱性を迅速に特定し、対処することができます。
-
SDLCとの統合: OstorlabはSDLCとの直接統合を促進し、セキュリティテストが開発プロセスの不可欠な部分となるようにします。この統合により、開発者のワークフローの中断が最小限に抑えられます。
-
継続的監視: Ostorlabは、アプリのセキュリティプロファイルの継続的な監視を可能にします。この機能により、チームは異なるビルド間のセキュリティ状態の変化を追跡し、開発中に導入された脆弱性を迅速に特定して修復することができます。
-
包括的なカバレッジ: Ostorlabのソリューションは幅広いセキュリティテスト手法をカバーしており、潜在的な脆弱性についてモバイルアプリを徹底的に検査します。
-
使いやすさ: Ostorlabのユーザーフレンドリーなインターフェースとツールは、セキュリティの専門家と開発者がアクセスしやすいものにしており、コラボレーションと効率的なセキュリティテストを促進します。
-
高品質なサポート: Ostorlabのサポートチームは、ユーザーがモバイルアプリケーション開発のあらゆる段階で抱える可能性のあるすべての問題やリクエストに対して、支援、修正、アドバイスを提供します。
Ostorlabの専門知識とツールを活用することで、組織は開発プロセスにシームレスに統合しながら、進化する脅威からモバイルアプリを保護する堅牢なモバイルアプリケーションセキュリティテスト(Mobile Application Security Testing)方法論を確立することができます。