9.9 KiB
macOS Kernel & System Extensions
{{#include ../../../banners/hacktricks-training.md}}
XNU Kernel
macOS का मूल XNU है, जिसका अर्थ है "X is Not Unix"। यह कर्नेल मूल रूप से Mach माइक्रोकर्नेल (जिस पर बाद में चर्चा की जाएगी) और Berkeley Software Distribution (BSD) के तत्वों से बना है। XNU I/O Kit नामक एक प्रणाली के माध्यम से कर्नेल ड्राइवरों के लिए एक प्लेटफ़ॉर्म भी प्रदान करता है। XNU कर्नेल डार्विन ओपन-सोर्स प्रोजेक्ट का हिस्सा है, जिसका अर्थ है इसका स्रोत कोड स्वतंत्र रूप से उपलब्ध है।
एक सुरक्षा शोधकर्ता या Unix डेवलपर के दृष्टिकोण से, macOS एक FreeBSD प्रणाली के समान महसूस हो सकता है जिसमें एक सुंदर GUI और कई कस्टम एप्लिकेशन हैं। BSD के लिए विकसित अधिकांश एप्लिकेशन macOS पर बिना किसी संशोधन के संकलित और चलाए जा सकते हैं, क्योंकि Unix उपयोगकर्ताओं के लिए परिचित कमांड-लाइन उपकरण macOS में सभी मौजूद हैं। हालाँकि, चूंकि XNU कर्नेल Mach को शामिल करता है, इसलिए पारंपरिक Unix-समान प्रणाली और macOS के बीच कुछ महत्वपूर्ण अंतर हैं, और ये अंतर संभावित समस्याएँ उत्पन्न कर सकते हैं या अद्वितीय लाभ प्रदान कर सकते हैं।
XNU का ओपन-सोर्स संस्करण: https://opensource.apple.com/source/xnu/
Mach
Mach एक माइक्रोकर्नेल है जिसे UNIX-संगत होने के लिए डिज़ाइन किया गया है। इसके प्रमुख डिज़ाइन सिद्धांतों में से एक था कर्नेल स्थान में चलने वाले कोड की मात्रा को कम करना और इसके बजाय कई सामान्य कर्नेल कार्यों, जैसे फ़ाइल प्रणाली, नेटवर्किंग, और I/O को उपयोगकर्ता-स्तरीय कार्यों के रूप में चलाने की अनुमति देना।
XNU में, Mach कर्नेल द्वारा सामान्यतः संभाले जाने वाले कई महत्वपूर्ण निम्न-स्तरीय संचालन के लिए जिम्मेदार है, जैसे प्रोसेसर शेड्यूलिंग, मल्टीटास्किंग, और वर्चुअल मेमोरी प्रबंधन।
BSD
XNU कर्नेल में FreeBSD प्रोजेक्ट से व्युत्पन्न कोड की एक महत्वपूर्ण मात्रा भी शामिल है। यह कोड Mach के साथ कर्नेल का हिस्सा के रूप में चलता है, एक ही पते की जगह में। हालाँकि, XNU के भीतर FreeBSD कोड मूल FreeBSD कोड से काफी भिन्न हो सकता है क्योंकि Mach के साथ इसकी संगतता सुनिश्चित करने के लिए संशोधन आवश्यक थे। FreeBSD कई कर्नेल संचालन में योगदान करता है, जिसमें शामिल हैं:
- प्रक्रिया प्रबंधन
- सिग्नल हैंडलिंग
- बुनियादी सुरक्षा तंत्र, जिसमें उपयोगकर्ता और समूह प्रबंधन शामिल है
- सिस्टम कॉल अवसंरचना
- TCP/IP स्टैक और सॉकेट
- फ़ायरवॉल और पैकेट फ़िल्टरिंग
BSD और Mach के बीच बातचीत को समझना जटिल हो सकता है, उनके विभिन्न वैचारिक ढांचे के कारण। उदाहरण के लिए, BSD प्रक्रियाओं का उपयोग अपने मौलिक निष्पादन इकाई के रूप में करता है, जबकि Mach थ्रेड के आधार पर कार्य करता है। इस विसंगति को XNU में प्रत्येक BSD प्रक्रिया को एक Mach कार्य के साथ जोड़कर सुलझाया गया है जिसमें ठीक एक Mach थ्रेड होता है। जब BSD का fork() सिस्टम कॉल उपयोग किया जाता है, तो कर्नेल के भीतर BSD कोड एक कार्य और एक थ्रेड संरचना बनाने के लिए Mach कार्यों का उपयोग करता है।
इसके अलावा, Mach और BSD प्रत्येक अलग-अलग सुरक्षा मॉडल बनाए रखते हैं: Mach का सुरक्षा मॉडल पोर्ट अधिकारों पर आधारित है, जबकि BSD का सुरक्षा मॉडल प्रक्रिया स्वामित्व के आधार पर कार्य करता है। इन दोनों मॉडलों के बीच के भिन्नताएँ कभी-कभी स्थानीय विशेषाधिकार-उन्नयन कमजोरियों का परिणाम बनती हैं। सामान्य सिस्टम कॉल के अलावा, Mach ट्रैप भी हैं जो उपयोगकर्ता-स्थान कार्यक्रमों को कर्नेल के साथ बातचीत करने की अनुमति देते हैं। ये विभिन्न तत्व मिलकर macOS कर्नेल की बहुपरकारी, हाइब्रिड आर्किटेक्चर का निर्माण करते हैं।
I/O Kit - Drivers
I/O Kit एक ओपन-सोर्स, ऑब्जेक्ट-ओरिएंटेड डिवाइस-ड्राइवर ढांचा है जो XNU कर्नेल में गतिशील रूप से लोड किए गए डिवाइस ड्राइवरों को संभालता है। यह कर्नेल में ऑन-द-फ्लाई मॉड्यूलर कोड जोड़ने की अनुमति देता है, जो विविध हार्डवेयर का समर्थन करता है।
{{#ref}} macos-iokit.md {{#endref}}
IPC - Inter Process Communication
{{#ref}} ../macos-proces-abuse/macos-ipc-inter-process-communication/ {{#endref}}
macOS Kernel Extensions
macOS कर्नेल एक्सटेंशन (.kext) लोड करने के लिए अत्यधिक प्रतिबंधात्मक है क्योंकि कोड उच्च विशेषाधिकार के साथ चलेगा। वास्तव में, डिफ़ॉल्ट रूप से यह लगभग असंभव है (जब तक कि कोई बायपास नहीं पाया जाता)।
अगली पृष्ठ पर आप यह भी देख सकते हैं कि macOS अपने कर्नेलकैश के भीतर .kext
को कैसे पुनर्प्राप्त करता है:
{{#ref}} macos-kernel-extensions.md {{#endref}}
macOS System Extensions
कर्नेल एक्सटेंशन का उपयोग करने के बजाय, macOS ने सिस्टम एक्सटेंशन बनाए, जो कर्नेल के साथ बातचीत करने के लिए उपयोगकर्ता स्तर के APIs प्रदान करते हैं। इस तरह, डेवलपर्स कर्नेल एक्सटेंशन का उपयोग करने से बच सकते हैं।
{{#ref}} macos-system-extensions.md {{#endref}}
References
{{#include ../../../banners/hacktricks-training.md}}