ブログ

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

October 25, 2017
ピーター・デ・クレーメル
黒い鍵のアイコンと「Security」という文字が書かれた紙を持つAndroidロボット。

モバイル開発において、アプリケーションはシステムに対して権限を要求しなければならないことがよくあります。例えば、連絡先へのアクセス、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ガバナンス、ソフトウェアリスク管理に関する専門的なコンテンツをご覧ください。

すべて表示
導入事例
フィルターラベル
これはdivブロック内のテキストです。

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.

詳細はこちら
導入事例
フィルターラベル
これはdivブロック内のテキストです。

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

詳細はこちら
導入事例
フィルターラベル
これはdivブロック内のテキストです。

セキュリティ文化の統一:Sageはいかにしてチャンピオンプログラムを構築したか

Sageがどのようにして柔軟かつ関係性を重視したアプローチでセキュリティを強化し、200名以上のセキュリティチャンピオンを育成して、目に見えるリスク低減を実現したのかをご紹介します。

詳細はこちら
ブログ
フィルターラベル
これはdivブロック内のテキストです。

2026年サイバーセキュリティ意識向上月間:企業防衛に不可欠なAIセキュリティの理解

主要なAI企業の多くが、安全対策が追いつくまでの間、AI開発を世界的に減速させるよう公に呼びかける事態となっています。しかし現実には、深刻なセキュリティ問題はすでに顕在化しています。AI導入に伴う金銭的コストやリスクが増大し続ける中、多くのセキュリティリーダーや経営陣は差し迫った状況に追い込まれています。

詳細はこちら
ブログ
フィルターラベル
これはdivブロック内のテキストです。

イネーブラー8:プログラムのブランディング

セキュアコーディングプログラムを成功させるには、優れたコンテンツ以上のものが必要です。イネーブラー8では、ブランディングによって参加を「憧れのステータスを得る体験」へと変える方法を解説します。

詳細はこちら
ブログ
フィルターラベル
これはdivブロック内のテキストです。

すべての従業員が今、AIサイバーセキュリティの最前線に立っている

エンタープライズテクノロジーの状況は、手遅れになるまで誰も予測できなかったほどの速さで変化しています。私たちは今、人間が書いたコードと基本的なコパイロット支援の時代から、エージェント型開発ライフサイクル(ADLC)の時代へと正式に足を踏み入れました。自律型AIエージェントは、複数の機能にわたってかつてない効率性をもたらす一方で、全く新しい種類のセキュリティリスクや規制リスクも引き起こしています。

詳細はこちら

AIを活用した開発をリリース前にセキュアに

開発者のリスクを可視化し、ポリシーを適用することで、ソフトウェア開発ライフサイクル全体における脆弱性を未然に防ぎます。

デモを予約する
該当する項目が見つかりません。