13 KiB
FreeIPA Pentesting
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya Twitter'da bizi takip edin 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşarak HackTricks ve HackTricks Cloud github reposuna PR gönderin.
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 birkrb5.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.
Ağ
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:
{% content-ref url="privilege-escalation/linux-active-directory.md" %} linux-active-directory.md {% endcontent-ref %}
Sayım
{% hint style="warning" %} 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. {% 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ı” 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
{% hint style="info" %} FreeIPA'nın admin kullanıcısı, AD'den domain admin'lere eşdeğerdir. {% endhint %}
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: base64'ü decode 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
{% hint style="warning" %}
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. {% endhint %}
Detaylı bir açıklamayı https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b adresinde kontrol edebilirsiniz.
Referanslar
- https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b
- https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a
- https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1
- https://www.youtube.com/watch?v=9dOu-7BTwPQ
{% hint style="success" %}
AWS Hacking öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter'da 🐦 @hacktricks_live'i takip edin.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.