Uygulamanıza otomatik güncelleme eklediğinizde, güncelleme paketinin imzası kullanıcıyı koruyan son hattır. İmzasız veya imzası doğrulanmayan bir güncelleme, saldırganın tek bir kırık kanalla tüm kurulu tabanı ele geçirmesine yol açabilir.
Güncelleme zincirinde imza
- Her sürüm yeniden imzalanır: Yeni derleme yeni bir dosya olduğundan imza taşımaz; hattınızda imzalama adımı zorunlu olmalıdır.
- İstemci doğrular: Güncelleyici, indirilen paketin imzasını ve yayıncı adını kontrol ettikten sonra çalıştırmalıdır.
- Zaman damgası: Güncelleme yıllar sonra tekrar indirilse bile imzanın doğrulanabilmesini sağlar.
Windows'ta doğrulama örneği
$sig = Get-AuthenticodeSignature .\guncelleme.exe
if ($sig.Status -ne 'Valid') { throw 'Imza gecersiz' }
if ($sig.SignerCertificate.Subject -notlike '*O=Ornek Firma*') { throw 'Beklenmeyen yayinci' }
Yayıncı adını sabitlemek, başka bir geçerli sertifikayla imzalanmış paketin kabul edilmesini önler. Sertifika yenilendiğinde konu adı aynı kalır, parmak izi değişir; bu nedenle parmak izi yerine yayıncı adı veya sertifika zincirini sabitlemek daha esnektir.
Sık hatalar
- Kurulum dosyası imzalı ama içindeki çalıştırılabilir dosyalar imzasız.
- İmzadan sonra dosyaya meta veri eklenip imzanın bozulması.
- Güncelleme kanalının HTTP üzerinden sunulması; HTTPS ve SSL sertifikası şarttır.
- Sertifika değişiminde eski istemcilerin yeni imzayı reddetmesi; geçiş sürümünü önceden planlayın.
İpuçları
- Delta güncellemelerde de sonuç dosyayı imzalayın ve doğrulayın.
- Bir sürümü geri çekmek gerekirse eski paketin imzası geçerli olsa bile sunucu tarafında yayından kaldırın.
- Sertifika ve hat kurulumu için kod imzalama sertifikalarına bakın.
İmzayı yayın hattının değiştirilemez bir adımı yapın ve istemcide mutlaka doğrulayın; güncelleme güvenliği bu iki adıma dayanır.
Geri alma ve sürüm yönetimi
Hatalı bir güncelleme yayınlandığında en hızlı çözüm, güncelleme akışındaki sürüm bildirimini önceki sağlam sürüme çevirmektir. Bunun için güncelleme sunucusunda sürümlerin ayrı ayrı saklanması ve her sürüme ait karma değerinin kayıt altında tutulması gerekir. İstemcinin yalnızca kendisinden yeni sürümleri kabul etmesi, eski ve zafiyetli bir sürümün zorla geri yüklenmesini (downgrade) de önler.