Platform kodu bütünlüğü
Microsoft Azure gibi karmaşık bir sistemin çalıştırılmasında önemli bir zorluk, sistemde yalnızca yetkili yazılımların çalıştığından emin olmaktır. Yetkisiz yazılım, herhangi bir işletme için çeşitli riskler sunar:
- Özel saldırı araçları, özel kötü amaçlı yazılımlar ve bilinen güvenlik açıklarına sahip üçüncü taraf yazılımlar gibi güvenlik riskleri
- Onaylanan değişiklik yönetimi süreci yeni yazılım getirmek için kullanılmadığında uyumluluk riskleri
- İşletmenin operasyonel gereksinimlerini karşılamayabilecek, harici olarak geliştirilmiş yazılımlardan kalite riski
Azure'da da aynı zorlukla ve önemli karmaşıklıkta karşı karşıyayız. Binlerce mühendis tarafından geliştirilen ve bakımı yapılan binlerce sunucumuz var. Bu, yalnızca iş süreçleri aracılığıyla yönetilemeyen büyük bir saldırı yüzeyi sunar.
Yetkilendirme kapısı ekleme
Azure, dağıttığımız yazılımın güvenliği, uyumluluğu ve kalitesine yönelik geçitler uygulayan zengin bir mühendislik süreci kullanır. Bu süreç, kaynak koda erişim denetimini, eş kod incelemelerini yürütmeyi, güvenlik açıkları için statik analiz yapmayı, Microsoft'un Güvenlik Geliştirme Yaşam Döngüsü'ne (SDL) uymayı ve işlevsel ve kalite testlerini yürütmeyi içerir. Dağıttığımız yazılımın bu süreç boyunca aktığını garanti etmemiz gerekir. Kod bütünlüğü bu garantiyi elde etmemize yardımcı olur.
Yetkilendirme kapısı olarak kod bütünlüğü
Kod bütünlüğü, Windows Server 2016'dan itibaren kullanılabilir hale gelen çekirdek düzeyinde bir hizmettir. Bir sürücü veya dinamik olarak bağlı kitaplık (DLL) yüklendiğinde, yürütülebilir bir ikili dosya yürütüldüyse veya bir betik çalıştırıldığında kod bütünlüğü katı bir yürütme denetimi ilkesi uygulayabilir. Linux için DM-Verity gibi benzer sistemler mevcuttur. Kod bütünlüğü ilkesi, bir ikili veya betik yüklemeden veya yürütmeden önce çekirdeğin eşleştiği kod imzalama sertifikaları veya SHA256 dosya karmaları gibi bir dizi yetkilendirme göstergesinden oluşur.
Kod Bütünlüğü, sistem yöneticisinin yalnızca belirli sertifikalar tarafından imzalanmış ikili dosyaları ve betikleri yetkilendirerek veya belirtilen SHA256 karmalarıyla eşleşen bir ilke tanımlamasına olanak tanır. Çekirdek, ayarlanan ilkeye uymayan her şeyin yürütülmesini engelleyerek bu ilkeyi zorlar.
Kod bütünlüğü ilkesiyle ilgili bir sorun, ilke mükemmel bir şekilde doğru olmadığı sürece üretimdeki kritik yazılımları engelleyip kesintiye neden olmasıdır. Bu endişe göz önünde bulundurulduğunda, yetkisiz yazılımların ne zaman yürütüldiğini algılamak için güvenlik izlemenin neden yeterli olmadığını sorabilirsiniz. Kod bütünlüğü, yürütmeyi önlemek yerine yetkisiz yazılım çalıştırıldığında uyarı veren bir denetim moduna sahiptir. Uyarı almak kesinlikle uyumluluk risklerini ele almada çok değer katabilir, ancak fidye yazılımı veya özel kötü amaçlı yazılım gibi güvenlik riskleri için yanıtı birkaç saniye bile geciktirme, koruma ile filonuzda kalıcı bir dayanağı kazanan bir saldırgan arasındaki fark olabilir. Azure'da, bir müşterinin kesintiyi etkilemesine neden olan kod bütünlüğü riskini yönetmek için önemli ölçüde yatırım yaptık.
Derleme işlemi
Yukarıda açıklandığı gibi Azure derleme sistemi, yazılım değişikliklerinin güvenli ve uyumlu olduğundan emin olmak için zengin bir test kümesine sahiptir. Bir derleme doğrulama işleminden sonra derleme sistemi bunu bir Azure derleme sertifikası kullanarak imzalar. Sertifika, derlemenin tüm değişiklik yönetimi işleminden geçtiğini gösterir. Derlemenin geçtiği son test Kod İmzası Doğrulaması (CSV) olarak adlandırılır. CSV, üretime dağıtmadan önce yeni oluşturulan ikili dosyaların kod bütünlüğü ilkesini karşıladığını onaylar. Bu, yanlış imzalanan ikili dosyalar nedeniyle bir müşterinin kesintiye neden olmayacağımıza dair yüksek güven sağlar. CSV bir sorun bulursa, derleme bozulur ve sorunu araştırmak ve düzeltmek için ilgili mühendisler çağrılır.
Dağıtım sırasında güvenlik
Her derleme için CSV gerçekleştirsek de, üretimdeki bazı değişikliklerin veya tutarsızlığın kod bütünlüğüyle ilgili kesintilere neden olma olasılığı hala vardır. Örneğin, bir makine kod bütünlüğü ilkesinin eski bir sürümünü çalıştırıyor olabilir veya kod bütünlüğünde hatalı pozitifler üreten iyi durumda olmayabilir. (Azure ölçeğinde hepsini gördük.) Bu nedenle, dağıtım sırasında kesinti riskine karşı korunmaya devam etmemiz gerekir.
Azure'daki tüm değişikliklerin bir dizi aşamada dağıtılması gerekir. Bunlardan ilki iç Azure test örnekleridir. Sonraki aşama yalnızca diğer Microsoft ürün ekiplerine hizmet vermek için kullanılır. Son aşama üçüncü taraf müşterilere hizmet vermektedir. Bir değişiklik dağıtıldığında, sırayla bu aşamaların her birine taşınır ve aşamanın durumunu ölçmek için duraklatılır. Değişikliğin olumsuz bir etkisi olmadığı tespit edilirse sonraki aşamaya geçer. Kod bütünlüğü ilkesinde hatalı bir değişiklik yaparsak, bu aşamalı dağıtım sırasında değişiklik algılanır ve geri alınır.
Olay yanıtı
Bu katmanlı koruma ile bile, filodaki bazı sunucuların yetkili yazılımları düzgün bir şekilde engellemesi ve en kötü senaryolarımızdan biri olan müşterinin karşılaştığı bir soruna neden olması mümkündür. Son savunma katmanımız insan soruşturması. Kod bütünlüğü bir dosyayı her engelleyişinde, arama mühendislerinin araştırması için bir uyarı oluşturur. Uyarı, sorunun gerçek bir saldırının göstergesi, hatalı pozitif veya müşteriyi etkileyen başka bir durum olup olmadığı konusunda güvenlik araştırmaları başlatmamıza ve müdahale etmemize olanak tanır. Bu, kod bütünlüğüyle ilgili sorunları azaltmak için gereken süreyi en aza indirir.
Sonraki adımlar
Platform bütünlüğünü ve güvenliğini sağlamak için neler yaptığımız hakkında daha fazla bilgi edinmek için bkz: