FreeIPA Pentesting

AWS hacklemeyi sıfırdan kahraman olmaya öğrenin htARTE (HackTricks AWS Red Team Expert) ile!

HackTricks'ı desteklemenin diğer yolları:

Temel Bilgiler

FreeIPA, genellikle Unix ortamları için Microsoft Windows Active Directory'ye bir açık kaynak alternatiftir. Active Directory'ye benzer şekilde yönetim için bir MIT Kerberos Anahtar Dağıtım Merkezi ile birlikte tam bir LDAP dizini birleştirir. CA & 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ı, etki alanına kaydolmak için gerekli olan Kerberos istemci bilgilerini depolayan yerdir. Bu, KDC'lerin ve yönetici sunucuların konumlarını, varsayılan ayarları ve eşlemeleri içerir.

  • IPA istemcileri ve sunucuları için sistem genelinde varsayılanlar, /etc/ipa/default.conf konumundaki dosyada ayarlanmıştır.

  • Etki alanındaki ana bilgisayarlar, kimlik doğrulama süreçleri için /etc/krb5.keytab konumunda bir krb5.keytab dosyasına sahip olmalıdır.

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

İkili Dosyalar

ipa, kdestroy, kinit, klist, kpasswd, ksu, kswitch ve kvno gibi araçlar, FreeIPA etki alanlarını yönetmede, Kerberos biletlerini işlemede, şifreleri değiştirmede ve hizmet biletleri almak gibi işlevlerde merkezi rol oynar.

Tipik bir FreeIPA sunucusu kurulumunu tasvir etmek için bir görsel sağlanmıştır.

Kimlik Doğrulama

FreeIPA'da Kerberos'u kullanarak kimlik doğrulama, Active Directory'dekiyle benzerdir. Etki alanı kaynaklarına erişim için geçerli bir Kerberos biletine ihtiyaç vardır ve bu bilet, FreeIPA etki alanı yapılandırmasına bağlı olarak çeşitli konumlarda depolanabilir.

CCACHE Bilet Dosyaları

Genellikle /tmp içinde 600 izinlerle depolanan CCACHE dosyaları, taşınabilirlikleri nedeniyle kullanıcıların düz metin şifresi olmadan kimlik doğrulama için önemli olan Kerberos kimlik bilgilerini depolamak için kullanılan ikili formatlardır. Bir CCACHE biletini ayrıştırmak için klist komutu kullanılabilir ve geçerli bir CCACHE Biletini yeniden kullanmak için KRB5CCNAME'i bilet dosyasının yoluna ihraç etmek gerekir.

Unix Anahtarlık

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

Keytab

Kerberos prensiplerini ve şifrelenmiş anahtarları içeren Keytab dosyaları, prensibin şifresine ihtiyaç duymadan geçerli bilet alma işlemi için kritiktir. Keytab dosyalarından kimlik bilgilerini ayrıştırmak ve yeniden kullanmak, klist gibi yardımcı programlar ve KeytabParser gibi betiklerle kolayca gerçekleştirilebilir.

Hile Kağıdı

Linux'te biletleri nasıl kullanacağınız hakkında daha fazla bilgiyi aşağıdaki bağlantıda bulabilirsiniz:

pageLinux Active Directory

Numaralandırma

Numaralandırmayı ldap ve diğer ikili araçlar aracılığıyla veya FreeIPA sunucusunun 443 numaralı bağlantı noktasına bağlanarak gerçekleştirebilirsiniz.

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 konteynerlere yerleştirilir. Bunlar Organizasyon Birimleri (OU) ile benzerdir.

FreeIPA'da varsayılan olarak, LDAP sunucusu anonim bağlantılara izin verir ve kimlik doğrulama yapılmadan büyük bir veri yelpazesi numaralandırılabilir. Bu, kimlik doğrulama yapılmadan mevcut tüm verilerin numaralandırılmasını sağlar:

ldapsearch -x

Daha fazla bilgi edinmek için bir kimlik doğrulama oturumu kullanmanız gerekmektedir (kimlik doğrulama oturumu nasıl hazırlanacağını öğrenmek için Kimlik Doğrulama bölümüne bakınız).

# 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"

Bir etki alanına katılmış makineden, etki alanını sıralamak için kurulu ikili dosyaları kullanabilirsiniz:

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 adminlerine eşdeğerdir.

Hash'ler

IPA sunucusu'ndaki root kullanıcısı, şifre hash'lerine erişebilir.

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

  • Şifrenin Nthash'i, sistem AD ile entegre ise "ipaNTHash" içinde base64 olarak saklanır.

Bu hash'leri kırmak için:

  • Eğer FreeIPA AD ile entegre edilmişse, ipaNTHash kolayca kırılabilir: base64çözümleyin -> ASCII hex olarak yeniden kodlayın -> John The Ripper veya hashcat size hızlıca kırmak için yardımcı olabilir

  • Eğer eski bir FreeIPA sürümü kullanılıyorsa, yani SSHA512 kullanılıyorsa: base64'ü çözümleyin -> SSHA512 hash'ini bulun -> John The Ripper veya hashcat size kırmak için yardımcı olabilir

  • Eğer yeni bir FreeIPA sürümü kullanılıyorsa, yani PBKDF2_SHA256 kullanılıyorsa: base64'ü çözümleyin -> PBKDF2_SHA256'yı bulun -> uzunluğu 256 bayttır. John, 256 bit (32 bayt) ile çalışabilir -> Pseudo-rastgele fonksiyon olarak SHA-265 kullanılır, blok boyutu 32 bayttır -> PBKDF2_SHA256 hash'inin sadece ilk 256 bit'ini kullanabilirsiniz -> John The Ripper veya hashcat size kırmak için yardımcı olabilir

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

HBAC-Kuralları

Bu kurallar, belirli izinleri kullanıcılara veya kaynaklara (ana bilgisayarlar, hizmetler, hizmet grupları...) sağlar.

# 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-Kuralları

FreeIPA, sudo-kuralları aracılığıyla sudo izinleri üzerinde merkezi kontrol sağlar. Bu kurallar, etki alanı içindeki ana bilgisayarlarda sudo ile komutların yürütülmesine izin verir veya sınırlar. Bir saldırgan, bu kuralları inceleyerek ilgili ana bilgisayarları, kullanıcıları ve izin verilen komutları tespit edebilir.

# 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 Bilgisayarlara, Ana Bilgisayar Gruplarına ve Hizmetlere atanabilir. Örneğin, bu yapıyı açıklamak için FreeIPA'daki varsayılan "Kullanıcı Yöneticisi" rolünü düşünelim.

Kullanıcı Yöneticisi rolünün şu ayrıcalıkları vardır:

  • Kullanıcı Yöneticileri

  • Grup Yöneticileri

  • Aşama Kullanıcı Yöneticileri

Aşağıdaki komutlarla rolleri, ayrıcalıkları ve izinleri sıralamak mümkündür:

# 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 adını tehlikeye atmak için bazı izinleri kötüye kullanma basit bir örneği bulabilirsiniz.

Linikatz/LinikatzV2

İst Privileges Yükseltme

root kullanıcısı oluşturma

Eğer root adında yeni bir kullanıcı oluşturabilirseniz, onun kimliğini alabilir ve herhangi bir makineye root olarak SSH ile bağlanabilirsiniz.

BU SORUN GİDERİLMİŞTİR.

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

Referanslar

AWS hacklemeyi sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Red Team Expert) ile!

HackTricks'i desteklemenin diğer yolları:

Last updated