セキュアコーディング技術:カスタム権限の問題

モバイル開発において、アプリケーションはシステムに対して権限を要求しなければならないことがよくあります。例えば、連絡先へのアクセス、Bluetooth接続、SMS送信機能などが必要になる場合があります。これらはすべてプラットフォーム権限であり、Androidフレームワークによって定義されています。
しかし、これだけでは不十分で、アプリケーション独自のカスタム権限を定義する必要があるケースも存在します。例として、私たちの会社を挙げてみましょう。Secure Code Warriorは、SCWプラットフォームでのユーザーのパフォーマンスを含む、プロファイルの一部としてプライベートデータを保存するアプリを作成するかもしれません。そして、ユーザーが許可すれば、別のセキュリティトレーニングアプリ(例えばDevTrainer)がこのデータを使用できるようにしたいと考えます。これは機密データであり、ユーザーは誰にでも知られたくはないはずですが、SCWAppが完全に隠して保護してしまうと、有用性が損なわれる可能性があります。そこで、ユーザー自身が制御できるようにしたいと考えます。ここでカスタム権限の出番です。
SCWAppがカスタム権限を作成し、DevTrainerがその権限を要求すると、ユーザーはそれを許可するかどうかを決定できます。これは一般的な手法であり、ホワイトリストに登録されたアプリケーションへのアクセスを制限する優れた方法です。
残念ながら、カスタム権限には直感的でない動作がいくつかあり、セキュリティの観点からはリスクを伴います。具体的には、カスタム権限はどのアプリからでもいつでも定義可能であり、「早い者勝ち」という戦略がとられるため、いくつかの問題が生じます。
以下のシナリオでは、前述した2つのアプリプロファイルを定義します(これらすべてのアプリケーションは説明のための架空のものです)。
1. SCWApp:カスタム権限を定義し、その権限を使用してコンポーネントを保護するアプリ。
2. DevTrainer:SCWAppと同じ権限を定義し、その権限の保持をユーザーに宣言するアプリ。
これは「ピアアプリケース」と呼ばれる一般的なシナリオです。もしDevTrainerアプリがSCWAppの単なるプラグインであれば、カスタム権限を定義する必要はありません。この場合、SCWAppがDevTrainerより先にインストールされることが前提となっており、予期せぬ動作は発生しません。もしユーザーが誤ってDevTrainerを先にインストールした場合、権限要求に関する通知は行われません。その後ユーザーがSCWAppをインストールしても、DevTrainerに権限が遡及的に付与されることはないため、DevTrainerアプリが保護されたコンポーネントを使用しようとしても失敗します。
ここで「ピアアプリケース」の問題が生じます。どちらのアプリが先にインストールされるか予測できない場合があるからです。例えば、FacebookとTwitterが互いのコンポーネントを利用したい場合、それぞれが相手のカスタム権限を定義しなければなりません。
しかし、ここが厄介な点です。DevTrainerアプリが先にインストールされると、ユーザーには権限要求の通知が行われません。この時点で、ユーザーへの通知がないにもかかわらず、DevTrainerはカスタム権限を保持し、保護されたコンポーネントにアクセスできてしまいます。
さらに厄介なことに、DevTrainerアプリは権限の保護レベルを変更できてしまいます。Androidは防御側の保護レベルではなく、最初に定義された保護レベルを使用するため、先にインストールされたアプリがレベルを決定できてしまうのです。つまり、DevTrainerが権限レベルを「normal」に変更すれば、今後その権限を要求するアプリはユーザーの確認なしに自動的にアクセス権が付与されることになります。
このシナリオは、cwac-security githubで見られるこの問題の解説に着想を得ています。
「早い者勝ち」戦略には危険な結果が伴います。その動作を知らなければ、開発者は信頼できない入力に基づいてセキュリティ上の決定を下し、意図しないアプリに機密データや保護されたサービスへのアクセスを許してしまう可能性があります。信頼できない入力によるセキュリティ上の決定を避ける方法については、当社のプラットフォームをご覧ください。この動作はAndroid 5.0(Lollipop)以降で変更されました。しかし、現在でも22%以上のAndroidデバイスがそれより古いバージョンで動作しているため、アプリ内で元の動作によるリスクを軽減することが重要です。アプリの初回起動時に権限が既に定義されているかを確認し、その場合はセキュリティリスクを解決するために適切な措置を講じてください。
コーディング頑張ってください。また来週お会いしましょう!
カスタム権限を定義することで、アプリは自身の持つリソースや機能を他のアプリと共有できるようになります。
https://developer.android.com/guide/topics/permissions/defining.html
AI主導の開発をリリース前にガバナンスする
AIを活用したリスク測定、コミット時のセキュアコーディングポリシーの強制、そしてSDLC全体を通じたセキュアなデリバリーの加速を実現します。
他のブログ記事を見る
セキュアコーディング、AIガバナンス、ソフトウェアリスク管理に関する専門的なコンテンツをご覧ください。
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
AIを活用した開発をリリース前にセキュアに
開発者のリスクを可視化し、ポリシーを適用することで、ソフトウェア開発ライフサイクル全体における脆弱性を未然に防ぎます。



.avif)