Makale Özeti

Bu yazımızda Microsoftun kendi güvenlik girişimde kullandığı bir yaklaşımın detaylarını aktarıyoruz.

Makale

Öncelikle SD3+C’nin açılımının ne olduğu ile başlayalım: Secure by design, Secure by default, Secure in deployment, Secure by communication.
SD3+C, Microsoft’un Secure Windows Initiative (SWI) takımının benimsediği dört basit ve temel ilkenin bir kısaltması. Bu ilkelerin altında yatan en temel mantık ise şu: İyi güvenlik için, güvenliğin tüm yazılım geliştirme süreci boyunca devam eden bütünleşik bir süreç olarak algılanması gerekir.

SD3+C’nin unsurlarının tarifi:

SD3+C’nin dört temel unsurunu tarif edelim:

Secure by Design:

Tasarımıyla güvenli: Bu ilke, ürününüzün genel tasarımının güvenli olmasını sağlamanız gerekliliğini ifade eder. Eğer güvenlik, ürünün bütününün katma değere sahip vazgeçilmez bir unsuru olarak düşünülmez de, zaman olursa eklenecek bir özellik olarak görülürse, ürünün tam olarak güvenli olması beklenemez.
Bir ürünün tasarımıyla güvenli olması için, daha tasarım aşamasındayken başlayarak ve proje boyunca potansiyel zayıf noktaları belirlemek için tehdit modellemeyi işin içine katın. Tehdit modelleme, en yüksek seviyedeki riskleri belirleme ve ürünlere yönelik atakların nasıl gerçekleşebileceğini ortaya çıkarma yönünden başarılı bir yaklaşımdır.

Secure by Default:

Varsayılan ayarlarla güvenli: Ürünün, kutudan çıktığı haliyle güvenli olmasını ifade eder.
Ürünün kimi özellikleri seçimlikse, bunları varsayılan olarak kapalı tutmak en iyisidir. Böylece tehditlere karşı hedef alan küçültülmüş olur. Müşterilerinizin yüzde 90’ının kullanmadığı bir özelliği ele alın. Bu özelliği kutudan çıkışta kapalı olarak paketlemeniz, en fazla müşterilerinizin onda birinin gerekli özelliğin ayarını açık hale getirmek için biraz zahmete girmelerine sebep olur. Oysa bu özellikle ilgili oluşabilecek bir güvenlik açığında, özelliği varsayılan olarak kapalı tuttuğunuz için olası bir risk yüzde doksanlık müşteri kitlenizi hiçbir şekilde etkilemeyecektir.
Yine bu ilke doğrultusunda yapılması gereken bir başka şey de, uygulamanızın gerektirdiği en küçük izin kümesi ile çalışmasıdır. Uygulamanızı çalıştırmak için aslında gerekmediği halde admin yeteneklerine sahip bir hesap kullanılmasını zorunlu tutmuşsanız, bir güvenlik açığı durumunda kodunuza sızabilecek ataklar sonucu istemediğiniz kodlar istemediğiniz kadar güçlü haklarla çalışır duruma gelebilir. Bu ihtimale karşı, önemli kaynakların kullanımında etkin erişim kontrolleri yapıyor olmaya dikkat edin.

Secure in Deployment:

Dağıtımda güvenli: Kurulum sonrasında sisteminin bakımının sağlanabilmesi anlamına gelir. Bir ürünün yönetimi zorsa, güvenlik tehditlerine karşı koruma sağlamak da zor olacaktır. Kullanıcıların sistemi güvenli bir şekilde kullanabilmek üzere eğitilmeleri önemlidir. Bir güvenlik açığının tespit edilmesi durumunda gerekli yamanın oluşturulmasını ve bu yamanın tam olarak test edilip kullanıma hızla sunulmasını sağlamak son derece önemlidir.

Secure by communication:

İletişimle güvenli: Bu ilkenin odak noktası, açık ve özlü belgeler oluşturmaktır. Belgeler, belirgin güvenlik tehditlerine karşı ürünün nasıl kurulması ve kullanılması gerektiği konusunda en iyi uygulamaları belirtiyor olmalıdır. Örnek kodlar veriliyorsa, bunlar da belge olarak kabul edilmelidir. Örnek kodların uygulama geliştiriciler tarafından bir şablon olarak kullanılabileceği unutulmamalıdır. Yine bu ilke doğrultusunda ürününüzün kullanıcılarıyla çeşitli kanallar üzerinden iletişimde olup sorularını ve sorunlarını en kısa sürede çözümlüyor olmanız önemlidir.

Ürün geliştirme süreci boyunca SD3+C’nin uygulanması

Güvenlik ilkeleri ürün geliştirmenin sadece belirli bir aşamasında gözden geçirilip sonra da unutulabilecek unsurlar değildirler. İşin mimarisinden ve tasarımından başlayıp geliştirme, test, dağıtım ve çalıştırma aşamalarının hepsinde uygulanmaları gerekir. Bunların her birinde güvenlik kaygısını taşıyor olmak şarttır.
Ürün geliştirme süreci 4 temel aşamadan oluşur: Tasarım, geliştirme, test, üretim ortamına aktarma ve bakım. SD3+C çatısının bu aşamalar boyunca nasıl uygulanacağına göz atalım:

Tasarım aşaması

Güvenlik asla arka plan işi ya da normal ürüne eklemlenmiş bir fazlalık gibi görülmemelidir. Aksine uygulamanızın her yönüne, her özelliğine sinmesi gereken bir yaklaşımdır. Ayrıca oluşabilecek riskleri önceden belirlemek için tehdit modelleme kullanılmalıdır.
Bir projenin daha başlangıcında, potansiyel takım üyeleri ile görüşmeler yaparken, güvenlik bilgisini ölçmeye yönelik sorular da sorun. Bu iki açıdan faydalı olur: Güvenlik konusunda yeterince duyarlı yazılımcılar seçebilmek ve güvenlik konusunda olası eğitim ihtiyaçlarını mümkün olduğunca erken ve doğru belirlemek.
Tasarım aşamasında hedef müşteri kitlesini ve onların güvenlik gereksinimlerini de göz önünde bulundurmanız gerekir. Hedef kitleyi ve uygulamanızın güvenlik hedeflerini biliyor olursanız, güvenlik tehditlerini hafifletme yolunda önemli temel bilgilerle yola çıkmış olursunuz.
Bu ilkeleri kullanarak yaptığınız tasarımı güvenlik konusunda uzman birine inceletme şansınız varsa, çok daha iyi sonuç elde edebilirsiniz.

Geliştirme aşaması

Geliştirmede kod yazılır ve hata ayıklanır. Bu aşamada yazılım geliştiricilerin en iyi kalitede kod yazıyor olması gerekir. Güvenli kod yazabilmeleri için yaygın yapılan güvenlik hatalarını tanıyacak ve onlardan kaçınacak şekilde eğitilmiş olmaları gerekir. Ortak kalite standartları olması önemlidir. Bellek alanlarının kullanımı, güvenilmeyen verilerle yapılacak işlemler, verinin şifrelenmesi gibi konularda hataya yer vermeyen ortak bir standarda göre kodlama yapılmalıdır.
Takım ruhuyla bu yaklaşımı oluşturabilmek önemli iyileştirmeler sağlayacaktır.

Test aşaması

Kod incelemelerinde güvenliği de özel bir gündem olarak ele alın. Testler sırasında da tehdit modelleme çalışmalarına paralel olarak saldırgan testlerin yeterince yapılıyor olduğuna dikkat edin. Bu tür testleri otomatik olarak yapan araçlar kullanılması / geliştirilmesi faydalı olacaktır.

Üretim ortamına aktarım ve bakım

Bu aşamada ürün sürüldükten sonra ortaya çıkabilecek herhangi bir güvenlik konusunun nasıl çözümleneceğinin belirlenmesi önemlidir. Bu tür hataların ürün piyasaya sürülmeden keşfedilip çözümlenebilmesi maliyetler açısından da büyük yarar sağlayacaktır.
 


Not: Bu yaklaşım, yazarın orijinal görüşlerini içermemektedir. Microsoftun kendi içinde geliştirdiği bir yaklaşımın detayları, kod üretimi yapan tüm insanlara faydalı olduğu düşünülerek aktarılmıştır.