コンテンツにスキップ

Insecure Filesystem Access

安全でないファイルシステムアクセス

概要

アプリケーションが安全でないアクセス権限(誰でも読み取り可能、または誰でも書き込み可能)を使用してファイルを処理しているか、権限の弱いSDカードなどの外部メモリデバイスをターゲットにしています。

Androidのセキュリティ設計の考え方によれば、ファイルは情報を持続させるため、または一時的に保存する(キャッシュ)ためにのみ使用され、原則としてプライベートであるべきです。アプリケーション間の情報交換は、ファイルへの直接アクセスではなく、Content ProviderやServiceなどのアプリケーション間連携システムを介して行われるべきです。これにより、アプリケーション間のアクセス制御を実現できます。

誰でも読み取り可能な権限

誰でも読み取り可能な権限(World readable)は、銀行口座の明細やセッションキーの保存ファイルなど、不正な第三者にアクセスされるとリスクをもたらす可能性のある機密情報を保存している場合にリスクをもたらす可能性があります。

誰でも書き込み可能な権限

誰でも書き込み可能な権限(World writable)は、URLリストやセッションパラメータなどの機密性の高いアクションを実行する場合にリスクをもたらす可能性があります。

外部ストレージ

Android 9(APIレベル28)以前をターゲットにしたアプリでgetExternalFilesDir()を使用して外部ストレージにアクセスすると、他のアプリにこれらのファイルを読み書きする権限が与えられます。

Android 10(APIレベル29)以降を搭載したデバイスの外部ストレージ内のファイルにアプリがアクセスする方法が変更されました。Android 10をターゲットとしたアプリの場合、デフォルトで外部ストレージのファイルを表示するためのフィルタリングされたビューが提供されます。各アプリはアプリ固有のディレクトリにアプリファイルを保存でき、作成されたファイルに対して常に読み書きのアクセス権限を持つため、権限を宣言する必要はありません。

推奨事項

  • 原則としてファイルはプライベートファイルとして作成する必要があります: 保存する情報の内容に関わらず、ファイルは原則としてプライベートに設定する必要があります。Androidのセキュリティ設計の観点から、情報の交換とそのアクセス制御は、Content ProviderやServiceなどAndroidシステム内で行うべきであり、それが不可能な理由がある場合は、代替手段としてファイルアクセス権限による置き換えを検討する必要があります。

  • 他のアプリケーションからの読み取り/書き込みアクセスを許可するファイルを作成してはなりません: 他のアプリケーションにファイルの読み取り/書き込みを許可すると、ファイルに保存されている情報を制御できなくなります。そのため、誰でも読み書き可能な公開ファイルを使用した情報共有は、セキュリティと機能/設計の観点の両方から考慮すべきではありません。

  • 外部デバイス(例: SDカード)に保存されたファイルの使用は必要最小限に抑えるべきです: SDカードなどの外部メモリデバイスにファイルを保存することは、セキュリティおよび機能の観点から潜在的な問題を抱えることにつながります。

    • 機密情報は原則として外部メモリデバイスのファイルに保存すべきではありません。
    • 外部メモリデバイスのファイルに機密情報を保存する場合は、暗号化する必要があります。
    • 他のアプリケーションやユーザーによって改ざんされると問題になる情報を外部メモリデバイスのファイルに保存する場合は、電子署名付きで保存する必要があります。
    • 外部メモリデバイスのファイルを読み込む場合は、読み込むデータの安全性を検証してからデータを使用してください。
    • アプリケーションは、外部メモリデバイスのファイルが常に削除される可能性があることを前提として設計する必要があります。
  • 公開アクセス権限の使用は、厳密に必要な場合にのみ使用すべきです。安全でない権限を使用してファイルを共有する代わりに、アプリケーション間でデータを共有する他の手段が推奨されます。

  • アプリケーションはファイルのスコープを考慮して設計する必要があります。

リンク

基準

  • OWASP_MASVS_L1:
    • MSTG_STORAGE_2
  • OWASP_MASVS_L2:
    • MSTG_STORAGE_2
  • CWE_TOP_25:
    • CWE_276
  • PCI_STANDARDS:
    • REQ_2_2
    • REQ_6_2
    • REQ_6_3
    • REQ_7_3
    • REQ_11_3
  • OWASP_MASVS_v2_1:
    • MASVS_STORAGE_2
  • SOC2_CONTROLS:
    • CC_2_1
    • CC_4_1
    • CC_6_1
    • CC_7_1
    • CC_7_2
    • CC_7_4
    • CC_7_5
  • HIPAA_CONTROLS:
    • SECURITY221
    • SECURITY212
    • SECURITY213