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

212 lines
13 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
<details>
<summary><strong>AWS hackleme becerilerinizi sıfırdan kahraman seviyesine kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile</strong>!</summary>
HackTricks'ı desteklemenin diğer yolları:
* Şirketinizi HackTricks'te **reklamınızı görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz olan [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)'ı **takip edin**.
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek** paylaşın.
</details>
## Temel Bilgiler
FreeIPA, öncelikle **Unix** ortamları için Microsoft Windows **Active Directory**'ye bir açık kaynaklı **alternatif**tir. 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.
### Ağ
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](privilege-escalation/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 <a href="#4b3b" 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ı" 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).
```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 etki alanına katılmış bir makineden, etki alanını sıralamak için **kurulu ikili dosyaları** kullanabilirsiniz:
```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
```
{% hint style="info" %}
**FreeIPA**'nın **admin** kullanıcısı, **AD**'deki **domain adminleri**ne eşdeğerdir.
{% endhint %}
### Hashler <a href="#482b" id="482b"></a>
**IPA sunucusu**ndaki **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 **Nthash**i, 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.
<figure><img src="../.gitbook/assets/image (33).png" alt=""><figcaption></figcaption></figure>
Hash'leri çıkarmak için **FreeIPA sunucusunda root** olmanız gerekmektedir, burada **`dbscan`** aracını kullanarak bunları çıkarabilirsiniz:
<figure><img src="../.gitbook/assets/image (196).png" alt=""><figcaption></figcaption></figure>
### HBAC-Kuralları <a href="#482b" id="482b"></a>
Bu kurallar, kullanıcılara veya kaynaklara (sunucular, hizmetler, hizmet grupları...) 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-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.
```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çeren bir dizi **izin**i 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:
```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ı Senaryo Ö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, bir alanı tehlikeye atmak için bazı izinleri kötüye nasıl kullanacağınızın basit bir örneğini 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)
## 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](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b) adresinde bulabilirsiniz.
## 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)
<details>
<summary><strong>AWS hackleme konusunda sıfırdan kahraman olmak için</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>'ı öğrenin!</strong></summary>
HackTricks'i desteklemenin diğer yolları:
* Şirketinizi HackTricks'te **tanıtmak veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARINI**](https://github.com/sponsors/carlospolop) kontrol edin!
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz olan [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi Twitter'da 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)** takip edin.**
* Hacking hilelerinizi [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR göndererek paylaşın.
</details>