MASTG-TEST-0038 アプリが正しく署名されていることの確認 (Making Sure that the App is Properly Signed)

概要

リリースビルドが適切に署名されていることを確認し、完全性を保護して改竄から保護します。Android は時間とともに署名スキームを進化させており、セキュリティを強化して、新しいバージョンではより堅牢なメカニズムを提供しています。

  • Android 7.0 (API レベル 24) 以降: 少なくとも v2 署名スキーム を使用してください。このスキームは APK 全体を署名し、古い v1 (JAR) 署名方式に比べてより強力な保護を提供します。

  • Android 9 (API レベル 28) 以降: v2 と v3 署名スキーム の両方を使用することをお勧めします。v3 スキームは キーローテーション をサポートしており、侵害が発生した際に開発者は古い署名を無効にすることなくキーを交換できます。

  • Android 11 (API レベル 30) 以降: オプションで v4 署名スキーム を含めると、より高速なインクリメンタルアップデートが可能になります。

v1 署名スキーム (JAR 署名) は安全でないと考えられているため、Android 6.0 (API レベル 23) 以前との後方互換性のために絶対に必要な場合を除き、使用を避けてください。たとえば、Janus 脆弱性 (CVE-2017-13156) の影響を受けて、悪意のあるアクターが v1 署名を無効にすることなく APK ファイルを変更できる可能性があります。そのため、Android 7.0 以上を実行しているデバイスに限っては、v1 は決して信頼すべきではありません。

また、APK のコード署名証明書が有効であり、開発者のものであることを確認する必要があります。

詳しいガイダンスについては、公式の Android アプリ署名ドキュメント と、リリース用アプリを構成する ためのベストプラクティスを参照してください。

静的解析

APK 署名は apksigner ツールで検証できます。[SDK-Path]/build-tools/[version]/apksigner にあります。

$ apksigner verify --verbose example.apk
Verifies
Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): true
Verified using v3.1 scheme (APK Signature Scheme v3.1): false
Verified using v4 scheme (APK Signature Scheme v4): false
Verified for SourceStamp: false
Number of signers: 1

署名証明書の内容も apksigner で調べることができます。

署名構成は Android Studio または、build.gradle または build.gradle.ktssigningConfigs セクションで管理できます。v3 スキームと v4 スキームの両方をアクティブにするには、以下の値をセットする必要があります。

APK v4 署名はオプションであり、それがなくても脆弱性を意味するものではないことに注意してください。これは、開発者が Android 11 以降の ADB 増分 APK インストール を使用して、大規模の APK を迅速にデプロイできるようにするためのものです。

動的解析

APK 署名を検証するには静的解析を使用する必要があります。

Last updated

Was this helpful?