Kod imzalama - Code signing

Kod imzalama dijital süreçtir imzalama çalıştırılabilir dosyalar ve Kodlar yazılım yazarını onaylamak ve kodun imzalandığından beri değiştirilmediğini veya bozulmadığını garanti etmek için. İşlem, bir kriptografik karma özgünlüğü ve bütünlüğü doğrulamak için.[1]

Kod imzalama birçok değerli özellik sağlayabilir. Kod imzalamanın en yaygın kullanımı, dağıtım sırasında güvenlik sağlamaktır; bazı programlama dillerinde, ad alanı çakışmalarını önlemeye yardımcı olmak için de kullanılabilir. Hemen hemen her kod imzalama uygulaması, yazarın veya derleme sisteminin kimliğini doğrulamak için bir tür dijital imza mekanizması sağlayacaktır ve sağlama toplamı nesnenin değiştirilmediğini doğrulamak için. Bir nesne hakkında sürüm bilgisi sağlamak veya bir nesne hakkındaki diğer meta verileri depolamak için de kullanılabilir.[2]

Yazılım için bir kimlik doğrulama mekanizması olarak kod imzalamanın etkinliği, temel imzalama anahtarlarının güvenliğine bağlıdır. Diğerlerinde olduğu gibi genel anahtar altyapısı (PKI) teknolojilere bakıldığında, sistemin bütünlüğü yayıncıların özel anahtarlarını yetkisiz erişime karşı korumalarına dayanır. Genel amaçlı bilgisayarlarda yazılımda saklanan anahtarlar tehlikeye açıktır. Bu nedenle, anahtarları donanım güvenlik modülleri olarak bilinen güvenli, kurcalamaya dayanıklı, kriptografik donanım aygıtlarında saklamak daha güvenlidir ve en iyi uygulamadır. HSM'ler.[3]

Güvenlik sağlamak

Birçok kod imzalama uygulaması, bir genel ve bir özel anahtar çiftini içeren bir sistemi kullanarak kodu imzalamak için bir yol sağlar. TLS veya SSH. Örneğin, .NET durumunda geliştirici, her derlediklerinde kitaplıklarını veya yürütülebilir dosyalarını imzalamak için özel bir anahtar kullanır. Bu anahtar, bir geliştiriciye veya gruba veya bazen uygulama veya nesne başına benzersiz olacaktır. Geliştirici bu anahtarı kendi başına oluşturabilir veya güvenilir bir Sertifika yetkilisi (CA).[4]

Kod imzalama, belirli bir kod parçasının kaynağının hemen ortaya çıkmayabileceği dağıtılmış ortamlarda özellikle değerlidir - örneğin Java uygulamaları, ActiveX kontroller ve diğer aktif web ve tarayıcı komut dosyası kodu. Diğer bir önemli kullanım, mevcut yazılıma güvenli bir şekilde güncelleme ve yamalar sağlamaktır.[5] pencereler, Mac OS X, ve en Linux dağıtımları Yama sistemi aracılığıyla başkalarının kötü niyetli olarak kod dağıtmasının mümkün olmadığından emin olmak için kod imzalamayı kullanarak güncellemeler sağlamak. Güncelleme üçüncü şahıslar veya fiziksel medya (diskler) tarafından teslim edilmiş olsa bile, alıcı işletim sisteminin güncellemenin yasal olduğunu doğrulamasına izin verir.

Kod imzalama, Windows ve Mac OS X'te yazılımın kimliğini doğrulamak için kullanılır. ilk çalıştırma, yazılımın üçüncü taraf bir dağıtımcı veya indirme sitesi tarafından kötü amaçla değiştirilmediğinden emin olmak. Bu kod imzalama biçimi, platformun merkezi olmayan yapısı nedeniyle Linux'ta kullanılmaz. Paketleme yöneticisi tüm yazılım türleri için (sadece güncellemeler ve yamalar değil) ve aynı zamanda baskın dağıtım modu olmak açık kaynak modeli istenirse kaynak kodunun doğrudan incelenmesine izin verir. Debian tabanlı Linux dağıtımları (diğerlerinin yanı sıra) indirilen paketleri açık anahtar şifreleme kullanarak doğrular.[6]

Bir sertifika yetkilisi (CA) kullanarak güvenilir kimlik

Genel anahtar kod imzasının kimliğini doğrulamak için kullanılan, güvenilir bir kök yetkili CA'sına kadar izlenebilir olmalıdır, tercihen güvenli bir Açık Anahtar Altyapısı (PKI). Bu, kodun kendisinin güvenilir olmasını sağlamaz, yalnızca belirtilen kaynaktan (veya daha açık bir şekilde, belirli bir Özel anahtar ).[7] CA, bir kök güven düzeyi sağlar ve diğerlerine proxy aracılığıyla güven atayabilir. Bir kullanıcı bir CA'ya güvenirse, kullanıcı büyük olasılıkla bu CA veya onun proxy'lerinden biri tarafından oluşturulan bir anahtarla imzalanan kodun meşruiyetine güvenebilir. Çoğu işletim sistemi ve çerçeve, bir veya daha fazla sertifika yetkilisi için yerleşik güven içerir. Ayrıca, büyük kuruluşların, genel CA'larla aynı özellikleri sağlayan, kuruluşun içinde özel bir CA uygulaması da olağandır, ancak yalnızca kuruluş içinde güvenilmektedir.

Genişletilmiş doğrulama (EV) kod imzalama

Genişletilmiş doğrulama (EV) kod imzalama sertifikaları ek doğrulama ve teknik gereksinimlere tabidir. Bu yönergeler CA / B Forumunun Temel Gereksinimlerine ve Genişletilmiş Doğrulama Yönergelerine dayanmaktadır. EV'ye özgü doğrulama gereksinimlerine ek olarak, EV kodu imzalama yönergeleri "Abonenin özel anahtarının FIPS 140-2 düzey 2 gereksinimlerini karşılayan veya aşan bir kripto modülünde üretildiğini, saklandığını ve kullanıldığını" şart koşar.[8]

Windows 10 çekirdek modu sürücülerini imzalamak gibi belirli uygulamalar, bir EV kod imzalama sertifikası gerektirir.[9] Ek olarak, Microsoft'un IEBlog'u, "bir EV kod imzalama sertifikası ile imzalanan Windows programlarının, Akıllı ekran söz konusu dosya veya yayıncı için önceden bir itibara sahip olmasa bile itibar hizmetleri. " [10]

Örnek EV kodu imzalama sertifikası

Bu, yazılımı imzalamak için SSL.com tarafından kullanılan kodu çözülmüş bir EV kodu imzalama sertifikası örneğidir. SSL.com EV Kodu İmzalama Ara CA RSA R3 Düzenleyicinin ortakAdı olarak gösterilir ve bunu bir EV kodu imzalama sertifikası olarak tanımlar. Sertifikanın Konu alanı bir kuruluş olarak SSL Corp'u tanımlar. Kod İmzalama tek X509v3 Genişletilmiş Anahtar Kullanımı olarak gösterilir.

Sertifika: Veri: Versiyon: 3 (0x2) Seri Numarası: 59: 4e: 2d: 88: 5a: 2c: b0: 1a: 5e: d6: 4c: 7b: df: 35: 59: 7d İmza Algoritması: sha256WithRSAEncryption Verici: commonName = SSL.com EV Code Signing Intermediate CA RSA R3 kurumAdı = SSL Corp yerellikAdı = Houston stateOrProvinceName = Texas countryName = ABD Geçerlilik Öncesi Değil: 30 Ağu 20:29:13 2019 GMT Sonra Değil: 12 Kasım 20:29:13 2022 GMT Konu: 1.3.6.1.4.1.311.60.2.1.3 = US 1.3.6.1.4.1.311.60.2.1.2 = Nevada streetAddress = 3100 Richmond Ave Ste 503 businessCategory = Özel Kuruluş postaKodu = 77098 commonName = SSL Corp seriNumarası = NV20081614243 kuruluşAdı = SSL Corp localityName = Houston stateOrProvinceName = Texas countryName = ABD Konu Genel Anahtar Bilgisi: Genel Anahtar Algoritması: rsaEncryption Açık Anahtar: (2048 bit) Modül: 00: c3: e9: ae: be: d7: a2: 6f: 2f: 24 .. . Üs: 65537 (0x10001) X509v3 uzantıları: X509v3 Yetkili Anahtar Tanımlayıcı: keyid: 36: BD: 49: FF: 31: 2C: EB: AF: 6A: 40: FE: 99: C0: 16: ED: BA: FC : 48: DD: 5F Yetkili Bilgi Erişimi: CA Verenler - URI: http: //www.ssl.com/repository/SSLcom-SubCA-EV-CodeSigning-RSA-4096-R3.crt OCSP - URI: http: // ocsps.ssl.com X509v3 Sertifika Politikaları: Politika: 2.23.140.1.3 Politika: 1.2.616.1.113527.2.5.1.7 Politika: 1.3.6.1.4.1.38064.1.3.3.2 CPS: https: //www.ssl. com.tr / repository X509v 3 Genişletilmiş Anahtar Kullanımı: Kod İmzalama X509v3 CRL Dağıtım Noktaları: Tam Ad: URI: http: //crls.ssl.com/SSLcom-SubCA-EV-CodeSigning-RSA-4096-R3.crl X509v3 Konu Anahtar Tanımlayıcı: EC: 6A : 64: 06: 26: A7: 7A: 69: E8: CC: 06: D5: 6F: FA: E1: C2: 9A: 29: 79: DE X509v3 Anahtar Kullanımı: kritik Dijital İmza İmza Algoritması: sha256WithRSAEncryption 17: d7 : a1: 26: 58: 31: 14: 2b: 9f: 3b ...

CA'lara alternatif

Diğer model, geliştiricilerin kendi ürettikleri anahtarları sağlamayı seçebilecekleri yerdir. Bu senaryoda, kullanıcının, nesnenin ilk kez kendilerinden geldiğini doğrulamak için normalde ortak anahtarı bir şekilde doğrudan geliştiriciden alması gerekir. Çoğu kod imzalama sistemi, ortak anahtarı imzanın içinde saklar. Yürütmeden önce kodun imzasını kontrol eden bazı yazılım çerçeveleri ve işletim sistemleri, ilk çalıştırmadan sonra o noktadan itibaren bu geliştiriciye güvenmeyi seçmenize olanak tanır. Bir uygulama geliştiricisi, ortak anahtarları yükleyiciye dahil ederek benzer bir sistem sağlayabilir. Daha sonra anahtar, yükseltmeler, eklentiler veya başka bir uygulama gibi çalıştırılması gereken sonraki nesnelerin hepsinin aynı geliştiriciden geldiğinin doğrulanmasını sağlamak için kullanılabilir.

Zaman damgası

Zaman damgası, süresi dolmuş bir sertifika durumunda görünecek güven uyarısını atlatmak için tasarlanmıştır. Gerçekte, zaman damgası kod güvenini bir sertifikanın geçerlilik süresinin ötesine uzatır.[11]

Bir uzlaşma nedeniyle bir sertifikanın iptal edilmesi gerektiğinde, riske atan olayın belirli bir tarihi ve saati iptal kaydının bir parçası olacaktır. Bu durumda, zaman damgası, kodun sertifikadan önce mi yoksa sonra mı imzalandığının belirlenmesine yardımcı olur.[11]

Kod girişi Xcode

Geliştiricilerin, iOS ve tvOS uygulamalarını herhangi bir gerçek cihazda çalıştırmadan önce ve Uygulama mağazası. Bu, geliştiricinin geçerli bir Apple Geliştirici Kimliğine sahip olduğunu kanıtlamak için gereklidir. Bir uygulamanın cihazlarda çalışabilmesi için geçerli bir profile veya sertifikaya ihtiyacı vardır.

Problemler

Herhangi bir güvenlik önlemi gibi, kod imzalama da yenilebilir. Kullanıcılar, imzasız kod çalıştırmaları için kandırılabilir veya hatta doğrulamayı reddeden kodu çalıştırabilir ve sistem yalnızca özel anahtar gizli kaldığı sürece güvenli kalır.[12][13]

Ayrıca, kod imzalamanın son kullanıcıyı herhangi bir kötü amaçlı faaliyetten veya yazılım yazarının kasıtsız yazılım hatalarından korumadığına dikkat etmek önemlidir - yalnızca yazılımın, yazar dışında herhangi biri tarafından değiştirilmemesini sağlar. Bazen, korumalı alan sistemleri, yanlış zaman damgası nedeniyle veya aşırı kullanım nedeniyle sertifikaları kabul etmez. Veri deposu.

Uygulamalar

Microsoft, Microsoft tarafından test edilen sürücüler için sağlanan bir kod imzalama biçimi (Authenticode'a dayalı) uygular. Sürücüler çekirdekte çalıştıkları için sistemi kararsız hale getirebilir veya sistemi güvenlik açıklarına açabilirler. Bu nedenle Microsoft, kendi WHQL programı. Sürücü geçtikten sonra Microsoft, sürücünün bu sürümünü güvenli olarak imzalar. Yalnızca 32-bit sistemlerde, Microsoft ile doğrulanmamış sürücülerin yüklenmesi, kullanıcıyı kodun imzasız olduğu konusunda uyaran bir istemde kuruluma izin vermeyi kabul ettikten sonra mümkündür. .NET (yönetilen) kod için, adında ek bir mekanizma vardır. Güçlü İsim İmzalama Genel / Özel anahtarları kullanan ve SHA Sertifikaların aksine -1 hash. Ancak Microsoft, Authenticode yerine Kesin Ad İmzalamaya güvenilmesini önermemektedir.[14]

Oyun ve tüketici cihazlarında imzasız kod

Gibi tüketici cihazları bağlamında oyun konsolları "İmzasız kod" terimi, genellikle ile imzalanmamış bir uygulamaya atıfta bulunmak için kullanılır. şifreleme anahtarı normalde yazılımın kabul edilmesi ve yürütülmesi için gereklidir. Çoğu konsol oyununun, konsol üreticisi tarafından tasarlanan gizli bir anahtarla imzalanması gerekir, aksi takdirde oyun konsola yüklenmez. Yazılım dahil olmak üzere, imzasız kod elde etmenin birkaç yöntemi vardır. istismarlar, kullanımı modchip olarak bilinen bir teknik takas numarası veya koşuyor softmod.

İmzalanmış bir uygulamayı başka bir DVD'ye kopyalamanın neden önyüklemeye izin vermediği başlangıçta açık görünmeyebilir. Üzerinde Xbox, bunun nedeni, Xbox yürütülebilir dosyasının (XBE), XBE'nin önyüklenebilir olduğu ortam türünü belirten bir ortam türü bayrağı içermesidir. Neredeyse tüm Xbox yazılımlarında bu, yürütülebilir dosyanın yalnızca fabrikada üretilen disklerden önyükleneceği şekilde ayarlanır, bu nedenle yürütülebilir dosyayı yazdırılabilir ortama kopyalamak, yazılımın yürütülmesini durdurmak için yeterlidir.

Bununla birlikte, yürütülebilir dosya imzalandığından, yalnızca bayrağın değerini değiştirmek mümkün değildir, çünkü bu, yürütülebilir dosyanın imzasını değiştirerek kontrol edildiğinde doğrulamada başarısız olmasına neden olur.

Ayrıca bakınız

Referanslar

  1. ^ "Kod İmzalamaya Giriş".
  2. ^ Hendric William (2015). "Güvenilir Sertifikalara Genel Bakış - CABForum" (PDF). Alındı 2015-02-26.
  3. ^ "Kod İmzalama Sertifikaları için En İyi Uygulama Olarak Gizli Anahtarlarınızı Koruma" (PDF).
  4. ^ Hendric, William (17 Haziran 2011). "Kod İmzalama nedir?". Alındı 26 Şubat 2015.
  5. ^ "Dijital İmzalar ve Windows Installer".
  6. ^ https://wiki.debian.org/SecureApt
  7. ^ https://casecurity.org/wp-content/uploads/2013/10/CASC-Code-Signing.pdf
  8. ^ "Genişletilmiş Doğrulama Kodu İmzalama Sertifikalarının Verilmesi ve Yönetimi İçin Yönergeler" (PDF). CA / Tarayıcı Forumu. Alındı 4 Aralık 2019.
  9. ^ "Sürücü İmzalama Politikası". Microsoft. Alındı 9 Aralık 2019.
  10. ^ "Microsoft SmartScreen ve Genişletilmiş Doğrulama (EV) Kod İmzalama Sertifikaları". Microsoft. Alındı 9 Aralık 2019.
  11. ^ a b Morton, Bruce. "Kod İmzalama" (PDF). CASC. Alındı 21 Şubat 2014.
  12. ^ http://blog.trendmicro.com/fake-antivirus-solutions-increasingly-stolen-code-signing-certificates/
  13. ^ http://www.eweek.com/c/a/Security/Theres-A-Racket-Brewing-In-the-Code-Signing-Cert-Business/
  14. ^ Güçlü Ad Atlama: .NET Güvenlik Blogu

Dış bağlantılar