Uygulama İmzalama

Uygulama imzalama, geliştiricilerin uygulamanın yazarını tanımlamasına ve karmaşık arabirimler ve izinler oluşturmadan uygulamalarını güncellemesine olanak tanır. Android platformunda çalıştırılan her uygulama geliştirici tarafından imzalanmalıdır . İmzalanmadan yüklemeye çalışan uygulamalar, Google Play veya Android cihazdaki paket yükleyici tarafından reddedilecektir.

Google Play'de uygulama imzalama, Google'ın geliştiriciye duyduğu güven ile geliştiricinin uygulamasına duyduğu güven arasında bir köprü oluşturur. Geliştiriciler, uygulamalarının Android cihaza değiştirilmeden sağlandığını bilir; ve geliştiriciler, uygulamalarının davranışlarından sorumlu tutulabilirler.

Android'de uygulama imzalama, bir uygulamayı Uygulama Korumalı Alanına yerleştirmenin ilk adımıdır. İmzalı uygulama sertifikası, hangi kullanıcı kimliğinin hangi uygulamayla ilişkili olduğunu tanımlar; farklı uygulamalar farklı kullanıcı kimlikleri altında çalışır. Uygulama imzalama, bir uygulamanın iyi tanımlanmış IPC aracılığıyla başka bir uygulamaya erişememesini sağlar.

Bir Android cihaza bir uygulama (APK dosyası) yüklendiğinde, Paket Yöneticisi APK'nin bu APK'da bulunan sertifikayla düzgün bir şekilde imzalandığını doğrular. Sertifika (veya daha doğrusu sertifikadaki genel anahtar), cihazdaki başka herhangi bir APK'yı imzalamak için kullanılan anahtarla eşleşirse, yeni APK, bildirimde, UID'yi diğeriyle benzer şekilde paylaşacağını belirtme seçeneğine sahiptir. -imzalı APK'lar.

Uygulamalar bir üçüncü taraf (OEM, operatör, alternatif pazar) tarafından imzalanabilir veya kendinden imzalı olabilir. Android, geliştiricilerin dışarıdan yardım veya izin almadan oluşturabileceği kendinden imzalı sertifikalar kullanarak kod imzalama sağlar. Başvuruların merkezi bir makam tarafından imzalanması gerekmez. Android şu anda uygulama sertifikaları için CA doğrulaması gerçekleştirmemektedir.

Uygulamalar ayrıca, farklı UID'leri ve Uygulama Korumalı Alanlarını korurken yalnızca aynı anahtarla imzalanmış uygulamalara erişimi kısıtlayarak, İmza koruma düzeyinde güvenlik izinleri bildirebilir. Aynı geliştirici anahtarıyla imzalanmış iki veya daha fazla uygulamanın bildirimlerinde paylaşılan bir UID bildirebildiği, paylaşılan UID özelliği aracılığıyla paylaşılan bir Uygulama Korumalı Alanı ile daha yakın bir ilişkiye izin verilir.

APK imzalama şemaları

Android, üç uygulama imzalama şemasını destekler:

Maksimum uyumluluk için uygulamaları önce v1, sonra v2 ve sonra v3 ile tüm şemalarla imzalayın. Android 7.0+ ve daha yeni cihazlar, v2+ şemalarıyla imzalanan uygulamaları yalnızca v1 şemasıyla imzalananlardan daha hızlı yükler. Daha eski Android platformları v2+ imzalarını yok sayar ve bu nedenle uygulamaların v1 imzalarını içermesi gerekir.

JAR imzalama (v1 şeması)

APK imzalama, başından beri Android'in bir parçası olmuştur. İmzalı JAR'a dayanmaktadır. Bu şemayı kullanmayla ilgili ayrıntılar için , Uygulamanızı imzalama ile ilgili Android Studio belgelerine bakın.

v1 imzaları, APK'nın ZIP meta verileri gibi bazı bölümlerini korumaz. APK doğrulayıcının çok sayıda güvenilmeyen (henüz doğrulanmamış) veri yapısını işlemesi ve ardından imzaların kapsamadığı verileri atması gerekir. Bu, oldukça büyük bir saldırı yüzeyi sunar. Ayrıca, APK doğrulayıcı daha fazla zaman ve bellek harcayarak tüm sıkıştırılmış girişleri açmalıdır. Bu sorunları gidermek için Android 7.0, APK Signature Scheme v2'yi tanıttı.

APK İmza Planı v2 ve v3 (v2+ şeması)

Android 7.0 ve sonraki sürümleri çalıştıran cihazlar APK imza şeması v2 (v2 şeması) ve sonraki sürümleri destekler. (v2 şeması, imzalama bloğuna ek bilgiler eklemek için Android 9'da v3'e güncellendi, ancak aksi takdirde aynı şekilde çalışır.) APK'nın içeriği hash'lenir ve imzalanır, ardından elde edilen APK İmzalama Bloğu APK'ya eklenir. Bir uygulamaya v2+ şemasını uygulamayla ilgili ayrıntılar için bkz. APK Signature Scheme v2 .

Doğrulama sırasında v2+ şeması APK dosyasını bir blob olarak ele alır ve tüm dosyada imza denetimi gerçekleştirir. ZIP meta veri değişiklikleri dahil olmak üzere APK'da yapılacak herhangi bir değişiklik APK imzasını geçersiz kılar. Bu APK doğrulama biçimi, önemli ölçüde daha hızlıdır ve daha fazla yetkisiz değişiklik sınıfının algılanmasını sağlar.

Yeni biçim geriye dönük olarak uyumludur, bu nedenle yeni imza biçimiyle imzalanan APK'lar, bu APK'lar da v1 imzalı olduğu sürece eski Android cihazlara (APK'ya eklenen ekstra verileri yok sayar) yüklenebilir.

APK imza doğrulama işlemi

Şekil 1. APK imza doğrulama işlemi

APK'nın tüm dosya karması, APK İmzalama Bloğunda depolanan v2+ imzasıyla doğrulanır. Karma, v2+ imzasını içeren APK İmza Bloğu dışındaki her şeyi kapsar. APK'da APK İmza Bloğu dışında yapılacak herhangi bir değişiklik APK'nın v2+ imzasını geçersiz kılar. V2+ imzası kaldırılmış APK'lar da reddedilir, çünkü v1 imzaları APK'nın v2 imzalı olduğunu belirtir, bu da Android 7.0 ve daha yeni sürümlerin APK'ları v1 imzalarını kullanarak doğrulamayı reddetmesine neden olur.

APK imza doğrulama süreciyle ilgili ayrıntılar için APK Signature Scheme v2'nin Doğrulama bölümüne bakın .