4

WearableListenerServiceメイン アプリとコンパニオン Wear アプリの両方に を実装しました。サービスはGoogle Play Services によって開始されるため、マニフェストではサービスを として宣言するandroid:exported="true"(またはまったく宣言せずにデフォルトのままにする) 必要があります。true権限のないエクスポートされたサービスは、システム上の任意のアプリから呼び出すことができますが、それを保護するためにサービス宣言に追加する正しい権限が見つかりません。電話と Wear デバイスの両方のアクセス許可を確認しましpm list permissionsたが、必要なものと思われるものは何も表示されません。

  1. サービスを保護するために追加できる/追加すべきアクセス許可はありますか?
  2. そうでない場合は、呼び出し元のパッケージ名を確認してサービスを手動で保護することをお勧めしますか?
4

2 に答える 2

2
  1. サービスを保護するために追加できる/追加すべきアクセス許可はありますか?
  2. そうでない場合は、呼び出し元のパッケージ名を確認してサービスを手動で保護することをお勧めしますか?

WearableListenerServiceアクセス許可や呼び出し元パッケージのチェックで実装を保護することについて心配する必要はありません。@Wayneが彼の答えで指摘したように:there is a security check that happens in the framework. このチェックはWearableListenerService基本クラスで行われます。ウェアラブル SDK の詳細なセキュリティ分析については、 https ://labs.mwrinfosecurity.com/blog/android-wear-security-analysis の記事を参照してください。ここからの引用は次のとおりです。

このメソッドは、pr()まずcom.google.android.gmsGoogle が署名しているcU()かどうかを確認し、次に呼び出しプロセスの UID がパッケージcom.google.android.gms(Google Play Service パッケージ) のものかどうかを確認するために呼び出します。クラスをさらに逆コンパイルすると、 で公開されている各メソッドでこのセキュリティ チェックが発生することがわかりWearableListenerServiceます。

 

残念ながら現在、Lint チェッカーは、フィルターが含まれていない場合は常に、ウェアラブル リスナー サービス宣言に対して誤検知の警告を生成しBIND_LISTENERます (フィルターを含めると、非推奨になり、回避する必要があるため、別の警告が生成されます)。

エクスポートされたサービスでは、エンティティがサービスを起動またはバインドするために必要なアクセス許可を定義する必要があります。これがなければ、どのアプリケーションでもこのサービスを使用できます。

これは確かにセキュリティ検出コードのバグです (BIND_LISTENERインテントが非推奨になったときに更新されなかっただけです)。これに関するイシューを Android バグ トラッカーでオープンしました。一方、警告を取り除くには、tools:ignore="ExportedService"ウェアラブル リスナー サービス宣言に追加する必要があります。

于 2016-09-27T16:37:24.907 に答える