CSSLP Notları 1.1: Güvenlik Kavramları

3 dakika tahmini okuma süresi

image-center

Temel Güvenlik Kavramları

Gizlilik (Confidentiality)

Gizliliği sağlamak için alınan önlemler hassas verilerin yanlış kişilere ulaşmasını engellemek için tasarlanırken, doğru kişilerin alabileceğinden emin olmak için tasarlanmıştır.

Bütünlük (Integrity)

Bütünlük, tüm yaşam döngüsü boyunca verilerin tutarlılığını, doğruluğunu ve güvenilirliğini sürdürmeyi içerir. Veriler aktarım halindeyken ve yetkisiz kişilerce değiştirilememelidir.

Erişebilirlik (Availability)

İhtiyac anında bilginin erişilebilir olmasi anlamına gelir. Yedekleme (backup), yük devretme (fail-over), RAID ve yüksek erişebilirlikli kümeler (HA clusters) gibi işlemler, donanım veya yazılım sorunları ortaya çıktığında ciddi sonuçları azaltmak için kullanılır.

Doğrulama (Authentication)

Kimlik doğrulama, bireylerin kimlik bilgilerini temel alarak tanımlanmasını ve sisteme kimlikleriyle erişimini sağlayan bir süreçtir. En yaygın kimlik bilgisi biçimi, bir kullanıcı adı (veya kullanıcı kimliği) ve parolanın bir birleşimidir, ancak kimlik doğrulama aşağıdaki üç faktörün herhangi birleşiminden elde edilebilir.

  • Bilgi (Knowledge): Doğrulama için bu mekanizmada verilen tanımlayıcı bilgi, kişinin bildiği bir şeydir (kullanıcı adı ve şifre).
  • Sahiplik (Ownership): Doğrulama için bu mekanizmada verilen tanımlayıcı bilgiler, sahip olduğunuz veya sahip olduğunuz bir şeydir (tek kullanımlık sifre).
  • Karakteristik (Characteristic): Doğrulama için bu mekanizmada verilen tanımlayıcı bilgiler kişinin kendisidir (parmak izi).

Yetki (Authorization)

Yetkilendirme, nesnelere erişimin, talep eden kişiye veri veya sistem sahibi tarafından veya bir politikaya göre verilen hak ve imtiyazlar temelinde kontrol edildiği güvenlik konseptidir.

Hesap verebilirlik ve İnkar edilemezlik (Accountability and Non-repudiation)

İnkar edilemezlik, kullanıcı veya yazılım tarafından kullanıcı adına gerçekleştirilen eylemlerin reddedilemez olmasına yöneliktir. Hesap verebilirlik de inkar edilemezliğin saglanabilmesi icin gereklidir. Örneğin, benzersiz kullanıcı kimliği ve kimlik doğrulamasının kullanılması hesap verebilirliği destekler; paylaşılan kullanıcı kimlikleri ve şifrelerinin kullanılması hesap verebilirliği ortadan kaldırır.

Tasarim Güvenliği Kavramları

En düşük erişim hakkı (Least Privilege)

Bir kişiye veya sürece, atanmış bir işlemi tamamlaması için gerekli olan yalnızca en düşük düzeyde erişim hakkı (ayrıcalıklar) verilir. Ayrıca bu hak, sadece çalışmayı tamamlamak için gerekli olan asgari süre için verilmelidir.

Görevler ayrılığı (Separation of Duties)

Görevler ayrılığı ilkesine göre, belirli bir işlemi tamamlamak icin gereken adımlar tek bir kişinin kontrol ve yetkisinde olmamalı, birden fazla kişi ya da bölümün onayından geçiyor olmalıdır. Yazılım geliştirme süreçlerine yönelik bir örnek; Yazılımı gelistiren kişi ile yazılımın uygunluğunu gözden geçiren kişi farklı olmalıdır.

Derinlikli savunma (Defense in Depth)

Birden fazla katmandan oluşan güvenlik yapısı oluşuturulmalıdır ki, yazılımdaki ya da sistemki tek bir güvenlik açığı yazılımın ya da sistemin tamamında vafiyet yaratmaz. Bu çok katmanlı yaklaşım, bir sistemin güvenliğini bir bütün olarak arttırır ve birçok farklı saldırı vektörünü ele alır. Basit bir örnek; Bir web sayfasında kullanıcı tarafından girilen mail adresinin uygunluğu hem sunucuya gonderilmeden önce web sayfasinda, hem de sunucuya geldiğinde sunucu tarafından ve hatta eğer kayıt ediliyor ise kayıt edilmeden önce kontrol edilmelidir.

Hata korumalı (Fail Secure)

Yazılımın saldırıya uğradığında güvenilir şekilde çalışmasını ve tasarım veya uygulama arızası durumunda hızlı bir şekilde normal bir işleyiş ve güvenli duruma getirilmesini sağlayan güvenlik ilkesidir. Oncelikli olarak Erisilebilirlik hedeflense de, Gizlilik ve Bütünlük de korunur.

  • Kullanıcının hatali erişim girişimleri maksimum izin verilen hatali deneme sayısını (kırpma seviyesi) astiktan sonra, erişimi otomatik olarak reddedilir ve hesap kilitlenir.
  • Yazılım hataları yok sayılmaz. Hata mesajları ve dökümleri(stack trace), sistem ve yazılımın ic mimari yapısı hakkında onemli bilgiler içerebilir, ham formda kullanıcıya iletilmez.

Basitlik (Economy of Mechanisms)

Daha basit tasarım, anlaşılması kolay programlar, daha az saldırı yüzeyi ve daha az zayıf bağlantı anlamına gelir. Azalan saldırı yüzey ile, başarısızlık için daha az fırsat vardır ve başarısızlıklar meydana geldiğinde, sorunları anlamak ve çözmek için gereken zaman da daha azdır.

Sürekli kontrol (Complete Mediation)

Her nesneye her erişim isteğinde yetki tekrar kontrol edilmelidir. Ayrıca, bir kontrolünün sonucunun saklanarak kullanılması guvenlik açıklarına yol acabilir. Bu durumda yetkilerde bir değişiklik olursa, saklanan bu tür sonuçların sistematik olarak güncellenmesi gerekir.

Acık tasarım (Open Design)

Bir mekanizmanın güvenliği, tasarımının veya uygulamasının gizliliğine bağlı olmamalıdır. Güvenlik mekanizmalari, mekanizmanin gizliligine degil, daha çok spesifik, daha kolay korunan anahtar veya parola bulundurmaya dayanmalıdır. Koruma mekanizmaları koruma anahtarlarından ayrılmalı ki, incelemelerin koruma önlemlerini tehlikeye atacağı endişesi olmadan tamamlanmasına izin verir.

En düşük ortak mekanizma (Least Common Mechanisms)

Süpervizör olan ve olmayan üyeler arasında paylaşılan bir işlev veya kütüphaneye sahip olmak yerine, her biri kendi rolüne hizmet eden iki ayrı işleve sahip olunması tavsiye edilir. Mesela sistemden rapor çekmek icin kullanılan api /reports gibi tek olmak yerine, \admin\reports ve \users\reports gibi rol bazli olabilir.

Psikolojik kabul edilebilirlik (Psychological Acceptability)

Güvenlik mekanizmaları kullanımı, entegrasyonu ve otomatik uygulamayı en üst düzeye çıkarmak için tasarlanmalıdır. Psikolojik kabul edilebilirlik ilkesi ile yazılım tasarlamanın temel yönleri:

  • kullanımı kolay
  • erişilebilirliği etkilemez
  • kullanıcıya şeffaftır

Bu güvenlik ilkesi, yazılımınızın saldırı girişimlerine karşı dayanıklılığının, en zayıf bileşenlerinin korunmasına bağlı olacağını belirtir. Bu kod, servis, arayüz veya insan faktörü olabilir.

Mevcut bileşenlerden yararlanma (Leveraging Existing Components)

Test edilmiş ve kanıtlanmış, mevcut kütüphaneleri ve ortak bileşenleri yeniden kullanmak önerilir.

  • saldırı yüzeyi artmaz
  • yeni güvenlik açıkları eklenmez
  • geliştirme süresi azalır

Yorum yapın

Email adresiniz gösterilmeyecektir. Zorunlu alanlar işaretlenmiştir *

Yükleniyor...