FreeIPA Pentesting

Reading time: 9 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें

Basic Information

FreeIPA एक ओपन-सोर्स वैकल्पिक है Microsoft Windows Active Directory का, मुख्य रूप से Unix वातावरण के लिए। यह एक पूर्ण LDAP निर्देशिका को MIT Kerberos की की वितरण केंद्र के साथ जोड़ता है, जो 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

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

Linux Active Directory

Enumeration

warning

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

Hosts, Users, and Groups

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

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

ldapsearch -x

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

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"

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

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 का admin उपयोगकर्ता AD के domain admins के समकक्ष है।

Hashes

IPA server का 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 server में root होना चाहिए, वहाँ आप उन्हें निकालने के लिए dbscan उपकरण का उपयोग कर सकते हैं:

HBAC-Rules

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

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

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

भूमिका-आधारित पहुँच नियंत्रण

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

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

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

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

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

हमला परिदृश्य उदाहरण

In https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e you can find a simple example of how to abuse some permissions to compromise the domain.

Linikatz/LinikatzV2

Privesc

root उपयोगकर्ता निर्माण

warning

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

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

You can check a detailed explaination in https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b

संदर्भ

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें