macOS XPC Connecting Process Check
XPC कनेक्टिंग प्रोसेस चेक
जब XPC सेवा से कनेक्शन स्थापित होता है, सर्वर यह जांचेगा कि कनेक्शन अनुमति है या नहीं। ये आमतौर पर किए जाने वाले चेक हैं:
जांचें कि कनेक्टिंग प्रोसेस Apple-signed प्रमाणपत्र के साथ हस्ताक्षरित है (केवल Apple द्वारा दिया गया).
यदि यह सत्यापित नहीं है, तो हमलावर किसी भी अन्य चेक से मेल खाने के लिए नकली प्रमाणपत्र बना सकता है।
जांचें कि कनेक्टिंग प्रोसेस संगठन के प्रमाणपत्र के साथ हस्ताक्षरित है, (टीम ID सत्यापन).
यदि यह सत्यापित नहीं है, तो किसी भी डेवलपर प्रमाणपत्र का उपयोग Apple से हस्ताक्षरित करने और सेवा से कनेक्ट करने के लिए किया जा सकता है।
जांचें कि कनेक्टिंग प्रोसेस में उचित बंडल ID है।
यदि यह सत्यापित नहीं है, तो समान संगठन द्वारा हस्ताक्षरित कोई भी टूल XPC सेवा के साथ इंटरैक्ट करने के लिए उपयोग किया जा सकता है।
(4 या 5) जांचें कि कनेक्टिंग प्रोसेस में उचित सॉफ्टवेयर संस्करण संख्या है।
यदि यह सत्यापित नहीं है, तो पुराने, असुरक्षित क्लाइंट्स, प्रोसेस इंजेक्शन के लिए संवेदनशील हो सकते हैं और अन्य चेक्स के होते हुए भी XPC सेवा से कनेक्ट कर सकते हैं।
(4 या 5) जांचें कि कनेक्टिंग प्रोसेस में हार्डन्ड रनटाइम है बिना खतरनाक एंटाइटलमेंट्स के (जैसे कि जो अनियंत्रित लाइब्रेरीज़ लोड करने या DYLD env vars का उपयोग करने की अनुमति देते हैं)
यदि यह सत्यापित नहीं है, तो क्लाइंट कोड इंजेक्शन के लिए संवेदनशील हो सकता है
जांचें कि कनेक्टिंग प्रोसेस में एक एंटाइटलमेंट है जो इसे सेवा से कनेक्ट करने की अनुमति देता है। यह Apple बाइनरीज़ के लिए लागू होता है।
सत्यापन को कनेक्टिंग क्लाइंट के ऑडिट टोकन पर आधारित होना चाहिए इसके प्रोसेस ID (PID) के बजाय, क्योंकि पूर्व PID पुन: उपयोग हमलों से बचाता है।
डेवलपर्स शायद ही कभी ऑडिट टोकन API कॉल का उपयोग करते हैं क्योंकि यह निजी है, इसलिए Apple कभी भी बदल सकता है। इसके अलावा, Mac App Store ऐप्स में निजी API का उपयोग अनुमति नहीं है।
यदि
processIdentifier
मेथड का उपयोग किया जाता है, तो यह संवेदनशील हो सकता हैxpc_dictionary_get_audit_token
का उपयोगxpc_connection_get_audit_token
के बजाय किया जाना चाहिए, क्योंकि नवीनतम भी कुछ स्थितियों में संवेदनशील हो सकता है.
संचार हमले
PID पुन: उपयोग हमले के बारे में अधिक जानकारी के लिए देखें:
pagemacOS PID Reusexpc_connection_get_audit_token
हमले के बारे में अधिक जानकारी के लिए देखें:
Trustcache - डाउनग्रेड हमलों की रोकथाम
Trustcache Apple Silicon मशीनों में पेश की गई एक रक्षात्मक विधि है जो Apple बाइनरीज़ के CDHSAH का एक डेटाबेस संग्रहीत करती है ताकि केवल अनुमति दी गई अपरिवर्तित बाइनरीज़ ही निष्पादित की जा सकें। जो डाउनग्रेड संस्करणों के निष्पादन को रोकता है।
कोड उदाहरण
सर्वर इस सत्यापन को shouldAcceptNewConnection
कहलाने वाले फंक्शन में लागू करेगा।
ऑब्जेक्ट NSXPCConnection में एक निजी संपत्ति auditToken
(वह जिसका उपयोग किया जाना चाहिए लेकिन बदल सकता है) और एक सार्वजनिक संपत्ति processIdentifier
(वह जिसका उपयोग नहीं किया जाना चाहिए) होती है।
कनेक्टिंग प्रोसेस की पुष्टि कुछ इस प्रकार से की जा सकती है:
यदि एक डेवलपर क्लाइंट के संस्करण की जांच करना नहीं चाहता, तो वह कम से कम यह जांच सकता है कि क्लाइंट प्रोसेस इंजेक्शन के प्रति संवेदनशील नहीं है:
```objectivec [...] CFDictionaryRef csInfo = NULL; SecCodeCopySigningInformation(code, kSecCSDynamicInformation, &csInfo); uint32_t csFlags = [((__bridge NSDictionary *)csInfo)[(__bridge NSString *)kSecCodeInfoStatus] intValue]; const uint32_t cs_hard = 0x100; // don't load invalid page. const uint32_t cs_kill = 0x200; // Kill process if page is invalid const uint32_t cs_restrict = 0x800; // Prevent debugging const uint32_t cs_require_lv = 0x2000; // Library Validation const uint32_t cs_runtime = 0x10000; // hardened runtime if ((csFlags & (cs_hard | cs_require_lv)) { return Yes; // Accept connection } ```
Last updated