Geçici kod imzalamanın kısıtlamaları nelerdir?


14

Kod veya uygulamaları "ad-hoc" kullanarak imzalamak mümkündür codesign. Man sayfası bize geçici kod imzalama hakkında şunları söyler:

Kimlik tek harf "-" (kısa çizgi) ise, geçici imzalama yapılır. Geçici imzalamada hiçbir kimlik kullanılmaz ve tam olarak bir kod örneği tanımlanır. Geçici imzalı kodun kullanımı için önemli kısıtlamalar geçerlidir; bunu kullanmadan önce belgelere başvurun.

(Vurgu ekledim)

Daha fazla bilgi edinmek istedim ve söz konusu belgeleri bulmaya çalıştım, ancak herhangi bir ayrıntı bulamadım. "Derinlikte macOS Kod İmzalama" adlı teknik bir not buldum , ancak geçici olarak imzalamadan hiç bahsetmiyor.

Bu "önemli kısıtlamalar" nelerdir ve nerede belgelenir?

Yanıtlar:


9

Temel olarak bu bağlamda ad-hoc imzalama, ikili kodun hiçbir şifreleme kanıtı olmadan imzalandığı anlamına gelir.

Esasen ikili dosyalar, CodeDirectory'nin karmasının imzalama kimliğiyle imzalanan mesaj olduğu CMS (kriptografik bir mesaj) eklenerek imzalanır. Bu, bir yabancının kodun gerçekten de bu kimlik için özel anahtarı tutan biri tarafından imzalandığını doğrulayabileceği anlamına gelir.

Programları çalıştırırken, macOS sistemi bu imzaların geçerli olduğunu ve imzalama kimliğine güvendiğini (varsa) programı çalıştırabildiğini doğrulayabilir. GateKeeper işlevselliğinin temelleri budur.

Geçici olarak imzalanmış ikili dosyalar, böyle bir CMS içermedikleri için büyük ölçüde farklıdır. Bunun yerine, CodeDirectory'nin SHA-1 karma değerini, geçerliliğine ilişkin herhangi bir şifreleme kanıtı olmadan ve doğrulanacak sertifika / kimlik yolu olmadan tutar.

CodeDirectory, uygulamanın yapıldığı çeşitli kod parçaları için karma değerlere sahip olarak belirli bir statik kod örneğini tanımlayan bir nesnedir. Şifreleme imzasını doğrulayarak CodeDirectory'nin çıkarılmasını ve uygulamanın çeşitli kod bitlerinin dizinde saklanan karma değerleriyle eşleşmesini sağlayarak, kodun değiştirilmediğini tespit edebilirsiniz.

Şifreleme kanıtı olmadan bu "sıkıştırılmamış" kontrol normal şekilde yapılamaz.

Bunun yerine geçici imzalı ikili dosyalar, SHA-1 karma değeri, çekirdek içindeki statik güven önbelleğinde depolanan "bilinen iyi" karma değerleri listesiyle karşılaştırılarak denetlenir.

Özünde bu, kendiniz geçici olarak imzaladığınız herhangi bir uygulamaya uygulanan "önemli kısıtlamalar" ın, herhangi bir yerde herhangi bir doğrulama geçmeyeceği anlamına gelir. Temel olarak imzasız ikili ile aynıdır.

Bununla birlikte, Apple iseniz, sıradan bir şekilde kodlanmamış ve bunun yerine çekirdek tarafından açıkça güvenilen uygulamalar oluşturabilirsiniz. Örneğin, Apple, tam oturum açma kimlik doğrulamasının çalışmadığı ve çalışmadığı (veya kullanılamadığı) sistem başlangıcında erken bir aşamada çalıştırıldığında uygulamanın geçici olarak kaldırılmasını istiyorsa, geçici imzalamayı kullanabilir. Bu uygulamalar, sertifika deponuzun barındırılıp kullanılmadığına veya başka bir şeye bakılmaksızın, statik güven önbelleği ile her zaman doğrulanabilir.

Pratikte, geçici imzalı ikili dosyalar oluşturmak yalnızca Apple geliştiricileri için pratik değerdir.

Apple'ın geliştirici bölümünde geçici imzalama ile ilgili küçük belgeleri bulabilirsiniz. Örneğin:

https://developer.apple.com/documentation/security/seccodesignatureflags/kseccodesignatureadhoc

Ancak aynı zamanda kod parçacıklarının codeign yardımcı programının kendi kaynak kodunda ve libsecurity için kaynak kodunda da bulabilirsiniz.


Burada "yalnızca Apple geliştiricileri için pratik değer", "yalnızca Apple'da çalışan geliştiriciler için" veya "yalnızca Apple platformlarında çalışan geliştiriciler için" anlamına mı geliyor? Anahtar kelime, ad doğru olsa bile anahtarı bulamadığı yeni bir sorun almaya başladığımızdan ve merak edilmeyen sürümler için tireye geçmeyi düşünüyoruz.
Trejkaz

1
Yalnızca Apple'da çalışan geliştiriciler içindir.
jksoegaard

İOS simülatörünün ayrıca adhoc imzalama kullandığını unutmayın. Adhoc imzalama, Apple'ın dışındaki geliştiriciler için uygulamanın, kod imzası olmadan mümkün olmadığından emin olmadığım yetkileri istemelerini sağlamak için bazı yararlı olabilir (gördüğüm tüm dokümanlar hayır işaret ediyor). Mac'te bu genellikle bir sorun değildir, ancak iOS'ta birçok özellik yetkilerin arkasına yerleştirilmiştir, bu nedenle bunun doğru çalıştığını test etmek iOS geliştiricileri için arzu edilir.
milch

@milch İki alakasız kavramı birleştiriyorsunuz - "adhoc signing" (bu sorunun ne olduğu ile ilgili) ve "adhoc dağılımı" (iOS geliştiricisinin sıkça kullandığı ve haklarını ilgilendirdiği şey vb.)
jksoegaard

Eminim simülatör yapıları adhoc imzalı (dağıtılmamış). Simülatörü için oluşturulmuş bir iOS uygulamasını inceleyerek kontrol edebilirsiniz codesign -dv --verbose=4 /path/to/the.app. Signature=adhocAdhoc imzasını gösteren bir satır geri döneceksiniz . Özellikle, düzenli olarak imzalanmış bir iOS uygulamasında genellikle bulunan AuthorityveTeamIdentifier
milch ''
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.