macOS SIP

Support HackTricks

Basic Information

System Integrity Protection (SIP) macOS में एक तंत्र है जो सबसे विशेषाधिकार प्राप्त उपयोगकर्ताओं को भी प्रमुख सिस्टम फ़ोल्डरों में अनधिकृत परिवर्तनों से रोकने के लिए डिज़ाइन किया गया है। यह सुविधा सिस्टम की अखंडता बनाए रखने में महत्वपूर्ण भूमिका निभाती है, जैसे कि संरक्षित क्षेत्रों में फ़ाइलों को जोड़ना, संशोधित करना या हटाना। SIP द्वारा संरक्षित प्रमुख फ़ोल्डर में शामिल हैं:

  • /System

  • /bin

  • /sbin

  • /usr

SIP के व्यवहार को नियंत्रित करने वाले नियम /System/Library/Sandbox/rootless.conf में स्थित कॉन्फ़िगरेशन फ़ाइल में परिभाषित हैं। इस फ़ाइल में, उन पथों को जो एक तारांकित (*) के साथ प्रारंभ होते हैं, अन्यथा कठोर SIP प्रतिबंधों के अपवाद के रूप में दर्शाया गया है।

नीचे दिए गए उदाहरण पर विचार करें:

/usr
* /usr/libexec/cups
* /usr/local
* /usr/share/man

यह स्निपेट यह संकेत करता है कि जबकि SIP सामान्यतः /usr निर्देशिका को सुरक्षित करता है, कुछ विशिष्ट उपनिर्देशिकाएँ (/usr/libexec/cups, /usr/local, और /usr/share/man) हैं जहाँ संशोधन की अनुमति है, जैसा कि उनके पथों के पहले अsterisk (*) द्वारा संकेतित है।

यह सत्यापित करने के लिए कि क्या कोई निर्देशिका या फ़ाइल SIP द्वारा सुरक्षित है, आप ls -lOd कमांड का उपयोग कर सकते हैं ताकि restricted या sunlnk ध्वज की उपस्थिति की जांच की जा सके। उदाहरण के लिए:

ls -lOd /usr/libexec/cups
drwxr-xr-x  11 root  wheel  sunlnk 352 May 13 00:29 /usr/libexec/cups

इस मामले में, sunlnk ध्वज यह दर्शाता है कि /usr/libexec/cups निर्देशिका स्वयं हटाई नहीं जा सकती, हालांकि इसके भीतर फ़ाइलें बनाई, संशोधित या हटाई जा सकती हैं।

दूसरी ओर:

ls -lOd /usr/libexec
drwxr-xr-x  338 root  wheel  restricted 10816 May 13 00:29 /usr/libexec

यहाँ, restricted ध्वज इंगित करता है कि /usr/libexec निर्देशिका SIP द्वारा संरक्षित है। SIP-संरक्षित निर्देशिका में फ़ाइलें बनाई, संशोधित या हटाई नहीं जा सकतीं।

इसके अलावा, यदि एक फ़ाइल में com.apple.rootless विस्तारित attribute है, तो वह फ़ाइल भी SIP द्वारा संरक्षित होगी।

SIP अन्य रूट क्रियाओं को भी सीमित करता है जैसे:

  • अविश्वसनीय कर्नेल एक्सटेंशन लोड करना

  • Apple-हस्ताक्षरित प्रक्रियाओं के लिए कार्य-ports प्राप्त करना

  • NVRAM चर को संशोधित करना

  • कर्नेल डिबगिंग की अनुमति देना

विकल्प nvram चर में एक बिटफ्लैग के रूप में बनाए रखे जाते हैं (csr-active-config Intel पर और lp-sip0 ARM के लिए बूट किए गए डिवाइस ट्री से पढ़ा जाता है)। आप XNU स्रोत कोड में csr.sh में ध्वज पा सकते हैं:

SIP स्थिति

आप निम्नलिखित कमांड के साथ जांच सकते हैं कि क्या SIP आपके सिस्टम पर सक्षम है:

csrutil status

यदि आपको SIP को अक्षम करने की आवश्यकता है, तो आपको अपने कंप्यूटर को रिकवरी मोड में पुनः प्रारंभ करना होगा (स्टार्टअप के दौरान Command+R दबाकर), फिर निम्नलिखित कमांड निष्पादित करें:

csrutil disable

यदि आप SIP को सक्षम रखना चाहते हैं लेकिन डिबगिंग सुरक्षा को हटाना चाहते हैं, तो आप ऐसा कर सकते हैं:

csrutil enable --without debug

अन्य प्रतिबंध

  • असत्यापित कर्नेल एक्सटेंशन (kexts) को लोड करने की अनुमति नहीं देता, यह सुनिश्चित करता है कि केवल सत्यापित एक्सटेंशन सिस्टम कर्नेल के साथ इंटरैक्ट करें।

  • macOS सिस्टम प्रक्रियाओं का डिबगिंग रोकता है, अनधिकृत पहुंच और संशोधन से कोर सिस्टम घटकों की सुरक्षा करता है।

  • dtrace जैसे उपकरणों को सिस्टम प्रक्रियाओं का निरीक्षण करने से रोकता है, सिस्टम के संचालन की अखंडता की और सुरक्षा करता है।

इस वार्ता में SIP जानकारी के बारे में अधिक जानें

SIP बायपास

SIP को बायपास करने से एक हमलावर को:

  • उपयोगकर्ता डेटा तक पहुंच: सभी उपयोगकर्ता खातों से संवेदनशील उपयोगकर्ता डेटा जैसे मेल, संदेश और सफारी इतिहास पढ़ें।

  • TCC बायपास: TCC (Transparency, Consent, and Control) डेटाबेस को सीधे संशोधित करें ताकि वेबकैम, माइक्रोफोन और अन्य संसाधनों तक अनधिकृत पहुंच प्रदान की जा सके।

  • स्थायीता स्थापित करें: SIP-सुरक्षित स्थानों में मैलवेयर रखें, इसे हटाने के लिए प्रतिरोधी बनाते हुए, यहां तक कि रूट विशेषाधिकारों द्वारा भी। इसमें मैलवेयर हटाने के उपकरण (MRT) के साथ छेड़छाड़ करने की संभावना भी शामिल है।

  • कर्नेल एक्सटेंशन लोड करें: हालांकि अतिरिक्त सुरक्षा उपाय हैं, SIP को बायपास करना असत्यापित कर्नेल एक्सटेंशन लोड करने की प्रक्रिया को सरल बनाता है।

इंस्टॉलर पैकेज

एप्पल के प्रमाणपत्र से हस्ताक्षरित इंस्टॉलर पैकेज इसकी सुरक्षा को बायपास कर सकते हैं। इसका मतलब है कि यदि वे SIP-सुरक्षित निर्देशिकाओं को संशोधित करने का प्रयास करते हैं तो मानक डेवलपर्स द्वारा हस्ताक्षरित पैकेज भी अवरुद्ध हो जाएंगे।

अस्तित्वहीन SIP फ़ाइल

एक संभावित छिद्र यह है कि यदि एक फ़ाइल rootless.conf में निर्दिष्ट है लेकिन वर्तमान में मौजूद नहीं है, तो इसे बनाया जा सकता है। मैलवेयर इसका लाभ उठाकर सिस्टम पर स्थायीता स्थापित कर सकता है। उदाहरण के लिए, एक दुर्भावनापूर्ण प्रोग्राम /System/Library/LaunchDaemons में एक .plist फ़ाइल बना सकता है यदि यह rootless.conf में सूचीबद्ध है लेकिन मौजूद नहीं है।

com.apple.rootless.install.heritable

अधिकार com.apple.rootless.install.heritable SIP को बायपास करने की अनुमति देता है

यह पता चला कि सिस्टम द्वारा इसके कोड हस्ताक्षर की पुष्टि करने के बाद इंस्टॉलर पैकेज को स्वैप करना संभव था और फिर, सिस्टम मूल पैकेज के बजाय दुर्भावनापूर्ण पैकेज स्थापित करेगा। चूंकि ये क्रियाएँ system_installd द्वारा की गई थीं, यह SIP को बायपास करने की अनुमति देगा।

यदि एक पैकेज एक माउंटेड इमेज या बाहरी ड्राइव से स्थापित किया गया था, तो इंस्टॉलर उस फ़ाइल सिस्टम से बाइनरी को निष्पादित करेगा (SIP-सुरक्षित स्थान से नहीं), जिससे system_installd एक मनमाना बाइनरी निष्पादित करेगा।

CVE-2021-30892 - Shrootless

इस ब्लॉग पोस्ट के शोधकर्ताओं ने macOS के सिस्टम इंटीग्रिटी प्रोटेक्शन (SIP) तंत्र में एक भेद्यता का पता लगाया, जिसे 'Shrootless' भेद्यता कहा गया। यह भेद्यता system_installd डेमन के चारों ओर केंद्रित है, जिसमें एक अधिकार है, com.apple.rootless.install.heritable, जो इसके किसी भी बाल प्रक्रिया को SIP के फ़ाइल सिस्टम प्रतिबंधों को बायपास करने की अनुमति देता है।

system_installd डेमन उन पैकेजों को स्थापित करेगा जो Apple द्वारा हस्ताक्षरित हैं।

शोधकर्ताओं ने पाया कि Apple-साइन किए गए पैकेज (.pkg फ़ाइल) की स्थापना के दौरान, system_installd पैकेज में शामिल किसी भी पोस्ट-इंस्टॉल स्क्रिप्ट को चलाता है। ये स्क्रिप्ट डिफ़ॉल्ट शेल, zsh द्वारा निष्पादित की जाती हैं, जो स्वचालित रूप से /etc/zshenv फ़ाइल से आदेश चलाती है, यदि यह मौजूद है, यहां तक कि गैर-इंटरएक्टिव मोड में भी। इस व्यवहार का उपयोग हमलावरों द्वारा किया जा सकता है: एक दुर्भावनापूर्ण /etc/zshenv फ़ाइल बनाकर और system_installd के zsh को सक्रिय करने की प्रतीक्षा करके, वे डिवाइस पर मनमाने ऑपरेशन कर सकते हैं।

इसके अलावा, यह पता चला कि /etc/zshenv को एक सामान्य हमले की तकनीक के रूप में उपयोग किया जा सकता है, न कि केवल SIP बायपास के लिए। प्रत्येक उपयोगकर्ता प्रोफ़ाइल में एक ~/.zshenv फ़ाइल होती है, जो /etc/zshenv की तरह व्यवहार करती है लेकिन रूट अनुमतियों की आवश्यकता नहीं होती। इस फ़ाइल का उपयोग एक स्थायीता तंत्र के रूप में किया जा सकता है, जो हर बार zsh शुरू होने पर ट्रिगर होता है, या विशेषाधिकार बढ़ाने के तंत्र के रूप में। यदि एक व्यवस्थापक उपयोगकर्ता sudo -s या sudo <command> का उपयोग करके रूट में बढ़ता है, तो ~/.zshenv फ़ाइल ट्रिगर होगी, प्रभावी रूप से रूट में बढ़ते हुए।

CVE-2022-22583 में यह पता चला कि वही system_installd प्रक्रिया अभी भी दुरुपयोग की जा सकती है क्योंकि यह /tmp के अंदर SIP द्वारा संरक्षित एक यादृच्छिक नामित फ़ोल्डर के अंदर पोस्ट-इंस्टॉल स्क्रिप्ट डाल रही थी। बात यह है कि /tmp स्वयं SIP द्वारा संरक्षित नहीं है, इसलिए एक वर्चुअल इमेज को उस पर माउंट करना संभव था, फिर इंस्टॉलर वहां पोस्ट-इंस्टॉल स्क्रिप्ट डालता, वर्चुअल इमेज को अनमाउंट करता, सभी फ़ोल्डरों को फिर से बनाता और पेलोड के साथ पोस्ट इंस्टॉलेशन स्क्रिप्ट को निष्पादित करने के लिए जोड़ता।

एक भेद्यता की पहचान की गई जहां fsck_cs को एक महत्वपूर्ण फ़ाइल को भ्रष्ट करने के लिए गुमराह किया गया, इसकी सांकेतिक लिंक का पालन करने की क्षमता के कारण। विशेष रूप से, हमलावरों ने /dev/diskX से फ़ाइल /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist के लिए एक लिंक तैयार किया। /dev/diskX पर fsck_cs को निष्पादित करने से Info.plist का भ्रष्टाचार हुआ। इस फ़ाइल की अखंडता ऑपरेटिंग सिस्टम के SIP (सिस्टम इंटीग्रिटी प्रोटेक्शन) के लिए महत्वपूर्ण है, जो कर्नेल एक्सटेंशन के लोडिंग को नियंत्रित करता है। एक बार भ्रष्ट होने पर, SIP की कर्नेल अपवाद प्रबंधन की क्षमता प्रभावित होती है।

इस भेद्यता का लाभ उठाने के लिए आदेश हैं:

ln -s /System/Library/Extensions/AppleKextExcludeList.kext/Contents/Info.plist /dev/diskX
fsck_cs /dev/diskX 1>&-
touch /Library/Extensions/
reboot

इस कमजोरियों के शोषण के गंभीर परिणाम हैं। Info.plist फ़ाइल, जो सामान्यतः कर्नेल एक्सटेंशन के लिए अनुमतियों का प्रबंधन करने के लिए जिम्मेदार होती है, अप्रभावी हो जाती है। इसमें कुछ एक्सटेंशनों, जैसे AppleHWAccess.kext को ब्लैकलिस्ट करने की असमर्थता शामिल है। परिणामस्वरूप, SIP के नियंत्रण तंत्र के खराब होने के कारण, इस एक्सटेंशन को लोड किया जा सकता है, जो सिस्टम की RAM तक अनधिकृत पढ़ने और लिखने की पहुंच प्रदान करता है।

सुरक्षा को बायपास करने के लिए SIP संरक्षित फ़ोल्डरों पर एक नई फ़ाइल प्रणाली को माउंट करना संभव था।

mkdir evil
# Add contento to the folder
hdiutil create -srcfolder evil evil.dmg
hdiutil attach -mountpoint /System/Library/Snadbox/ evil.dmg

सिस्टम को Install macOS Sierra.app के भीतर एक एम्बेडेड इंस्टॉलर डिस्क इमेज से बूट करने के लिए सेट किया गया है ताकि OS को अपग्रेड किया जा सके, bless उपयोगिता का उपयोग करते हुए। उपयोग की जाने वाली कमांड इस प्रकार है:

/usr/sbin/bless -setBoot -folder /Volumes/Macintosh HD/macOS Install Data -bootefi /Volumes/Macintosh HD/macOS Install Data/boot.efi -options config="\macOS Install Data\com.apple.Boot" -label macOS Installer

इस प्रक्रिया की सुरक्षा को खतरा हो सकता है यदि एक हमलावर बूट करने से पहले अपग्रेड इमेज (InstallESD.dmg) को बदलता है। रणनीति में एक डायनामिक लोडर (dyld) को एक दुर्भावनापूर्ण संस्करण (libBaseIA.dylib) के साथ प्रतिस्थापित करना शामिल है। यह प्रतिस्थापन तब होता है जब इंस्टॉलर शुरू होता है, हमलावर के कोड का निष्पादन होता है।

हमलावर का कोड अपग्रेड प्रक्रिया के दौरान नियंत्रण प्राप्त करता है, इंस्टॉलर पर सिस्टम के विश्वास का लाभ उठाते हुए। हमला InstallESD.dmg इमेज को मेथड स्विज़लिंग के माध्यम से बदलने के द्वारा आगे बढ़ता है, विशेष रूप से extractBootBits मेथड को लक्षित करता है। इससे डिस्क इमेज का उपयोग करने से पहले दुर्भावनापूर्ण कोड का इंजेक्शन संभव हो जाता है।

इसके अलावा, InstallESD.dmg के भीतर, एक BaseSystem.dmg है, जो अपग्रेड कोड की रूट फ़ाइल प्रणाली के रूप में कार्य करता है। इसमें डायनामिक लाइब्रेरी का इंजेक्शन करने से दुर्भावनापूर्ण कोड एक ऐसे प्रक्रिया के भीतर कार्य कर सकता है जो OS-स्तरीय फ़ाइलों को बदलने में सक्षम है, जिससे सिस्टम के समझौते की संभावना काफी बढ़ जाती है।

DEF CON 31 से इस वार्ता में दिखाया गया है कि systemmigrationd (जो SIP को बायपास कर सकता है) एक bash और एक perl स्क्रिप्ट को निष्पादित करता है, जिसे env वेरिएबल BASH_ENV और PERL5OPT के माध्यम से दुरुपयोग किया जा सकता है।

CVE-2023-42860

जैसा कि इस ब्लॉग पोस्ट में विस्तृत किया गया है, InstallAssistant.pkg पैकेज से एक postinstall स्क्रिप्ट निष्पादित हो रही थी:

/usr/bin/chflags -h norestricted "${SHARED_SUPPORT_PATH}/SharedSupport.dmg"

and यह संभव था कि ${SHARED_SUPPORT_PATH}/SharedSupport.dmg में एक symlink बनाया जाए जो एक उपयोगकर्ता को किसी भी फ़ाइल को अनरिस्ट्रिक्ट करने की अनुमति देता है, SIP सुरक्षा को बायपास करते हुए

com.apple.rootless.install

अधिकार com.apple.rootless.install SIP को बायपास करने की अनुमति देता है

अधिकार com.apple.rootless.install macOS पर सिस्टम इंटीग्रिटी प्रोटेक्शन (SIP) को बायपास करने के लिए जाना जाता है। इसका उल्लेख विशेष रूप से CVE-2022-26712 के संबंध में किया गया था।

इस विशेष मामले में, /System/Library/PrivateFrameworks/ShoveService.framework/Versions/A/XPCServices/SystemShoveService.xpc पर स्थित सिस्टम XPC सेवा के पास यह अधिकार है। यह संबंधित प्रक्रिया को SIP प्रतिबंधों को दरकिनार करने की अनुमति देता है। इसके अलावा, यह सेवा विशेष रूप से एक विधि प्रस्तुत करती है जो बिना किसी सुरक्षा उपायों को लागू किए फ़ाइलों को स्थानांतरित करने की अनुमति देती है।

सील किए गए सिस्टम स्नैपशॉट

सील किए गए सिस्टम स्नैपशॉट एक विशेषता है जिसे Apple ने macOS Big Sur (macOS 11) में सिस्टम इंटीग्रिटी प्रोटेक्शन (SIP) तंत्र के हिस्से के रूप में सुरक्षा और सिस्टम स्थिरता की एक अतिरिक्त परत प्रदान करने के लिए पेश किया है। ये मूल रूप से सिस्टम वॉल्यूम के केवल पढ़ने योग्य संस्करण हैं।

यहाँ एक अधिक विस्तृत नज़र है:

  1. अपरिवर्तनीय सिस्टम: सील किए गए सिस्टम स्नैपशॉट macOS सिस्टम वॉल्यूम को "अपरिवर्तनीय" बनाते हैं, जिसका अर्थ है कि इसे संशोधित नहीं किया जा सकता। यह सुरक्षा या सिस्टम स्थिरता को खतरे में डालने वाले किसी भी अनधिकृत या आकस्मिक परिवर्तनों को रोकता है।

  2. सिस्टम सॉफ़्टवेयर अपडेट: जब आप macOS अपडेट या अपग्रेड स्थापित करते हैं, तो macOS एक नया सिस्टम स्नैपशॉट बनाता है। फिर macOS स्टार्टअप वॉल्यूम इस नए स्नैपशॉट पर स्विच करने के लिए APFS (Apple File System) का उपयोग करता है। अपडेट लागू करने की पूरी प्रक्रिया अधिक सुरक्षित और विश्वसनीय हो जाती है क्योंकि यदि अपडेट के दौरान कुछ गलत होता है, तो सिस्टम हमेशा पिछले स्नैपशॉट पर वापस लौट सकता है।

  3. डेटा पृथक्करण: macOS कैटालिना में पेश किए गए डेटा और सिस्टम वॉल्यूम पृथक्करण के सिद्धांत के साथ, सील किए गए सिस्टम स्नैपशॉट सुविधा सुनिश्चित करती है कि आपके सभी डेटा और सेटिंग्स एक अलग "डेटा" वॉल्यूम पर संग्रहीत हैं। यह पृथक्करण आपके डेटा को सिस्टम से स्वतंत्र बनाता है, जो सिस्टम अपडेट की प्रक्रिया को सरल बनाता है और सिस्टम सुरक्षा को बढ़ाता है।

याद रखें कि ये स्नैपशॉट macOS द्वारा स्वचालित रूप से प्रबंधित होते हैं और आपके डिस्क पर अतिरिक्त स्थान नहीं लेते हैं, APFS की स्थान साझा करने की क्षमताओं के लिए धन्यवाद। यह भी महत्वपूर्ण है कि ये स्नैपशॉट टाइम मशीन स्नैपशॉट से भिन्न होते हैं, जो पूरे सिस्टम के उपयोगकर्ता-सुलभ बैकअप होते हैं।

स्नैपशॉट की जांच करें

कमांड diskutil apfs list APFS वॉल्यूम के विवरण और उनके लेआउट को सूचीबद्ध करता है:

+-- Container disk3 966B902E-EDBA-4775-B743-CF97A0556A13
|   ====================================================
|   APFS Container Reference:     disk3
|   Size (Capacity Ceiling):      494384795648 B (494.4 GB)
|   Capacity In Use By Volumes:   219214536704 B (219.2 GB) (44.3% used)
|   Capacity Not Allocated:       275170258944 B (275.2 GB) (55.7% free)
|   |
|   +-< Physical Store disk0s2 86D4B7EC-6FA5-4042-93A7-D3766A222EBE
|   |   -----------------------------------------------------------
|   |   APFS Physical Store Disk:   disk0s2
|   |   Size:                       494384795648 B (494.4 GB)
|   |
|   +-> Volume disk3s1 7A27E734-880F-4D91-A703-FB55861D49B7
|   |   ---------------------------------------------------
|   |   APFS Volume Disk (Role):   disk3s1 (System)
|   |   Name:                      Macintosh HD (Case-insensitive)
|   |   Mount Point:               /System/Volumes/Update/mnt1
|   |   Capacity Consumed:         12819210240 B (12.8 GB)
|   |   Sealed:                    Broken
|   |   FileVault:                 Yes (Unlocked)
|   |   Encrypted:                 No
|   |   |
|   |   Snapshot:                  FAA23E0C-791C-43FF-B0E7-0E1C0810AC61
|   |   Snapshot Disk:             disk3s1s1
|   |   Snapshot Mount Point:      /
|   |   Snapshot Sealed:           Yes
[...]
+-> Volume disk3s5 281959B7-07A1-4940-BDDF-6419360F3327
|   ---------------------------------------------------
|   APFS Volume Disk (Role):   disk3s5 (Data)
|   Name:                      Macintosh HD - Data (Case-insensitive)
    |   Mount Point:               /System/Volumes/Data
    |   Capacity Consumed:         412071784448 B (412.1 GB)
    |   Sealed:                    No
|   FileVault:                 Yes (Unlocked)

पिछले आउटपुट में यह देखना संभव है कि उपयोगकर्ता-सुलभ स्थान /System/Volumes/Data के तहत माउंट किए गए हैं।

इसके अलावा, macOS सिस्टम वॉल्यूम स्नैपशॉट / में माउंट किया गया है और यह सील है (OS द्वारा क्रिप्टोग्राफिक रूप से हस्ताक्षरित)। इसलिए, यदि SIP को बायपास किया जाता है और इसे संशोधित किया जाता है, तो OS अब बूट नहीं होगा

यह भी संभव है कि सत्यापित करें कि सील सक्षम है चलाकर:

csrutil authenticated-root status
Authenticated Root status: enabled

इसके अलावा, स्नैपशॉट डिस्क को केवल-पढ़ने के रूप में भी माउंट किया गया है:

mount
/dev/disk3s1s1 on / (apfs, sealed, local, read-only, journaled)
HackTricks का समर्थन करें

Last updated