# FreeIPA Pentesting {{#include ../banners/hacktricks-training.md}} ## Basic Information FreeIPA ni **mbadala** wa chanzo wazi kwa Microsoft Windows **Active Directory**, hasa kwa mazingira ya **Unix**. Inachanganya **LDAP directory** kamili na Kituo cha Usambazaji wa Funguo za MIT **Kerberos** kwa usimamizi unaofanana na Active Directory. Inatumia Mfumo wa **Cheti** wa Dogtag kwa usimamizi wa vyeti vya CA & RA, inasaidia uthibitishaji wa **multi-factor**, ikiwa ni pamoja na kadi za smart. SSSD imeunganishwa kwa michakato ya uthibitishaji wa Unix. ## Fingerprints ### Files & Environment Variables - Faili katika `/etc/krb5.conf` ndiyo mahali ambapo taarifa za mteja wa Kerberos, zinazohitajika kwa kujiandikisha katika eneo, zinahifadhiwa. Hii inajumuisha maeneo ya KDCs na seva za admin, mipangilio ya chaguo-msingi, na ramani. - Mipangilio ya chaguo-msingi kwa wateja na seva za IPA imewekwa katika faili iliyoko `/etc/ipa/default.conf`. - Hosts ndani ya eneo lazima iwe na faili ya `krb5.keytab` katika `/etc/krb5.keytab` kwa michakato ya uthibitishaji. - Mabadiliko mbalimbali ya mazingira (`KRB5CCNAME`, `KRB5_KTNAME`, `KRB5_CONFIG`, `KRB5_KDC_PROFILE`, `KRB5RCACHETYPE`, `KRB5RCACHEDIR`, `KRB5_TRACE`, `KRB5_CLIENT_KTNAME`, `KPROP_PORT`) yanatumika kuashiria faili maalum na mipangilio inayohusiana na uthibitishaji wa Kerberos. ### Binaries Zana kama `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch`, na `kvno` ni muhimu katika kusimamia maeneo ya FreeIPA, kushughulikia tiketi za Kerberos, kubadilisha nywila, na kupata tiketi za huduma, miongoni mwa kazi nyingine. ### Network Mchoro umeandaliwa kuonyesha usanidi wa kawaida wa seva ya FreeIPA. ## Authentication Uthibitishaji katika FreeIPA, ukitumia **Kerberos**, unafanana na ule katika **Active Directory**. Upatikanaji wa rasilimali za eneo unahitaji tiketi halali ya Kerberos, ambayo inaweza kuhifadhiwa katika maeneo mbalimbali kulingana na usanidi wa eneo la FreeIPA. ### **CCACHE Ticket Files** Faili za CCACHE, ambazo kawaida huhifadhiwa katika **`/tmp`** zikiwa na ruhusa **600**, ni muundo wa binary wa kuhifadhi taarifa za Kerberos, muhimu kwa uthibitishaji bila nywila ya mtumiaji ya maandiko kwa sababu ya kubebeka kwake. Kuchambua tiketi ya CCACHE kunaweza kufanywa kwa kutumia amri ya `klist`, na kutumia tena Tiketi halali ya CCACHE kunahusisha kusafirisha `KRB5CCNAME` hadi kwenye njia ya faili la tiketi. ### **Unix Keyring** Kwa upande mwingine, Tiketi za CCACHE zinaweza kuhifadhiwa katika funguo za Linux, zikitoa udhibiti zaidi juu ya usimamizi wa tiketi. Mipaka ya uhifadhi wa tiketi inatofautiana (`KEYRING:name`, `KEYRING:process:name`, `KEYRING:thread:name`, `KEYRING:session:name`, `KEYRING:persistent:uidnumber`), huku `klist` ikiwa na uwezo wa kuchambua taarifa hii kwa mtumiaji. Hata hivyo, kutumia tena Tiketi ya CCACHE kutoka funguo za Unix kunaweza kuleta changamoto, huku zana kama **Tickey** zikiwa zinapatikana kwa ajili ya kutoa tiketi za Kerberos. ### Keytab Faili za keytab, zinazojumuisha wakuu wa Kerberos na funguo zilizofichwa, ni muhimu kwa kupata tiketi halali za kutoa tiketi (TGT) bila kuhitaji nywila ya mkuu. Kuchambua na kutumia tena taarifa kutoka kwa faili za keytab kunaweza kufanywa kwa urahisi kwa kutumia zana kama `klist` na skripti kama **KeytabParser**. ### Cheatsheet Unaweza kupata maelezo zaidi kuhusu jinsi ya kutumia tiketi katika linux katika kiungo kinachofuata: {{#ref}} privilege-escalation/linux-active-directory.md {{#endref}} ## Enumeration > [!WARNING] > Unaweza kufanya **enumeration** kupitia **ldap** na zana nyingine za **binary**, au **kuungana na ukurasa wa wavuti katika bandari 443 ya seva ya FreeIPA**. ### Hosts, Users, and Groups Inawezekana kuunda **hosts**, **users** na **groups**. Hosts na watumiaji wamepangwa katika vyombo vinavyoitwa “**Host Groups**” na “**User Groups**” mtawalia. Hizi zinafanana na **Organizational Units** (OU). Kwa chaguo-msingi katika FreeIPA, seva ya LDAP inaruhusu **anonymous binds**, na sehemu kubwa ya data inaweza kuhesabiwa **bila uthibitisho**. Hii inaweza kuhesabu data yote inayopatikana bila uthibitisho: ``` ldapsearch -x ``` Ili kupata **maelezo zaidi** unahitaji kutumia kikao **kilichothibitishwa** (angalia sehemu ya Uthibitishaji kujifunza jinsi ya kuandaa kikao kilichothibitishwa). ```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" ``` Kutoka kwa mashine iliyojiunga na kikoa utaweza kutumia **binaries zilizowekwa** kuhesabu kikoa: ```bash ipa user-find ipa usergroup-find ipa host-find ipa host-group-find ------------------- ipa user-show --all ipa usergroup-show --all ipa host-find --all ipa hostgroup-show --all ``` > [!NOTE] > Mtumiaji wa **admin** wa **FreeIPA** ni sawa na **domain admins** kutoka **AD**. ### Hashes Mtumiaji wa **root** kutoka kwa **IPA serve**r ana uf access kwa **hashes** za nywila. - Hash ya nywila ya mtumiaji inahifadhiwa kama **base64** katika “**userPassword**” **attribute**. Hash hii inaweza kuwa **SSHA512** (toleo la zamani la FreeIPA) au **PBKDF2_SHA256**. - **Nthash** ya nywila inahifadhiwa kama **base64** katika “**ipaNTHash**” ikiwa mfumo una **integration** na **AD**. Ili kuvunja hizi hashes: • Ikiwa freeIPA imeunganishwa na AD, **ipaNTHash** ni rahisi kuvunja: Unapaswa **decode** **base64** -> re-encoded kama **ASCII** hex -> John The Ripper au **hashcat** inaweza kukusaidia kuivunja haraka • Ikiwa toleo la zamani la FreeIPA linatumika, basi **SSHA512** inatumika: Unapaswa decode **base64** -> pata SSHA512 **hash** -> John The Ripper au **hashcat** inaweza kukusaidia kuivunja • Ikiwa toleo jipya la FreeIPA linatumika, basi **PBKDF2_SHA256** inatumika: Unapaswa decode **base64** -> pata PBKDF2_SHA256 -> **urefu** wake ni 256 byte. John anaweza kufanya kazi na 256 bits (32 byte) -> SHA-265 inatumika kama kazi ya pseudo-random, saizi ya block ni 32 byte -> unaweza kutumia tu bits 256 za kwanza za hash yetu ya PBKDF2_SHA256 -> John The Ripper au hashcat inaweza kukusaidia kuivunja
Ili kutoa hashes unahitaji kuwa **root katika server ya FreeIPA**, hapo unaweza kutumia chombo **`dbscan`** kutoa hizo:
### HBAC-Rules Kuna sheria ambazo zinatoa ruhusa maalum kwa watumiaji au mwenyeji juu ya rasilimali (wenyeji, huduma, vikundi vya huduma...) ```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 --all ``` #### Sudo-Rules FreeIPA inaruhusu udhibiti wa kati juu ya **sudo permissions** kupitia sudo-rules. Sheria hizi zinaruhusu au kuzuia utekelezaji wa amri kwa kutumia sudo kwenye mwenyeji ndani ya eneo. Mshambuliaji anaweza kutambua wenyeji, watumiaji, na amri zinazoruhusiwa kwa kuchunguza seti hizi za sheria. ```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 --all ``` ### Udhibiti wa Ufikiaji Kulingana na Majukumu **Jukumu** linajumuisha **privileges** mbalimbali, kila moja ikiwa na mkusanyiko wa **permissions**. Majukumu haya yanaweza kutolewa kwa Watumiaji, Makundi ya Watumiaji, **Hosts**, Makundi ya Hosts, na Huduma. Kwa mfano, fikiria jukumu la “Msimamizi wa Mtumiaji” la default katika FreeIPA ili kuonyesha muundo huu. Jukumu la `Msimamizi wa Mtumiaji` lina **privileges** hizi: - **Misimamizi wa Watumiaji** - **Misimamizi wa Makundi** - **Misimamizi wa Watumiaji wa Jukwaa** Kwa amri zifuatazo, inawezekana kuhesabu majukumu, privileges na permissions: ```bash # Using ldap ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local" # Using ipa binary ipa role-find ipa role-show --all ipa privilege-find ipa privilege-show --all ipa permission-find ipa permission-show --all ``` ### Mfano wa Hali ya Shambulio Katika [https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) unaweza kupata mfano rahisi wa jinsi ya kutumia ruhusa fulani kuathiri eneo. ### 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 ### ~~kuunda mtumiaji wa root~~ > [!WARNING] > Ikiwa unaweza **kuunda mtumiaji mpya kwa jina `root`**, unaweza kujifanya kuwa yeye na utaweza **SSH kwenye mashine yoyote kama root.** > > **HII IMEPATWA.** Unaweza kuangalia maelezo ya kina katika [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b) ## Marejeleo - [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}}