Yazılım Güvenliği: Core Security Concepts Part-2

SWB
8 min readDec 18, 2020

--

Core Security Concepts içerisinde kavramları incelemeye devam ediyoruz. Eğer yazının birinci bölümünü okumadıysanız bu yazıyı okumadan önce onu okumanızı öneririm. Buraya tıklayarak okuyabilirsiniz.

Bir önceki bölümde Confidentiality (Gizlilik), Integrity (Bütünlük), Availability (Uygunluk, erişilebilirlik) ve Authentication (Kimlik doğrulama) kavramlarını inceledik. Bu bölümde ise Biometrics (Biyometri), Single Sign-on (Tekli oturum açma), Authorization (Yetkilendirme), Credential Management (Hassas veri yönetimi), Accountability (Hesap verebilirlik), Non-repudiation (İnkar Etmeme), Digital Signature (Dijital İmza) başlıklarını inceleyerek bu Core Security Concepts’i bitireceğiz.

Biometrics (Biyometri)

Bu yazıda kullandığımız biyometri kapsamı büyük ölçüde insanları kapsamaktadır. İnsanların ölçümlenebilir özelliklerine biyometri denilir ve ikiye ayrılır:

  • Behavioral Biometrics (Davranışsal)
  • Physiological Biometrics (Fizyolojik)

Biometrics özellikle authentication ve authorization için kullanılır. Bir kişinin gerçekten de olduğunu iddia ettiği kişi olup olmadığından emin olmamızı sağlar.

Behavioral Biometrics, bir şeyi nasıl yaptığımız ile ilgilidir. Örneğin voice print (sesimizi nasıl kullandığımız), signature dynamics (imzamızı atma şeklimiz), keystroke dynamics (bir klavyedeki yazma şekliniz) gibi.

Physiological Biometrics, direkt olarak kim olduğumuz ile ilgili fizyolojik özelliklerimizdir. Iris scan (iris taraması), retina scan (retina taraması), palm print (el/avuç taraması), finger print (parmak izi taraması), facial recognition (yüz tanıması) gibi.

Biometrics ile ilgili bir numaralı problem kullanıcıların kendilerine ait özel verileri paylaşmak istememesidir. Ancak günümüzde parmak izi okuyuculu telefonlar veya yüz tanıma ile çalışan cihazlar sayesinde çoğunluğun buna uyum sağladığını söyleyebiliriz. Bir diğer sorun da biometrics kullanmak proseslere ek bir süreç eklemek demektir. Bu biometric mutlaka bir cihaz ile çalışacaktır ve bu cihazın maintenance (bakım) ve registration (kayıt) süreçleri ek iş olarak karşımıza çıkacaktır. Ek iş de maliyet (zaman ve para) demektir.

Toparlayacak olursak biyometrik verileri kullanmanın amacı bir kişinin iddia ettiği kişi olup olmadığına emin olmak ve sürece authentication ile accountability (hesap verebilme) katmaktır.

Single Sign-On (Tekli Oturum Açma)

Single Sign-On, bilinen kısaltması ile “SSO” günümüzde çok popüler bir oturum açma yönetim konseptidir. Avantajları olduğu kadar dezavantajları da vardır. Genellikle güvenlik önlemleri arttıkça kullanılabilirlik azalmaya başlıyor. Aynı şekilde kullanılabilirlik arttıkça güvenlik önlemlerinden feragat edilmesi gerekebiliyor.

Single Sign-On’un amacı ilk etapta oturum açma işlemlerini tek bir merkezi yere toplayarak centralization (merkezileştirme) yapmak ve saldırı atak yüzeyini küçültmektir. Daha sonra birden fazla kullanıcı adı, parola veya oturum açma yöntemi olmasını engelleyerek hem kullanıcılara hem de bu oturumu yönetecek kişilere kolaylık sağlama amacını da taşır.

  • Centralized Management (Merkezileştirileştirilmiş Yönetim) sağlayarak hem saldırı yüzey alanını azaltır hem de yönetimi kolaylaştırır.
  • Regulatory Compliance (Yasalara ve mevzuatlara uygunluk) sağlamamız için işimizi kolaylaştırır.
  • Oturumlar için Consistent Process (İstikrarlı ve Tutarlı Prosesler) sağlar.

En önemli noktalarından biri merkezi bir yönetim sağlamasıdır dedik. Merkezi yönetimin önemli olmasının sebepleri de şunlardır:

  • Sistemsel veya güvenlik içerikli bir değişiklik yapıldığında başka bir yere bu değişikliklerin tekrar tekrar uygulanması gerekmez.
  • Prosedür tanımlamak daha kolaydır.
  • Yönetimi daha kolaydır.
  • Güvenlik izlemesi yapmak daha kolaydır.

Günümüzde Federated Identity Management denilen bir kategoride SAML (Security Assertion Markup Language) ve OAuth (Open Authorization) daha sık kullanılır. Gelecekte bunlara daha detaylı değineceğiz.

Toparlayacak olursak SSO’nun amacı merkezi bir yönetim sunarak hem güvenlik açısından birçok fayda sağlamak, hem de yönetimi ve kullanımı konularında kolaylık sağlamaktır diyebiliriz. Ancak SSO’nun çok büyük bir dezavantajı da vardır. Bir şeyi merkezileştirmek onu bir Single Point of Failure haline getirmektir. Yani SSO’muz varsa ve erişilemez hale gelirse tüm oturum yönetimi sistemimiz erişilemez hale gelmiş olacaktır. Bu nedenle kurgunun ihtiyaca uygun yapılması çok önemlidir.

Authorization (Yetkilendirme)

Daha önce IAM’den (Identification and Access Management) bahsettik. İlk önce Identification (Kimlikleme) ile kimin kim olduğuna bir sistem kurarak karar verdiğimizi varsayalım. Bu bir User ID olsun. Herkese bir User ID verdik. Daha sonraki adımda Authentication (Kimlik Doğrulama) ile gerçekten o User ID ile gelen kişinin kimliklendirdiğimiz kişi olup olmadığını kontrol ettik. Sonuç olarak kişiyi içeri aldık. Peki bunca zahmete neden katlandık. Çünkü muhtemelen login olduktan sonra 165789 User ID’sine sahip kullanıcı ile 54644 User ID’sine sahip kullanıcıların yetkileri, yapabilecekleri ve hakları aynı olmayacaktır. İşte tam burada Authorization yani “Yetkilendirme” devreye giriyor.

Authorization, ilk iki aşamadan (Identification ve Authentication) geçmiş olan kullanıcıların hakları (rights), ayrıcalıkları (priviliges) ve izinleri (permissions) ile ilgilenir.

Peki bu rights, privileges ve permissions neler olabilir? Mesela bir kullanıcı read (okuma), write (yazma) ve update (güncelleme) izinlerine sahip olabilir. Veya başka bir kullanıcı execute (çalıştırma), create (oluşturma) ve delete (silme) haklarına sahip olabilir. Ancak tüm bunlarla nasıl başa çıkılır? Burada imdadımıza The Principle of Least Privilege yetişiyor.

The Principle of Least Privilege

Bu kavramın amacı bir kişinin, kullanıcının, yazılımın, prosesin veya işlemin sadece kendi işini yapabilecek kadar yetkiye sahip olmasını sağlamaktır. Onlara sadece ihtiyacı olacakları yetkileri vermek demektir. Bu prensip bize daha küçük bir saldırı yüzey alanı ile daha iyi bir güvenlik, daha kolay denetim, daha stabil bir yönetim sağlar.

Ancak bunu uygulamak çoğu kullanıcının zaman zaman işini engellemek anlamına gelebilir. O yüzden burada da “Need to know” konsepti devreye giriyor. Eğer bir kullanıcı ona izin vermediğimiz bir yere erişemediği için işini yapamıyorsa, o erişimi neden istediğine dair geçerli bir sebep sunması gerekir. Ve bu sebep uygun bulunursa yetki verilmesi doğru olandır. Need to know’un da özeti budur.

Bunların hepsini uygulasak dahi yine ihtiyacımız olacak bazı şeyler var. Onlar da denetim kategorisine giriyor. Bir sistemde kullanıcılara tanımlama yapılırken Seperation of Duties denilen bir teknik kullanılır. Bu tekniğin amacı görevler ayrımı yaparak herkesin sorumluluklarını belirlemektir. Bununla birlikte bir denetim mekanizması oluşturularak bu görev ayrılıkları ile birlikte birbirini denetleyen (Mutex — Mutual exclusivity ve four eyes) bir sistemin de olması gerekir. Yani kısaca herkesin sorumluluğu belli olsun, ancak bu sorumluluklar ve sorumlular da denetlensin.

Toparlayacak olursak Authorization’ın amacı kimin neleri yapabileceğine karar veren bir sistem oluşturmak ve bunu sürekli olarak denetlemektir.

Credential Management (Hassas veri yönetimi)

Burada ilk sorumuz “Credential nedir?” olmalı. Credential, Türkçe’de delil, ehliyet veya yeterlilik anlamına gelir. Credential, yetkilendirme için kullanılan bir parola, bir usb, bir ID card, public key (PKI), tek seferlik parola (OTP) veya parmak izi (biometrics) dahi olabilir. Bu verilerin yetkilendirme için kullanılması ne kadar hassas veriler olduğunu gösterdiğini düşünüyorum. Bu yüzden de credential’ların yönetimi çok iyi yapılmalıdır.

Credential-based authentication birkaç formda karşımıza gelebilir:

  • Yazılımın direkt olarak kendisi böyle bir authentication sunuyor olabilir. Veya 3. parti bu işte uzmanlaşmış bir firmadan bu iş servis olarak alınıyor olabilir.
  • Yazılımsal tokenlara, parolalara dayanabilir veya donanımsal cihazlara da dayanabilir.

Credential Management bir konsepttir ve bu konsept bizlere şunları sağlar:

  • Diverse (çeşitli) and dispersed (dağınık) olan kullanıcıların credential’larını merkezi olarak yönetmemizi sağlar. (Dikkat ettiyseniz sürekli olarak bir şeyleri merkezileştirmeye ve saldırı yüzey alanımızı küçültmeye çalışıyoruz)
  • Remote (uzaktan) yönetim imkânı sağlar.
  • Credential’lar genellikle (OTP’ler hariç) birden fazla kez kullanılmak zorundadır. Bu yüzden de bir management yani yönetim olmak zorundadır.

Şimdi de Credential Management ile ilgili karşımıza çıkabilecek durumları ve riskleri inceleyelim:

  • Credential’lar sistemlerin girişi veya yetkilendirmeleri için gerekli “anahtar” görevi gördüğünden saldırganların en çok ulaşmak istediği hedeflerdendir.
  • Güvenlik standartlarını karşılamayan credential sistemleri kolay ele geçirilebilir ve veri sızıntılarına neden olabilir.
  • İş ve yazılım politika/prosedürleri var olan credential management’a uygun olmalıdır. Aksi takdirde hem iş süreçlerinde gereksiz gecikmeler yaşanabilir hem de güvenlik sorunları açığa çıkabilir.

Toparlayacak olursak credential management’ın temel amacı, iş süreçlerine en uygun, en güvenli, merkezi yönetilebilen ve işleri kolaylaştırırken güvenliği arttıran bir credential yönetimi sunmaktır. İşleri kolaylaştırırken güvenliği arttırmak biraz ütopik gözüküyor olabilir ancak bir seviyeye kadar bunu yapmak mümkündür.

Accountability (Hesap verebilirlik)

Bu çeviriyi her ne kadar hesap verilebilirlik olarak yapsak da aslında anlamı birden fazla kelime ile anlatmak daha doğru olacaktır. Accountability, kayıt tutmak, bu kayıtları zamanı geldiğinde açığa çıkarıp hesabını verebilmek ve inceleyebilmek anlamındadır. Accountability ayrıca auditing yani denetleme olarak da bilinir.

IAM’in ilk üç adımında Kimliklendirme ile kullanıcıyı eşsiz hale getirmiştik. Daha sonra Authentication ile o eşsiz kimlikli kişinin gerçekten kendisi olup olmadığını teyit edip Authorization ile de yetkilendirmiştik. Şimdi kullanıcımız artık içeride bir şeyler yapabilir durumda ve bunların hepsinin kayıt altına alınması gerekir. IAM’in ilk adımından başlayarak son adımına kadar her şeyi kaydetmek, takip etmek ve loglamak bu adımın sorumluluğundadır.

Bu adımımızda kullanıcıların tüm login aktivitelerinden, login olduktan sonra yapılan tüm aktivitelerine kadar her şeyin kayıt altına alınması prensibi vardır. Peki her şey ne demek? Yani bildiğimiz her şeyi mi kayıt altına alacağız? Hem evet hem hayır. Kayıtlarımızı işin gereksinimlerine göre ve yasaların zorunluluklarına göre tutmamız gerekecek. Birazdan bunlara örnek vereceğiz.

Accountability, record (kayıt), track (izleme) ve logging (loglama) işlemleri yapar. Loglar sadece kullanıcı hareketlerine ilişkin veriler içermez. Çoğu zaman çok hassas veriler de içerebilir. Bu nedenle logların her daim en iyi şekilde korunması, değiştirilme ve silinme gibi durumlardan kaçınılması ve böyle durumlar için ayrı bir izleme sistemi kurulması gerekmektedir. Burada genellikle logların belirli dönemlerde hash’leri alınarak değişip değişmediği de kontrol edilir.

Çoğu zaman her aktivitenin logu tutulsa da bu logların hepsi her daim incelenmez. Genellikle sadece ihtiyaç olan loglar incelenir. Saldırıların logları, login fail logları veya değiştirilmemesi gereken verilerin değişiklik logları gibi.

Logların tutulması başlı başına bir konudur. Nasıl tutulacağından ne kadar süre tutulması gerektiğine kadar birçok detayı bulunur. Burada önemli olan iki konu vardır. Birincisi işin gereksinimlerine ve yasal zorunluluklara göre bir süre belirlenmelidir. Bazı yasal zorunluluklar logların 10 yıl boyunca tutulmasını gerektirirken bazı yasal zorunluluklar logların 24 saat sonra silinmesini gerektirebilir.

İkinci konu ise çok uzun süre tutulması gereken loglar ile ilgilidir. Zaman geçtikçe teknolojiler değişiyor ve gelişiyor. Diyelim ki sınırsız süre ile tutmaya karar verdiğimiz bir log var. Bunu 50 yıl sonra da görüntüleyebilme ve okuyabilme imkânımızın olması gerekecektir. Bu yüzden uzun süreli tutulacak logların teknolojik alt yapısının geleceğe dönük olması, gerektiğinde bu teknolojilerin sürekli olarak güncellenmesi gerekir.

Toparlayacak olursak Accountability IAM’in son adımı olup IAM’de bulunan tüm işlemlerin kaydının tutulması amacı ile varlığını sürdürür. Sadece işin gereklilikleri ve güvenlik için değil aynı zamanda yasal zorunluluklar ve regülasyonlar için de gerekli bir adımdır.

Non-repudiation (İnkâr Etmeme)

İnkâr etmeme daha doğrusu edememe. Bu prensipteki amaç öyle bir kurgu kuralım ki yapılan tüm işlemler kimin tarafından nerede, ne zaman ve nasıl yapıldığı belli olsun. Ve o kişi, sistem, servis ya da proses bu işlemi yaptığını reddedemesin.

Bir de formal tanım yapalım. Reddetmeme, bir kullanıcı veya yazılım tarafından kullanıcı adına gerçekleştirilen eylemlerin reddedilebilirliğini ele alır. Reddedilmeme, hesap verebilirlik ve kimlik belirleme ile birlikte kullanıldığında denetimle gerçekleştirilebilir.

IAM’in tüm adımları eksiksiz ve doğru şekilde yapılırsa non-repudiation sağlanabilir. Bilinmesi gereken birkaç noktamız var:

  • Non-repudiation “Proof of integrity” yani bütünlüğün kanıtını sunar.
  • Ayrıca “ Proof of origin of a message or action” yani bir mesajın veya eylemin bütünlüğünün kanıtını sunar.

Bu sayede eylemi yapan kişi onu reddedemez. Genellikle PKI (Public Key Infrastructure) kullanılarak non-repudiation sağlanır.

Toparlayacak olursak Non-Repudation’ın temel amacı eylemlerin kim tarafından nerede, ne zaman ve nasıl yapıldığını kanıtlayarak kişi, yazılım, proses veya kullanıcıların yaptıklarını reddetmesini engellemektir.

Digital Signature (Dijital İmza)

Bu konuya kısaca bir önceki yazıda değindik. Digital signature yani dijital imzalar verinin bütünlüğünden emin olurlar. Ancak digital signatures bize sadece veri bütünlüğü için yardımcı olmaz. Şu konularda da destek olur:

  • Gelen veya giden paketin bütünlüğünü (integrity) ve yetkilendirmesini (authentication) teyit eder.
  • Göndericinin kim olduğuna dair reddedilemez, inkâr edilemez kanıt sunar (Non-repudation). Literatürde bu konu Proof of Origin olarak geçer. Yani kaynağın neresi olduğunun kanıtlanması. Bu da bize direkt olarak inkâr edilememe özelliğini vermiş olur.
  • Ayrıca paketin yoldayken (transit) değişmediğinden (not altered olması) emin olunmasını sağlar.

Burada anlaşılması gereken en önemli konu digital signatures’ın confidentiality (gizlilik) sağlamamasıdır. Bu konu genellikle karıştırılır. Mesajın kendisi şifrelenmediği müddetçe digital signatures gizlilik sağlamaz.

Dijital imzalar genellikle hash hesaplamalarına dayanır. Örneğin SHA-512 kullanımı gibi. Bu sayede mesajın içeriğinde 1 bitlik bile bir değişiklik olursa bu hash değişeceği için integrity (bütünlük) bozulacaktır.

Toparlayacak olursak Digital Signatures’ın amacı Proof of Origin (Kaynağın kanıtlanması) ve non-repudiation (inkâr edememe) sağlamaktır. Bunları sağlarken confidentiality (gizlilik) sağlamadığını da akılda tutmalıyız.

Core Security Concepts Part-2'nin sonuna geldik. Bu konseptlerin önce ne olduğunu ve neden var olduklarını inceledik. Bu iki yazı, ileride değineceğimiz tüm sistemlerin alt yapısını oluşturacak. O yüzden bu konseptleri anlamak çok önemli.

Bir sonraki yazımızda direkt olarak Security Concepts’e odaklanacağız.

Sorularınız ve düzeltme önerileriniz için iletişim: serhanw@pm.me

Kaynaklar:

CSSLP Certification All-in-One Exam Guide, Second Edition 2nd Edition by Wm. Arthur Conklin, Daniel Shoemaker

Official (ISC)2 Guide to the CSSLP CBK ((ISC)2 Press) 2nd Edition by Mano Paul

--

--

SWB

Some Kind of Security Guy | Defender of Digital Privacy & Security 🫡 | #Cybersecurity | #Blockchain Security | Safeguarding the Decentralized Web 🌐