開発者じゃなくてもたった10秒で保安の心配無用! 

デモのお申し込み

OWASP Mobile Top 10 2024 – モバイルアプリのセキュリティにおける最も重大な脆弱性への対処ガイド

2024年にOWASPが発表した最新のモバイルアプリケーションのトップ10脆弱性を確認し、モバイルセキュリティの脆弱性を改善する方法について学びましょう。

OWASP mobile top 10 risks

 

OWASP Mobile Top 10 2024 – モバイルアプリのセキュリティにおける最も重大な脆弱性への対処ガイド

モバイルアプリの直感的な機能や洗練されたインターフェースは、優れたユーザー体験を提供し、開発者の収益を最大化するために欠かせません。しかし、華やかな機能やデザインの裏側では、ユーザーの個人情報が簡単に流出する可能性があります。アプリの成功したリリースや継続的な運用も重要ですが、セキュリティの向上は、アプリの開発者とユーザーの双方にとって欠かせない要素です。

しかし、セキュリティへのアプローチを誤ると、深刻な事態を招く可能性があります。不適切なモバイルセキュリティが適用されたアプリでは、ユーザーが企業への信頼を失う恐れがあります。これに対処するために、世界的な非営利団体である「Open Worldwide Application Security Project(OWASP)」は、組織のセキュリティ体制を強化するためのさまざまな無料のオープンソースツールやドキュメント、リソースを提供しています。
その中でも特に有名なプロジェクトの一つが「OWASP Mobile Top 10」であり、アプリケーションセキュリティリスクへの認識を高める上で重要な役割を果たしています。

以下は、2024年にOWASPが新たに発表したモバイルアプリケーションのトップ10脆弱性です。

OWASP Mobile Top 10 2024 

M1:不適切な認証情報の使用
M2:不十分なサプライチェーンセキュリティ
M3:安全でない認証/認可
M4:不十分な入出力バリデーション
M5:安全でない通信
M6:不十分なプライバシー管理
M7:不十分なバイナリ保護
M8:セキュリティ設定の不備
M9:安全でないデータ保存
M10:不十分な暗号化

 

では、OWASP Mobile Top 10 2024の詳細を見ていきましょう。

(出典:https://owasp.org/www-project-mobile-top-10/ より抜粋)

1. 不適切な認証情報の使用

開発者が作成するコードやスクリプトでは、さまざまなリソースにアクセスしたり、他のアプリケーションやツールと連携したりするために、認証情報(SSHキーやAPIトークンなど)やパスワードが必要になることがよくあります。
開発作業を効率化するために、開発者がコード内にこうした機密情報を直接記述してしまうケースが少なくありません。このように認証情報がハードコーディングされると、コードにアクセスできる誰もが機密情報を閲覧できてしまいます。

認証情報を安全に管理するためには、ハードコーディングを避け、以下のような管理対策を講じる必要があります。

 

- 適切な対策

認証情報は送信時に暗号化する。
ユーザーの認証情報をデバイスに保存しない。代わりに、安全で失効可能なアクセス トークンの使用を検討する。
強力なユーザー認証プロトコルを実装する。
使用しているAPIキーやトークンは定期的に更新・ローテーションする。

 

2. 不十分なサプライチェーンセキュリティ

 モバイルアプリのサプライチェーンに脆弱性があると、攻撃者がコードベースに悪意のあるコードを挿入したり、ビルドプロセス中にコードを改ざんしてバックドアやスパイウェア、その他のマルウェアを組み込んだりする可能性があります。これにより、データの窃取、ユーザーの監視、モバイルデバイスの制御が可能になります。

特に、サードパーティが開発したモバイルアプリや、サードパーティ製のライブラリやコンポーネントに依存する場合に、こうした脅威が発生しやすくなります。
アプリ開発者がサードパーティ製コンポーネントを適切に検査・更新しない場合、これらの攻撃に対して脆弱になります。

 

- 適切な対策

  • モバイルアプリの開発ライフサイクル全体にわたり、安全なコーディング手法、コードレビュー、テストを実施し、脆弱性を特定・軽減する。
  • 安全なアプリ署名および配布プロセスを確立し、攻撃者による悪意あるコードの署名や配布を防止する。
  • 信頼できる検証済みのサードパーティライブラリやコンポーネントのみを使用し、脆弱性のリスクを低減する。
  • アプリの更新・パッチ・リリースに関するセキュリティ管理を確立し、攻撃者によるアプリの脆弱性悪用を防ぐ。
  • セキュリティテストやスキャン、その他の手法を通じてサプライチェーンのセキュリティインシデントを監視・検知し、インシデントに迅速に対応できる体制を整える。

 

3. 安全でない認証/認可

 攻撃者は、認証や認可システムの脆弱性を悪用し、モバイルアプリの認証を偽装またはバイパスする可能性があります。認証システムに欠陥があったり、そもそも実装されていなかったりすると、攻撃者はバックエンドサーバーを介して匿名でモバイル機能を実行することができます。
ユーザーの本人確認ができなければ、攻撃元の特定も困難になり、直接的なリスクにさらされることになります。

モバイルアプリのセキュリティを評価するには、「認証」と「認可」の違いを理解することが重要です。
認証は個人を特定するためのものであり、認可は特定の行為に必要な権限を持っているかを確認するものです。

以下は、モバイルアプリにおける不適切な認証および認可の例です。

 

- 不適切な認証

匿名でのバックエンドAPI実行
パスワードや共有シークレットをローカルに保存
弱いパスワードポリシー
FaceIDやTouchIDなどの機能への依存

 

- 不適切な認可

不適切な直接オブジェクト参照(IDOR)脆弱性の存在
隠されたエンドポイントの存在
ユーザーのロールや権限情報をバックエンドシステムに送信する仕組み

 

- 適切な対策

Webアプリからモバイルアプリへ移行する際は、認証要件を適切に整合させる。
認証リクエストは、可能な限りサーバーサイドで処理する。
クライアント側にデータを保存する必要がある場合は、ユーザーログイン情報から安全に導出された暗号鍵を使用してデータを暗号化する。
ユーザーには、デバイス上にパスワードを保存しないよう推奨する。
認証・認可の制御はサーバー側で強化する。
オフライン環境でローカル認証や認可チェックを行う場合は、不正なコード改ざんを検知するためにローカル整合性チェックを実施する。
バックエンドシステム側で、認証済みユーザーの権限や承認を独立して検証する。また、すべてのクライアント側認証はバイパスされる可能性があるものと想定し、可能な限りサーバーサイドでの認証・認可を強化する。

4. 不十分な入出力バリデーション

モバイルアプリがユーザー入力やネットワークデータなどの外部ソースからのデータを適切に検証しない場合、SQLインジェクション、コマンドインジェクション、XSS攻撃など、モバイル環境に特化した攻撃に脆弱になる可能性があります。攻撃者はシステムにアクセスし、アプリ内で不正なコードを実行したり、許可なくデータを抽出したりすることができ、アプリ機能やモバイルシステム全体を制御する可能性があります。

 

- 適切な対策

  • 入力バリデーション: 厳格なバリデーション技術を使用してユーザー入力を検証およびサニタイズします。入力の長さ制限を実施し、予期しないデータや悪意のあるデータを拒否します。
  • 出力サニタイズ: クロスサイトスクリプティング(XSS)攻撃を防ぐために、出力データを適切にサニタイズします。データを表示または送信する際には、出力エンコーディング技術を使用します。
  • コンテキストに応じたバリデーション: パス・トラバーサルやインジェクション攻撃を防ぐために、データのコンテキスト(例:ファイルアップロード、データベースクエリ)に基づいて特定のバリデーションを実施します。
  • データ整合性チェック: データの破損や不正な変更を検出・防止するために、データ整合性チェックを実装します。
  • セキュアコーディングの実践: SQLインジェクションを防ぐために、パラメータ化されたクエリや準備されたステートメントを使用するなど、セキュアコーディングの実践を徹底します。
  • 定期的なセキュリティテスト: 定期的にセキュリティ評価を実施し、ペネトレーションテストやコードレビューを通じて脆弱性を特定し、対応します。

 

5. 安全でない通信

モバイルアプリは、1つ以上のリモートサーバーとデータを交換します。通常、モバイルデバイスはTCP/IP、WiFi、Bluetooth/Bluetooth-LE、NFC、オーディオ、赤外線、GSM、3G、SMSなど、さまざまな通信技術を使用してデータを送信します。しかし、ローカルネットワークが侵害されたり、ネットワークデバイスやモバイルデバイスに悪意のあるコードが挿入されたりすると、アカウントの乗っ取り、個人情報の盗難、個人を特定できる情報(PII)の漏洩など、さまざまな被害が発生する可能性があります。

特に注目すべき特徴は、デバイス間で交換される機密データ(暗号鍵、パスワード、個人ユーザー情報、アカウント詳細、セッショントークン、文書、メタデータ、バイナリファイルなど)の交換です。このような場合、一部のデータが傍受されるリスクがあります。

 

- 適切な対策

  • モバイルアプリのバックエンドAPIまたはWebサービスのデータ送信チャネルにSSL/TLSを適用します。アプリケーションがブラウザ/WebKitを介してルーチンを実行する際、第三者の分析会社やソーシャルネットワークなどの外部エンティティをSSLバージョンを使用して記述します。混在SSLセッションは、ユーザーのセッションIDを露出させる可能性があるため避けます。
  • 適切な鍵長を持つ業界標準の暗号化製品を使用します。信頼できるCAプロバイダに署名された証明書を使用し、無効な証明書(自己署名、期限切れ、信頼されていないルート、取り消し、誤ったホストなど)は受け入れないようにします。
  • 敏感なデータを代替チャネル(例:SMS、MMS、通知など)で送信しないようにします。可能であれば、SSLチャネル経由で敏感なデータを送信する前に追加の暗号化レイヤーを適用します。将来のSSL実装で脆弱性が発見された場合、暗号化されたデータは機密性違反に対する二次的な防御となります。開発サイクル中は、信頼できない証明書を許可するようにSSL検証方法を再定義するのではなく、自己署名証明書またはローカル開発認証局(CA)を使用します。

 

6. 不十分なプライバシー管理

個人を特定できる情報(PII)の保護は、名前、住所、クレジットカード情報、メールアドレス、IPアドレス、さらには健康、宗教、性的嗜好、政治的意見に関する情報を守ることを含みます。攻撃者はこの情報を悪用して、被害者になりすました詐欺を行ったり、支払いデータを不正に使用したり、敏感な情報で脅迫したり、重要な被害者データを破壊または操作したりすることがあります。PIIを取得するためには、攻撃者はまずネットワークやファイルシステム、ログアクセスなど他のセキュリティレベルを突破する必要があります。

 

- 適切な対策

  • 処理されるPIIを最小限に抑える。
  • 必要不可欠でない限り、PIIを保存したり送信したりしない。
  • 重要なデータは、適切な認証および認可によって保護する。

 

불충분한 개인 정보 보호 제어

 

7. 不十分なバイナリ保護

アプリのバイナリには、商用APIキーやハードコードされた暗号化シークレットなどの重要な情報が含まれている場合があります。さらに、バイナリ内のコードは、重要なビジネスロジックや事前学習済みAIモデルを含んでいるため、独自に重要な価値を持つことがあります。攻撃者は情報収集だけでなく、アプリバイナリを操作して有料機能への無料アクセスを得たり、最悪の場合、人気のあるアプリを改変して悪意のあるコードを含むアプリとして再配布することもできます。

すべてのアプリはバイナリ攻撃に脆弱です。バイナリ攻撃は、バイナリに機密データやアルゴリズムがハードコードされている場合や、アプリが非常に人気がある場合に特に深刻になります。コードの難読化、ネイティブコードの暗号化(Androidの場合)などの対策がアプリを保護できますが、完全無欠な防御策は存在しません。

 

- 適切な対策

  • リバースエンジニアリング防止: リバースエンジニアリングを防ぐためには、攻撃者がアプリのバイナリを理解できないようにする必要があります。これには、コードの難読化やコード暗号化技術の導入が有効です。
  • セキュリティメカニズムの破壊防止: 攻撃者はアプリの制御フロー全体を理解し、セキュリティチェックを回避する必要があります。そのため、暗号化や難読化は非常に有益です。また、ローカルセキュリティチェックはバックエンドでも強化すべきです。例えば、保護された機能に必要なリソースは、ローカルおよびバックエンドで検証された場合にのみダウンロードするようにします。最後に、整合性チェックを実施してコード改ざんやアプリの再配布、改変を検出します。

 

8. セキュリティ設定ミス

これは、モバイルアプリにおけるセキュリティ設定、権限、制御の不適切な設定を指し、これにより不正アクセスが発生する可能性があります。例えば、セキュリティ設定、権限、デフォルトの資格情報を確認せずにデフォルト設定を使用すること、暗号化されていない通信チャネルを使用すること、セキュリティアップデートやパッチを無視すること、安全でないファイルプロバイダパス設定などが挙げられます。

 

- 適切な対策

  • 安全なデフォルト設定: デフォルトの設定や構成が適切に保護されており、機密情報を露出させたり、不必要な権限を与えたりしないようにします。
  • デフォルト資格情報: ハードコードされたデフォルト資格情報の使用は避けます。
  • 不適切な権限設定: 過度に許可された権限(世界中の誰でも読み取り可能や書き込み可能な権限など)でアプリケーションファイルを保存しないようにします。
  • 最小権限の原則: アプリケーションの正常な機能に必要な権限のみを要求します。
  • 安全なネットワーク設定: 平文トラフィックを許可せず、可能であれば証明書ピンニングを使用します。
  • デバッグ機能の無効化: アプリの本番版でデバッグ機能を無効化します。
  • バックアップモードの無効化(Android): Androidデバイスでバックアップモードを無効にすることで、アプリデータがデバイスのバックアップに含まれるのを防ぎ、アプリの機密データがデバイスバックアップに保存されないようにします。
  • アプリケーションの攻撃対象面を制限: 必要なアクティビティ、コンテンツプロバイダ、およびサービスのみをエクスポートするようにします。

 

9. 不適切なデータ保存

データが安全に保存されていない場合、ハッカーによる直接的なデータ抽出や機密情報の傍受など、さまざまな攻撃にさらされることになります。したがって、暗号化、セキュアな通信プロトコル、徹底的なセキュリティ対策が、ハッカーが機密データに簡単にアクセスできないようにするために必要不可欠です。

 

-不適切なデータ保存

  • アクセス制御の欠如
  • 不十分な暗号化
  • 意図しないデータ露出
  • 不適切なセッション管理
  • 不十分な入力検証
  • クラウドストレージの設定ミス
  • サードパーティライブラリの脆弱性
  • 意図しないデータ共有

 

-適切な対策

  • 強力な暗号化を使用する: 敏感なデータを静止状態と転送中の両方で保護するために、堅牢な暗号化アルゴリズムと方法を実装します。業界標準の暗号化アルゴリズムを使用し、暗号化キーが安全に保存および管理されていることを確認します。

  • セキュアなデータ送信: モバイルアプリケーションとバックエンドサーバー間でのデータ転送時に、HTTPSやSSL/TLSなどの安全な通信プロトコルを使用します。セキュリティが確保されていないチャネルで機密データを送信しないようにします。

  • セキュアなストレージ機構を実装する: 敏感なデータを、認可されていないユーザーがアクセスできない安全なストレージ場所に保存します。モバイルオペレーティングシステムが提供するプラットフォーム固有のセキュアストレージ機構(例:Keychain(iOS)やKeystore(Android))を使用します。

  • 適切なアクセス制御を実施する: 敏感なデータへの不正アクセスを制限するために、強力なアクセス制御を実装します。ユーザーを安全に認証し、役割ベースのアクセス制御を強制し、敏感な情報へのアクセスを許可する前にユーザーの権限を検証します。

  • 入力検証とデータサニタイズを実施する: インジェクション攻撃を防ぐために、入力検証とデータサニタイズ技術を実施し、有効で予想されるデータのみが保存されることを確保します。悪意のあるコード注入や意図しないデータ漏洩のリスクを軽減するために、ユーザー入力を検証します。

  • セキュアなセッション管理を適用する: ランダムに生成されたセッショントークンを使用する、適切なセッションタイムアウトを設定する、クライアントおよびサーバー側でセッションデータを安全に保存するなど、セキュアなセッション管理技術を実装します。

  • 依存関係の定期的な更新とパッチ適用: すべてのライブラリ、フレームワーク、サードパーティ依存関係を最新の状態に保ちます。これらには、セキュリティ脆弱性が含まれている可能性があり、不適切なデータ保存を引き起こす可能性があります。関連するベンダーから提供されたセキュリティパッチやアップデートを定期的に適用します。

  • 最新情報を保持する: モバイルアプリケーションのセキュリティ脅威や脆弱性について最新情報を保ちます。セキュリティフォーラムやセキュリティアドバイザリー、モバイルプラットフォームの更新を監視し、新たなリスクに対する迅速な対応を確保します。

 

 

안전하지 않은 데이터 저장

 

10. 不十分な暗号化

 十分な暗号化が欠如していると、データ漏洩やユーザーアカウントへの不正アクセス、機密性の侵害、データの改ざんや偽造が発生する可能性があります。

 

-不十分な暗号化

  • 弱い暗号化アルゴリズム
  • 不十分な鍵の長さ
  • 不適切な鍵管理
  • 不完全な暗号化実装
  • データ/暗号化鍵の不適切な保存
  • 安全でないトランスポート層
  • 不十分な検証および認証
  • ソルトが欠如している

 

-適切な対策

  • 強力な暗号化アルゴリズムの使用: AES(Advanced Encryption Standard)、RSA(Rivest-Shamir-Adleman)、または楕円曲線暗号(ECC)など、広く認められた安全な暗号化アルゴリズムを実装します。現在の暗号基準に最新情報を保ち、廃止されたり弱いアルゴリズムは避けます。

  • 十分な鍵長の確保: 強力な暗号強度を確保するために、適切な長さの暗号鍵を選定します。使用する暗号アルゴリズムに応じて業界の推奨に従います。

  • 安全な鍵管理の実践: 鍵の保管にキー・ボールトやハードウェア・セキュリティ・モジュール(HSM)などの安全な鍵管理技術を使用します。鍵が不正アクセスされないようにし、認可された担当者にアクセスを制限し、鍵は静止状態でも暗号化して保管し、安全な鍵配布メカニズムを利用します。

  • 暗号化の正しい実装: モバイルアプリケーション内で暗号化と復号化プロセスを慎重に実装し、確立された暗号ライブラリやフレームワークに従います。カスタム暗号化実装はエラーや脆弱性に繋がりやすいため避けます。

  • 暗号化鍵の安全な保管: 暗号化鍵はモバイルデバイスに安全に保管します。平文で鍵を保存したり、簡単にアクセスできる場所に保管することは避けます。モバイルオペレーティングシステムが提供する安全な保管メカニズムを利用するか、ハードウェアベースの安全な保管オプションを考慮します。

  • 安全な通信層の利用: 暗号化されたデータをネットワーク越しに送信する際、HTTPS(HTTP Secure)などの安全な通信層プロトコルを使用します。適切な証明書検証を実施し、モバイルアプリとバックエンドシステム間で安全な通信チャネルを確保します。

  • 検証と認証: 暗号化プロセスに関与する当事者の整合性と認証を確認するため、強力な検証と認証メカニズムを実装します。証明書やデジタル署名など、認証に使用するメカニズムの適切な検証を行います。

  • セキュリティ対策の定期的な更新: 暗号ライブラリやフレームワーク、プラットフォーム提供者からのセキュリティ更新、パッチ、推奨事項について情報を常に得て、モバイルアプリケーションと基盤となる暗号化コンポーネントを最新の状態に保ちます。

  • セキュリティテストの実施: 徹底的なセキュリティテストを行い、暗号脆弱性評価、ペネトレーションテスト、コードレビューを実施します。テスト中に発見された脆弱性を修正します。

  • 業界標準とベストプラクティスの遵守: 暗号化に関する業界標準とベストプラクティスを常に最新の状態に保ちます。NIST(国立標準技術研究所)やIETF(インターネット技術調整委員会)などの団体は、安全な暗号化実践に関するガイドラインと推奨事項を提供しています。

  • 強力なハッシュ関数の使用: SHA-256やbcryptなど、広く認識されている暗号的に安全なハッシュ関数を選択します。これらのアルゴリズムは攻撃に強く、高いセキュリティレベルを提供します。

  • ソルトの実装: パスワードをハッシュ化する際には、常に強力でランダムなソルトを使用します。ソルトは攻撃者が事前計算されたテーブルやレインボーテーブルを使用してパスワードを解読するのを困難にするため、セキュリティ層を追加します。

  • 鍵導出関数(KDF)の使用: パスワードのハッシュ化には、PBKDF2、bcrypt、scryptなどの鍵導出関数を使用します。これらの関数は、パスワードから暗号鍵を安全に導出するように設計されており、総当たり攻撃を遅延させるための反復回数など、追加のセキュリティ機能を提供します。

モバイルアプリケーションは多くの敏感なデータを含んでおり、個人情報もその一部です。そのため、OWASP財団はセキュリティの脆弱性に対する開発者の認識を高め、セキュリティインシデントを防ぐためのリソースを提供することで、セキュリティリスクを減少させたり、問題を解決することを目指しています。

Lockin社は、強力なアプリセキュリティサービスを提供するためのさまざまな方法とサービスを提供しています。モバイルアプリセキュリティサービスであるLIAPPを通じて、ソースコードの難読化や暗号化機能を提供することで、バイナリ難読化やDEXおよびSOの暗号化など、重要なコードを暗号化することにより、アプリの解析から強力に保護します。また、SSLピニング機能を提供することで、アプリが通信中に使用するHTTPS証明書を確認し、証明書検査を回避してネットワークパケット解析を防ぐことができます。

ユーザーの重要なデータを一度限りのランダムなキーを使用して暗号化するモバイルアプリセキュリティキーパッドサービス「LIKEY」を体験してください。これにより、ユーザーの入力を安全に保護します。

LIAPPチームは、OWASP Mobile Top 10リストのセキュリティ脆弱性に対応したい企業向けに専門的なコンサルティングを提供します。

#OWASP #mobile_app_protector #android_mobile_app_protector #mobile_game_application_protection #Mobile_App_Security #Mobile_App_Security_Solution #Anti_Tampering #Obfuscation#Encryption #Binary Obfuscation #Detecting_Bypassing_Authentication #SecureKeypad #LIKEY #LIAPP #LIAPP