macOS Kernel Extensions

Support HackTricks

Basic Information

कर्नेल एक्सटेंशन (Kexts) पैकेज हैं जिनका .kext एक्सटेंशन होता है जो macOS कर्नेल स्पेस में सीधे लोड किए जाते हैं, जो मुख्य ऑपरेटिंग सिस्टम को अतिरिक्त कार्यक्षमता प्रदान करते हैं।

Requirements

स्पष्ट रूप से, यह इतना शक्तिशाली है कि कर्नेल एक्सटेंशन लोड करना जटिल है। ये आवश्यकताएँ हैं जो एक कर्नेल एक्सटेंशन को लोड करने के लिए पूरी करनी चाहिए:

  • जब रिकवरी मोड में प्रवेश करते हैं, कर्नेल एक्सटेंशन को लोड करने की अनुमति होनी चाहिए:

  • कर्नेल एक्सटेंशन को कर्नेल कोड साइनिंग सर्टिफिकेट के साथ साइन किया जाना चाहिए, जिसे केवल Apple द्वारा प्रदान किया जा सकता है। जो कंपनी की समीक्षा करेगा और यह क्यों आवश्यक है।

  • कर्नेल एक्सटेंशन को भी नोटराइज किया जाना चाहिए, Apple इसे मैलवेयर के लिए जांच सकेगा।

  • फिर, रूट उपयोगकर्ता ही कर्नेल एक्सटेंशन को लोड कर सकता है और पैकेज के अंदर की फ़ाइलें रूट की होनी चाहिए

  • अपलोड प्रक्रिया के दौरान, पैकेज को संरक्षित नॉन-रूट स्थान में तैयार किया जाना चाहिए: /Library/StagedExtensions (इसके लिए com.apple.rootless.storage.KernelExtensionManagement ग्रांट की आवश्यकता होती है)।

  • अंत में, जब इसे लोड करने का प्रयास किया जाता है, तो उपयोगकर्ता एक पुष्टि अनुरोध प्राप्त करेगा और, यदि स्वीकार किया गया, तो कंप्यूटर को इसे लोड करने के लिए रीस्टार्ट करना होगा।

Loading process

कैटालिना में यह इस प्रकार था: यह ध्यान देने योग्य है कि सत्यापन प्रक्रिया यूजरलैंड में होती है। हालाँकि, केवल वे एप्लिकेशन जिनके पास com.apple.private.security.kext-management ग्रांट है, वे कर्नेल से एक्सटेंशन लोड करने का अनुरोध कर सकते हैं: kextcache, kextload, kextutil, kextd, syspolicyd

  1. kextutil cli एक्सटेंशन लोड करने के लिए सत्यापन प्रक्रिया शुरू करता है

  • यह kextd से Mach सेवा का उपयोग करके बात करेगा।

  1. kextd कई चीजों की जांच करेगा, जैसे हस्ताक्षर

  • यह syspolicyd से बात करेगा ताकि यह जांच सके कि क्या एक्सटेंशन को लोड किया जा सकता है।

  1. syspolicyd उपयोगकर्ता से प्रॉम्प्ट करेगा यदि एक्सटेंशन पहले लोड नहीं किया गया है।

  • syspolicyd kextd को परिणाम रिपोर्ट करेगा

  1. अंततः kextd कर्नेल को लोड करने के लिए एक्सटेंशन को बताने में सक्षम होगा

यदि kextd उपलब्ध नहीं है, तो kextutil वही जांचें कर सकता है।

Enumeration (loaded kexts)

# Get loaded kernel extensions
kextstat

# Get dependencies of the kext number 22
kextstat | grep " 22 " | cut -c2-5,50- | cut -d '(' -f1

Kernelcache

हालांकि कर्नेल एक्सटेंशन /System/Library/Extensions/ में होने की उम्मीद है, यदि आप इस फ़ोल्डर में जाते हैं तो आपको कोई बाइनरी नहीं मिलेगी। इसका कारण कर्नेलकैश है और एक .kext को रिवर्स करने के लिए आपको इसे प्राप्त करने का एक तरीका खोजना होगा।

कर्नेलकैश XNU कर्नेल का एक पूर्व-संकलित और पूर्व-लिंक किया गया संस्करण है, साथ ही आवश्यक डिवाइस ड्राइवर और कर्नेल एक्सटेंशन भी। इसे संकुचित प्रारूप में संग्रहीत किया जाता है और बूट-अप प्रक्रिया के दौरान मेमोरी में अनसंकुचित किया जाता है। कर्नेलकैश एक तेज़ बूट समय को सुविधाजनक बनाता है क्योंकि इसमें कर्नेल और महत्वपूर्ण ड्राइवरों का एक तैयार-से-चलाने वाला संस्करण उपलब्ध होता है, जिससे बूट समय पर इन घटकों को गतिशील रूप से लोड और लिंक करने में लगने वाले समय और संसाधनों की बचत होती है।

Local Kerlnelcache

iOS में यह /System/Library/Caches/com.apple.kernelcaches/kernelcache में स्थित है, macOS में आप इसे find / -name "kernelcache" 2>/dev/null के साथ खोज सकते हैं। मेरे मामले में macOS में मैंने इसे निम्नलिखित स्थान पर पाया:

  • /System/Volumes/Preboot/1BAEB4B5-180B-4C46-BD53-51152B7D92DA/boot/DAD35E7BC0CDA79634C20BD1BD80678DFB510B2AAD3D25C1228BB34BCD0A711529D3D571C93E29E1D0C1264750FA043F/System/Library/Caches/com.apple.kernelcaches/kernelcache

IMG4

IMG4 फ़ाइल प्रारूप एक कंटेनर प्रारूप है जिसका उपयोग Apple अपने iOS और macOS उपकरणों में फर्मवेयर घटकों (जैसे कर्नेलकैश) को सुरक्षित रूप से स्टोर और सत्यापित करने के लिए करता है। IMG4 प्रारूप में एक हेडर और कई टैग होते हैं जो विभिन्न डेटा के टुकड़ों को संलग्न करते हैं, जिसमें वास्तविक पेलोड (जैसे कर्नेल या बूटलोडर), एक हस्ताक्षर, और एक सेट मैनिफेस्ट प्रॉपर्टीज शामिल हैं। यह प्रारूप क्रिप्टोग्राफिक सत्यापन का समर्थन करता है, जिससे डिवाइस फर्मवेयर घटक को निष्पादित करने से पहले उसकी प्रामाणिकता और अखंडता की पुष्टि कर सकता है।

यह आमतौर पर निम्नलिखित घटकों से बना होता है:

  • Payload (IM4P):

  • अक्सर संकुचित (LZFSE4, LZSS, …)

  • वैकल्पिक रूप से एन्क्रिप्टेड

  • Manifest (IM4M):

  • हस्ताक्षर शामिल है

  • अतिरिक्त कुंजी/मान शब्दकोश

  • Restore Info (IM4R):

  • APNonce के रूप में भी जाना जाता है

  • कुछ अपडेट के पुनः खेलने से रोकता है

  • वैकल्पिक: आमतौर पर यह नहीं पाया जाता

कर्नेलकैश को अनसंकुचित करें:

# img4tool (https://github.com/tihmstar/img4tool
img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e

# pyimg4 (https://github.com/m1stadev/PyIMG4)
pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e

डाउनलोड

https://github.com/dortania/KdkSupportPkg/releases पर सभी कर्नेल डिबग किट्स मिल सकते हैं। आप इसे डाउनलोड कर सकते हैं, माउंट कर सकते हैं, Suspicious Package टूल के साथ खोल सकते हैं, .kext फ़ोल्डर तक पहुँच सकते हैं और निकाल सकते हैं

सिंबॉल के लिए जांचें:

nm -a ~/Downloads/Sandbox.kext/Contents/MacOS/Sandbox | wc -l

कभी-कभी Apple kernelcache को symbols के साथ जारी करता है। आप उन पृष्ठों पर दिए गए लिंक का पालन करके कुछ firmware डाउनलोड कर सकते हैं जिनमें symbols होते हैं। इन firmware में अन्य फ़ाइलों के साथ kernelcache शामिल होगा।

फ़ाइलों को extract करने के लिए, पहले .ipsw से .zip में एक्सटेंशन बदलें और फिर unzip करें।

Firmware को extract करने के बाद आपको एक फ़ाइल मिलेगी जैसे: kernelcache.release.iphone14। यह IMG4 प्रारूप में है, आप इसमें से दिलचस्प जानकारी को निकाल सकते हैं:

pyimg4:

pyimg4 im4p extract -i kernelcache.release.iphone14 -o kernelcache.release.iphone14.e

img4tool:

img4tool -e kernelcache.release.iphone14 -o kernelcache.release.iphone14.e

Inspecting kernelcache

जांचें कि क्या kernelcache में प्रतीक हैं जिनके साथ

nm -a kernelcache.release.iphone14.e | wc -l

इसके साथ, हम अब सभी एक्सटेंशनों को निकाल सकते हैं या जिसमें आप रुचि रखते हैं:

# List all extensions
kextex -l kernelcache.release.iphone14.e
## Extract com.apple.security.sandbox
kextex -e com.apple.security.sandbox kernelcache.release.iphone14.e

# Extract all
kextex_all kernelcache.release.iphone14.e

# Check the extension for symbols
nm -a binaries/com.apple.security.sandbox | wc -l

संदर्भ

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

Last updated