unplugged, locked in a safe, and buried 20 feet under the ground in a secret location... and I'm not even too sure about that one" -- Dennis Huges, FBI
“Saldırganları uzak tutalım” • Kriptografi kullanımı yazılımın güvenliğini sağlar • “Tüm verilerimizi şifreli saklıyoruz” • Yazılım ürünlerinin bittiğinde test edilmesi • Saldır ve yamala (penetrate and patch) • Güvenlik özellikleri yazılımlarımızı güvenli kılar • “Biz SSL kullanıyoruz” • Proje hedefleri içerisinde güvenliğin konu edilmemesi • “Güvenlik konusunu bir sonraki sürümde ele alacağız”
kredi kartı bilgileri • Tehdit: Veri aktarımı sırasında dinleme (man-in-the-middle saldırısı) • Çözüm: TLS/SSL kullanarak veri aktarımını şifrelemek • Bu yöntem, yazılımın daha güvenli hale gelmesini sağlamak için proaktif bir yaklaşımdır.
Anahtar Şifreleme ve şifre çözme için aynı anahtar gerekir. Tek yönlü (geri dönüş yok) Amaç Veri şifreleme Parola koruma Kullanım Alanı Dosya şifreleme, veri aktarımı Parola hashleme, kimlik doğrulama
Alan Kaynak kod Çalışan uygulama Zamanlama Geliştirme aşamasında Çalışan yazılım üzerinde Yetenek Mantıksal hataları tespit eder Çalışma zamanındaki açıkları tespit eder Avantaj Erken tespit Çalışma ortamına uygun Dezavantaj Çalışma zamanındaki açıkları tespit edemez Geliştirme sırasında tespit yapamaz
tabi tutulmadan önce sınanmalıdır • Uygunsuz girdiler ile bir sürecin işleyişini değiştirmek mümkündür • Neye güvenilebileceği her uygulama ve her kuruluş için farklı olabilir • Kullanıcılardan, ağ üzerinden • Sistem üzerindeki diğer süreçlerden • Library den (.so, .dll vb.) • İşletim sisteminden • Uygulama içerisindeki diğer fonksiyonlardan gelen verilerin sınanması gerekli olabilir
dışındaki veriler kabul edilmemelidir • Tersi yapılmamalıdır: Geçersiz verileri/sembolleri tanımlama ve diğerlerinin tümünü kabul etme • Veriler için maksimum uzunluk/büyüklük tanımlanmalı ve daha büyük girdi kabul edilmemelidir
birincil anahtar (kimlik no, e-posta adresi vb.) şifrelenerek saklanmalıdır. • Kişisel veriler üzerinde işlem yapılması ana amaç olmayan durumlarda uygulama kişisel verileri maskeleyerek görüntülemeli, aktarmalı veya işlemelidir. • Uygulamanın geliştirme, test ve eğitim ortamlarında kişisel veri olmamalı, anonimleştirilmiş veriler kullanılmalıdır. • Kişisel veri içeren uygulama veritabanı yedekleri şifreli olarak saklanmalıdır. • Uygulama, kişisel veriler için saklama sürelerini takip edebilmeli ve saklama süresi sona eren verilerin silinebilmesini / yok edilebilmesini sağlamalıdır.
olarak güvenli durumlara geçmelidir • Uygulamaya yapılan tüm erişim istekleri hem istek hem de yanıt zamanında yetkilendirmeye tabi tutulmalıdır. • Geçersiz olmuş, potansiyel olarak tehlikeli işlevlerin bulunduğu kütüphane ve modüller tasarımda ve uygulamada yer almamalıdır.
olan sayfa ve kaynaklar dışındaki tüm sayfa ve kaynaklara erişim için önkoşul olmalıdır. • Tüm parola alanlarında kullanıcı giriş yaparken kullanıcının parolası maskelenmeli ve açık olarak görünmemelidir. • Parola giriş alanları uzun ve karmaşık bir parola girilmesini engellememeli, deyimsel parola kullanımına izin vermeli ya da teşvik etmelidir. Örneğin, parolaların en az 15 karakter uzunluğunda girilebilmesine olanak tanıması, en az bir büyük, bir küçük harf, bir özel karakter ve bir sayı kullanılması, son 5 parolayla aynı parolanın kullanılmaması vb.
bağlantı kullanılarak iletilmeli ve kimlik bilgilerinin girilmesi için kullanıcıya gereken tüm sayfalar / işlevler şifreli bir bağlantı kullanılarak yapılmalıdır. • Unutulan parola işlevi ve diğer kurtarma yolları geçerli parolayı açığa çıkarmamalı ve yeni parola kullanıcıya düz metin olarak gönderilmemelidir.
yeni parolayı ve bir parola onayını kapsamalıdır. • Tüm şüpheli kimlik doğrulama kararları için özet veri içerecek şekilde log kaydı oluşturulmalıdır. • Hesaplara ilişkin parolaları korumak için yeterince güçlü kriptografik yöntemler (şifreleme, özet alma) kullanılmalı ve bu kriptografik yöntemlerin kaba kuvvet saldırılarına karşı güçlü olmalıdır.
servis dışı bırakma saldırıları gibi otomatik yapılan yaygın kimlik doğrulama saldırılarını önlemek için istekler azaltılmalıdır. (rate limiting, throttling)
kimlik doğrulama, daha güçlü bir mekanizmayla kimlik doğrulama, ikinci faktör veya işlem imzalama gibi yöntemler uygulanmalıdır. • Uygulama kullanıcının son başarılı oturum açma tarih ve saatini görüntülemelidir. • Unutulan parola ve diğer kurtarma yolları kısa ileti, e-posta onayı, mobil onay, çevrimdışı onay vb. yöntemleri kullanmalıdır. • Hesaplar geçici veya kalıcı olarak kilitlenebilmelidir. Kalıcı olarak kilitlenen hesaplar eğer üzerindeki geçici kilit kaldırılsa da kilitli kalmalıdır.
depolarında gizli bilgiler, API anahtarları ve parolalar mevcut olmamalıdır. • Yazılım altyapısında ya da herhangi bir bileşen için kullanılan teknolojide üzerinde varsayılan parolalar yer almamalıdır
"beyaz liste" adreslerine yapılması, bilinmeyen adreslere yönlendirme gerekiyorsa kullanıcının uyarılarak onayının alınması sağlanmalıdır. • Karşı alanlar arası kaynak paylaşımında (Cross- domain Resource Sharing, CORS) güvenilmeyen veri kullanılmamalıdır
zamanlı oturumların sayısı sınırlandırılabilmelidir. • Oturum sonlandığında oturum ile ilgili tüm geçici depolama alanları ve çerezler uygulama tarafından silinmelidir. • Web uygulamalarında oturum çerezlerinde HTTPOnly bayrağı etkin olmalıdır. Ayırca "Secure" olarak yapılandırılmalıdır.
ilişkin araştırma yapılabilecek şekilde zaman bilgisi yer almalıdır. • Log kayıtlarını okuyan araçlarda istenilmeyen bir işlemi yapacak kayıt üretilmemelidir. • Uygulama tarafından üretilen log kayıtları hassas bilgi içermemelidir.
veride betik (script) içermeyecek şekilde tasarlanmalıdır. • Uygulama, web servislerinden şifreli olarak paylaşılan verileri yine şifreli olarak saklayacak şekilde tasarlanmalıdır • Uygulama, kişisel verileri şifreli olarak saklamalı ve bu verilerin taşınmasında korumalı iletişim kanallarını kullanmalıdır