# M8: セキュリティの設定ミス (Security Misconfiguration)

## 脅威エージェント

**アプリケーション依存**

モバイルアプリにおけるセキュリティの設定ミスは脆弱性や認可されていないアクセスにつながる可能性のあるセキュリティ設定、パーミッション、制御の不適切な設定を指します。セキュリティの設定ミスを悪用できる脅威エージェントは、機密データへの認可されていないアクセスや悪意のあるアクションの実行を目的とする攻撃者です。脅威エージェントはデバイスに物理的にアクセスできる攻撃者、デバイス上の悪意のあるアプリであり、セキュリティの設定ミスを悪用してターゲットの脆弱なアプリケーションコンテキスト上で認可されていないアクションを実行します。

## 攻撃手法

**悪用難易度 困難**

モバイルアプリにおけるセキュリティの設定ミスは以下のようなさまざまな攻撃ベクトルを通じて悪用される可能性があります。

* 安全でないデフォルト設定: モバイルアプリは脆弱なセキュリティ設定や不要なパーミッションが有効になっていることがあるデフォルト設定が組み込まれていて、攻撃に対して脆弱になっていることがよくあります。
* 不適切なアクセス制御: アクセス制御の設定ミスにより、認可されていないユーザーが機密データにアクセスしたり、特権的なアクションを実行できる可能性があります。
* 脆弱な暗号化やハッシュ化: 不適切に実装されていたり、脆弱である暗号化およびハッシュ化アルゴリズムが悪用されて、機密情報にアクセスできる可能性があります。
* 安全な通信の欠如: SSL/TLS などの安全な通信プロトコルを使用しないと、機密データが盗聴や中間者攻撃にさらされる可能性があります。
* 保護されていないストレージ: パスワードや API キーなどの機密データを、プレーンテキストや脆弱な暗号化などの安全でない方法で保存すると、認可されていないアクセスにつながる可能性があります。
* 安全でないファイルパーミッション: world-readable や world-writable のパーミッションでアプリケーションファイルを保存します。
* セッション管理の設定ミス: 不適切なセッション管理により、セッションハイジャックを引き起こし、攻撃者が正規ユーザーになりすます可能性があります。

## セキュリティ上の弱点

**普及度 普通**

**検出難易度 容易**

セキュリティの設定ミスは、時間の制約、認識不足、開発の中での人的エラーなどの要因により、モバイルアプリでよく発生します。セキュリティの設定ミスは、手動のコードレビュー、セキュリティテスト、自動スキャンツールを通じて比較的簡単に検出できます。

セキュリティの設定ミスの例としては以下のようなものがあります。

* リリースビルドでデバッグ機能を無効にしないと、機密情報が漏洩する可能性があります。
* HTTPS での安全な通信を強制するのではなく、HTTP などの安全でない通信プロトコルを許可します。
* デフォルトのユーザー名とパスワードを変更しないままにすると、攻撃者が簡単にアクセスできるようになります。
* 不適切なアクセス制御により認可されていないユーザーが特権的なアクションを実行できるようになります。

## 技術的影響

**影響度 深刻**

セキュリティの設定ミスはモバイルアプリに以下のような重大な技術的影響を与える可能性があります。

* 機密データへの認可されていないアクセス: 設定ミスにより、攻撃者はユーザー認証情報、個人データ、機密業務データなどの機密情報にアクセスできる可能性があります。
* アカウントハイジャックやなりすまし: 脆弱であったり設定ミスがある認証メカニズムにより、アカウント乗っ取りや正規ユーザーのなりすましにつながる可能性があります。
* データ侵害: 不適切なセキュリティ設定により、データ侵害が発生し、機密データが認可されていない個人に開示される可能性があります。
* バックエンドシステムの侵害: モバイルアプリの設定ミスにより、攻撃者はバックエンドシステムやインフラストラクチャを侵害する足がかりを提供する可能性があります。

## ビジネスへの影響

**影響度 深刻**

セキュリティの設定ミスは以下のような深刻なビジネスへの影響をもたらす可能性があります。

* 経済的損失: セキュリティの設定ミスに起因する侵害により、法的処罰、規制上の罰金、組織の評判の低下などの経済的損失につながる可能性があります。
* データの損失や窃取: 設定ミスにより、機密データの損失や窃取が発生し、法的影響や経済的影響につながる可能性があります。
* ダウンタイムと中断: セキュリティの設定ミスの悪用により、アプリのダウンタイム、サービスの中断、機能の侵害につながり、ユーザーエクスペリエンスや業務運営に影響を与える可能性があります。
* ブランドの評判へのダメージ: セキュリティインシデントが公表されると、組織の評判が傷つき、顧客の信頼を失い、ビジネスの損失につながる可能性があります。

## 「セキュリティの設定ミス」の脆弱性があるか？

セキュリティのベストプラクティスに従うように適切に設定されていない場合、モバイルアプリはセキュリティの設定ミスに対して脆弱になります。セキュリティの設定ミスに対する脆弱性を示す一般的な指標には以下があります。

* レビューされていないデフォルト設定: セキュリティ設定、パーミッション、デフォルト認証情報をレビューせずにデフォルト設定を使用します。
* 安全な通信の欠如: 暗号化されていないか、弱い暗号化での通信チャネルを使用します。
* 脆弱または存在しないアクセス制御: 機密性の高い機能やデータへの認可されていないアクセスを許可します。
* アップデートやパッチの不備: アプリや基盤となるコンポーネントに必要なセキュリティアップデートやパッチを適用しません。
* 機密データの不適切な保存: 機密データをプレーンテキストや脆弱な保護形式で保存します。
* 安全でないファイルプロバイダのパス設定: アプリケーション内部での使用を目的としたファイルコンテンツプロバイダが他のアプリやユーザーに公開されると、機密データが侵害されたり、アプリケーションリソースへの認可されていないアクセスを許可する可能性があります。
* エクスポートされたアクティビティ: アプリケーション内部での使用を目的としたアクティビティがエクスポートや閲覧可能になると、攻撃対象領域がさらに広がります。

アプリがセキュリティの構成ミスに対して脆弱であるかどうかを判断するには、コードレビュー、セキュリティテスト、設定分析などの徹底的なセキュリティ評価を実施する必要があります。

## 「セキュリティの設定ミス」を防ぐには？

モバイルアプリでのセキュリティの設定ミスを防ぐには、セキュアコーディングと設定のプラクティスに従う必要があります。主な防止策は以下の通りです。

* 安全なデフォルト設定: デフォルト設定と構成が適切に保護されていることを確認し、機密情報を公開したり、不必要なパーミッションを提供しないようにします。
* デフォルト認証情報: ハードコードされたデフォルト認証情報の使用を控えます。
* 安全でないパーミッション: world-readable や world-writable のような過度に寛容なパーミッションでアプリケーションファイルを保存することを避けます。
* 最小権限の原則: アプリケーションが適切に機能するために必要なパーミッションのみを要求します。
* 安全なネットワーク設定: クリアテキストトラフィックを禁止し、可能であれば証明書ピン留めを使用します。
* デバッグの無効化: アプリの製品版ではデバッグ機能を無効にします。
* バックアップモードの無効化 (Android): Android デバイスのバックアップモードを無効にすることで、デバイスのバックアップにアプリデータが含まれないようにし、アプリの機密データがデバイスのバックアップに保存されないようにします。
* エクスポートが必要なアクティビティ、コンテンツプロバイダ、サービスのみをエクスポートすることで、アプリケーションの攻撃対象領域を制限します。

## 攻撃シナリオの例

以下のシナリオはモバイルアプリのセキュリティの設定ミスを示しています。

**シナリオ #1:** 安全でないデフォルト設定

あるモバイルアプリは脆弱なセキュリティ設定を有効にしたデフォルト設定でリリースされます。これには、安全でない通信プロトコルを使用すること、デフォルトのユーザー名とパスワードを変更しないままにすること、リリースビルドでデバッグ機能を無効にしないことなどが含まれます。攻撃者はこのような設定ミスを悪用して、機密データへの認可されていないアクセスを獲得したり、悪意のあるアクションを実行します。

**シナリオ #2:** 安全でないファイルプロバイダのパス設定

あるモバイルアプリはエクスポートされたファイルコンテンツプロバイダのルートパスを公開したため、他のアプリがそのリソースにアクセスできてしまいます。

**シナリオ #3:** 過度に寛容なストレージパーミッション

あるモバイルアプリは world-readable パーミッションでアプリケーション共有プリファレンスを保存したため、他のアプリがそれらを読み取れてしまいます。

**シナリオ #4:** エクスポートされたアクティビティ

あるモバイルアプリは内部使用を目的とした一部のアクティビティをエクスポートしたため、攻撃者にアプリケーションへの余計な攻撃対象領域を与えてしまいます。

**シナリオ #5:** 不要なパーミッション

あるモバイルアプリはそのコア機能に必須ではない過剰なパーミッションを要求します。たとえば、シンプルな懐中電灯アプリがユーザーの連絡先、位置情報、カメラへのアクセスを要求するようなものです。これにより、アプリが許可されたパーミッションを悪用したり、意図しない機密情報を漏洩する可能性があるため、ユーザーデータを不要なリスクにさらしてしまいます。

## 参考資料

* OWASP
  * [OWASP API Security Top 10](https://owasp.org/API-Security/editions/2023/en/0xa8-security-misconfiguration/)
  * [OWASP Top 10](https://owasp.org/Top10/A05_2021-Security_Misconfiguration/)
* その他
  * [External References](http://cwe.mitre.org/)
