hacktricks/linux-hardening/freeipa-pentesting.md
2024-02-10 18:14:16 +00:00

13 KiB
Raw Blame History

FreeIPA Pentesting

AWS hackleme becerilerinizi sıfırdan kahraman seviyesine kadar öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!

HackTricks'ı desteklemenin diğer yolları:

Temel Bilgiler

FreeIPA, öncelikle Unix ortamları için Microsoft Windows Active Directory'ye bir açık kaynaklı 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 ve RA sertifika yönetimi için Dogtag Certificate System kullanarak, akıllı kartlar da dahil olmak üzere çok faktörlü kimlik doğrulama 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 gereken Kerberos istemci bilgilerini depolayan yerdir. 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 genelinde varsayılanlar, /etc/ipa/default.conf konumunda bulunan dosyada ayarlanı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ğrulamasıyla 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önetme, Kerberos biletleriyle ilgili işlemler yapma, şifreleri değiştirme ve hizmet biletleri alma gibi işlevlerde merkezi bir rol oynar.

Tipik bir FreeIPA sunucusu kurulumunu göstermek için bir görsel sağlanmaktadır.

Kimlik Doğrulama

FreeIPA'da Kerberos kullanarak kimlik doğrulama, Active Directory ile benzerlik gösterir. Etki alanı kaynaklarına erişim için geçerli bir Kerberos bileti gereklidir ve bu bilet, FreeIPA etki alanı yapılandırmasına bağlı olarak çeşitli konumlarda depolanabilir.

CCACHE Bilet Dosyaları

CCACHE dosyaları, taşınabilirlikleri nedeniyle kullanıcının düz metin parolası olmadan kimlik doğrulama için önemli olan Kerberos kimlik bilgilerini depolamak için kullanılan /tmp gibi genellikle 600 izinli ikili formatlardır. Bir CCACHE bileti 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 gereklidir.

Unix Anahtar Halkası

Alternatif olarak, CCACHE Biletleri Linux anahtar halkasında depolanabilir ve bu, bilet yönetimi konusunda daha fazla kontrol sağlar. Bilet depolama kapsamı değişir (KEYRING:ad, KEYRING:süreç:ad, KEYRING:iş parçacığı:ad, KEYRING:oturum:ad, KEYRING:kalıcı:uidnumarası) ve kullanıcı için bu bilgileri ayrıştırmak için klist kullanılabilir. Bununla birlikte, Unix anahtar halkasından bir CCACHE Biletini yeniden kullanmak zorluklar yaratabilir ve Kerberos biletlerini çıkarmak için Tickey gibi araçlar mevcuttur.

Keytab

Kerberos prensiplerini ve şifrelenmiş anahtarları içeren keytab dosyaları, prensibin parolasına ihtiyaç duymadan geçerli bir 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'ta biletleri nasıl kullanacağınız hakkında daha fazla bilgiyi aşağıdaki bağlantıda bulabilirsiniz:

{% content-ref url="privilege-escalation/linux-active-directory.md" %} linux-active-directory.md {% endcontent-ref %}

Numaralandırma

{% hint style="warning" %} 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. {% endhint %}

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ı" adı verilen konteynerlara yerleştirilir. Bunlar, Organizasyon Birimleri (OU) ile benzerdir.

FreeIPA'da, LDAP sunucusu varsayılan olarak anonim bağlantılara izin verir ve kimlik doğrulama yapılmadan büyük bir veri yelpazesi numaralandırılabilir. Bu, kimlik doğrulamasız olarak mevcut olan tüm verileri numaralandırabilir:

ldapsearch -x

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

# 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ış bir 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

{% hint style="info" %} FreeIPA'nın admin kullanıcısı, AD'deki domain adminlerine eşdeğerdir. {% endhint %}

Hashler

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

  • Bir kullanıcının şifre hash'i "userPassword" özniteliğinde base64 olarak saklanır. Bu hash, SSHA512 (eski FreeIPA sürümleri) veya PBKDF2_SHA256 olabilir.
  • Şifrenin Nthashi, sistem AD ile entegre ise "ipaNTHash" olarak base64 olarak saklanır.

Bu hash'leri kırmak için:

  • FreeIPA AD ile entegre ise, ipaNTHash kolayca kırılabilir: Base64çözümle -> ASCII hex olarak yeniden kodla -> John The Ripper veya hashcat hızlıca kırmanıza yardımcı olabilir.

  • Eski bir FreeIPA sürümü kullanılıyorsa, SSHA512 kullanılır: Base64çözümle -> SSHA512 hash'ini bul -> 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çözümle -> PBKDF2_SHA256'yı bul -> uzunluğu 256 bayttır. John, 256 bit (32 bayt) ile çalışabilir -> Pseudo-rastgele işlev olarak SHA-265 kullanılır, blok boyutu 32 bayttır -> PBKDF2_SHA256 hash'inin sadece ilk 256 bitini kullanabilirsiniz -> John The Ripper veya hashcat kırmanıza yardımcı olabilir.

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

HBAC-Kuralları

Bu kurallar, kullanıcılara veya kaynaklara (sunucular, hizmetler, hizmet grupları...) 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-Kuralları

FreeIPA, sudo-kuralları aracılığıyla merkezi kontrol sağlayarak sudo izinlerini etkinleştirir. Bu kurallar, etki alanı içindeki ana bilgisayarlarda sudo ile komutların yürütülmesini 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ıkları içeren bir dizi izini kapsar. Bu roller, Kullanıcılara, Kullanıcı Gruplarına, Sunuculara, Sunucu Gruplarına ve Hizmetlere atanabilir. Örneğin, bu yapıyııklamak için FreeIPA'daki varsayılan "Kullanıcı Yöneticisi" rolünü düşünelim.

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

  • 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ı Senaryo Örneği

https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e adresinde, bir alanı tehlikeye atmak için bazı izinleri kötüye nasıl kullanacağınızın basit bir örneğini bulabilirsiniz.

Linikatz/LinikatzV2

Privilege Escalation (Privesc)

root kullanıcısı oluşturma

{% hint style="warning" %} Eğer root adında yeni bir kullanıcı oluşturabilirseniz, onun yerine geçebilir ve herhangi bir makineye root olarak SSH ile bağlanabilirsiniz.

BU DÜZELTİLDİ. {% endhint %}

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

Referanslar

AWS hackleme konusunda sıfırdan kahraman olmak için htARTE (HackTricks AWS Red Team Expert)'ı öğrenin!

HackTricks'i desteklemenin diğer yolları: