hacktricks/src/linux-hardening/freeipa-pentesting.md

187 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FreeIPA Pentesting
{{#include ../banners/hacktricks-training.md}}
## Temel Bilgiler
FreeIPA, esas olarak **Unix** ortamları için Microsoft Windows **Active Directory**'ye açık kaynaklı bir **alternatif**dir. 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.
### 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`** dizininde **600** izinleriyle saklanır ve Kerberos kimlik bilgilerini depolamak 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 Anahtarlığı**
Alternatif olarak, CCACHE Biletleri Linux anahtarlığı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 anahtarlığı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:
{{#ref}}
privilege-escalation/linux-active-directory.md
{{#endref}}
## Sayım
> [!WARNING]
> **ldap** ve diğer **ikili** araçlar aracılığıyla veya **FreeIPA sunucusunun 443 numaralı portundaki web sayfasına bağlanarak** **sayım** gerçekleştirebilirsiniz.
### Ana Bilgisayarlar, Kullanıcılar ve Gruplar <a href="#id-4b3b" id="id-4b3b"></a>
**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ğrulamalı bir oturum hazırlamak için Kimlik Doğrulama bölümüne bakın).
```bash
# 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 alan katılımlı makineden **kurulu ikili dosyaları** kullanarak alanı listeleyebilirsiniz:
```bash
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
```
> [!NOTE]
> **FreeIPA**'nın **admin** kullanıcısı, **AD**'den **domain admins** ile eşdeğerdir.
### Hashes <a href="#id-482b" id="id-482b"></a>
**IPA server**'daki **root** kullanıcısı, şifre **hash'lerine** erişime sahiptir.
- Bir kullanıcının şifre hash'i, “**userPassword**” **attribute**'unda **base64** olarak saklanır. Bu hash **SSHA512** (eski FreeIPA sürümleri) veya **PBKDF2_SHA256** olabilir.
- Şifre **ipaNTHash** olarak **base64**'te saklanır, eğer sistem **AD** ile **entegrasyon** içindeyse.
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 bulun -> 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ı bulun -> **length**'i 256 byte'dır. John 256 bit (32 byte) ile çalışabilir -> SHA-265, pseudo-random fonksiyonu 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.
<figure><img src="../images/image (655).png" alt=""><figcaption></figcaption></figure>
Hash'leri çıkarmak için **FreeIPA sunucusunda root** olmanız gerekir, burada **`dbscan`** aracını kullanarak bunları çıkarabilirsiniz:
<figure><img src="../images/image (293).png" alt=""><figcaption></figcaption></figure>
### HBAC-Rules <a href="#id-482b" id="id-482b"></a>
Kullanıcılara veya hostlara kaynaklar (hostlar, hizmetler, hizmet grupları...) üzerinde belirli izinler veren kurallardır.
```bash
# 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.
```bash
# 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çermektedir ve her biri bir dizi **izin** kapsamaktadır. Bu roller Kullanıcılara, Kullanıcı **Gruplarına**, **Ana Bilgilere**, Ana Bilgi Gruplarına ve Hizmetlere atanabilir. Örneğin, bu yapıyı örneklemek 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:
```bash
# 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](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
- [https://github.com/Orange-Cyberdefense/LinikatzV2](https://github.com/Orange-Cyberdefense/LinikatzV2)
- [https://github.com/CiscoCXSecurity/linikatz](https://github.com/CiscoCXSecurity/linikatz)
## Privesc
### ~~root kullanıcı oluşturma~~
> [!WARNING]
> Eğer **`root` adında yeni bir kullanıcı oluşturabiliyorsanız**, onun kimliğine bürünebilir 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](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-iv-cve-2020-10747-7c373a1bf66b)
- [https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a](https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a)
- [https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1](https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1)
- [https://www.youtube.com/watch?v=9dOu-7BTwPQ](https://www.youtube.com/watch?v=9dOu-7BTwPQ)
{{#include ../banners/hacktricks-training.md}}