Kerberos Delegasyonu Nedir? Kerberos Delegasyonuna Genel Bakış


Kerberos Delegasyonunun Amacı

Kerberos delegasyonu uzun süredir ortalıkta (tam olarak Windows Server 2000'den bu yana). Ancak çoğu zaman Active Directory ile çalışan mühendisler, Kerberos delegasyonunun çeşitli uygulamalarına, bunların kullanımlarına ve kötüye kullanılma yollarına aşina değildir. Hatta bazıları Kerberos delegasyonunu devredilen izinlerle karıştırıyor.

Kerberos delegasyonunun pratik kullanımı, bir uygulamanın farklı bir sunucuda barındırılan kaynaklara erişmesini sağlamaktır. Bunun bir örneği, web sunucusu gibi bir uygulamanın, SQL veritabanı gibi başka bir yerde barındırılan web sitesinin kaynaklarına erişmesi gerektiğidir. Web sunucusunu çalıştıran hizmet hesabına doğrudan veritabanına erişim izni vermek yerine, bu hizmet hesabının SQL sunucu hizmetine devredilmesine izin verebilirsiniz. Bir kullanıcı web sitesinde oturum açtığında, hizmet hesabı o kullanıcı adına SQL sunucusu hizmetine erişim talebinde bulunacaktır. Bu, kullanıcının, web sunucusunun hizmet hesabına herhangi bir erişim sağlamak zorunda kalmadan, kendisine sağlanan veritabanındaki içeriğe erişmesine olanak tanır.

Kerberos Delegasyonu Türleri

Kerberos delegasyonunun birkaç çeşidi yıllar içinde gelişti. Windows Server 2000'in orijinal uygulaması, kısıtlanmamış delegasyondur. O zamandan bu yana, güvenliği artıran daha katı yetkilendirme versiyonları ortaya çıktı: kısıtlı yetkilendirme ve kaynak tabanlı kısıtlı yetkilendirme. Aşağıda her bir delegasyon türünü daha ayrıntılı olarak ele alacağım.

Bir bilgisayarda veya kullanıcı hesabında temsilci atamayı yapılandırmak için aşağıda gösterildiği gibi Active Directory Kullanıcıları ve Bilgisayarları'ndaki Temsilci sekmesini kullanın. Kullanıcı hesaplarının bir servicePrincipalName (SPN) ayarına sahip olması gerektiğini unutmayın.

Şekil 1. Active Directory Kullanıcıları ve Bilgisayarlarındaki Yetkilendirme sekmesi

İlk seçenek (sarı renkte), bir hesabı, yetkilendirme için güvenilmesine izin VERİLMEYECEK şekilde yapılandırmanıza olanak tanır; bu en yaygın olarak, asla yetki vermek için kullanılmaması gereken hassas veya idari hesaplar için kullanılır. İkinci seçenek (yeşil), kısıtlanmamış yetkilendirme için bir hesap yapılandırmanıza olanak tanır. Üçüncü seçenek (kırmızı), kısıtlı yetkilendirme için bir hesap yapılandırmanıza olanak tanır.

Kısıtsız Delegasyon

Bu, delegasyonun orijinal uygulamasıdır ve aynı zamanda en az güvenli olanıdır. Kısıtlanmamış delegasyon aslında ne yapar? Kapakların altında, kısıtlanmamış yetkilendirme yapılandırıldığında, nesnenin userAccountControl özelliği “TRUSTED_FOR_DELEGATION” bayrağını içerecek şekilde güncellenir. Bir nesne, kısıtlanmamış yetkilendirme yapılandırılmış bir ana bilgisayar için kimlik doğrulaması yaptığında, bu hesap için bilet verme bileti (TGT) bellekte saklanır, böylece kısıtlanmamış yetkilendirme yapılandırılmış ana bilgisayar, gerekirse daha sonra bu kullanıcının kimliğine bürünebilir.

Ayrıcalıklı bir hesabın, kısıtlanmamış yetkilendirme yapılandırılmış bir ana makinede kimlik doğrulaması yaptığı bir senaryo hayal edin. Bu hesap, ayrıcalıklı kullanıcı olarak etki alanı içindeki yapılandırılmış herhangi bir hizmete erişebilir. Bir adım daha ileri gitmek gerekirse, ayrıcalıklı hesapları ana makinenizde otomatik olarak kimlik doğrulaması yapmaya zorlamanın yolları olsaydı ne olurdu? "Yazıcı hatasını" kullanarak, ana makinenizde kimlik doğrulaması yapacak bir etki alanı denetleyicisi edinebilir ve bu hesabın TGT'sini bellekte bırakabilirsiniz.

"Yazıcı hatası" gibi mekanizmalar mevcut olduğundan, kısıtlanmamış yetkilendirme son derece güvensizdir ve mümkünse kullanılmamalıdır. Unutulmaması gereken bir nokta, etki alanı denetleyicilerinin varsayılan olarak kısıtlanmamış temsilci ile yapılandırılmış olmasıdır. Ancak etki alanı denetleyicilerinizin, hizmet barındıran rastgele bir uygulama sunucusundan çok daha güvenli olması gerektiğinden, bu bir sorun olmamalıdır.

Kısıtlı Delegasyon

Windows Server 2003'te tanıtılan kısıtlı yetkilendirme, bir hesabın hangi hizmetlere atanabileceğini yapılandırmanıza olanak tanır. Bu, teorik olarak, bir uzlaşma meydana gelmesi durumunda potansiyel maruziyeti sınırlar.

Şekil 2. TestUserA, HTTP/test hizmetine devredilebilir.

Kısıtlı delegasyon için dikkat edilmesi gereken bir kısıtlama, ormanlar arası çalışmamasıdır.

Bir hesapta kısıtlı yetkilendirme ayarlandığında gizli iki şey gerçekleşir:

  • Nesnenin userAccountControl özelliği “TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION” bayrağıyla güncellenir.
  • msDS-AllowedToDelegateTo özniteliği, temsilci sekmesinde yapılandırılan SPN ile doldurulur.

Kısıtlanmış yetkilendirmeyi kötüye kullanmak, kısıtlanmamış yetkilendirmeyi kötüye kullanmaktan farklıdır. Kötüye kullanılmasının yaygın bir yolu, saldırganların kısıtlı yetkilendirme için yapılandırılmış bir kullanıcı hesabının düz metin parolasını veya NTLM karmasını ele geçirebilmesidir. Kekeo gibi bir araç kullanarak şifreye sahip oldukları hesap için TGT talebinde bulunabilir, herhangi bir kullanıcı için TGS isteğini yürütebilir (kullanıcı "Hassas" olarak işaretlenmediği sürece) ve ardından bileti enjekte edip erişim sağlayabilirler söz konusu kullanıcı olarak talep ettikleri hizmet.

Kaynak Tabanlı Kısıtlı Yetkilendirme

Windows Server 2012'de tanıtılan kaynak tabanlı kısıtlı yetkilendirme, kısıtlı yetkilendirmeyi nasıl yapılandırabileceğinizi değiştirir ve bir güven üzerinden çalışacaktır. Hangi nesnenin hangi hizmete yetki verebileceğini belirtmek yerine, hizmeti barındıran kaynak hangi nesnelerin kendisine yetki verebileceğini belirtir. Yönetim açısından bakıldığında bu, kaynak sahibinin ona kimlerin erişebileceğini kontrol etmesine olanak tanır. Örneğin, WebSunucusu hizmet hesabının veritabanına erişim için SQL Hizmetine temsilci seçebileceğini kısıtlı yetkilendirmeyle belirtmek yerine, SQL sunucusu hizmet hesabında WebSunucusu hizmet hesabının erişim yetkisi verme izinlerine sahip olduğunu belirtebilirsiniz.

Kaynak tabanlı kısıtlı temsilci seçme, hedef kaynaktaki msDS-AllowedToActOnBehalfOfOtherIdentity özniteliğinin kendisine temsilci atamasına izin verilen nesnenin SID'si ile doldurulmasıyla yapılandırılır. Kaynak tabanlı kısıtlı yetkilendirmeyi yapılandırmak için PowerShell'i kullanmanız gerekir; Active Directory Kullanıcıları ve Bilgisayarları içinde GUI bileşeni yoktur ve Öznitelik Düzenleyicisi sayfası bu özniteliğin manuel olarak değiştirilmesine izin vermez.

Kaynak Tabanlı Kısıtlı Yetkilendirme ve onu kötüye kullanma yolları hakkında daha fazla bilgiyi buradan edinebilirsiniz.

Mevcut Kerberos Delegasyonunu Tanımlama

Artık farklı yetki türlerine ilişkin bazı temel bilgileri ve bunların kötüye kullanılabileceği yolları anladığınıza göre, ortamınızda halihazırda ne tür yetkilendirmelerin yapılandırılmış olduğu konusunda fikir sahibi olmak için kullanabileceğiniz bir yöntemi sizinle paylaşmak istiyorum. Etki alanı denetleyicileri dışındaki nesnelerde yapılandırılan kısıtlanmamış yetkilendirme gibi güvenli olmayan senaryoları özellikle vurgulamaya çalışacağız.

Burada, ilk olarak Microsoft Technet galerisinde yayınlanan, kısıtlanmamış, kısıtlanmış ve kaynak tabanlı kısıtlı yetkilendirme yapılandırılmış hesapları tanımlayacak ve listelediği yapılandırmalarla ilgili bilgileri ve olası uyarıları vurgulayacak bir komut dosyası bulunmaktadır:

<#
.Synopsis
    Search the domain for accounts with Kerberos Delegation.
.DESCRIPTION
    Kerberos Delegation is a security sensitive configuration. Especially
    full (unconstrained) delegation has significant impact: any service
    that is configured with full delegation can take any account that
    authenticates to it, and impersonate that account for any other network
    service that it likes. So, if a Domain Admin were to use that service,
    the service in turn could read the hash of KRBRTG and immediately
    effectuate a golden ticket. Etc :)
    This script searches AD for regular forms of delegation: full, constrained,
    and resource based. It dumps the account names with relevant information (flags)
    and adds a comment field for special cases. The output is a PSObject that
    you can use for further analysis.
    Note regarding resource based delegation: the script dumps the target
    services, not the actual service doing the delegation. I did not bother
    to parse that out.
    Main takeaway: chase all services with unconstrained delegation. If
    these are _not_ DC accounts, reconfigure them with constrained delegation,
    OR claim them als DCs from a security perspective. Meaning, that the AD
    team manages the service and the servers it runs on.
.EXAMPLE
   .Search-KerbDelegatedAccounts.ps1 | out-gridview
.EXAMPLE
   .Search-KerbDelegatedAccounts.ps1 -DN "ou=myOU,dc=sol,dc=local"
.NOTES
    Version:   0.1 : first version.
                    0.2 : expanded LDAP filter and comment field.
    Author:         Willem Kasdorp, Microsoft.
    Creation Date:  1/10/2016
    Last modified:  4/11/2017
#>
[CmdletBinding()]
Param
(
    # start the search at this DN. Default is to search all of the domain.
    [string]$DN = (Get-ADDomain).DistinguishedName
)
$SERVER_TRUST_ACCOUNT = 0x2000
$TRUSTED_FOR_DELEGATION = 0x80000
$TRUSTED_TO_AUTH_FOR_DELEGATION= 0x1000000
$PARTIAL_SECRETS_ACCOUNT = 0x4000000 
$bitmask = $TRUSTED_FOR_DELEGATION -bor $TRUSTED_TO_AUTH_FOR_DELEGATION -bor $PARTIAL_SECRETS_ACCOUNT
# LDAP filter to find all accounts having some form of delegation.
# 1.2.840.113556.1.4.804 is an OR query.
$filter = @"
(&
  (servicePrincipalname=*)
  (|
    (msDS-AllowedToActOnBehalfOfOtherIdentity=*)
    (msDS-AllowedToDelegateTo=*)
    (UserAccountControl:1.2.840.113556.1.4.804:=$bitmask)
  )
  (|
    (objectcategory=computer)
    (objectcategory=person)
    (objectcategory=msDS-GroupManagedServiceAccount)
    (objectcategory=msDS-ManagedServiceAccount)
  )
)
"@ -replace "[sn]", ''
$propertylist = @(
    "servicePrincipalname",
    "useraccountcontrol",
    "samaccountname",
    "msDS-AllowedToDelegateTo",
    "msDS-AllowedToActOnBehalfOfOtherIdentity"
)
Get-ADObject -LDAPFilter $filter -SearchBase $DN -SearchScope Subtree -Properties $propertylist -PipelineVariable account | ForEach-Object {
    $isDC = ($account.useraccountcontrol -band $SERVER_TRUST_ACCOUNT) -ne 0
    $fullDelegation = ($account.useraccountcontrol -band $TRUSTED_FOR_DELEGATION) -ne 0
    $constrainedDelegation = ($account.'msDS-AllowedToDelegateTo').count -gt 0
    $isRODC = ($account.useraccountcontrol -band $PARTIAL_SECRETS_ACCOUNT) -ne 0
    $resourceDelegation = $account.'msDS-AllowedToActOnBehalfOfOtherIdentity' -ne $null
    $comment = ""
    if ((-not $isDC) -and $fullDelegation) {
        $comment += "WARNING: full delegation to non-DC is not recommended!; "
    }
    if ($isRODC) {
        $comment += "WARNING: investigation needed if this is not a real RODC; "
    }
    if ($resourceDelegation) {
        # to count it using PS, we need the object type to select the correct function... broken, but there we are.
        $comment += "INFO: Account allows delegation FROM other server(s); "
    }
    if ($constrainedDelegation) {
        $comment += "INFO: constrained delegation service count: $(($account.'msDS-AllowedToDelegateTo').count); "
    }
    [PSCustomobject] @{
        samaccountname = $account.samaccountname
        objectClass = $account.objectclass       
        uac = ('{0:x}' -f $account.useraccountcontrol)
        isDC = $isDC
        isRODC = $isRODC
        fullDelegation = $fullDelegation
        constrainedDelegation = $constrainedDelegation
        resourceDelegation = $resourceDelegation
        comment = $comment
    }
}

Şekil 3. Sorunlu yetkilendirmeyi tanımlamak için örnek komut dosyası

Netwrix nasıl yardımcı olabilir?

Netwrix Active Directory güvenlik çözümü, Active Directory'nizi uçtan uca korumanıza yardımcı olur. Yapabilirsiniz:

  • Active Directory'nizdeki güvenlik açıklarını belirleyin ve azaltın: aşırı izinler, "gölge" yöneticiler, eski hesaplar, zayıf parolalar ve daha fazlası.
  • AD yapılandırmalarını ve izinlerini kontrol edin, güçlü parola politikaları uygulayın ve kimlik bilgileri hırsızlığını önleyin.
  • Kötü aktörleri görevlerini tamamlamadan önce durdurmak için gelişmiş tehditleri bile tespit edin.
  • Otomatik yanıt eylemleriyle bir güvenlik ihlalini anında kontrol altına alarak işletmenize verilen zararı en aza indirin.
  • Minimum kesinti süresiyle kötü niyetli veya başka türlü uygunsuz değişiklikleri geri alın veya kurtarın.

İlgili makaleler