2016-08-28 12 views
17

パッケージ署名を取得する必要があります。だから私はそれがこのコードを使用して取得:PackageManager.GET_SIGNATURESを使用している場合のAndroid Studioの警告

Signature[] sigs = c.getPackageManager().getPackageInfo(c.getPackageName(), 
    PackageManager.GET_SIGNATURES).signatures; 

しかし、Androidのメーカーは私にこの警告与える:


がgetPackageInfoからアプリの署名を読む:適切に検証されていない場合は、アプリの署名が悪用される可能性がありますが、詳細は問題の説明を参照してください。 less ...(Ctrl + F1) アプリ署名の不適切な検証は、悪意のあるアプリが本物の証明書と偽の証明書の両方を使用してPlayストアに送信し、必要のない機能や情報にアクセスする問題を引き起こす可能性があります別のアプリケーションが偽の証明書をチェックし、残りのものは無視するためです。このメソッドから返されるすべてのシグニチャーを検証するようにしてください。


それは、この場合には署名を検証するためには何を意味するのでしょうか?私は彼らが一致していることを確認するために署名をチェックするつもりです、それは彼らの意味ですか?

ローカルテストでは、すべての出力が単一の負のIntegerであり、コードにはarrayが含まれていません。

+2

私は[問題](http://code.google.com/p/android/issues/detail?id=221143)にこの種の事実について実際のドキュメントを要求しました。私はあなたのアルゴリズムが "署名をチェックする"ために適切である限り、あなたはOKであるべきだと考えます。しかし、私は彼らが警告していることを明確にしていないので、私は確信することはできません。 – CommonsWare

+2

だから、警告が何を意味するのか本当に誰も知りませんか? – Zoe

答えて

11

ポップアップテキストをトレースすると、Android Studioのthis source code fragmentにつながります。
同じファイルには、outernリソースへのリンクを含むa lineがあります。
さらに「偽のID」脆弱性に関する追跡はthis presentationにつながります。

Description of a problem

問題は、Androidは、チェーンの信頼を構築する際に、検証処理のみ「被験者」よりもむしろの詳細内に設けられた一方と実際のキーを比較を比較することです証明書の署名者。結果として、攻撃者は、信頼関係のチェーンをつけて、当事者が実際に署名することなく、当事者が署名すると主張することができます。

このバグにより、不正な証明書チェーンが生成され、実際にアプリケーションに署名するために使用されていない、合法的な証明書がAPKに組み込まれている可能性があります。

the commitは、この脆弱性の使用を防ぐためのAndroidソースコードです。 つまり、デバイスにAndroid 4.4が搭載されている場合、問題は発生していません。下位のAndroid APIデバイスを使用している場合、危険が生じる可能性があります。

+2

これは、証明書が不正にされる可能性のある既知のバグです。それは "自動的に"修正されるのですか、それとも解決するために追加するコードがありますか? – Zoe

+0

KitKat以降、証明書チェーンの置き換えや変更に関する問題は発生しません。しかし、実際にパッケージの証明書フィンガープリントを確認したいのであれば[this](http:// stackoverflow。com/a/22506133/6507689)(APIの下位デバイスで役立つ可能性があります)。 –

関連する問題