macOS Gatekeeper / Quarantine / XProtect
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Gatekeeper एक सुरक्षा विशेषता है जो Mac ऑपरेटिंग सिस्टम के लिए विकसित की गई है, जिसका उद्देश्य यह सुनिश्चित करना है कि उपयोगकर्ता अपने सिस्टम पर केवल विश्वसनीय सॉफ़्टवेयर चलाएँ। यह सॉफ़्टवेयर को मान्य करके कार्य करता है जो उपयोगकर्ता ऐप स्टोर के बाहर डाउनलोड करता है और खोलने का प्रयास करता है, जैसे कि एक ऐप, एक प्लग-इन, या एक इंस्टॉलर पैकेज।
Gatekeeper का मुख्य तंत्र इसके सत्यापन प्रक्रिया में निहित है। यह जांचता है कि क्या डाउनलोड किया गया सॉफ़्टवेयर एक मान्यता प्राप्त डेवलपर द्वारा हस्ताक्षरित है, जो सॉफ़्टवेयर की प्रामाणिकता सुनिश्चित करता है। इसके अलावा, यह यह सुनिश्चित करता है कि सॉफ़्टवेयर Apple द्वारा नोटरीकृत है, यह पुष्टि करते हुए कि यह ज्ञात दुर्भावनापूर्ण सामग्री से मुक्त है और नोटरीकरण के बाद इसे छेड़ा नहीं गया है।
इसके अतिरिक्त, Gatekeeper उपयोगकर्ता नियंत्रण और सुरक्षा को पहली बार डाउनलोड किए गए सॉफ़्टवेयर को खोलने के लिए उपयोगकर्ताओं से अनुमोदन प्राप्त करके मजबूत करता है। यह सुरक्षा उपाय उपयोगकर्ताओं को संभावित हानिकारक निष्पादन योग्य कोड को अनजाने में चलाने से रोकने में मदद करता है जिसे वे एक हानिरहित डेटा फ़ाइल के रूप में गलत समझ सकते हैं।
एप्लिकेशन हस्ताक्षर, जिन्हें कोड हस्ताक्षर भी कहा जाता है, Apple की सुरक्षा अवसंरचना का एक महत्वपूर्ण घटक हैं। इन्हें सॉफ़्टवेयर लेखक की पहचान की पुष्टि करने और यह सुनिश्चित करने के लिए उपयोग किया जाता है कि कोड को अंतिम बार हस्ताक्षरित किए जाने के बाद से छेड़ा नहीं गया है।
यहाँ यह कैसे काम करता है:
एप्लिकेशन पर हस्ताक्षर करना: जब एक डेवलपर अपने एप्लिकेशन को वितरित करने के लिए तैयार होता है, तो वह एक निजी कुंजी का उपयोग करके एप्लिकेशन पर हस्ताक्षर करता है। यह निजी कुंजी एक प्रमाणपत्र से जुड़ी होती है जो Apple डेवलपर प्रोग्राम में नामांकित होने पर डेवलपर को जारी करता है। हस्ताक्षर प्रक्रिया में ऐप के सभी भागों का एक क्रिप्टोग्राफिक हैश बनाना और इस हैश को डेवलपर की निजी कुंजी के साथ एन्क्रिप्ट करना शामिल है।
एप्लिकेशन का वितरण: हस्ताक्षरित एप्लिकेशन फिर उपयोगकर्ताओं को डेवलपर के प्रमाणपत्र के साथ वितरित किया जाता है, जिसमें संबंधित सार्वजनिक कुंजी होती है।
एप्लिकेशन का सत्यापन: जब एक उपयोगकर्ता एप्लिकेशन डाउनलोड करता है और इसे चलाने का प्रयास करता है, तो उनका Mac ऑपरेटिंग सिस्टम डेवलपर के प्रमाणपत्र से सार्वजनिक कुंजी का उपयोग करके हैश को डिक्रिप्ट करता है। फिर यह एप्लिकेशन की वर्तमान स्थिति के आधार पर हैश की पुनः गणना करता है और इसे डिक्रिप्टेड हैश के साथ तुलना करता है। यदि वे मेल खाते हैं, तो इसका मतलब है कि एप्लिकेशन को डेवलपर द्वारा हस्ताक्षरित किए जाने के बाद से संशोधित नहीं किया गया है, और सिस्टम एप्लिकेशन को चलाने की अनुमति देता है।
एप्लिकेशन हस्ताक्षर Apple के Gatekeeper तकनीक का एक आवश्यक हिस्सा हैं। जब एक उपयोगकर्ता इंटरनेट से डाउनलोड किए गए एप्लिकेशन को खोलने का प्रयास करता है, तो Gatekeeper एप्लिकेशन हस्ताक्षर की पुष्टि करता है। यदि यह एक ज्ञात डेवलपर को Apple द्वारा जारी किए गए प्रमाणपत्र के साथ हस्ताक्षरित है और कोड को छेड़ा नहीं गया है, तो Gatekeeper एप्लिकेशन को चलाने की अनुमति देता है। अन्यथा, यह एप्लिकेशन को अवरुद्ध करता है और उपयोगकर्ता को सूचित करता है।
macOS Catalina से शुरू होकर, Gatekeeper यह भी जांचता है कि क्या एप्लिकेशन को Apple द्वारा नोटरीकृत किया गया है, जो सुरक्षा की एक अतिरिक्त परत जोड़ता है। नोटरीकरण प्रक्रिया एप्लिकेशन को ज्ञात सुरक्षा मुद्दों और दुर्भावनापूर्ण कोड के लिए जांचती है, और यदि ये जांच पास होती हैं, तो Apple एप्लिकेशन में एक टिकट जोड़ता है जिसे Gatekeeper सत्यापित कर सकता है।
जब कुछ malware sample की जांच करते हैं, तो आपको हमेशा binary का हस्ताक्षर जांचना चाहिए क्योंकि डेवलपर जिसने इसे हस्ताक्षरित किया है, वह पहले से ही malware से संबंधित हो सकता है।
Apple की नोटरीकरण प्रक्रिया उपयोगकर्ताओं को संभावित हानिकारक सॉफ़्टवेयर से बचाने के लिए एक अतिरिक्त सुरक्षा उपाय के रूप में कार्य करती है। इसमें डेवलपर द्वारा उनके आवेदन को Apple's Notary Service द्वारा परीक्षा के लिए प्रस्तुत करना शामिल है, जिसे App Review के साथ भ्रमित नहीं किया जाना चाहिए। यह सेवा एक स्वचालित प्रणाली है जो प्रस्तुत सॉफ़्टवेयर की दुष्ट सामग्री और कोड-हस्ताक्षर के साथ किसी भी संभावित मुद्दों की जांच करती है।
यदि सॉफ़्टवेयर इस निरीक्षण को बिना किसी चिंता के पास करता है, तो Notary Service एक नोटरीकरण टिकट उत्पन्न करती है। डेवलपर को फिर इस टिकट को अपने सॉफ़्टवेयर से संलग्न करना आवश्यक है, जिसे 'स्टेपलिंग' के रूप में जाना जाता है। इसके अलावा, नोटरीकरण टिकट को ऑनलाइन भी प्रकाशित किया जाता है जहाँ Gatekeeper, Apple की सुरक्षा तकनीक, इसे एक्सेस कर सकती है।
उपयोगकर्ता के पहले इंस्टॉलेशन या सॉफ़्टवेयर के निष्पादन पर, नोटरीकरण टिकट की उपस्थिति - चाहे वह निष्पादन योग्य के साथ स्टेपल किया गया हो या ऑनलाइन पाया गया हो - Gatekeeper को सूचित करती है कि सॉफ़्टवेयर को Apple द्वारा नोटरीकरण किया गया है। परिणामस्वरूप, Gatekeeper प्रारंभिक लॉन्च संवाद में एक वर्णनात्मक संदेश प्रदर्शित करता है, जो यह संकेत करता है कि सॉफ़्टवेयर ने Apple द्वारा दुष्ट सामग्री के लिए जांच की है। यह प्रक्रिया उपयोगकर्ताओं के लिए उस सॉफ़्टवेयर की सुरक्षा में विश्वास को बढ़ाती है जिसे वे अपने सिस्टम पर इंस्टॉल या चलाते हैं।
ध्यान दें कि Sequoia संस्करण से, spctl
अब Gatekeeper कॉन्फ़िगरेशन को संशोधित करने की अनुमति नहीं देता।
spctl
CLI उपकरण है जो Gatekeeper के साथ बातचीत करने और उसे सूचीबद्ध करने के लिए है (XPC संदेशों के माध्यम से syspolicyd
डेमन के साथ)। उदाहरण के लिए, आप GateKeeper की स्थिति को देखने के लिए:
ध्यान दें कि GateKeeper सिग्नेचर जांच केवल क्वारंटाइन विशेषता वाले फ़ाइलों के लिए की जाती है, हर फ़ाइल के लिए नहीं।
GateKeeper यह जांचेगा कि प्राथमिकताएँ और सिग्नेचर के अनुसार एक बाइनरी को निष्पादित किया जा सकता है:
syspolicyd
मुख्य डेमन है जो Gatekeeper को लागू करने के लिए जिम्मेदार है। यह /var/db/SystemPolicy
में स्थित एक डेटाबेस बनाए रखता है और आप डेटाबेस के लिए कोड यहाँ और SQL टेम्पलेट यहाँ पा सकते हैं। ध्यान दें कि डेटाबेस SIP द्वारा अनियंत्रित है और इसे रूट द्वारा लिखा जा सकता है और डेटाबेस /var/db/.SystemPolicy-default
का उपयोग एक मूल बैकअप के रूप में किया जाता है यदि अन्य भ्रष्ट हो जाए।
इसके अलावा, बंडल /var/db/gke.bundle
और /var/db/gkopaque.bundle
में नियमों के साथ फ़ाइलें होती हैं जो डेटाबेस में डाली जाती हैं। आप रूट के साथ इस डेटाबेस की जांच कर सकते हैं:
syspolicyd
एक XPC सर्वर को विभिन्न ऑपरेशनों के साथ उजागर करता है जैसे assess
, update
, record
और cancel
, जो Security.framework
के SecAssessment*
APIs का उपयोग करके भी पहुँचा जा सकता है और xpctl
वास्तव में syspolicyd
से XPC के माध्यम से बात करता है।
ध्यान दें कि पहला नियम "App Store" में समाप्त होता है और दूसरा "Developer ID" में, और पिछले चित्र में यह App Store और पहचाने गए डेवलपर्स से ऐप्स को निष्पादित करने के लिए सक्षम था। यदि आप उस सेटिंग को App Store में संशोधित करते हैं, तो "Notarized Developer ID" नियम गायब हो जाएंगे।
यहां प्रकार GKE के हजारों नियम भी हैं:
ये हैश हैं जो निम्नलिखित से हैं:
/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth
/var/db/gke.bundle/Contents/Resources/gk.db
/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db
या आप पिछले जानकारी को इस तरह सूचीबद्ध कर सकते हैं:
The options --master-disable
and --global-disable
of spctl
will completely अक्षम these signature checks:
जब पूरी तरह से सक्षम किया जाता है, तो एक नया विकल्प दिखाई देगा:
यह संभव है कि जांचें कि क्या एक ऐप को GateKeeper द्वारा अनुमति दी जाएगी:
GateKeeper में कुछ ऐप्स के निष्पादन की अनुमति देने के लिए नए नियम जोड़ना संभव है:
Regarding kernel extensions, the folder /var/db/SystemPolicyConfiguration
contains files with lists of kexts allowed to be loaded. Moreover, spctl
has the entitlement com.apple.private.iokit.nvram-csr
because it's capable of adding new pre-approved kernel extensions which need to be saved also in NVRAM in a kext-allowed-teams
key.
Upon downloading an application or file, specific macOS applications such as web browsers or email clients attach an extended file attribute, commonly known as the "quarantine flag," to the downloaded file. This attribute acts as a security measure to mark the file as coming from an untrusted source (the internet), and potentially carrying risks. However, not all applications attach this attribute, for instance, common BitTorrent client software usually bypasses this process.
The presence of a quarantine flag signals macOS's Gatekeeper security feature when a user attempts to execute the file.
In the case where the quarantine flag is not present (as with files downloaded via some BitTorrent clients), Gatekeeper's checks may not be performed. Thus, users should exercise caution when opening files downloaded from less secure or unknown sources.
कोड हस्ताक्षरों की वैधता की जांच करना एक संसाधन-गहन प्रक्रिया है जिसमें कोड और इसके सभी बंडल किए गए संसाधनों के क्रिप्टोग्राफिक हैश उत्पन्न करना शामिल है। इसके अलावा, प्रमाणपत्र की वैधता की जांच करने में Apple के सर्वरों पर एक ऑनलाइन जांच करना शामिल है यह देखने के लिए कि क्या इसे जारी किए जाने के बाद रद्द किया गया है। इन कारणों से, एक पूर्ण कोड हस्ताक्षर और नोटरीकरण जांच हर बार एक ऐप लॉन्च होने पर चलाना व्यावहारिक नहीं है।
इसलिए, ये जांचें केवल उन ऐप्स को निष्पादित करते समय चलती हैं जिनमें क्वारंटाइन विशेषता होती है।
यह विशेषता फाइल बनाने/डाउनलोड करने वाले ऐप द्वारा सेट की जानी चाहिए।
हालांकि, जो फाइलें सैंडबॉक्स की गई हैं, वे हर फाइल पर यह विशेषता सेट करेंगी जो वे बनाती हैं। और गैर-सैंडबॉक्स ऐप इसे स्वयं सेट कर सकते हैं, या LSFileQuarantineEnabled कुंजी को Info.plist में निर्दिष्ट कर सकते हैं, जो सिस्टम को com.apple.quarantine
विस्तारित विशेषता को बनाई गई फाइलों पर सेट करने के लिए मजबूर करेगा,
Moreover, all files created by a process calling qtn_proc_apply_to_self
are quarantined. Or the API qtn_file_apply_to_path
adds the quarantine attribute to a specified file path.
It's possible to check it's status and enable/disable (root required) with:
आप यह भी जान सकते हैं कि क्या किसी फ़ाइल में संगरोध विस्तारित विशेषता है:
चेक करें value का extended attributes और पता करें कि कौन सा ऐप ने क्वारंटाइन attr लिखा:
वास्तव में एक प्रक्रिया "जो फ़ाइलें वह बनाती है, उन पर संगरोध ध्वज सेट कर सकती है" (मैंने पहले ही एक बनाई गई फ़ाइल में USER_APPROVED ध्वज लागू करने की कोशिश की, लेकिन यह लागू नहीं हुआ):
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)