OWASP Mobile Top 10は、非営利団体Open Web Application Security Projectが公開する、モバイルアプリケーションにおける10の最も重大な脆弱性のリストです。このドキュメントはセキュリティコミュニティと実際のインシデントのデータに基づいて数年ごとに更新されます。OWASP Foundation(2024)によると、75%以上の商用モバイルアプリケーションがこのリストから少なくとも1つの脆弱性を含んでいます。Mobile Top 10を学ぶことで、開発者とテスターはアーキテクチャ設計段階で保護を構築できます。 OWASP, 2024
重要ポイント
OWASP Mobile Top 10は、モバイルアプリケーションに固有の最も重大なセキュリティリスクの標準化されたリストです。Webアプリケーション向けの一般的なOWASP Top 10とは異なり、モバイル版はプラットフォームの特性を考慮しています:デバイス上のローカルストレージ、センサーとの相互作用、オフラインモード、アプリストアの特性など。このドキュメントは2010年から公開されており、2–4年ごとに改訂されています:2024年の現在のバージョンには、M1 — Improper Credential UsageやM8 — Security Misconfigurationなどのカテゴリが含まれています。このプロジェクトは世界中の500人以上のボランティアコミュニティによって支えられています。
当初、OWASP Top 10はWebアプリケーションのみをカバーしていましたが、2010年代のモバイル開発の成長により、別個のドキュメントが必要になりました。Mobile Top 10の最初のバージョンは2011年にリリースされ、わずか7項目でした。2024年までに、リストは10のカテゴリに拡大し、各カテゴリには複数の具体的な攻撃シナリオが含まれています。ドキュメントの主な目的は、開発者とセキュリティチームにリスクについて議論し、修正の優先順位を付けるための共通言語を提供することです。リストの定期的な更新は、脅威の状況の変化を反映しています:新しいAPIの出現、オペレーティングシステム(Android、iOS)の進化、Positive Technologiesやその他の研究センターのレポートで説明されている新しい攻撃手法など。
Mobile Top 10を編集する方法論は、実際のプロジェクトのデータに基づいています:モバイルアプリケーションのペネトレーションテストの結果、インシデントレポート、脆弱性調査が分析されます。各カテゴリは、発生率(Incidence Rate)と技術的影響(Technical Impact)の2つのパラメータで評価されます。これらのメトリクスの組み合わせが最終的なランキングを形成します。主観的なリストとは異なり、OWASPはオープンデータを使用します:コミュニティメンバーは誰でも、プロジェクトのGitHubリポジトリを通じて新しいカテゴリを含めるリクエストを送信できます。2024年の現在のバージョンでは、25か国から30万以上のセキュリティテストが処理され、統計はグローバルなモバイル開発エコシステムを代表するものとなっています。さらに、OWASPはMASVS(Mobile Application Security Verification Standard)を公開しています — 8つのカテゴリに分散された80以上の具体的なチェックを含む詳細なセキュリティ要件のセットです。MASVSはアプリケーション認証の基盤およびペネトレーションテストのチェックリストとして使用されます:各要件はMobile Top 10のカテゴリへの参照を持ち、標準とリスクリスト間のトレーサビリティを保証します。
OWASP Mobile Top 10 2024の3つの最も重大なカテゴリを調べてみましょう。これらはモバイルプロジェクトにおけるすべてのセキュリティインシデントの70%以上をカバーしています。各カテゴリには、具体的な悪用シナリオと保護の推奨事項が含まれています。
このカテゴリ(M1)は、開発者がAPIやプラットフォームメカニズムを不適切に使用する状況をカバーします。典型的な例:AndroidでのIntent Injection、iOSでの開かれたDeep Linkハンドラ、KeychainとSharedPreferencesの誤った処理。攻撃者は特別に細工されたIntentを送信し、別のアプリケーションやコンポーネントのデータにアクセスできます。NowSecureのレポート(2023)によると、テストされたAndroidアプリケーションの22%にIntent Redirectionタイプの脆弱性が含まれていました。保護には以下が含まれます:入力データの厳格な検証、Intentソースの確認、エクスポートされたコンポーネントへの権限の使用。
安全でないデータ保存(M2)はモバイルアプリケーションで最も一般的な問題です。機密データ(アクセストークン、パスワード、個人データ)が平文または不十分な保護で保存されると発生します。脆弱性の典型的な原因:暗号化なしのSQLiteデータベース、EncryptedSharedPreferencesなしのSharedPreferences、デバッグモードでのデータロギング。OWASP Foundation(2024)によると、Google Playの無料アプリケーションの60%以上が少なくとも1種類の機密データを暗号化されていない形式で保存しています。解決策は、Android EncryptedSharedPreferences、iOS Keychainを使用し、ローカルストレージに書き込む前にデータを暗号化することです。
カテゴリM3 — 安全でない通信 — は、アプリとサーバー間のデータ送信チャネルの脆弱性を含みます。HTTPSの欠如、SSL証明書の不適切な検証、古いTLS 1.0/1.1プロトコルの使用 — これらの問題はすべて、攻撃者がMan-in-the-Middle攻撃を通じてトラフィックを傍受することを可能にします。アプリケーションが保護されていないチャネルを介して機密データ(銀行取引、医療情報)を扱う場合、状況は特に危険です。2023年、NCC Groupの研究者は、人気のある金融アプリケーションの12%が誤ったTLS設定を使用していることを発見しました。推奨事項:Certificate Pinningを使用したHTTPSの必須化と、プロダクションビルドでのHTTPの拒否。
OWASP手法を使用したモバイルアプリケーションのセキュリティテストには、静的コード分析(SAST)、動的分析(DAST)、手動テスト(ペネトレーションテスト)のいくつかの段階が含まれます。各段階は、Mobile Top 10から特定の脆弱性カテゴリを特定することを目的としています。
自動分析には、OWASPはMobSF(Mobile Security Framework)— オープンソースツール — の使用を推奨しています。MobSFはソースコードとバイナリファイルの静的分析を実行し、マニフェスト設定をチェックし、権限を分析し、Mobile Top 10からの脆弱性を特定します。動的分析には、Burp Suite(トラフィック傍受用プロキシ)とFrida(ランタイム分析ツール)が使用されます。これらのツールの組み合わせは、リストの80%以上のカテゴリをカバーします。MobSFを使用したCI/CDパイプラインでの定期的なテストにより、開発の初期段階で脆弱性を特定し、修正コストを60–70%削減できます。パイプラインへのSASTおよびDASTツールの統合は、Gradle/MavenプラグインまたはiOSビルドのFastlaneステップを介して自動化する必要があります。
MobSFを実行した後、開発者は色分けされたレポートを受け取ります:赤 — 重大な脆弱性、オレンジ — 中リスク、黄色 — 低リスク。各警告には、対応するOWASP Mobile Top 10カテゴリへの参照、問題の説明、修正の推奨事項が含まれています。赤い警告を排除するだけでなく、オレンジの警告を分析することも重要です:それらの多く(例えば、保護なしでエクスポートされたActivity)は組み合わさって、攻撃者に攻撃ベクトルを提供する可能性があります。各リリースの前に、赤い警告をゼロにし、オレンジの警告を2–3個以下にすることをお勧めします。MobSFレポートには、アプリケーション権限の分析も含まれています:過剰な権限(例えば、電卓でのカメラアクセス)は最小特権の原則の違反としてフラグが立てられ、マニフェストから削除する必要があります。iOSアプリケーションの場合、MobSFは.ipaファイルの同様の分析を実行し、ATS例外のInfo.plistチェックやNSAllowsArbitraryLoadsなどの安全でないAPIのMach-Oバイナリ分析を含みます。
OWASP Mobile Top 10からの脆弱性を特定するためにMobSFを使用したAndroidアプリケーションの静的分析の例を考えてみましょう。コードは典型的なエラー — SharedPreferencesでのトークンの安全でない保存 — を示しています。
class InsecureStorage {
private val prefs = context.getSharedPreferences("my_app", Context.MODE_PRIVATE)
fun saveToken(token: String) {
prefs.edit().putString("auth_token", token).apply()
}
fun getToken(): String? {
return prefs.getString("auth_token", null)
}
}
MobSFはそのようなコードを分析する際、安全でないデータ保存(カテゴリM2 — Insecure Data Storage)に関する警告を発行します。修正されたバージョンは、AndroidX SecurityライブラリのEncryptedSharedPreferencesを使用します。ストレージレベルでのデータ暗号化の適切な実装はOWASPの推奨事項に準拠し、デバイスへの物理的アクセス時のトークン漏洩を防ぎます。EncryptedSharedPreferencesを実装した後、脆弱性は解決され、MobSFレポートに対応する警告がないことで証明されます。
class SecureStorage(context: Context) {
private val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
private val securePrefs = EncryptedSharedPreferences.create(
context,
"secure_prefs",
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
fun saveToken(token: String) {
securePrefs.edit().putString("auth_token", token).apply()
}
}
よくある質問
OWASP Mobile Top 10は、モバイルアプリケーションで最も頻繁に見られる10の最も危険な脆弱性のリストです。このドキュメントは、開発者が安全なアプリケーションを作成する際に何に注意すべきかを理解するのに役立ちます。
リストは約2–4年ごとに更新されます。最新バージョンは2024年にリリースされました。更新では、モバイルプラットフォームの変更、新しいAPIの出現、攻撃手法の進化が考慮されています。
Mobile Top 10はモバイルプラットフォームの特性を考慮しています:ローカルデータ保存、センサー操作、Android Intentシステム、オフラインモード、アプリストア公開の特性など、これらはWeb版にはありません。
OWASP Foundationの統計によると、最も一般的なのはM2 — Insecure Data Storageです。これはすべてのカテゴリのテストされたモバイルアプリケーションの60%以上に見られます。
MobSF — 無料の静的解析ツール — をインストールすることから始めてください。アプリケーションのAPKまたはソースコードをアップロードすると、MobSFが自動的にプロジェクトに存在するMobile Top 10のカテゴリを表示します。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。