hacktricks/linux-hardening/freeipa-pentesting.md

34 KiB

FreeIPA पेंटेस्टिंग

AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

यह जानकारी इन पोस्ट्स से ली गई है:

मूल जानकारी

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

फिंगरप्रिंट्स

फाइलें & Env Vars

  • /etc/krb5.conf: krb5.conf फाइल में Kerberos क्लाइंट जानकारी होती है जो डोमेन में नामांकित होने के लिए आवश्यक है। इसमें Kerberos रियल्म्स के KDCs और एडमिन सर्वरों के स्थान, वर्तमान रियल्म और Kerberos एप्लिकेशनों के लिए डिफॉल्ट्स, और होस्टनेम्स को Kerberos रियल्म्स पर मैपिंग शामिल है।
  • /etc/ipa/default.conf: यह IPA सर्वरों के लिए डिफॉल्ट कॉन्फिगरेशन फाइल है, इसका उपयोग IPA क्लाइंट्स और सर्वरों को चलाते समय सिस्टम-वाइड डिफॉल्ट्स सेट करने के लिए किया जाता है।
  • /etc/krb5.keytab: krb5.keytab फाइल डोमेन के अंदर सभी होस्ट्स पर आवश्यक होती है। यह KDC के लिए प्रमाणीकरण प्रक्रिया का हिस्सा है।
  • KRB5CCNAME: यदि सेट किया गया है, तो यह वेरिएबल CCACHE टिकट के स्थान को इंगित करता है जिसका उपयोग प्रमाणीकरण के लिए किया जाना है।
  • KRB5_KTNAME: यदि सेट किया गया है, तो यह वेरिएबल Keytab फाइल के स्थान को इंगित करता है जिसका उपयोग प्रमाणीकरण के लिए किया जाना है।
  • KRB5_CONFIG: यदि सेट किया गया है, तो यह वेरिएबल Kerberos कॉन्फिगरेशन फाइल के स्थान को इंगित करता है।
  • KRB5_KDC_PROFILE: यदि सेट किया गया है, तो यह वेरिएबल KDC कॉन्फिगरेशन फाइल के स्थान को इंगित करता है, जिसमें Key Distribution Center डेमन के लिए अतिरिक्त कॉन्फिगरेशन निर्देश होते हैं।
  • KRB5RCACHETYPE: यह वेरिएबल सर्वरों के लिए उपयोग करने के लिए रिप्ले कैश के डिफॉल्ट प्रकार को निर्दिष्ट करता है।
  • KRB5RCACHEDIR: यह वेरिएबल सर्वरों द्वारा उपयोग किए जाने वाले रिप्ले कैशेस के डिफॉल्ट डायरेक्टरी को निर्दिष्ट करता है।
  • KRB5_TRACE: यह वेरिएबल एक फाइलनेम निर्दिष्ट करता है जिसमें ट्रेस लॉग आउटपुट लिखा जाएगा। ट्रेस लॉग्स Kerberos लाइब्रेरीज द्वारा आंतरिक रूप से किए गए निर्णयों को स्पष्ट करने में मदद कर सकते हैं।
  • KRB5_CLIENT_KTNAME: यह वेरिएबल डिफॉल्ट क्लाइंट keytab फाइल नाम सेट करता है।
  • KPROP_PORT: यह वेरिएबल kprop के उपयोग के लिए डिफॉल्ट पोर्ट सेट करता है।

बाइनरीज

  • ipa: यह बाइनरी FreeIPA डोमेन को प्रबंधित करने के लिए मानक है। इसका उपयोग होस्ट्स, उपयोगकर्ताओं, सुडो नियमों, और बहुत कुछ प्रबंधित करने के लिए किया जा सकता है।
  • kdestroy: kdestroy बाइनरी का उपयोग उपयोगकर्ता के सत्र में किसी भी मौजूदा Kerberos टिकट्स को नष्ट करने के लिए किया जाता है।
  • kinit: kinit बाइनरी का उपयोग Kerberos टिकट्स को स्थापित करने या नवीनीकृत करने के लिए किया जाता है।
  • klist: klist बाइनरी सूचीबद्ध करती है कि कौन से मौजूदा Kerberos टिकट्स उपयोग में हैं, और कौन से प्रिंसिपल्स को टिकट्स पहुंच प्रदान करते हैं।
  • kpasswd: kpasswd कमांड का उपयोग Kerberos प्रिंसिपल के पासवर्ड को बदलने के लिए किया जाता है। kpasswd पहले मौजूदा Kerberos पासवर्ड के लिए प्रॉम्प्ट करता है, फिर नए पासवर्ड के लिए उपयोगकर्ता से दो बार प्रॉम्प्ट करता है, और पासवर्ड बदल दिया जाता है।
  • ksu: Ksu का उपयोग su बाइनरी के विकल्प के रूप में किया जा सकता है, वर्तमान उपयोगकर्ता संदर्भ को स्विच करने के लिए।
  • kswitch: kswitch कमांड मौजूदा क्रेडेंशियल कैश को स्विच करेगा जो उपयोग में है।
  • kvno: kvno बाइनरी निर्दिष्ट Kerberos प्रिंसिपल्स के लिए एक सेवा टिकट प्राप्त करती है और प्रत्येक के की वर्जन नंबरों को प्रिंट करती है।

नेटवर्क

यह FreeIPA सर्वर कैसा दिख सकता है:

प्रमाणीकरण

चूंकि FreeIPA Kerberos का उपयोग प्रमाणीकरण के लिए करता है, यह प्रक्रिया Active Directory में प्रमाणीकरण के समान है। डोमेन पर संसाधनों तक पहुंचने के लिए, उपयोगकर्ता के पास उस संसाधन के लिए एक वैध Kerberos टिकट होना

klist /tmp/krb5cc_0

हमलावर के लिए CCACHE टिकट का पुन: उपयोग करना बहुत आसान है। एक मान्य CCACHE टिकट को पुन: उपयोग करने के लिए, KRB5CCNAME को वैध टिकट फाइल के पथ पर निर्यात करें। सिस्टम को पर्यावरण वेरिएबल की पहचान करनी चाहिए और डोमेन के साथ बातचीत करते समय उस क्रेडेंशियल सामग्री का उपयोग करने का प्रयास करेगा।

export KRB5CCNAME=/tmp/krb5cc_0
klist

Unix Keyring

CCACHE Tickets **** को **** Linux keyring में भी संग्रहित किया जा सकता है। Keyring कर्नेल के अंदर रहता है, और प्रशासकों को संग्रहित टिकटों की प्राप्ति और उपयोग पर अधिक नियंत्रण प्रदान करता है। टिकटों को निम्नलिखित विभिन्न तरीकों से सीमित किया जा सकता है:

  • KEYRING:name: टिकट एक विशिष्ट नामित Keyring के लिए सीमित हैं।
  • KEYRING:process:name: टिकट एक विशिष्ट प्रक्रिया आईडी के लिए सीमित हैं।
  • KEYRING:thread:name: टिकट एक विशिष्ट थ्रेड के लिए सीमित हैं।
  • KEYRING:session:name: टिकट एक विशिष्ट उपयोगकर्ता सत्र के लिए सीमित हैं।
  • KEYRING:persistent:uidnumber: टिकट एक विशिष्ट उपयोगकर्ता के लिए सत्र की परवाह किए बिना सीमित हैं (डिफ़ॉल्ट)।

प्रशासक द्वारा Unix keyring के अंदर संग्रहित टिकट को किस प्रकार सीमित किया गया है, इसके आधार पर इसे पार्स करना कठिन हो सकता है। हालांकि, Unix keyring में CCACHE Tickets के लिए डिफ़ॉल्ट स्कोप KEYRING:persistent:uidnumber है। सौभाग्य से यदि आप उपयोगकर्ता के संदर्भ में हैं, तो klist हमारे लिए इस जानकारी को पार्स कर सकता है।

हमलावर के रूप में, Unix keyring में संग्रहित CCACHE Ticket का पुन: उपयोग करना टिकट के स्कोप के आधार पर काफी कठिन हो सकता है। सौभाग्य से @Zer1t0 ने @Tarlogic से एक उपकरण बनाया है जो Unix keyring से Kerberos टिकटों को निकाल सकता है। उपकरण का नाम Tickey है और इसे यहाँ पाया जा सकता है।

Keytab

{% hint style="warning" %} आमतौर पर, प्रत्येक होस्ट को उस होस्ट के लिए एक keytab क्रेडेंशियल के साथ तैनात किया जाता है जिसका उपयोग होस्ट स्वयं के लिए एक वैध Credential Cache(CCACHE) Ticket Granting Ticket(TGT) प्राप्त करने के लिए किया जा सकता है। {% endhint %}

यह Kerberos प्रिंसिपल्स और एन्क्रिप्टेड कीज़ की जोड़ियों से बना होता है जो प्रिंसिपल से जुड़े Kerberos पासवर्ड से निकाले गए होते हैं। चूंकि ये कीज़ प्रिंसिपल के पासवर्ड से निकाली गई होती हैं, इसलिए यदि वह पासवर्ड बदलता है तो keytab अमान्य हो जाएगा

Keytab फाइलों का उपयोग प्रिंसिपल के लिए एक वैध टिकट ग्रांटिंग टिकट (TGT) प्राप्त करने के लिए किया जा सकता है। यह प्रमाणीकरण प्रक्रिया पासवर्ड की आवश्यकता नहीं होती, क्योंकि इसमें पासवर्ड से निकाली गई कीज़ होती हैं।

Keytab फाइल को पार्स करना बहुत आसान है, और इसे कुछ तरीकों से पूरा किया जा सकता है। Keytab फाइल को पार्स करने का सबसे आसान तरीका klist के साथ है। दूसरा तरीका Cody Thomas द्वारा बनाई गई एक शानदार पायथन उपयोगिता का उपयोग करता है। उनकी **** KeytabParser **** परियोजना प्रिंसिपल और उसकी संबंधित एन्क्रिप्टेड कीज़ को पार्स करेगी।

हमलावर keytab फाइलों में संग्रहित क्रेडेंशियल्स का पुन: उपयोग कर सकते हैं, kinit बाइनरी के माध्यम से एक CCACHE Ticket जनरेट करके।

# Parse keytab
klist -k /rtc/krb5.keytab

# Get TGT
kinit -kt /etc/krb5.keytab host/bastion.westeros.local@WESTEROS.LOCAL

Cheatsheet

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

{% content-ref url="privilege-escalation/linux-active-directory.md" %} linux-active-directory.md {% endcontent-ref %}

सूचीकरण (Enumeration)

{% hint style="warning" %} आप ldap और अन्य बाइनरी टूल्स के माध्यम से, या FreeIPA सर्वर के पोर्ट 443 पर वेब पेज से कनेक्ट करके सूचीकरण कर सकते हैं। {% endhint %}

होस्ट्स, उपयोगकर्ता, और समूह

होस्ट्स, उपयोगकर्ता और समूह बनाना संभव है। होस्ट्स और उपयोगकर्ता को “होस्ट समूह” और “उपयोगकर्ता समूह” के रूप में जाने जाने वाले कंटेनरों में वर्गीकृत किया जाता है। ये संगठनात्मक इकाइयों (OU) के समान हैं।

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

ldapsearch -x

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

# 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

{% hint style="info" %} FreeIPA का admin उपयोगकर्ता AD के domain admins के समान होता है। {% endhint %}

हैशेज़

IPA सर्वर का root उपयोगकर्ता पासवर्ड हैशेज़ तक पहुँच सकता है।

  • उपयोगकर्ता का पासवर्ड हैश “userPasswordएट्रिब्यूट में base64 के रूप में संग्रहीत होता है। यह हैश SSHA512 (FreeIPA के पुराने संस्करणों में) या PBKDF2_SHA256 हो सकता है।
  • पासवर्ड का NthashipaNTHash” में base64 के रूप में संग्रहीत होता है यदि सिस्टम में AD के साथ इंटीग्रेशन है।

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

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

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

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

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

HBAC-नियम

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

# 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-नियम

FreeIPA एक केंद्रीकृत स्रोत के माध्यम से sudo अनुमतियों को प्रबंधित करने की क्षमता प्रदान करता है, जिसे sudo-नियम के रूप में जाना जाता है। ये नियम समूह डोमेन में नामांकित होस्ट्स पर 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

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

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

जैसा कि ऊपर के स्क्रीनशॉट में दिखाया गया है “User Administrator” भूमिका में निम्नलिखित विशेषाधिकार शामिल हैं:

  • User Administrators
  • Group Administrators
  • Stage User Administrators

हम और गहराई में जाकर प्रत्येक विशेषाधिकार को सौंपी गई अनुमतियों का विवरण देख सकते हैं:

जैसा कि हम देख सकते हैं “User Administrator” भूमिका में पर्यावरण के भीतर काफी अधिक अनुमतियाँ शामिल हैं। भूमिकाओं, विशेषाधिकारों, और अनुमतियों की सामान्य अवधारणा और संरचना को समझना पर्यावरण भर में हमले के मार्गों की पहचान करने के लिए महत्वपूर्ण हो सकता है।

# 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

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

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

Linikatz/LinikatzV2

Privesc

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

{% hint style="warning" %} यदि आप नया उपयोगकर्ता root नाम से बना सकते हैं, तो आप उसका अनुकरण कर सकते हैं और आप किसी भी मशीन में root के रूप में SSH कर सकेंगे।

इसे पैच किया गया है। {% endhint %}

"User Administrators" विशेषाधिकार बहुत शक्तिशाली है (जैसा कि इसका नाम बताता है):

इस विशेषाधिकार के साथ वातावरण के अंदर उपयोगकर्ताओं को प्रभावित करने की बहुत सारी शक्तियाँ आती हैं। इस विशेषाधिकार का उपयोग करके हम FreeIPA डोमेन के अंदर एक नया उपयोगकर्ता _root**_ बना सकते हैं।

एक बार जब डोमेन में उपयोगकर्ता बन जाता है, हम _kinit**_ के साथ खाते के लिए एक टिकट प्राप्त कर सकते हैं।

अब हम अपने नए बनाए गए root डोमेन खाते का उपयोग करके SSH करने का प्रयास कर सकते हैं।

जैसा कि दिखाया गया है यह उपयोगकर्ता को स्थानीय root खाते में ले जाता है! इसलिए केवल एक स्थानीय उपयोगकर्ता के लिए एक डोमेन उपयोगकर्ता बनाकर हम root@WESTEROS.LOCAL खाते का उपयोग करके प्रमाणित करने और स्थानीय root खाते के उपयोगकर्ता संदर्भ प्राप्त करने में सक्षम थे

इस दोष के बारे में अधिक जानकारी के लिए देखें https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b\

Learn AWS hacking from zero to hero with htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके:

  • यदि आप चाहते हैं कि आपकी कंपनी का विज्ञापन HackTricks में दिखाई दे या HackTricks को PDF में डाउनलोड करें तो SUBSCRIPTION PLANS देखें!
  • official PEASS & HackTricks swag प्राप्त करें
  • The PEASS Family की खोज करें, हमारा विशेष NFTs संग्रह
  • 💬 Discord group में शामिल हों या telegram group में या Twitter पर 🐦 @carlospolopm को फॉलो करें
  • HackTricks के github repos और HackTricks Cloud में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।