macOS Gatekeeper / Quarantine / XProtect

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

गेटकीपर

गेटकीपर एक सुरक्षा सुविधा है जो मैक ऑपरेटिंग सिस्टम के लिए विकसित की गई है, जिसका उद्देश्य यह सुनिश्चित करना है कि उपयोगकर्ता उनके सिस्टम पर केवल विश्वसनीय सॉफ़्टवेयर चलाएं। यह उपयोगकर्ता द्वारा डाउनलोड किया और खोलने का प्रयास किया गया सॉफ़्टवेयर जैसे कि एक ऐप, एक प्लग-इन, या एक इंस्टॉलर पैकेज से बाहरी स्रोतों से

गेटकीपर की मुख्य तंत्रिका उसकी सत्यापन प्रक्रिया में है। यह यह जांचता है कि डाउनलोड किया गया सॉफ़्टवेयर किसी मान्यता प्राप्त डेवलपर द्वारा साइन किया गया है, सॉफ़्टवेयर की प्रामाणिकता सुनिश्चित करते हुए। इसके अतिरिक्त, यह सुनिश्चित करता है कि क्या सॉफ़्टवेयर एप्पल द्वारा नोटराइज़्ड है, जिससे यह साबित होता है कि इसमें किसी जाने-माने हानिकारक सामग्री की कमी है और नोटराइज़ेशन के बाद इसमें हस्तक्षेप नहीं किया गया है।

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

एप्लिकेशन हस्ताक्षर

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

यह कैसे काम करता है:

  1. एप्लिकेशन को साइन करना: जब एक डेवलपर अपने एप्लिकेशन को वितरित करने के लिए तैयार होता है, वह एप्लिकेशन को एक निजी कुंजी का उपयोग करके साइन करता है। यह निजी कुंजी एक प्रमाणपत्र से संबंधित है जिसे डेवलपर को जब वह एप्पल डेवलपर प्रोग्राम में नामांकित होते हैं, तो एप्पल जारी करता है। साइनिंग प्रक्रिया में एप्लिकेशन के सभी हिस्सों का एक और्ध्वगति हैश बनाना और इस हैश को डेवलपर की निजी कुंजी के साथ एन्क्रिप्ट करना शामिल है।

  2. एप्लिकेशन को वितरित करना: साइन किए गए एप्लिकेशन को उपयोगकर्ताओं के साथ डेवलपर के प्रमाणपत्र के साथ वितरित किया जाता है, जिसमें संबंधित पब्लिक कुंजी होती है।

  3. एप्लिकेशन की सत्यापन: जब एक उपयोगकर्ता एप्लिकेशन को डाउनलोड करता है और चलाने का प्रयास करता है, तो उनका मैक ऑपरेटिंग सिस्टम डेवलपर के प्रमाणपत्र से पब्लिक कुंजी का उपयोग करके हैश को डिक्रिप्ट करता है। फिर यह हैश पुनः गणना करता है आधारित हैश को और इसे डिक्रिप्ट किए गए हैश के साथ तुलना करता है। यदि वे मिलते हैं, तो इसका मतलब है कि एप्लिकेशन में कोई परिवर्तन नहीं किया गया है जब से डेवलपर ने इसे साइन किया था, और सिस्टम एप्लिकेशन को चलाने की अनुमति देता है।

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

मैकओएस कैटालिना से शुरू होकर, गेटकीपर यह भी जांचता है कि क्या एप्लिकेशन को एप्पल द्वारा नोटराइज़्ड किया गया है, जो एक अतिरिक्त सुरक्षा स्तर जोड़ता है। नोटराइज़ेशन प्रक्रिया एप्लिकेशन को जाने-माने सुरक्षा समस्याओं और हानिकारक कोड के लिए जांचती है, और यदि ये जांचें पास होती हैं, तो एप्पल एप्लिकेशन में एक टिकट जोड़ता है जिसे गेटकीपर सत्यापित कर सकता है।

हस्ताक्षरों की जांच

किसी **म

# Get signer
codesign -vv -d /bin/ls 2>&1 | grep -E "Authority|TeamIdentifier"

# Check if the app’s contents have been modified
codesign --verify --verbose /Applications/Safari.app

# Get entitlements from the binary
codesign -d --entitlements :- /System/Applications/Automator.app # Check the TCC perms

# Check if the signature is valid
spctl --assess --verbose /Applications/Safari.app

# Sign a binary
codesign -s <cert-name-keychain> toolsdemo

स्वीकृति

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

यदि सॉफ़्टवेयर इस जांच में सफलता प्राप्त करता है और कोई भी चिंता नहीं उठाता है, तो नोटरी सेवा एक स्वीकृति टिकट उत्पन्न करती है। उसके बाद डेवलपर को अपने सॉफ़्टवेयर के साथ इस टिकट को जोड़ना अनिवार्य होता है, जिसे 'स्टैप्लिंग' कहा जाता है। इसके अतिरिक्त, स्वीकृति टिकट को भी ऑनलाइन प्रकाशित किया जाता है जहां गेटकीपर, एप्पल की सुरक्षा प्रौद्योगिकी, इसे एक्सेस कर सकती है।

उपयोगकर्ता के पहले सॉफ़्टवेयर के स्थापना या उसके निष्पादन पर, नोटरीकरण टिकट की मौजूदगी - चाहे वह एक्जीक्यूटेबल के साथ स्टैपल किया गया हो या ऑनलाइन पाया जाए - गेटकीपर को सूचित करती है कि सॉफ़्टवेयर को एप्पल द्वारा स्वीकृत किया गया है। इस परिणामस्वरूप, गेटकीपर प्रारंभिक लॉन्च संवाद में एक विवरणात्मक संदेश प्रदर्शित करता है, जिससे स्थापित होता है कि उपयोगकर्ता उनके सिस्टम पर स्थापित या चलाए गए सॉफ़्टवेयर की सुरक्षा की जांच की गई है।

गेटकीपर की गणना

गेटकीपर एक है, कई सुरक्षा घटक जो अविश्वसनीय ऐप्स को निष्पादित होने से रोकते हैं और एक है, उनमें से एक घटक

गेटकीपर की स्थिति देखना संभव है:

# Check the status
spctl --status

ध्यान दें कि GateKeeper हस्ताक्षर जांच केवल क्वारंटाइन विशेषता वाले फ़ाइलों पर की जाती है, हर फ़ाइल पर नहीं।

GateKeeper यह जांचेगा कि प्राथमिकताओं और हस्ताक्षर के अनुसार क्या एक बाइनरी क्रियान्वित किया जा सकता है:

इस कॉन्फ़िगरेशन को रखने वाला डेटाबेस /var/db/SystemPolicy में स्थित है। आप इस डेटाबेस को रूट के रूप में चेक कर सकते हैं:

# Open database
sqlite3 /var/db/SystemPolicy

# Get allowed rules
SELECT requirement,allow,disabled,label from authority where label != 'GKE' and disabled=0;
requirement|allow|disabled|label
anchor apple generic and certificate 1[subject.CN] = "Apple Software Update Certification Authority"|1|0|Apple Installer
anchor apple|1|0|Apple System
anchor apple generic and certificate leaf[field.1.2.840.113635.100.6.1.9] exists|1|0|Mac App Store
anchor apple generic and certificate 1[field.1.2.840.113635.100.6.2.6] exists and (certificate leaf[field.1.2.840.113635.100.6.1.14] or certificate leaf[field.1.2.840.113635.100.6.1.13]) and notarized|1|0|Notarized Developer ID
[...]

नोट करें कि पहला नियम "App Store" में समाप्त हुआ और दूसरा "Developer ID" में और पिछले इमेज में यह App Store और पहचाने गए डेवलपर्स से ऐप्स को चलाने की सक्षमता थी। अगर आप उस सेटिंग को App Store पर संशोधित करते हैं, तो "Notarized Developer ID" नियम हट जाएंगे

GKE प्रकार के हजारों नियम भी हैं:

SELECT requirement,allow,disabled,label from authority where label = 'GKE' limit 5;
cdhash H"b40281d347dc574ae0850682f0fd1173aa2d0a39"|1|0|GKE
cdhash H"5fd63f5342ac0c7c0774ebcbecaf8787367c480f"|1|0|GKE
cdhash H"4317047eefac8125ce4d44cab0eb7b1dff29d19a"|1|0|GKE
cdhash H"0a71962e7a32f0c2b41ddb1fb8403f3420e1d861"|1|0|GKE
cdhash H"8d0d90ff23c3071211646c4c9c607cdb601cb18f"|1|0|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 से आते हैं

या आप पिछली जानकारी को निम्नलिखित के साथ सूचीबद्ध कर सकते हैं:

sudo spctl --list

विकल्प --master-disable और --global-disable का उपयोग spctl करके इन हस्ताक्षर जांचों को पूरी तरह से अक्षम कर देगा:

# Disable GateKeeper
spctl --global-disable
spctl --master-disable

# Enable it
spctl --global-enable
spctl --master-enable

जब पूरी तरह से सक्षम हो जाए, तो एक नया विकल्प दिखाई देगा:

GateKeeper द्वारा क्या किसी ऐप को अनुमति दी जाएगी यह जांचना संभव है:

spctl --assess -v /Applications/App.app

GateKeeper में नए नियम जोड़ना संभव है ताकि कुछ एप्लिकेशनों को निष्पादित किया जा सके:

# Check if allowed - nop
spctl --assess -v /Applications/App.app
/Applications/App.app: rejected
source=no usable signature

# Add a label and allow this label in GateKeeper
sudo spctl --add --label "whitelist" /Applications/App.app
sudo spctl --enable --label "whitelist"

# Check again - yep
spctl --assess -v /Applications/App.app
/Applications/App.app: accepted

क्वारंटाइन फ़ाइलें

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

क्वारंटाइन झंडा की मौजूदगी जब एक उपयोगकर्ता फ़ाइल को निष्पादित करने का प्रयास करता है, तो macOS के गेटकीपर सुरक्षा सुविधा को संकेत करती है

उस स्थिति में जहां क्वारंटाइन झंडा मौजूद नहीं है (कुछ बिटटोरेंट क्लाइंट्स के माध्यम से डाउनलोड की गई फ़ाइलों के साथ), गेटकीपर की जांचें संपन्न नहीं की जा सकती हैं। इसलिए, उपयोगकर्ताओं को सावधानी बरतनी चाहिए जब वे कम सुरक्षित या अज्ञात स्रोतों से डाउनलोड की गई फ़ाइलें खोलते हैं।

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

इसलिए, ये जांचें केवल उस समय चलाई जाती हैं जब किसी ऐप को क्वारंटाइन गुणवत्ता के साथ निष्पादित किया जाता है

यह गुणवत्ता फ़ाइल बनाने/डाउनलोड करने वाले एप्लिकेशन द्वारा सेट की जानी चाहिए

हालांकि, सैंडबॉक्स में फ़ाइलें जो होती हैं, उनके द्वारा बनाई गई हर फ़ाइल के लिए यह गुणवत्ता सेट की जाएगी। और गैर सैंडबॉक्स ऐप्स इसे खुद सेट कर सकते हैं, या LSFileQuarantineEnabled कुंजी को Info.plist में निर्दिष्ट कर सकते हैं जिससे सिस्टम com.apple.quarantine विस्तारित गुणवत्ता को फ़ाइलों पर सेट कर देगा।

इसकी स्थिति की जांच करना और सक्षम/अक्षम (रूट आवश्यक) किया जा सकता है:

spctl --status
assessments enabled

spctl --enable
spctl --disable
#You can also allow nee identifies to execute code using the binary "spctl"

आप निम्नलिखित के साथ यह भी पता लगा सकते हैं कि क्या किसी फ़ाइल में क्वारंटाइन विस्तारित विशेषता है:

xattr file.png
com.apple.macl
com.apple.quarantine

विस्तारित गुणों की मान की जाँच करें और उस ऐप को खोजें जिसने quarantine गुण लिखा है:

xattr -l portada.png
com.apple.macl:
00000000  03 00 53 DA 55 1B AE 4C 4E 88 9D CA B7 5C 50 F3  |..S.U..LN.....P.|
00000010  16 94 03 00 27 63 64 97 98 FB 4F 02 84 F3 D0 DB  |....'cd...O.....|
00000020  89 53 C3 FC 03 00 27 63 64 97 98 FB 4F 02 84 F3  |.S....'cd...O...|
00000030  D0 DB 89 53 C3 FC 00 00 00 00 00 00 00 00 00 00  |...S............|
00000040  00 00 00 00 00 00 00 00                          |........|
00000048
com.apple.quarantine: 00C1;607842eb;Brave;F643CD5F-6071-46AB-83AB-390BA944DEC5
# 00c1 -- It has been allowed to eexcute this file (QTN_FLAG_USER_APPROVED = 0x0040)
# 607842eb -- Timestamp
# Brave -- App
# F643CD5F-6071-46AB-83AB-390BA944DEC5 -- UID assigned to the file downloaded

वास्तव में एक प्रक्रिया "उस फ़ाइल पर क्वारंटाइन झंडे सेट कर सकती है जिसे वह बनाती है" (मैंने एक बनाई गई फ़ाइल में USER_APPROVED झंडा लगाने का प्रयास किया लेकिन यह लागू नहीं होता):

स्रोत कोड क्वारंटाइन झंडे लागू करें

```c #include #include

enum qtn_flags { QTN_FLAG_DOWNLOAD = 0x0001, QTN_FLAG_SANDBOX = 0x0002, QTN_FLAG_HARD = 0x0004, QTN_FLAG_USER_APPROVED = 0x0040, };

#define qtn_proc_alloc _qtn_proc_alloc #define qtn_proc_apply_to_self _qtn_proc_apply_to_self #define qtn_proc_free _qtn_proc_free #define qtn_proc_init _qtn_proc_init #define qtn_proc_init_with_self _qtn_proc_init_with_self #define qtn_proc_set_flags _qtn_proc_set_flags #define qtn_file_alloc _qtn_file_alloc #define qtn_file_init_with_path _qtn_file_init_with_path #define qtn_file_free _qtn_file_free #define qtn_file_apply_to_path _qtn_file_apply_to_path #define qtn_file_set_flags _qtn_file_set_flags #define qtn_file_get_flags _qtn_file_get_flags #define qtn_proc_set_identifier _qtn_proc_set_identifier

typedef struct _qtn_proc *qtn_proc_t; typedef struct _qtn_file *qtn_file_t;

int qtn_proc_apply_to_self(qtn_proc_t); void qtn_proc_init(qtn_proc_t); int qtn_proc_init_with_self(qtn_proc_t); int qtn_proc_set_flags(qtn_proc_t, uint32_t flags); qtn_proc_t qtn_proc_alloc(); void qtn_proc_free(qtn_proc_t); qtn_file_t qtn_file_alloc(void); void qtn_file_free(qtn_file_t qf); int qtn_file_set_flags(qtn_file_t qf, uint32_t flags); uint32_t qtn_file_get_flags(qtn_file_t qf); int qtn_file_apply_to_path(qtn_file_t qf, const char *path); int qtn_file_init_with_path(qtn_file_t qf, const char path); int qtn_proc_set_identifier(qtn_proc_t qp, const char bundleid);

int main() {

qtn_proc_t qp = qtn_proc_alloc(); qtn_proc_set_identifier(qp, "xyz.hacktricks.qa"); qtn_proc_set_flags(qp, QTN_FLAG_DOWNLOAD | QTN_FLAG_USER_APPROVED); qtn_proc_apply_to_self(qp); qtn_proc_free(qp);

FILE *fp; fp = fopen("thisisquarantined.txt", "w+"); fprintf(fp, "Hello Quarantine\n"); fclose(fp);

return 0;

}

</details>

और **उस गुण को** इस प्रकार हटाएँ:
```bash
xattr -d com.apple.quarantine portada.png
#You can also remove this attribute from every file with
find . -iname '*' -print0 | xargs -0 xattr -d com.apple.quarantine

और सभी क्वारंटाइंड फ़ाइलें खोजें:

find / -exec ls -ld {} \; 2>/dev/null | grep -E "[x\-]@ " | awk '{printf $9; printf "\n"}' | xargs -I {} xattr -lv {} | grep "com.apple.quarantine"

क्वारंटाइन जानकारी भी ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2 में लॉन्चसर्विसेस द्वारा प्रबंधित एक केंद्रीय डेटाबेस में संग्रहित होती है।

Quarantine.kext

कर्नेल एक्सटेंशन केवल सिस्टम पर कर्नेल कैश के माध्यम से उपलब्ध है; हालांकि, आप https://developer.apple.com/ से कर्नेल डीबग किट डाउनलोड कर सकते हैं, जिसमें एक सिम्बोलिकेटेड संस्करण शामिल होगा।

XProtect

XProtect मैकओएस में एक निर्देशित एंटी-मैलवेयर सुविधा है। XProtect जाना मलवेयर और असुरक्षित फ़ाइल प्रकारों के डेटाबेस के खिलाफ किसी भी एप्लिकेशन की जांच करता है जब यह पहली बार लॉन्च किया जाता है या संशोधित किया जाता है। जब आप किसी फ़ाइल को कुछ ऐप्स के माध्यम से डाउनलोड करते हैं, जैसे Safari, Mail, या Messages, XProtect स्वचालित रूप से फ़ाइल की जांच करता है। अगर यह अपने डेटाबेस में किसी भी जाना मलवेयर से मेल खाता है, तो XProtect फ़ाइल को चलाने से रोकेगा और आपको खतरे के बारे में सूचित करेगा।

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

हालांकि, यह ध्यान देने योग्य है कि XProtect एक पूर्ण विशेषज्ञ एंटीवायरस समाधान नहीं है। यह केवल निश्चित सूची के जाने गए खतरों की जांच करता है और अधिकांश एंटीवायरस सॉफ़्टवेयर की तरह ऑन-एक्सेस स्कैनिंग नहीं करता है।

आप नवीनतम XProtect अपडेट के बारे में जानकारी प्राप्त कर सकते हैं:

system_profiler SPInstallHistoryDataType 2>/dev/null | grep -A 4 "XProtectPlistConfigData" | tail -n 5

XProtect स्थित है। SIP सुरक्षित स्थान पर /Library/Apple/System/Library/CoreServices/XProtect.bundle और बंडल के अंदर आपको जानकारी मिलेगी जिसका XProtect उपयोग करता है:

  • XProtect.bundle/Contents/Resources/LegacyEntitlementAllowlist.plist: उन cdhashes के साथ कोड को पुरानी अधिकारों की अनुमति देने देता है।

  • XProtect.bundle/Contents/Resources/XProtect.meta.plist: BundleID और TeamID के माध्यम से लोड करने की अनुमति नहीं देने वाले प्लगइन और एक्सटेंशन की सूची या न्यूनतम संस्करण को दर्शाने वाली सूची।

  • XProtect.bundle/Contents/Resources/XProtect.yara: मैलवेयर का पता लगाने के लिए यारा नियम।

  • XProtect.bundle/Contents/Resources/gk.db: ब्लॉक किए गए एप्लिकेशन और TeamIDs के हैश के साथ SQLite3 डेटाबेस।

ध्यान दें कि /Library/Apple/System/Library/CoreServices/XProtect.app में एक और ऐप है जो XProtect से संबंधित है जो Gatekeeper प्रक्रिया के साथ संलग्न नहीं है।

गेटकीपर नहीं

ध्यान दें कि गेटकीपर हर बार नहीं चलाया जाता है जब आप कोई एप्लिकेशन चलाते हैं, बस AppleMobileFileIntegrity (AMFI) केवल तब निर्वाचनीय कोड हस्ताक्षरों की पुष्टि करेगा जब आप एक एप्लिकेशन चलाते हैं जिसे पहले से ही गेटकीपर द्वारा पुष्टि की गई है।

इसलिए, पहले एक एप्लिकेशन को गेटकीपर के साथ कैश करने के लिए चलाना संभव था, फिर एप्लिकेशन के अभिक्रिय फ़ाइलों को संशोधित करना (जैसे Electron asar या NIB फ़ाइलें) और अगर कोई अन्य सुरक्षा उपाय नहीं थे, तो एप्लिकेशन को दुर्भाग्यपूर्ण जोड़ों के साथ चलाया गया था।

हालांकि, अब यह संभव नहीं है क्योंकि macOS एप्लिकेशन बंडल के अंदर फ़ाइलों को संशोधित करने से रोकता है। इसलिए, यदि आप डर्टी NIB हमला करने की कोशिश करते हैं, तो आपको पाया जाएगा कि इसे उसे दुरुस्त करना संभव नहीं है क्योंकि गेटकीपर द्वारा पुष्टि करने के लिए एप्लिकेशन को कैश करने के बाद, आप बंडल को संशोधित नहीं कर पाएंगे। और यदि आप उदाहरण के लिए Contents निर्देशिका का नाम NotCon में बदलते हैं (जैसा कि उत्पादन में इंडिकेट किया गया है), और फिर एप्लिकेशन के मुख्य BINARY को गेटकीपर के साथ कैश करने के लिए चलाते हैं, तो यह एक त्रुटि को ट्रिगर करेगा और नहीं चलाएगा।

गेटकीपर बायपास

गेटकीपर को बायपास करने का कोई भी तरीका (उपयोगकर्ता को कुछ डाउनलोड करने और गेटकीपर द्वारा इसे निषेधित करने पर भी इसे चलाने में सफल होना) macOS में एक सुरक्षा दोष के रूप में माना जाता है। ये कुछ CVEs हैं जिन्हें उन तकनीकों के लिए निर्धारित किया गया था जिनसे पिछले में गेटकीपर को बायपास करने की अनुमति थी:

यह देखा गया कि यदि आर्काइव यूटिलिटी का उपयोग निकालने के लिए किया जाता है, तो 886 वर्णों से अधिक पथ वाली फ़ाइलों को com.apple.quarantine विस्तारित विशेषता प्राप्त नहीं होती। यह स्थिति अनजाने में उन फ़ाइलों को गेटकीपर की सुरक्षा जांचों से छलने देती है।

अधिक जानकारी के लिए मूल रिपोर्ट देखें।

जब कोई एप्लिकेशन Automator के साथ बनाया जाता है, तो उसके बारे में जो जानकारी होती है कि वह क्या करने की आवश्यकता है, वह application.app/Contents/document.wflow में होती है न कि एक्जीक्यूटेबल में। एक्जीक्यूटेबल सिर्फ एक सामान्य Automator बाइनरी होता है जिसे Automator Application Stub कहा जाता है।

इसलिए, आप application.app/Contents/MacOS/Automator\ Application\ Stub को एक सिम्बॉलिक लिंक के साथ अन्य Automator Application Stub की ओर पॉइंट कर सकते हैं और यह document.wflow (आपका स्क्रिप्ट) को गेटकीपर को ट्रिगर किए बिना चलाएगा क्योंकि वास्तविक एक्जीक्यूटेबल के पास क्वारंटाइन xattr नहीं है।

उम्मीद की जाने वाली स्थान का उदाहरण: /System/Library/CoreServices/Automator\ Application\ Stub.app/Contents/MacOS/Automator\ Application\ Stub

अधिक जानकारी के लिए मूल रिपोर्ट देखें।

इस बायपास में एक zip फ़ाइल बनाई गई थी जिसमें एक एप्लिकेशन को application.app/Contents से शुरू करने की शुरुआत की गई थी बजाय application.app से। इसलिए, क्वारंटाइन एट्रिब्यूट सभी फ़ाइलों पर लागू हो गया था application.app/Contents लेकिन application.app पर नहीं, जिसे गेटकीपर जांच थी, इसलिए गेटकीपर को बायपास कर दिया गया क्योंकि जब application.app ट्रिगर होता है तो उसमें क्वारंटाइन एट्रिब्यूट नहीं होता था।

zip -r test.app/Contents test.zip

अधिक जानकारी के लिए मूल रिपोर्ट देखें।

हालांकि घटक भिन्न हैं, इस वंरुल्नरबिलिटी का शोषण पिछले वाले के बहुत ही समान है। इस मामले में हम application.app/Contents से एक Apple Archive उत्पन्न करेंगे ताकि **application.app को जब Archive Utility द्वारा अनआर्किव किया जाए, तो वह क्वारंटाइन एट्रिब्यूट न मिले।

aa archive -d test.app/Contents -o test.app.aar

अधिक जानकारी के लिए मौलिक रिपोर्ट की जाँच करें।

ACL writeextattr का उपयोग किसी भी व्यक्ति को फ़ाइल में एक गुण लिखने से रोकने के लिए किया जा सकता है:

touch /tmp/no-attr
chmod +a "everyone deny writeextattr" /tmp/no-attr
xattr -w attrname vale /tmp/no-attr
xattr: [Errno 13] Permission denied: '/tmp/no-attr'

इसके अतिरिक्त, AppleDouble फ़ाइल प्रारूप एक फ़ाइल की प्रतिलिपि बनाता है जिसमें उसके ACEs शामिल होते हैं।

स्रोत कोड में देखा जा सकता है कि ACL पाठ प्रतिनिधित्व com.apple.acl.text नामक xattr के अंदर संग्रहीत किया जाएगा और इसे डीकंप्रेस की गई फ़ाइल में ACL के रूप में सेट किया जाएगा। इसलिए, अगर आपने एक एप्लिकेशन को एक zip फ़ाइल में AppleDouble फ़ाइल प्रारूप के साथ संकुचित किया है जिसमें एक ACL है जो इसे लिखने से रोकता है... तो quarantine xattr एप्लिकेशन में सेट नहीं हुआ था:

chmod +a "everyone deny write,writeattr,writeextattr" /tmp/test
ditto -c -k test test.zip
python3 -m http.server
# Download the zip from the browser and decompress it, the file should be without a quarantine xattr

अधिक जानकारी के लिए मूल रिपोर्ट की जाँच करें।

ध्यान दें कि यह AppleArchives के साथ भी उत्पन्न किया जा सकता है:

mkdir app
touch app/test
chmod +a "everyone deny write,writeattr,writeextattr" app/test
aa archive -d app -o test.aar

यह पाया गया कि Google Chrome डाउनलोड की गई फ़ाइलों में quarantine विशेषता सेट नहीं कर रहा था क्योंकि कुछ macOS आंतरिक समस्याओं के कारण।

AppleDouble फ़ाइल प्रारूप एक फ़ाइल की विशेषताएँ ._ से शुरू होने वाली एक अलग फ़ाइल में संग्रहित करते हैं, यह मदद करता है macOS मशीनों के बीच फ़ाइल विशेषताएँ कॉपी करने में। हालांकि, एक AppleDouble फ़ाइल को डीकंप्रेस करने के बाद यह नोटिस किया गया कि ._ से शुरू होने वाली फ़ाइल को quarantine विशेषता नहीं दी गई थी

mkdir test
echo a > test/a
echo b > test/b
echo ._a > test/._a
aa archive -d test/ -o test.aar

# If you downloaded the resulting test.aar and decompress it, the file test/._a won't have a quarantitne attribute

एक फ़ाइल बनाने में सक्षम होना जिसमें quarantine विशेषता सेट नहीं है, यह Gatekeeper को छलकरना संभव था। यह ट्रिक थी एक DMG फ़ाइल एप्लिकेशन बनाना जिसका नामकरण AppleDouble नाम परंपरा का उपयोग करके करें (इसे ._ से शुरू करें) और इस quarantine विशेषता के बिना छिपी हुई फ़ाइल के रूप में एक दृश्यमान फ़ाइल बनाएं। जब dmg फ़ाइल को क्रियान्वित किया जाता है, क्योंकि इसमें quarantine विशेषता नहीं है, इससे Gatekeeper को छलाना होगा।

# Create an app bundle with the backdoor an call it app.app

echo "[+] creating disk image with app"
hdiutil create -srcfolder app.app app.dmg

echo "[+] creating directory and files"
mkdir
mkdir -p s/app
cp app.dmg s/app/._app.dmg
ln -s ._app.dmg s/app/app.dmg

echo "[+] compressing files"
aa archive -d s/ -o app.aar

जांच रोकें xattr

एक ".app" बंडल में अगर quarantine xattr नहीं जोड़ा गया है, तो जब इसे निष्पादित किया जाएगा Gatekeeper को ट्रिगर नहीं किया जाएगा

Last updated