hacktricks/linux-hardening/freeipa-pentesting.md
2024-02-11 02:07:06 +00:00

213 lines
12 KiB
Markdown

# FreeIPA Pentesting
<details>
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hacktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-repos.
</details>
## Basiese Inligting
FreeIPA is 'n oopbron **alternatief** vir Microsoft Windows **Active Directory**, hoofsaaklik vir **Unix**-omgewings. Dit kombineer 'n volledige **LDAP-gids** met 'n MIT **Kerberos** Sleutelverspreidingsentrum vir bestuur soortgelyk aan Active Directory. Deur die Dogtag **Sertifikaatstelsel** vir CA & RA sertifikaatbestuur te gebruik, ondersteun dit **multi-faktor**-verifikasie, insluitend slimkaarte. SSSD is geïntegreer vir Unix-verifikasieprosesse.
## Vingerafdrukke
### Lêers & Omgewingsveranderlikes
- Die lêer by `/etc/krb5.conf` is waar Kerberos-kliëntinligting, wat nodig is vir inskrywing in die domein, gestoor word. Dit sluit KDC's en administrateurservers se ligging, verstekinstellings en karterings in.
- Stelselwye verstekinstellings vir IPA-kliënte en -bedieners word in die lêer by `/etc/ipa/default.conf` ingestel.
- Gasheerders binne die domein moet 'n `krb5.keytab`-lêer by `/etc/krb5.keytab` hê vir verifikasieprosesse.
- Verskeie omgewingsveranderlikes (`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`) word gebruik om na spesifieke lêers en instellings wat relevant is vir Kerberos-verifikasie te verwys.
### Binêre lêers
Hulpmiddels soos `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch` en `kvno` is sentraal tot die bestuur van FreeIPA-domeine, hanteer Kerberos-kaartjies, verander wagwoorde en verkry dienskaartjies, onder andere funksionaliteite.
### Netwerk
'n Illustrasie word verskaf om 'n tipiese FreeIPA-bedieneropstelling uit te beeld.
## Verifikasie
Verifikasie in FreeIPA, met behulp van **Kerberos**, boots dié in **Active Directory** na. Toegang tot domeinbronne vereis 'n geldige Kerberos-kaartjie, wat in verskillende liggings gestoor kan word, afhangende van die FreeIPA-domeinopset.
### **CCACHE-kaartjieleêrs**
CCACHE-lêers, tipies gestoor in **`/tmp`** met **600**-permissies, is binêre formate vir die stoor van Kerberos-legitimasie, belangrik vir verifikasie sonder 'n gebruiker se platte teks wagwoord as gevolg van hul draagbaarheid. 'n CCACHE-kaartjie kan geparseer word met behulp van die `klist`-opdrag, en 'n geldige CCACHE-kaartjie hergebruik beteken dat `KRB5CCNAME` na die kaartjieleêr se pad uitgevoer moet word.
### **Unix Sleutelring**
Alternatiewelik kan CCACHE-kaartjies in die Linux-sleutelring gestoor word, wat meer beheer oor kaartjiebestuur bied. Die omvang van kaartjiestoor wissel (`KEYRING:naam`, `KEYRING:proses:naam`, `KEYRING:draad:naam`, `KEYRING:sessie:naam`, `KEYRING:blywende:uidnommer`), met `klist` wat hierdie inligting vir die gebruiker kan parseer. Die hergebruik van 'n CCACHE-kaartjie uit die Unix-sleutelring kan egter uitdagings inhou, met hulpmiddels soos **Tickey** beskikbaar vir die onttrekking van Kerberos-kaartjies.
### Sleuteltabel
Sleuteltabellêers, wat Kerberos-prinsipale en versleutelde sleutels bevat, is krities vir die verkryging van geldige kaartjies wat toegang tot kaartjies verleen sonder die wagwoord van die prinsipaal nodig te hê. Die parseer en hergebruik van legitimasie van sleuteltabellêers kan maklik uitgevoer word met hulpprogramme soos `klist` en skripte soos **KeytabParser**.
### Spiekbriefie
Meer inligting oor hoe om kaartjies in Linux te gebruik, is beskikbaar in die volgende skakel:
{% content-ref url="privilege-escalation/linux-active-directory.md" %}
[linux-active-directory.md](privilege-escalation/linux-active-directory.md)
{% endcontent-ref %}
## Enumerasie
{% hint style="warning" %}
Jy kan die **enumerasie** uitvoer via **ldap** en ander **binêre** hulpmiddels, of deur **verbind met die webblad op poort 443 van die FreeIPA-bediener**.
{% endhint %}
### Gasheerders, Gebruikers en Groepe <a href="#4b3b" id="4b3b"></a>
Dit is moontlik om **gasheerders**, **gebruikers** en **groepe** te skep. Gasheerders en gebruikers word in houers genaamd "**Gasheergroepe**" en "**Gebruikergroepe**" geplaas. Hierdie is soortgelyk aan **Organisasie-eenhede** (OE).
Standaard in FreeIPA maak die LDAP-bediener voorsiening vir **anonieme bindmiddels**, en 'n groot hoeveelheid data is **onverifieerd** opvraagbaar. Dit kan alle beskikbare data onverifieerd opvraagbaar maak:
```
ldapsearch -x
```
Om **meer inligting** te verkry, moet jy 'n **geautentiseerde** sessie gebruik (kontroleer die Aantekeningsgedeelte om te leer hoe om 'n geautentiseerde sessie voor te berei).
```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"
```
Vanaf 'n domein-gekoppelde masjien sal jy in staat wees om **geïnstalleerde bineêre lêers** te gebruik om die domein te ondersoek:
```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" %}
Die **admin** gebruiker van **FreeIPA** is die ekwivalent van **domain admins** van **AD**.
{% endhint %}
### Hashes <a href="#482b" id="482b"></a>
Die **root** gebruiker van die **IPA bediener** het toegang tot die wagwoord **hashes**.
* Die wagwoord hash van 'n gebruiker word gestoor as **base64** in die "userPassword" **eienskap**. Hierdie hash kan **SSHA512** wees (ou weergawes van FreeIPA) of **PBKDF2\_SHA256**.
* Die **Nthash** van die wagwoord word as **base64** gestoor in "ipaNTHash" as die stelsel **geïntegreer** is met **AD**.
Om hierdie hashes te kraak:
• As FreeIPA geïntegreer is met AD, is dit maklik om **ipaNTHash** te kraak: Jy moet **base64** **dekodeer** -> dit weer **herskodeer** as **ASCII** heks -> John The Ripper of **hashcat** kan jou help om dit vinnig te kraak
• As 'n ou weergawe van FreeIPA gebruik word, word **SSHA512** gebruik: Jy moet **base64** **dekodeer** -> vind SSHA512 **hash** -> John The Ripper of **hashcat** kan jou help om dit te kraak
• As 'n nuwe weergawe van FreeIPA gebruik word, word **PBKDF2\_SHA256** gebruik: Jy moet **base64** **dekodeer** -> vind PBKDF2\_SHA256 -> dit se **lengte** is 256 byte. John kan werk met 256 bits (32 byte) -> SHA-265 word gebruik as die pseudowillekeurige funksie, blokgrootte is 32 byte -> jy kan slegs die eerste 256 bits van ons PBKDF2\_SHA256 hash gebruik -> John The Ripper of hashcat kan jou help om dit te kraak
<figure><img src="../.gitbook/assets/image (33).png" alt=""><figcaption></figcaption></figure>
Om die hashes te onttrek, moet jy **root in die FreeIPA bediener** wees, daar kan jy die hulpmiddel **`dbscan`** gebruik om dit te onttrek:
<figure><img src="../.gitbook/assets/image (196).png" alt=""><figcaption></figcaption></figure>
### HBAC-Reëls <a href="#482b" id="482b"></a>
Dit is die reëls wat spesifieke toestemmings aan gebruikers of gasheer oor bronne (gasheer, dienste, diensgroepe...) toeken.
```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-Reëls
FreeIPA maak gesentraliseerde beheer van **sudo-toestemmings** moontlik deur middel van sudo-reëls. Hierdie reëls maak dit moontlik om die uitvoering van opdragte met sudo op gasheerders binne die domein toe te laat of te beperk. 'n Aanvaller kan potensieel die toepaslike gasheerders, gebruikers en toegelate opdragte identifiseer deur hierdie reëlsets te ondersoek.
```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
```
### Rolgebaseerde toegangsbeheer
'n **Rol** bestaan uit verskeie **voorregte**, elk waarvan 'n versameling van **toestemmings** insluit. Hierdie rolle kan toegewys word aan Gebruikers, Gebruikers **Groepe**, **Gasheer**, Gasheer Groepe, en Dienste. Byvoorbeeld, beskou die verstek "Gebruiker Administrateur" rol in FreeIPA om hierdie struktuur te illustreer.
Die rol `Gebruiker Administrateur` het hierdie voorregte:
* **Gebruiker Administrateurs**
* **Groep Administrateurs**
* **Fase Gebruiker Administrateurs**
Met die volgende opdragte is dit moontlik om die rolle, voorregte en toestemmings op te som:
```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
```
### Aanvalscenario-voorbeeld
In [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) kan jy 'n eenvoudige voorbeeld vind van hoe om sekere toestemmings te misbruik om die domein te kompromitteer.
### 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
### ~~skepping van root-gebruiker~~
{% hint style="warning" %}
As jy 'n nuwe gebruiker met die naam `root` kan **skep**, kan jy hom naboots en sal jy in staat wees om **SSH na enige masjien as root** in te skakel.
**DIT IS GEPATCH.**
{% endhint %}
Jy kan 'n gedetailleerde verduideliking in [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b) vind.
## Verwysings
* [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>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Ander maniere om HackTricks te ondersteun:
* As jy wil sien dat jou **maatskappy geadverteer word in HackTricks** of **HackTricks aflaai in PDF-formaat**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks-swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
* **Deel jou haktruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.
</details>