SCW アイコン
ヒーロー背景(区切りなし)
ブログ

Sichere Codierungstechnik: Das Problem mit benutzerdefinierten Berechtigungen

ピーテル・デ・クレマー
2017年10月25日 掲載
最終更新日: 2026年3月9日

モバイル向けに開発する場合、アプリケーションはしばしばシステムに何らかの許可を要求しなければなりません。例えば、ユーザーの連絡先へのアクセスや、Bluetooth接続、SMSメッセージの送信などがあります。上述の許可はすべて、Androidフレームワークによって定義されたプラットフォーム許可です。

しかし、これらでは十分ではなく、アプリケーションが独自のカスタムパーミッションを定義する必要がある場合もあります。Secure Code Warrior は、SCWプラットフォーム上でのユーザのパフォーマンスなどのプライベートデータをプロファイルの一部として保存するアプリを作成します。そして、別のセキュリティトレーニングアプリ(例えばDevTrainer)が、ユーザから許可を得た場合に、このデータを使用することを許可したいと思います。これはセンシティブなデータで、ユーザは誰にも知られたくないと思っていますが、SCWAppはそれが有用であるかもしれないので、完全に隠して保護するべきではありません。そのため、ユーザがコントロールできるようにしたいと考えています。ここでカスタムパーミッションの出番です。

SCWAppがカスタムパーミッションを作成し、DevTrainerがこのパーミッションを要求し、ユーザはこれを許可するかどうかを決めることができます。これは一般的な方法で、ホワイトリストに登録されたアプリケーションへのアクセスを制限するのに適した方法です。

残念ながら、カスタムパーミッションには直感的に理解できない動作があり、セキュリティの観点からは危険なものとなっています。具体的には、カスタムパーミッションはどのアプリでもいつでも定義することができ、「先に手を打った者勝ち」となりますが、この戦略にはいくつかの結果が伴います。

以下のシナリオでは、上記で紹介した2つのアプリのプロファイルを定義します(これらのアプリはすべて、デモンストレーションのための架空のものです)。

1. SCWApp: カスタムパーミッションを定義し、そのパーミッションを使用してコンポーネントを防御するアプリです。

2.DevTrainer: このアプリはSCWAppと同じパーミッションを定義し、このパーミッションを保持することをユーザに宣言します。

これは「Peer Apps Case」と呼ばれる一般的なシナリオです。もし、DevTrainerアプリがSCWAppの単なるプラグインであれば、カスタムパーミッションを定義する必要はありません。このケースでは、SCWAppがDevTrainerより先にインストールされ、予期せぬ動作が起こらないことが前提となっています。何らかの方法でユーザがDevTrainerを先にインストールした場合、ユーザにはパーミッションの要求について知らされません。ユーザーが後からSCWAppをインストールした場合、DevTrainerには遡って許可が与えられないため、DevTrainerアプリが保護されたコンポーネントを使用しようとしても失敗します。

ここで登場するのが「Peers App Case」です。場合によっては、一方のアプリが他方のアプリより先にインストールされることを期待できないことがあります。例えば、FacebookとTwitterがお互いのコンポーネントを使用したい場合、お互いのカスタムパーミッションを定義しなければなりません。

しかし、ここからが厄介なのです。DevTrainerアプリが最初にインストールされた場合、ユーザにはカスタム・パーミッションの要求について通知されません。この時点では、ユーザに知らされていないにもかかわらず、DevTrainerはカスタムパーミッションを保持しており、セキュリティで保護されたコンポーネントにアクセスすることができます。

さらにやっかいなことになります。DevTrainerアプリは、パーミッションの保護レベルを変更することができます。Androidは防御側の保護レベルではなく、最初に定義された保護レベルを使用します。つまり、最初にインストールされたアプリが定義できるのです。つまり、DevTrainerがパーミッションレベルを通常に変更した場合、今後このパーミッションを要求するアプリは、ユーザーによる確認を必要とせず、自動的にアクセスが許可されることになります。

このシナリオは、cwac-securityのgithubにあるこの問題の説明からヒントを得ました。

先手必勝」戦略には危険な結果をもたらすものがあり、その動作を知らないと、開発者は信頼できない入力に基づいてセキュリティ上の判断を下し、意図しないアプリに機密データや保護されたサービスへのアクセスを許してしまう可能性があります。信頼できない入力によるセキュリティ上の判断を避けるための詳細については、当社のプラットフォームをご覧ください。この動作は、Android 5.0(Lollipop)で変更されました。しかし、現在、22%以上のAndroidデバイスがまだ低バージョンのAndroidを実行しているため、アプリで元の動作のリスクを軽減することが重要です。アプリの初回実行時にすでにパーミッションが定義されているかどうかを確認し、その場合は適切な対処をしてセキュリティリスクを解決してください。

頑張ってコーディングして、また来週お会いしましょう

カスタムパーミッションを定義することで、アプリはそのリソースや機能を他のアプリと共有することができます。

https://developer.android.com/guide/topics/permissions/defining.html

リソースを表示
リソースを表示

Durch die Definition benutzerdefinierter Berechtigungen kann eine App ihre Ressourcen und Funktionen mit anderen Apps teilen.

もっと知りたいですか?

Forscher für Anwendungssicherheit - Forschungs- und Entwicklungsingenieur - Doktorand

もっと詳しく

Secure Code Warrior 、ソフトウェア開発サイクル全体を通じてコードの安全性を確保し、サイバーセキュリティを最優先とする文化を構築するため、貴社をSecure Code Warrior 。アプリセキュリティ管理者、開発者、CISO、あるいはセキュリティに関わるあらゆる立場の方々に対し、当社が貴社のビジネスにおける不安全なコードに関連するリスクの低減を支援します。

デモを予約する
共有する:
リンクトインのブランドソーシャルx ロゴ
著者
ピーテル・デ・クレマー
2017年10月25日発行

Forscher für Anwendungssicherheit - Forschungs- und Entwicklungsingenieur - Doktorand

共有する:
リンクトインのブランドソーシャルx ロゴ

モバイル向けに開発する場合、アプリケーションはしばしばシステムに何らかの許可を要求しなければなりません。例えば、ユーザーの連絡先へのアクセスや、Bluetooth接続、SMSメッセージの送信などがあります。上述の許可はすべて、Androidフレームワークによって定義されたプラットフォーム許可です。

しかし、これらでは十分ではなく、アプリケーションが独自のカスタムパーミッションを定義する必要がある場合もあります。Secure Code Warrior は、SCWプラットフォーム上でのユーザのパフォーマンスなどのプライベートデータをプロファイルの一部として保存するアプリを作成します。そして、別のセキュリティトレーニングアプリ(例えばDevTrainer)が、ユーザから許可を得た場合に、このデータを使用することを許可したいと思います。これはセンシティブなデータで、ユーザは誰にも知られたくないと思っていますが、SCWAppはそれが有用であるかもしれないので、完全に隠して保護するべきではありません。そのため、ユーザがコントロールできるようにしたいと考えています。ここでカスタムパーミッションの出番です。

SCWAppがカスタムパーミッションを作成し、DevTrainerがこのパーミッションを要求し、ユーザはこれを許可するかどうかを決めることができます。これは一般的な方法で、ホワイトリストに登録されたアプリケーションへのアクセスを制限するのに適した方法です。

残念ながら、カスタムパーミッションには直感的に理解できない動作があり、セキュリティの観点からは危険なものとなっています。具体的には、カスタムパーミッションはどのアプリでもいつでも定義することができ、「先に手を打った者勝ち」となりますが、この戦略にはいくつかの結果が伴います。

以下のシナリオでは、上記で紹介した2つのアプリのプロファイルを定義します(これらのアプリはすべて、デモンストレーションのための架空のものです)。

1. SCWApp: カスタムパーミッションを定義し、そのパーミッションを使用してコンポーネントを防御するアプリです。

2.DevTrainer: このアプリはSCWAppと同じパーミッションを定義し、このパーミッションを保持することをユーザに宣言します。

これは「Peer Apps Case」と呼ばれる一般的なシナリオです。もし、DevTrainerアプリがSCWAppの単なるプラグインであれば、カスタムパーミッションを定義する必要はありません。このケースでは、SCWAppがDevTrainerより先にインストールされ、予期せぬ動作が起こらないことが前提となっています。何らかの方法でユーザがDevTrainerを先にインストールした場合、ユーザにはパーミッションの要求について知らされません。ユーザーが後からSCWAppをインストールした場合、DevTrainerには遡って許可が与えられないため、DevTrainerアプリが保護されたコンポーネントを使用しようとしても失敗します。

ここで登場するのが「Peers App Case」です。場合によっては、一方のアプリが他方のアプリより先にインストールされることを期待できないことがあります。例えば、FacebookとTwitterがお互いのコンポーネントを使用したい場合、お互いのカスタムパーミッションを定義しなければなりません。

しかし、ここからが厄介なのです。DevTrainerアプリが最初にインストールされた場合、ユーザにはカスタム・パーミッションの要求について通知されません。この時点では、ユーザに知らされていないにもかかわらず、DevTrainerはカスタムパーミッションを保持しており、セキュリティで保護されたコンポーネントにアクセスすることができます。

さらにやっかいなことになります。DevTrainerアプリは、パーミッションの保護レベルを変更することができます。Androidは防御側の保護レベルではなく、最初に定義された保護レベルを使用します。つまり、最初にインストールされたアプリが定義できるのです。つまり、DevTrainerがパーミッションレベルを通常に変更した場合、今後このパーミッションを要求するアプリは、ユーザーによる確認を必要とせず、自動的にアクセスが許可されることになります。

このシナリオは、cwac-securityのgithubにあるこの問題の説明からヒントを得ました。

先手必勝」戦略には危険な結果をもたらすものがあり、その動作を知らないと、開発者は信頼できない入力に基づいてセキュリティ上の判断を下し、意図しないアプリに機密データや保護されたサービスへのアクセスを許してしまう可能性があります。信頼できない入力によるセキュリティ上の判断を避けるための詳細については、当社のプラットフォームをご覧ください。この動作は、Android 5.0(Lollipop)で変更されました。しかし、現在、22%以上のAndroidデバイスがまだ低バージョンのAndroidを実行しているため、アプリで元の動作のリスクを軽減することが重要です。アプリの初回実行時にすでにパーミッションが定義されているかどうかを確認し、その場合は適切な対処をしてセキュリティリスクを解決してください。

頑張ってコーディングして、また来週お会いしましょう

カスタムパーミッションを定義することで、アプリはそのリソースや機能を他のアプリと共有することができます。

https://developer.android.com/guide/topics/permissions/defining.html

リソースを表示
リソースを表示

以下のフォームに記入してレポートをダウンロードしてください

当社製品および/またはセキュアコーディングに関連する情報について、お客様にご案内させていただくことをお許しください。お客様の個人情報は常に細心の注意をもって取り扱い、マーケティング目的で他社に販売することは一切ありません。

提出
SCW成功アイコン
SCWエラーアイコン
フォームを送信するには、「アナリティクス」クッキーを有効にしてください。完了後、いつでも無効に戻せます。

モバイル向けに開発する場合、アプリケーションはしばしばシステムに何らかの許可を要求しなければなりません。例えば、ユーザーの連絡先へのアクセスや、Bluetooth接続、SMSメッセージの送信などがあります。上述の許可はすべて、Androidフレームワークによって定義されたプラットフォーム許可です。

しかし、これらでは十分ではなく、アプリケーションが独自のカスタムパーミッションを定義する必要がある場合もあります。Secure Code Warrior は、SCWプラットフォーム上でのユーザのパフォーマンスなどのプライベートデータをプロファイルの一部として保存するアプリを作成します。そして、別のセキュリティトレーニングアプリ(例えばDevTrainer)が、ユーザから許可を得た場合に、このデータを使用することを許可したいと思います。これはセンシティブなデータで、ユーザは誰にも知られたくないと思っていますが、SCWAppはそれが有用であるかもしれないので、完全に隠して保護するべきではありません。そのため、ユーザがコントロールできるようにしたいと考えています。ここでカスタムパーミッションの出番です。

SCWAppがカスタムパーミッションを作成し、DevTrainerがこのパーミッションを要求し、ユーザはこれを許可するかどうかを決めることができます。これは一般的な方法で、ホワイトリストに登録されたアプリケーションへのアクセスを制限するのに適した方法です。

残念ながら、カスタムパーミッションには直感的に理解できない動作があり、セキュリティの観点からは危険なものとなっています。具体的には、カスタムパーミッションはどのアプリでもいつでも定義することができ、「先に手を打った者勝ち」となりますが、この戦略にはいくつかの結果が伴います。

以下のシナリオでは、上記で紹介した2つのアプリのプロファイルを定義します(これらのアプリはすべて、デモンストレーションのための架空のものです)。

1. SCWApp: カスタムパーミッションを定義し、そのパーミッションを使用してコンポーネントを防御するアプリです。

2.DevTrainer: このアプリはSCWAppと同じパーミッションを定義し、このパーミッションを保持することをユーザに宣言します。

これは「Peer Apps Case」と呼ばれる一般的なシナリオです。もし、DevTrainerアプリがSCWAppの単なるプラグインであれば、カスタムパーミッションを定義する必要はありません。このケースでは、SCWAppがDevTrainerより先にインストールされ、予期せぬ動作が起こらないことが前提となっています。何らかの方法でユーザがDevTrainerを先にインストールした場合、ユーザにはパーミッションの要求について知らされません。ユーザーが後からSCWAppをインストールした場合、DevTrainerには遡って許可が与えられないため、DevTrainerアプリが保護されたコンポーネントを使用しようとしても失敗します。

ここで登場するのが「Peers App Case」です。場合によっては、一方のアプリが他方のアプリより先にインストールされることを期待できないことがあります。例えば、FacebookとTwitterがお互いのコンポーネントを使用したい場合、お互いのカスタムパーミッションを定義しなければなりません。

しかし、ここからが厄介なのです。DevTrainerアプリが最初にインストールされた場合、ユーザにはカスタム・パーミッションの要求について通知されません。この時点では、ユーザに知らされていないにもかかわらず、DevTrainerはカスタムパーミッションを保持しており、セキュリティで保護されたコンポーネントにアクセスすることができます。

さらにやっかいなことになります。DevTrainerアプリは、パーミッションの保護レベルを変更することができます。Androidは防御側の保護レベルではなく、最初に定義された保護レベルを使用します。つまり、最初にインストールされたアプリが定義できるのです。つまり、DevTrainerがパーミッションレベルを通常に変更した場合、今後このパーミッションを要求するアプリは、ユーザーによる確認を必要とせず、自動的にアクセスが許可されることになります。

このシナリオは、cwac-securityのgithubにあるこの問題の説明からヒントを得ました。

先手必勝」戦略には危険な結果をもたらすものがあり、その動作を知らないと、開発者は信頼できない入力に基づいてセキュリティ上の判断を下し、意図しないアプリに機密データや保護されたサービスへのアクセスを許してしまう可能性があります。信頼できない入力によるセキュリティ上の判断を避けるための詳細については、当社のプラットフォームをご覧ください。この動作は、Android 5.0(Lollipop)で変更されました。しかし、現在、22%以上のAndroidデバイスがまだ低バージョンのAndroidを実行しているため、アプリで元の動作のリスクを軽減することが重要です。アプリの初回実行時にすでにパーミッションが定義されているかどうかを確認し、その場合は適切な対処をしてセキュリティリスクを解決してください。

頑張ってコーディングして、また来週お会いしましょう

カスタムパーミッションを定義することで、アプリはそのリソースや機能を他のアプリと共有することができます。

https://developer.android.com/guide/topics/permissions/defining.html

ウェビナーを見る
始めましょう
もっと詳しく

以下のリンクをクリックして、このリソースのPDFをダウンロードしてください。

Secure Code Warrior 、ソフトウェア開発サイクル全体を通じてコードの安全性を確保し、サイバーセキュリティを最優先とする文化を構築するため、貴社をSecure Code Warrior 。アプリセキュリティ管理者、開発者、CISO、あるいはセキュリティに関わるあらゆる立場の方々に対し、当社が貴社のビジネスにおける不安全なコードに関連するリスクの低減を支援します。

レポートを見るデモを予約する
PDFをダウンロード
リソースを表示
共有する:
リンクトインのブランドソーシャルx ロゴ
もっと知りたいですか?

共有する:
リンクトインのブランドソーシャルx ロゴ
著者
ピーテル・デ・クレマー
2017年10月25日発行

Forscher für Anwendungssicherheit - Forschungs- und Entwicklungsingenieur - Doktorand

共有する:
リンクトインのブランドソーシャルx ロゴ

モバイル向けに開発する場合、アプリケーションはしばしばシステムに何らかの許可を要求しなければなりません。例えば、ユーザーの連絡先へのアクセスや、Bluetooth接続、SMSメッセージの送信などがあります。上述の許可はすべて、Androidフレームワークによって定義されたプラットフォーム許可です。

しかし、これらでは十分ではなく、アプリケーションが独自のカスタムパーミッションを定義する必要がある場合もあります。Secure Code Warrior は、SCWプラットフォーム上でのユーザのパフォーマンスなどのプライベートデータをプロファイルの一部として保存するアプリを作成します。そして、別のセキュリティトレーニングアプリ(例えばDevTrainer)が、ユーザから許可を得た場合に、このデータを使用することを許可したいと思います。これはセンシティブなデータで、ユーザは誰にも知られたくないと思っていますが、SCWAppはそれが有用であるかもしれないので、完全に隠して保護するべきではありません。そのため、ユーザがコントロールできるようにしたいと考えています。ここでカスタムパーミッションの出番です。

SCWAppがカスタムパーミッションを作成し、DevTrainerがこのパーミッションを要求し、ユーザはこれを許可するかどうかを決めることができます。これは一般的な方法で、ホワイトリストに登録されたアプリケーションへのアクセスを制限するのに適した方法です。

残念ながら、カスタムパーミッションには直感的に理解できない動作があり、セキュリティの観点からは危険なものとなっています。具体的には、カスタムパーミッションはどのアプリでもいつでも定義することができ、「先に手を打った者勝ち」となりますが、この戦略にはいくつかの結果が伴います。

以下のシナリオでは、上記で紹介した2つのアプリのプロファイルを定義します(これらのアプリはすべて、デモンストレーションのための架空のものです)。

1. SCWApp: カスタムパーミッションを定義し、そのパーミッションを使用してコンポーネントを防御するアプリです。

2.DevTrainer: このアプリはSCWAppと同じパーミッションを定義し、このパーミッションを保持することをユーザに宣言します。

これは「Peer Apps Case」と呼ばれる一般的なシナリオです。もし、DevTrainerアプリがSCWAppの単なるプラグインであれば、カスタムパーミッションを定義する必要はありません。このケースでは、SCWAppがDevTrainerより先にインストールされ、予期せぬ動作が起こらないことが前提となっています。何らかの方法でユーザがDevTrainerを先にインストールした場合、ユーザにはパーミッションの要求について知らされません。ユーザーが後からSCWAppをインストールした場合、DevTrainerには遡って許可が与えられないため、DevTrainerアプリが保護されたコンポーネントを使用しようとしても失敗します。

ここで登場するのが「Peers App Case」です。場合によっては、一方のアプリが他方のアプリより先にインストールされることを期待できないことがあります。例えば、FacebookとTwitterがお互いのコンポーネントを使用したい場合、お互いのカスタムパーミッションを定義しなければなりません。

しかし、ここからが厄介なのです。DevTrainerアプリが最初にインストールされた場合、ユーザにはカスタム・パーミッションの要求について通知されません。この時点では、ユーザに知らされていないにもかかわらず、DevTrainerはカスタムパーミッションを保持しており、セキュリティで保護されたコンポーネントにアクセスすることができます。

さらにやっかいなことになります。DevTrainerアプリは、パーミッションの保護レベルを変更することができます。Androidは防御側の保護レベルではなく、最初に定義された保護レベルを使用します。つまり、最初にインストールされたアプリが定義できるのです。つまり、DevTrainerがパーミッションレベルを通常に変更した場合、今後このパーミッションを要求するアプリは、ユーザーによる確認を必要とせず、自動的にアクセスが許可されることになります。

このシナリオは、cwac-securityのgithubにあるこの問題の説明からヒントを得ました。

先手必勝」戦略には危険な結果をもたらすものがあり、その動作を知らないと、開発者は信頼できない入力に基づいてセキュリティ上の判断を下し、意図しないアプリに機密データや保護されたサービスへのアクセスを許してしまう可能性があります。信頼できない入力によるセキュリティ上の判断を避けるための詳細については、当社のプラットフォームをご覧ください。この動作は、Android 5.0(Lollipop)で変更されました。しかし、現在、22%以上のAndroidデバイスがまだ低バージョンのAndroidを実行しているため、アプリで元の動作のリスクを軽減することが重要です。アプリの初回実行時にすでにパーミッションが定義されているかどうかを確認し、その場合は適切な対処をしてセキュリティリスクを解決してください。

頑張ってコーディングして、また来週お会いしましょう

カスタムパーミッションを定義することで、アプリはそのリソースや機能を他のアプリと共有することができます。

https://developer.android.com/guide/topics/permissions/defining.html

目次

PDFをダウンロード
リソースを表示
もっと知りたいですか?

Forscher für Anwendungssicherheit - Forschungs- und Entwicklungsingenieur - Doktorand

もっと詳しく

Secure Code Warrior 、ソフトウェア開発サイクル全体を通じてコードの安全性を確保し、サイバーセキュリティを最優先とする文化を構築するため、貴社をSecure Code Warrior 。アプリセキュリティ管理者、開発者、CISO、あるいはセキュリティに関わるあらゆる立場の方々に対し、当社が貴社のビジネスにおける不安全なコードに関連するリスクの低減を支援します。

デモを予約するダウンロード
共有する:
リンクトインのブランドソーシャルx ロゴ
リソースハブ

入門リソース

さらに多くの投稿
リソースハブ

入門リソース

さらに多くの投稿