Merhabalar,
Bu makalede, Windows Server işletim sistemleri üzerinde, kimlik doğrulama işlemleriyle ilgili teknik bilgiler aktaracağım. Böyle bir makaleyi, bildiğimizi düşündüğümüz ama bilmediğimiz birçok şeyin olduğunu gözlemlediğim için yazma gereği duydum. Birbirlerine karıştırılan birçok konu var ve burada bahsedilen konular da bunlardan biri. Dolayısıyla genel hatlarıyla, konu hakkında teorik bilgiler aktararak bir farkındalık oluşturmayı istiyorum.
Authentication – Kimlik Doğrulama Nedir?
Kimlik doğrulama, bir kullanıcının kimliğini tanıma ve bu kullanıcının oturum açma bilgilerinin doğrulandığı bir süreçtir. Gelen bir talebi, bir dizi kimlik bilgisi ile ilişkilendirme mekanizmasıdır. Girişi yapılan kimlik bilgileri, yetkili kullanıcının yerel bir işletim sistemindeki veya bir kimlik doğrulama sunucusundaki bilgilerinin bulunduğu bir veritabanındaki dosyada bulunanlarla karşılaştırılır ve izin listesinde belirtilen kapsamda erişim izni verilir.
Kimlik doğrulama süreci, her zaman uygulamanın başlangıcında, izin ve kısıtlama kontrolleri yapılmadan önce ve başka herhangi bir kodun ilerlemesine izin verilmeden önce çalışır. Farklı sistemler, bir kullanıcının kimliğini tespit etmek için farklı kimlik bilgileri gerektirebilir. Kimlik bilgileri, genellikle gizli olan ve yalnızca kişi ve sistem tarafından bilinen bir parola biçimini alır.
Bir kişinin kimliğinin doğrulanabileceği üç kategori vardır:
- Kullanıcının bildiği bir şey
- Kullanıcının sahip olduğu bir şey
- Kullanıcının olduğu bir şey
Her kimlik doğrulama faktörü, erişim izni verilmeden, bir işlem talebini onaylamadan, bir belgeyi veya başka bir çalışma ürününü imzalamadan, başkalarına yetki verilmeden ve bir yetki zinciri oluşturmadan önce bir kişinin kimliğini doğrulamak veya doğrulamak için kullanılan bir dizi öğeyi kapsar.
Kimlik doğrulama süreci, iki farklı aşamada tanımlanabilir:
- Tanımlama (Identification)
- Gerçek kimlik doğrulama (Actual Authentication).
Tanımlama aşaması, güvenlik sistemine bir kullanıcı kimliği sağlar. Bu kimlik, bir kullanıcı kimliği biçiminde sağlanır. Güvenlik sistemi, bildiği tüm soyut nesneleri arayacak ve gerçek kullanıcının şu anda uyguladığı belirli olanı bulacaktır. Bu yapıldıktan sonra kullanıcı tanımlanmıştır. Kullanıcının kimlik iddia etmesi, bunun mutlaka doğru olduğu anlamına gelmez. Gerçek bir kullanıcı, sistemdeki diğer soyut kullanıcı nesnesine eşlenebilir olmalıdır. Bu nedenle kullanıcıya haklar ve izinler, ancak kimliğini sisteme kanıtladığında verilebilir. Kullanıcı tarafından sağlanan bu kimlik iddalarının kontrol edilerek, talep edilen kullanıcı kimliğini belirleme sürecine kimlik doğrulama adı verilir ve kimlik doğrulama işlemi sırasında kullanıcı tarafından sağlanan kanıta da kimlik bilgisi ( Credential) adı verilir.
Genişletilebilir bir mimarinin parçası olarak, Windows Server işletim sistemleri, aşağıdaki gibi bir kimlik doğrulama güvenlik destek sağlayıcısı seti uygular.
- Negotiate (Anlaşma)
- Kerberos protokolü
- NTLM
- Schannel (güvenli kanal)
- Digest
Bu sağlayıcılar tarafından kullanılan protokoller, kullanıcıların, bilgisayarların ve hizmetlerin kimlik doğrulamasını sağlar ve kimlik doğrulama süreci, yetkili kullanıcıların ve hizmetlerin, kaynaklara güvenli bir şekilde erişmesini sağlar.
Windows Server’da uygulamalar, SSPI (Security Support Provider Interface) kullanarak kullanıcıların kimliğini doğrular. Bu nedenle, geliştiricilerin belirli kimlik doğrulama protokollerinin karmaşıklıklarını anlamalarına veya uygulamalarına kimlik doğrulama protokolleri oluşturmalarına gerek yoktur. Windows Server işletim sistemleri, Windows güvenlik modelini oluşturan bir dizi güvenlik bileşeni içerir. Bu bileşenler, uygulamaların kimlik doğrulama ve yetkilendirme olmadan kaynaklara erişememesini sağlar. Aşağıdaki bölümler, kimlik doğrulama mimarisinin unsurlarını açıklamaktadır.
Local Security Authority
Yerel Güvenlik Yetkilisi (Local Security Authority-LSA), kullanıcıların kimliğini doğrulayan ve yerel bilgisayarda oturum açan, korumalı bir alt sistemdir. Ek olarak LSA, bir bilgisayardaki yerel güvenliğin tüm yönergeleri hakkında bilgiler tutar. Bu yönergeler topluca, yerel güvenlik ilkesi olarak bilinir. Ayrıca adlar ve güvenlik tanımlayıcıları (Security Identifiers-SID’ler) arasında çeviri için çeşitli hizmetler sağlar. Güvenlik alt sistemi, bir bilgisayar sistemindeki güvenlik politikalarını ve hesapları takip eder. Bir etki alanı denetleyicisi durumunda, bu ilkeler ve hesaplar, etki alanı denetleyicisinin bulunduğu etki alanı için geçerli olanlardır. Bu durumda, ilkeler ve hesaplar Active Directory’de saklanır. LSA alt sistemi, nesnelere erişimi doğrulamak, kullanıcı haklarını kontrol etmek ve denetim mesajları oluşturmak için gerekli hizmetleri sağlar.
Security Support Provider Interface
Güvenlik Desteği Sağlayıcı Arayüzü (Security Support Provider Interface-SSPI), herhangi bir dağıtılmış uygulama protokolü için kimlik doğrulama, mesaj bütünlüğü, mesaj gizliliği ve güvenlik hizmet kalitesi için entegre güvenlik hizmetleri elde eden bir API’dir. SSPI, bir Generic Security Service API (GSSAPI) uygulamasıdır. SSPI, dağıtılmış bir uygulamanın, güvenlik protokolünün ayrıntılarını bilmeden, kimliği doğrulanmış bir bağlantı elde etmek için birkaç güvenlik sağlayıcısından birini arayabileceği bir mekanizma sağlar.
Security Support Provider Interface Mimarisi
Microsoft Güvenlik Destek Sağlayıcı Arayüzü (SSPI), Windows kimlik doğrulamasının temelidir. Kimlik doğrulama gerektiren uygulamalar ve altyapı hizmetleri, bunu sağlamak için SSPI kullanır.
SSPI, Windows Server işletim sistemlerinde Generic Security Service API (GSSAPI) uygulamasıdır. Windows’ta belirli kimlik doğrulama protokollerini çağıran, varsayılan Güvenlik Desteği Sağlayıcıları (SSP’ler), SSPI’ya DLL’ler olarak dahil edilir.
Bu varsayılan SSP’ler, aşağıdaki bölümlerde açıklanmaktadır. SSPI ile çalışabiliyorlarsa, ek SSP’ler dahil edilebilir. Aşağıdaki şekilde de gösterildiği gibi, Windows’taki SSPI, istemci bilgisayar ile sunucu arasındaki mevcut iletişim kanalı üzerinden kimlik doğrulama belirteçlerini taşıyan bir mekanizma sağlar. İki bilgisayarın veya cihazın güvenli bir şekilde iletişim kurabilmeleri için kimliğinin doğrulanması gerektiğinde, kimlik doğrulama istekleri, şu anda kullanımda olan ağ protokolüne bakılmaksızın kimlik doğrulama sürecini tamamlayan SSPI’ye yönlendirilir. SSPI, saydam ikili büyük (transparent binary) nesneler döndürür. Bunlar uygulamalar arasında geçirilir, bu noktada SSPI katmanına geçilebilir. Böylelikle SSPI, bir uygulamanın güvenlik sistemine, arayüzü değiştirmeden, bir bilgisayar veya ağ üzerinde bulunan çeşitli güvenlik modellerini kullanmasını sağlar.
SSP’ler, güvenli olmayan bir ağ ortamında güvenli iletişimi desteklemek için Windows işletim sistemlerinde aşağıdaki şekillerde kullanılır.
- Kerberos Security Support Provider
- NTLM Security Support Provider
- Digest Security Support Provider
- Schannel Security Support Provider
- Negotiate Security Support Provider
- Credential Security Support Provider
- Negotiate Extensions Security Support Provider
- PKU2U Security Support Provider
Şimdi bunların ne olduklarını, kısaca açıklayalım…
Kerberos Security Support Provider
Bu SSP, Microsoft tarafından uygulandığı şekliyle, yalnızca Kerberos sürüm 5 protokolünü kullanır. Bu protokol, Ağ Çalışma Grubu’nun RFC 4120’sine ve taslak revizyonlara dayanmaktadır. Etkileşimli oturum açma için bir parola veya akıllı kartla birlikte kullanılan endüstri standardı bir protokoldür. Ayrıca, Windows’taki hizmetler için de tercih edilen kimlik doğrulama yöntemidir. Kerberos protokolü, Windows 2000’den beri varsayılan kimlik doğrulama protokolü olduğundan, tüm etki alanı hizmetleri Kerberos SSP’yi destekler. Bu hizmetler şunları içerir:
- Lightweight Directory Access Protocol (LDAP) kullanan Active Directory sorguları
- Remote Procedure Call servis kullanan Remote server ya da workstation yönetimi
- Print services (baskı hizmetleri)
- Client-server kimlik doğrulaması
- Server Message Block (SMB) protokolünü kullanan uzaktan dosya erişimleri (Common Internet File System ya da CIFS olarak bilinir.)
- Distributed file system yönetimi ve yönlendirme
- Internet Information Services (IIS) için intranet kimlik doğrulaması
- Internet Protocol security (IPsec) için güvenlik yetkisi kimlik doğrulaması
- Etki alanı kullanıcıları ve bilgisayarlar için Active Directory Sertifika Hizmetlerine yapılan sertifika istekleri
Lokasyon: %windir%\Windows\System32\kerberos.dll
NTLM Security Support Provider
NTLM Security Support Provider (NTLM SSP), NTLM sınama-yanıt kimlik doğrulamasına izin vermek ve bütünlük ve gizlilik seçeneklerini görüşmek için Security Support Provider Interface (SSPI) tarafından kullanılan bir ikili mesajlaşma protokolüdür. NTLM, SMB veya CIFS kimlik doğrulaması, HTTP Anlaşma kimlik doğrulaması (örneğin, İnternet Web Kimlik Doğrulaması) ve Remote Procedure Call hizmeti dahil olmak üzere, SSPI kimlik doğrulamasının kullanıldığı her yerde kullanılır. NTLM SSP, NTLM ve NTLM sürüm 2 (NTLMv2) kimlik doğrulama protokollerini içerir.
Desteklenen Windows işletim sistemleri, aşağıdakiler için NTLM SSP’yi kullanabilir:
- Client/server authentication
- Print services
- File access by using CIFS (SMB)
- Secure Remote Procedure Call service or DCOM service
Lokasyon: %windir%\Windows\System32\msv1_0.dll
Digest Security Support Provider
Digest authentication (Özet kimlik doğrulaması), Lightweight Directory Access Protocol (LDAP) ve web kimlik doğrulaması için kullanılan bir endüstri standardıdır. Digest authentication, kimlik bilgilerini ağ üzerinden bir MD5 hash veya ileti özeti olarak iletir.
Digest SSP (Wdigest.dll), aşağıdakiler için kullanılır:
- Internet Explorer ve Internet Information Services (IIS) erişimi
- LDAP sorguları
Lokasyon: %windir%\Windows\System32\Digest.dll
Schannel Security Support Provider
Secure Channel-Güvenli Kanal (Secure Channel – Schannel), bir kullanıcının güvenli bir web sunucusuna erişmeye çalışması gibi web tabanlı sunucu kimlik doğrulaması için kullanılır.
TLS protokolü, SSL protokolü, Private Communications Technology (Özel İletişim Teknolojisi-PCT) protokolü ve Datagram Transport Layer (DTLS) protokolü, public key şifrelemesine dayanır. Schannel, tüm bu protokolleri sağlar. Tüm Schannel protokolleri, bir client/ server modeli kullanır. Tarafların kimliğini doğrularken, Schannel SSP aşağıdaki tercih sırasına göre bir protokol seçer
- Transport Layer Security (TLS) version 1.0
- Transport Layer Security (TLS) version 1.1
- Transport Layer Security (TLS) version 1.2
- Secure Socket Layer (SSL) version 2.0
- Secure Socket Layer (SSL) version 3.0
- Private Communications Technology (PCT)
Not : PCT varsayılan olarak devre dışıdır.
Seçilen protokol, istemcinin ve sunucunun destekleyebileceği, tercih edilen kimlik doğrulama protokolüdür. Örneğin, bir sunucu tüm Schannel protokollerini destekliyorsa ve istemci yalnızca SSL 3.0 ve SSL 2.0’ı destekliyorsa, kimlik doğrulama işlemi SSL 3.0 kullanır.
DTLS, uygulama tarafından açıkça çağrıldığında kullanılır.
Lokasyon: %windir%\Windows\System32\Schannel.dll
Not : TLS 1.2, Windows Server 2008 R2 ve Windows 7’de bu sağlayıcıda tanıtıldı. DTLS ise, Windows Server 2012 ve Windows 8’de bu sağlayıcıda tanıtıldı.
Negotiate Security Support Provider
Simple and Protected GSS-API Negotiation Mechanism (Basit ve Korumalı GSS-API Müzakere Mekanizması) (SPNEGO), belirli bir kimlik doğrulama protokolünü müzakere etmek için kullanılabilen negotiate (Anlaşma) SSP’sinin temelini oluşturur. Bir uygulama, bir ağda oturum açmak için SSPI’ya çağrı yaptığında, isteği işlemek için bir SSP belirleyebilir. Uygulama, SSP’yi Anlaşma’yı belirtirse, isteği analiz eder ve müşteri tarafından yapılandırılan güvenlik politikalarına göre isteği işlemek için uygun sağlayıcıyı seçer.
Windows işletim sistemlerinin desteklenen sürümlerinde, negotiate güvenlik desteği sağlayıcısı, Kerberos protokolü ile NTLM arasında seçim yapar. Negotiate, bu protokol kimlik doğrulamada yer alan sistemlerden biri tarafından kullanılamıyorsa veya arayan uygulama Kerberos protokolünü kullanmak için yeterli bilgi sağlamıyorsa, varsayılan olarak Kerberos protokolünü seçer.
Lokasyon: %windir%\Windows\System32\lsasrv.dll
Credential Security Support Provider – CredSSP
Credential Security Service Provider (Kimlik Bilgisi Güvenliği Hizmet Sağlayıcısı) (CredSSP), yeni Terminal Hizmetleri ve Uzak Masaüstü Hizmetleri oturumlarını başlatırken, single sign-on (SSO) kullanıcı deneyimi sağlar. CredSSP, uygulamaların, istemcinin ilkelerine bağlı olarak, kullanıcıların kimlik bilgilerini istemci bilgisayardan (istemci tarafı SSP’yi kullanarak) hedef sunucuya (sunucu tarafı SSP aracılığıyla) delege etmesini sağlar. CredSSP ilkeleri, Grup Policy kullanılarak yapılandırılır ve kimlik bilgilerinin temsili, varsayılan olarak kapalıdır.
Lokasyon: %windir%\Windows\System32\credssp.dll
Negotiate Extensions Security Support Provider
Negotiate Extensions (NegoExts), Microsoft ve diğer yazılım şirketleri tarafından uygulanan uygulamalar ve senaryolar için, NTLM veya Kerberos protokolü dışındaki SSP’lerin kullanımını müzakere eden bir kimlik doğrulama paketidir.
Negotiate paketinin bu uzantısı aşağıdaki senaryolara izin verir:
- Birleşik bir sistem içinde zengin istemci kullanılabilirliği: Belgelere, SharePoint siteleri üzerinden erişilebilir ve tam özellikli bir Microsoft Office uygulaması kullanılarak düzenlenebilir.
- Microsoft Office hizmetleri için zengin istemci desteği: Kullanıcılar, Microsoft Office hizmetlerinde oturum açabilir ve tam özellikli bir Microsoft Office uygulamasını kullanabilir.
- Hosted Microsoft Exchange Server ve Outlook: Exchange Server web üzerinde barındırıldığı için, herhangi bir etki alanı güveni kurulmamıştır. Outlook, kullanıcıların kimliğini doğrulamak için Windows Live hizmetini kullanır.
- İstemci bilgisayarlar ve sunucular arasında zengin istemci kullanılabilirliği: İşletim sisteminin ağ iletişimi ve kimlik doğrulama bileşenleri kullanılır.
Windows Negotiate paketi, NegoExts SSP’yi, Kerberos ve NTLM için olduğu gibi ele alır. NegoExts.dll, başlangıçta Yerel Sistem Yetkilisine (Local System Authority – LSA) yüklenir. NegoExts, isteğin kaynağına bağlı olarak bir kimlik doğrulama isteği alındığında, desteklenen SSP’ler arasında müzakere yapar. Kimlik bilgilerini ve ilkeleri toplar, şifreler ve bu bilgileri, security token’ın oluşturulduğu uygun SSP’ye gönderir.
NegoExts tarafından desteklenen SSP’ler, Kerberos ve NTLM gibi bağımsız SSP’ler değildir. Bu nedenle, NegoExts SSP içinde, kimlik doğrulama yöntemi herhangi bir nedenle başarısız olduğunda, bir kimlik doğrulama hatası mesajı görüntülenir veya günlüğe kaydedilir. Yeniden müzakere veya geri dönüş kimlik doğrulama (fallback authentication) yöntemleri mümkün değildir.
Lokasyon: %windir%\Windows\System32\negoexts.dll
PKU2U Security Support Provider
PKU2U protokolü, Windows 7 ve Windows Server 2008 R2’de bir SSP olarak tanıtıldı ve uygulandı. Bu SSP, özellikle Windows 7’de sunulan HomeGroup adlı medya ve dosya paylaşım özelliği aracılığıyla eşler arası kimlik doğrulamaya olanak tanır. Bu özellik, bir etki alanının üyesi olmayan bilgisayarlar arasında paylaşıma da izin verir.
Lokasyon: %windir%\Windows\System32\pku2u.dll
Security Support Provider selection
Windows SSPI, yüklü SSP’ler (Güvenlik Destek Sağlayıcıları) tarafından desteklenen herhangi bir protokolü kullanabilir. Ancak, tüm işletim sistemleri Windows Server çalıştıran herhangi bir bilgisayarla aynı SSP paketlerini desteklemediğinden, istemciler ve sunucular her ikisinin de desteklediği bir protokolü kullanmak için anlaşmak zorundadır. Windows Server, istemci bilgisayarları ve uygulamalarının, mümkün olduğunda güçlü standartlara dayalı bir protokol olan Kerberos protokolünü kullanmasını tercih eder. Ancak işletim sistemi, Kerberos protokolünü desteklemeyen istemci bilgisayarların ve istemci uygulamalarının, kimlik doğrulamasına izin vermeye de devam eder.
Kimlik doğrulama gerçekleşmeden önce, iletişim kuran iki bilgisayarın destekleyebileceği bir protokol üzerinde anlaşması gerekir. Herhangi bir protokolün SSPI aracılığıyla kullanılabilmesi için, her bilgisayarın uygun SSP’ye sahip olması gerekir. Örneğin, bir istemci bilgisayar ve sunucunun Kerberos kimlik doğrulama protokolünü kullanması için, her ikisinin de Kerberos v5’i desteklemesi gerekir. Windows Server, bir bilgisayarda hangi SSP’lerin desteklendiğini ve bu SSP’lerin yeteneklerinin neler olduğunu belirlemek için EnumerateSecurityPackages fonksiyonunu kullanır.
Bir kimlik doğrulama protokolünün seçimi, aşağıdaki iki yoldan biriyle gerçekleştirilebilir:
- Single authentication protocol
- Negotiate option
Single Authentication Protocol
Sunucuda, kabul edilebilir tek bir protokol belirtildiğinde, istemci bilgisayarın belirtilen protokolü desteklemesi gerekir, aksi takdirde iletişim başarısız olur. Kabul edilebilir tek bir protokol belirtildiğinde, kimlik doğrulama değişimi şu şekilde gerçekleşir:
- İstemci bilgisayar, bir hizmete erişim ister.
- Sunucu isteğe yanıt verir ve kullanılacak protokolü belirtir.
- İstemci bilgisayar yanıtın içeriğini inceler ve belirtilen protokolü destekleyip desteklemediğini kontrol eder. İstemci bilgisayar belirtilen protokolü destekliyorsa, kimlik doğrulama devam eder. İstemci bilgisayar protokolü desteklemiyorsa, istemci bilgisayarın kaynağa erişme yetkisi olup olmadığına bakılmaksızın kimlik doğrulama başarısız olur.
Negotiate option
Negotiate seçeneği, istemcinin ve sunucunun kabul edilebilir bir protokol bulmaya çalışmasına izin vermek için kullanılabilir. Bu, Basit ve Korumalı GSS-API negotiate mekanizmasına (SPNEGO) dayanmaktadır. Kimlik doğrulama, bir kimlik doğrulama protokolü için negotiate seçeneği ile başladığında, SPNEGO değişimi şu şekilde gerçekleşir:
- İstemci bilgisayar, bir hizmete erişim ister.
- Sunucu, destekleyebileceği bir kimlik doğrulama protokolleri listesi ve ilk tercihi olan protokole bağlı olarak, bir kimlik doğrulama sorgulaması veya yanıtı ile yanıt verir. Örneğin, sunucu Kerberos protokolünü ve NTLM’yi listeleyebilir ve bir Kerberos kimlik doğrulama yanıtı gönderebilir.
- İstemci bilgisayar, yanıtın içeriğini inceler ve belirtilen protokollerden herhangi birini destekleyip desteklemediğini kontrol eder.
- İstemci bilgisayar tercih edilen protokolü destekliyorsa, kimlik doğrulama işlemi devam eder.
- İstemci bilgisayar tercih edilen protokolü desteklemiyorsa, ancak sunucu tarafından listelenen diğer protokollerden birini destekliyorsa, istemci bilgisayar sunucunun hangi kimlik doğrulama protokolünü desteklediğini bilmesini sağlar ve kimlik doğrulama işlemi devam eder.
- İstemci bilgisayar listelenen protokollerin hiçbirini desteklemiyorsa, kimlik doğrulama değişimi başarısız olur.
Genel hatlarıyla, teorik aktaracağım bilgiler şimdilik bunlardan ibarettir.
Yararlı olması dileğiyle.
Yusuf İşleyen