macOS Kernel Extensions
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
kextutil
cli एक्सटेंशन लोड करने के लिए सत्यापन प्रक्रिया शुरू करता है
यह
kextd
से Mach सेवा का उपयोग करके बात करेगा।
kextd
कई चीजों की जांच करेगा, जैसे हस्ताक्षर
यह
syspolicyd
से बात करेगा ताकि यह जांच सके कि क्या एक्सटेंशन को लोड किया जा सकता है।
syspolicyd
उपयोगकर्ता से प्रॉम्प्ट करेगा यदि एक्सटेंशन पहले लोड नहीं किया गया है।
syspolicyd
kextd
को परिणाम रिपोर्ट करेगा
अंततः
kextd
कर्नेल को लोड करने के लिए एक्सटेंशन को बताने में सक्षम होगा
यदि kextd
उपलब्ध नहीं है, तो kextutil
वही जांचें कर सकता है।
Enumeration (loaded kexts)
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 के रूप में भी जाना जाता है
कुछ अपडेट के पुनः खेलने से रोकता है
वैकल्पिक: आमतौर पर यह नहीं पाया जाता
कर्नेलकैश को अनसंकुचित करें:
डाउनलोड
https://github.com/dortania/KdkSupportPkg/releases पर सभी कर्नेल डिबग किट्स मिल सकते हैं। आप इसे डाउनलोड कर सकते हैं, माउंट कर सकते हैं, Suspicious Package टूल के साथ खोल सकते हैं, .kext
फ़ोल्डर तक पहुँच सकते हैं और निकाल सकते हैं।
सिंबॉल के लिए जांचें:
कभी-कभी Apple kernelcache को symbols के साथ जारी करता है। आप उन पृष्ठों पर दिए गए लिंक का पालन करके कुछ firmware डाउनलोड कर सकते हैं जिनमें symbols होते हैं। इन firmware में अन्य फ़ाइलों के साथ kernelcache शामिल होगा।
फ़ाइलों को extract करने के लिए, पहले .ipsw
से .zip
में एक्सटेंशन बदलें और फिर unzip करें।
Firmware को extract करने के बाद आपको एक फ़ाइल मिलेगी जैसे: kernelcache.release.iphone14
। यह IMG4 प्रारूप में है, आप इसमें से दिलचस्प जानकारी को निकाल सकते हैं:
Inspecting kernelcache
जांचें कि क्या kernelcache में प्रतीक हैं जिनके साथ
इसके साथ, हम अब सभी एक्सटेंशनों को निकाल सकते हैं या जिसमें आप रुचि रखते हैं:
संदर्भ
Last updated