FreeIPA Pentesting

HackTricks'i Destekleyin

Temel Bilgiler

FreeIPA, esasen Unix ortamları için Microsoft Windows Active Directory'ye açık kaynaklı bir alternatifdir. Active Directory'ye benzer bir yönetim için tam bir LDAP dizini ile MIT Kerberos Anahtar Dağıtım Merkezi'ni birleştirir. CA ve RA sertifika yönetimi için Dogtag Sertifika Sistemi'ni kullanarak, akıllı kartlar da dahil olmak üzere çok faktörlü kimlik doğrulamayı destekler. Unix kimlik doğrulama süreçleri için SSSD entegre edilmiştir.

Parmak İzi

Dosyalar ve Ortam Değişkenleri

  • /etc/krb5.conf dosyası, alan kaydı için gerekli Kerberos istemci bilgilerini saklar. Bu, KDC'lerin ve yönetici sunucularının konumlarını, varsayılan ayarları ve eşlemeleri içerir.

  • IPA istemcileri ve sunucuları için sistem genelindeki varsayılan ayarlar /etc/ipa/default.conf dosyasında ayarlanır.

  • Alan içindeki ana bilgisayarların kimlik doğrulama süreçleri için /etc/krb5.keytab konumunda bir krb5.keytab dosyasına sahip olması gerekir.

  • Kerberos kimlik doğrulamasıyla ilgili belirli dosyalara ve ayarlara işaret eden çeşitli ortam değişkenleri (KRB5CCNAME, KRB5_KTNAME, KRB5_CONFIG, KRB5_KDC_PROFILE, KRB5RCACHETYPE, KRB5RCACHEDIR, KRB5_TRACE, KRB5_CLIENT_KTNAME, KPROP_PORT) kullanılır.

İkili Dosyalar

ipa, kdestroy, kinit, klist, kpasswd, ksu, kswitch ve kvno gibi araçlar, FreeIPA alanlarını yönetmek, Kerberos biletlerini işlemek, şifreleri değiştirmek ve hizmet biletleri almak gibi işlevler için merkezi öneme sahiptir.

Tipik bir FreeIPA sunucu kurulumu gösteren bir illüstrasyon sağlanmıştır.

Kimlik Doğrulama

FreeIPA'daki kimlik doğrulama, Kerberos'u kullanarak Active Directory'deki gibi çalışır. Alan kaynaklarına erişim, FreeIPA alan yapılandırmasına bağlı olarak çeşitli konumlarda saklanabilen geçerli bir Kerberos biletini gerektirir.

CCACHE Bilet Dosyaları

CCACHE dosyaları, genellikle /tmp konumunda 600 izinleriyle saklanır ve Kerberos kimlik bilgilerini saklamak için ikili formatlardır; bu, kullanıcıların düz metin şifreleri olmadan kimlik doğrulama yapmalarını sağlar. Bir CCACHE biletini ayrıştırmak için klist komutu kullanılabilir ve geçerli bir CCACHE Biletini yeniden kullanmak, KRB5CCNAME'i bilet dosyasının yoluna dışa aktarmayı içerir.

Unix Anahtarı

Alternatif olarak, CCACHE Biletleri Linux anahtarında saklanabilir ve bilet yönetimi üzerinde daha fazla kontrol sağlar. Bilet saklama kapsamı değişir (KEYRING:name, KEYRING:process:name, KEYRING:thread:name, KEYRING:session:name, KEYRING:persistent:uidnumber), klist bu bilgiyi kullanıcı için ayrıştırabilir. Ancak, Unix anahtarından bir CCACHE Biletini yeniden kullanmak zorluklar çıkarabilir; Kerberos biletlerini çıkarmak için Tickey gibi araçlar mevcuttur.

Keytab

Kerberos ilkelerini ve şifrelenmiş anahtarları içeren keytab dosyaları, geçerli bilet verme biletleri (TGT) almak için kritik öneme sahiptir ve ilkenin şifresini gerektirmez. Keytab dosyalarından kimlik bilgilerini ayrıştırmak ve yeniden kullanmak, klist gibi yardımcı programlar ve KeytabParser gibi betikler ile kolayca gerçekleştirilebilir.

Hızlı Referans

Linux'ta biletleri nasıl kullanacağınız hakkında daha fazla bilgi bulabilirsiniz:

Linux Active Directory

Sayım

sayım işlemini ldap ve diğer ikili araçlar aracılığıyla gerçekleştirebilir veya FreeIPA sunucusunun 443 numaralı portundaki web sayfasına bağlanarak yapabilirsiniz.

Ana Bilgisayarlar, Kullanıcılar ve Gruplar

ana bilgisayarlar, kullanıcılar ve gruplar oluşturmak mümkündür. Ana bilgisayarlar ve kullanıcılar, sırasıyla “Ana Bilgisayar Grupları” ve “Kullanıcı Grupları” olarak adlandırılan kapsayıcılara ayrılır. Bunlar, Organizasyonel Birimler (OU) ile benzerdir.

FreeIPA'da varsayılan olarak, LDAP sunucusu anonim bağlamalara izin verir ve büyük bir veri yelpazesi kimlik doğrulamasız olarak sayılabilir. Bu, kimlik doğrulamasız olarak mevcut olan tüm verileri sayabilir:

ldapsearch -x

Daha fazla bilgi almak için kimlik doğrulamalı bir oturum kullanmanız gerekir (kimlik doğrulama bölümünü kontrol edin, kimlik doğrulamalı bir oturumun nasıl hazırlanacağını öğrenin).

# Get all users of domain
ldapsearch -Y gssapi -b "cn=users,cn=compat,dc=domain_name,dc=local"

# Get users groups
ldapsearch -Y gssapi -b "cn=groups,cn=accounts,dc=domain_name,dc=local"

# Get all the hosts
ldapsearch -Y gssapi -b "cn=computers,cn=accounts,dc=domain_name,dc=local"

# Get hosts groups
ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local"

Domain'a katılmış bir makineden kurulu ikilileri kullanarak alanı listeleyebilirsiniz:

ipa user-find
ipa usergroup-find
ipa host-find
ipa host-group-find

-------------------

ipa user-show <username> --all
ipa usergroup-show <user group> --all
ipa host-find <host> --all
ipa hostgroup-show <host group> --all

FreeIPA'nın admin kullanıcısı, AD'den domain admin'lere eşdeğerdir.

Hashes

IPA sunucusundaki root kullanıcısı, şifre hash'lerine erişime sahiptir.

  • Bir kullanıcının şifre hash'i, “userPasswordözelliği içinde base64 olarak saklanır. Bu hash SSHA512 (eski FreeIPA sürümleri) veya PBKDF2_SHA256 olabilir.

  • Sistem AD ile entegrasyon içindeyse, şifre ipaNTHash olarak base64 içinde saklanır.

Bu hash'leri kırmak için:

• Eğer freeIPA AD ile entegre ise, ipaNTHash'i kırmak kolaydır: base64decode etmelisiniz -> ASCII hex olarak yeniden kodlayın -> John The Ripper veya hashcat hızlı bir şekilde kırmanıza yardımcı olabilir.

• Eski bir FreeIPA sürümü kullanılıyorsa, SSHA512 kullanılır: base64'ü decode etmelisiniz -> SSHA512 hash'ini bulmalısınız -> John The Ripper veya hashcat kırmanıza yardımcı olabilir.

• Yeni bir FreeIPA sürümü kullanılıyorsa, PBKDF2_SHA256 kullanılır: base64'ü decode etmelisiniz -> PBKDF2_SHA256'yı bulmalısınız -> uzunluğu 256 byte'dır. John 256 bit (32 byte) ile çalışabilir -> SHA-265, psödo-rastgele fonksiyon olarak kullanılır, blok boyutu 32 byte'dır -> PBKDF2_SHA256 hash'imizin yalnızca ilk 256 bit'ini kullanabilirsiniz -> John The Ripper veya hashcat kırmanıza yardımcı olabilir.

Hash'leri çıkarmak için FreeIPA sunucusunda root olmanız gerekir, burada dbscan aracını kullanarak bunları çıkarabilirsiniz:

HBAC-Rules

Kullanıcılara veya hostlara kaynaklar (hostlar, hizmetler, hizmet grupları...) üzerinde belirli izinler veren kurallardır.

# Enumerate using ldap
ldapsearch -Y gssapi -b "cn=hbac,dc=domain_name,dc=local"
# Using ipa
ipa hbacrule-find
# Show info of rule
ipa hbacrule-show <hbacrule> --all

Sudo-Rules

FreeIPA, sudo izinleri üzerinde merkezi kontrol sağlar. Bu kurallar, alan içindeki hostlarda sudo ile komutların yürütülmesini sağlar veya sınırlar. Bir saldırgan, bu kuralları inceleyerek geçerli hostları, kullanıcıları ve izin verilen komutları belirleyebilir.

# Enumerate using ldap
ldapsearch -Y gssapi -b "cn=sudorules,cn=sudo,dc=domain_name,dc=local"
# Using ipa
ipa sudorule-find
# Show info of rule
ipa sudorule-show <sudorule> --all

Rol Tabanlı Erişim Kontrolü

Bir rol, çeşitli ayrıcalıklardan oluşur; her biri bir dizi izin içerir. Bu roller Kullanıcılara, Kullanıcı Gruplarına, Ana Bilgilere, Ana Bilgi Gruplarına ve Hizmetlere atanabilir. Örneğin, bu yapıyı örneklendirmek için FreeIPA'daki varsayılan “Kullanıcı Yöneticisi” rolünü ele alalım.

Kullanıcı Yöneticisi rolü bu ayrıcalıklara sahiptir:

  • Kullanıcı Yöneticileri

  • Grup Yöneticileri

  • Aşama Kullanıcı Yöneticileri

Aşağıdaki komutlarla roller, ayrıcalıklar ve izinler listelenebilir:

# Using ldap
ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local"
# Using ipa binary
ipa role-find
ipa role-show <role> --all
ipa privilege-find
ipa privilege-show <privilege> --all
ipa permission-find
ipa permission-show <permission> --all

Saldırı Senaryosu Örneği

https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e adresinde, alanı tehlikeye atmak için bazı izinlerin nasıl kötüye kullanılacağına dair basit bir örnek bulabilirsiniz.

Linikatz/LinikatzV2

Privesc

root kullanıcı oluşturma

Eğer root adında yeni bir kullanıcı oluşturabiliyorsanız, onu taklit edebilir ve herhangi bir makineye root olarak SSH ile bağlanabilirsiniz.

BU DÜZENLENMİŞTİR.

Detaylı bir açıklamayı https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b adresinde kontrol edebilirsiniz.

Referanslar

HackTricks'i Destekleyin

Last updated