FreeIPA Pentesting

Support HackTricks

Basic Information

FreeIPA एक ओपन-सोर्स वैकल्पिक है Microsoft Windows Active Directory का, मुख्य रूप से Unix वातावरण के लिए। यह एक पूर्ण LDAP directory को MIT Kerberos Key Distribution Center के साथ जोड़ता है, जो Active Directory के समान प्रबंधन के लिए है। CA और RA प्रमाणपत्र प्रबंधन के लिए Dogtag Certificate System का उपयोग करते हुए, यह स्मार्टकार्ड सहित multi-factor प्रमाणीकरण का समर्थन करता है। Unix प्रमाणीकरण प्रक्रियाओं के लिए SSSD एकीकृत है।

Fingerprints

Files & Environment Variables

  • फ़ाइल /etc/krb5.conf में Kerberos क्लाइंट जानकारी संग्रहीत होती है, जो डोमेन में नामांकन के लिए आवश्यक है। इसमें KDCs और व्यवस्थापक सर्वरों के स्थान, डिफ़ॉल्ट सेटिंग्स और मैपिंग शामिल हैं।

  • IPA क्लाइंट और सर्वरों के लिए सिस्टम-व्यापी डिफ़ॉल्ट फ़ाइल /etc/ipa/default.conf में सेट होते हैं।

  • डोमेन के भीतर होस्ट को प्रमाणीकरण प्रक्रियाओं के लिए /etc/krb5.keytab पर krb5.keytab फ़ाइल होनी चाहिए।

  • विभिन्न पर्यावरण चर (KRB5CCNAME, KRB5_KTNAME, KRB5_CONFIG, KRB5_KDC_PROFILE, KRB5RCACHETYPE, KRB5RCACHEDIR, KRB5_TRACE, KRB5_CLIENT_KTNAME, KPROP_PORT) Kerberos प्रमाणीकरण से संबंधित विशिष्ट फ़ाइलों और सेटिंग्स की ओर इशारा करने के लिए उपयोग किए जाते हैं।

Binaries

ipa, kdestroy, kinit, klist, kpasswd, ksu, kswitch, और kvno जैसे उपकरण FreeIPA डोमेन का प्रबंधन करने, Kerberos टिकटों को संभालने, पासवर्ड बदलने और सेवा टिकट प्राप्त करने के लिए केंद्रीय हैं, अन्य कार्यक्षमताओं के बीच।

Network

एक चित्रण प्रदान किया गया है जो एक सामान्य FreeIPA सर्वर सेटअप को दर्शाता है।

Authentication

FreeIPA में प्रमाणीकरण, Kerberos का उपयोग करते हुए, Active Directory में समान है। डोमेन संसाधनों तक पहुँच के लिए एक मान्य Kerberos टिकट की आवश्यकता होती है, जिसे FreeIPA डोमेन कॉन्फ़िगरेशन के आधार पर विभिन्न स्थानों पर संग्रहीत किया जा सकता है।

CCACHE Ticket Files

CCACHE फ़ाइलें, सामान्यतः /tmp में 600 अनुमतियों के साथ संग्रहीत होती हैं, Kerberos क्रेडेंशियल्स को संग्रहीत करने के लिए बाइनरी प्रारूप हैं, जो उपयोगकर्ता के प्लेनटेक्स्ट पासवर्ड के बिना प्रमाणीकरण के लिए महत्वपूर्ण हैं। CCACHE टिकट को पार्स करने के लिए klist कमांड का उपयोग किया जा सकता है, और एक मान्य CCACHE टिकट का पुनः उपयोग करने के लिए KRB5CCNAME को टिकट फ़ाइल के पथ पर निर्यात करना शामिल है।

Unix Keyring

वैकल्पिक रूप से, CCACHE टिकटों को Linux की कीरिंग में संग्रहीत किया जा सकता है, जो टिकट प्रबंधन पर अधिक नियंत्रण प्रदान करता है। टिकट संग्रहण का दायरा भिन्न होता है (KEYRING:name, KEYRING:process:name, KEYRING:thread:name, KEYRING:session:name, KEYRING:persistent:uidnumber), जिसमें klist इस जानकारी को उपयोगकर्ता के लिए पार्स कर सकता है। हालाँकि, Unix कीरिंग से CCACHE टिकट का पुनः उपयोग करना चुनौतियों का सामना कर सकता है, Kerberos टिकटों को निकालने के लिए Tickey जैसे उपकरण उपलब्ध हैं।

Keytab

Keytab फ़ाइलें, जो Kerberos प्रिंसिपल और एन्क्रिप्टेड कुंजियों को शामिल करती हैं, मान्य टिकट ग्रांटिंग टिकट (TGT) प्राप्त करने के लिए महत्वपूर्ण हैं, बिना प्रिंसिपल के पासवर्ड की आवश्यकता के। Keytab फ़ाइलों से क्रेडेंशियल्स को पार्स और पुनः उपयोग करना klist जैसे उपयोगिताओं और KeytabParser जैसे स्क्रिप्ट के साथ आसानी से किया जा सकता है।

Cheatsheet

आप लिनक्स में टिकटों का उपयोग कैसे करें, इस बारे में अधिक जानकारी निम्नलिखित लिंक में पा सकते हैं:

Enumeration

आप ldap और अन्य binary उपकरणों के माध्यम से enumeration कर सकते हैं, या FreeIPA सर्वर के पोर्ट 443 में वेब पृष्ठ से कनेक्ट करके

Hosts, Users, and Groups

होस्ट, उपयोगकर्ता और समूह बनाना संभव है। होस्ट और उपयोगकर्ताओं को “Host Groups” और “User Groups” नामक कंटेनरों में वर्गीकृत किया जाता है। ये Organizational Units (OU) के समान हैं।

डिफ़ॉल्ट रूप से FreeIPA में, LDAP सर्वर anonymous binds की अनुमति देता है, और डेटा का एक बड़ा हिस्सा unauthenticated रूप से enumerable है। यह सभी डेटा को enumerate कर सकता है जो बिना प्रमाणीकरण के उपलब्ध है:

ldapsearch -x

अधिक जानकारी प्राप्त करने के लिए आपको एक प्रमाणित सत्र का उपयोग करना होगा (प्रमाणीकरण अनुभाग की जांच करें ताकि आप प्रमाणित सत्र तैयार करना सीख सकें)।

# 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"

एक डोमेन से जुड़े मशीन से आप स्थापित बाइनरी का उपयोग करके डोमेन की गणना कर सकेंगे:

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

FreeIPA का admin उपयोगकर्ता AD के domain admins के समकक्ष है।

Hashes

IPA सर्वर का root उपयोगकर्ता पासवर्ड hashes तक पहुँच रखता है।

  • एक उपयोगकर्ता का पासवर्ड हैश userPassword attribute में base64 के रूप में संग्रहीत होता है। यह हैश SSHA512 (FreeIPA के पुराने संस्करण) या PBKDF2_SHA256 हो सकता है।

  • यदि सिस्टम का AD के साथ integration है, तो पासवर्ड का Nthash ipaNTHash में base64 के रूप में संग्रहीत होता है।

इन हैशेस को क्रैक करने के लिए:

• यदि freeIPA का AD के साथ एकीकरण है, तो ipaNTHash को क्रैक करना आसान है: आपको base64 को decode करना चाहिए -> इसे ASCII hex के रूप में फिर से एन्कोड करें -> John The Ripper या hashcat आपको इसे तेजी से क्रैक करने में मदद कर सकते हैं

• यदि FreeIPA का पुराना संस्करण उपयोग किया गया है, तो SSHA512 का उपयोग किया गया है: आपको base64 को डिकोड करना चाहिए -> SSHA512 hash खोजें -> John The Ripper या hashcat आपको इसे क्रैक करने में मदद कर सकते हैं

• यदि FreeIPA का नया संस्करण उपयोग किया गया है, तो PBKDF2_SHA256 का उपयोग किया गया है: आपको base64 को डिकोड करना चाहिए -> PBKDF2_SHA256 खोजें -> इसकी length 256 बाइट है। John 256 बिट्स (32 बाइट) के साथ काम कर सकता है -> SHA-265 का उपयोग छद्म-यादृच्छिक फ़ंक्शन के रूप में किया गया है, ब्लॉक आकार 32 बाइट है -> आप हमारे PBKDF2_SHA256 हैश के केवल पहले 256 बिट्स का उपयोग कर सकते हैं -> John The Ripper या hashcat आपको इसे क्रैक करने में मदद कर सकते हैं

हैशेस को निकालने के लिए आपको FreeIPA सर्वर में root होना चाहिए, वहाँ आप उन्हें निकालने के लिए dbscan उपकरण का उपयोग कर सकते हैं:

HBAC-Rules

ये नियम हैं जो उपयोगकर्ताओं या होस्टों को संसाधनों (होस्ट, सेवाएँ, सेवा समूह...) पर विशिष्ट अनुमतियाँ प्रदान करते हैं।

# 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 permissions के लिए केंद्रीकृत नियंत्रण सक्षम करता है sudo-rules के माध्यम से। ये नियम डोमेन के भीतर होस्ट पर sudo के साथ कमांड के निष्पादन की अनुमति या सीमा निर्धारित करते हैं। एक हमलावर संभावित रूप से इन नियमों के सेट की जांच करके लागू होस्ट, उपयोगकर्ताओं और अनुमत कमांड की पहचान कर सकता है।

# 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

Role-Based Access Control

एक भूमिका विभिन्न अधिकारों से मिलकर बनी होती है, जिनमें से प्रत्येक एक अनुमति का संग्रह शामिल करता है। इन भूमिकाओं को उपयोगकर्ताओं, उपयोगकर्ता समूहों, होस्ट, होस्ट समूहों और सेवाओं को सौंपा जा सकता है। उदाहरण के लिए, इस संरचना को स्पष्ट करने के लिए FreeIPA में डिफ़ॉल्ट "उपयोगकर्ता प्रशासक" भूमिका पर विचार करें।

भूमिका उपयोगकर्ता प्रशासक के पास ये अधिकार हैं:

  • उपयोगकर्ता प्रशासक

  • समूह प्रशासक

  • स्टेज उपयोगकर्ता प्रशासक

निम्नलिखित कमांड के साथ भूमिकाओं, अधिकारों और अनुमतियों को सूचीबद्ध करना संभव है:

# 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

Attack Scenario Example

In https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e आप देख सकते हैं कि कुछ अनुमतियों का दुरुपयोग करके डोमेन को कैसे समझौता किया जा सकता है।

Linikatz/LinikatzV2

Privesc

root user creation

यदि आप root नाम का एक नया उपयोगकर्ता बना सकते हैं, तो आप उसकी नकल कर सकते हैं और आप किसी भी मशीन में root के रूप में SSH कर सकेंगे।

यह पैच किया गया है।

आप एक विस्तृत व्याख्या https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b में देख सकते हैं।

References

Support HackTricks

Last updated