तदर्थ कोड पर हस्ताक्षर करने के प्रतिबंध क्या हैं?


14

कोड या एप्लिकेशन "एड-हॉक" का उपयोग करके हस्ताक्षर करना संभव है codesign। वह आदमी पृष्ठ हमें निम्नलिखित बताता है कि तदर्थ कोड पर हस्ताक्षर करने के बारे में:

यदि पहचान एकल अक्षर "-" (डैश) है, तो तदर्थ हस्ताक्षर किया जाता है। तदर्थ हस्ताक्षर एक पहचान का उपयोग नहीं करता है, और कोड के बिल्कुल एक उदाहरण की पहचान करता है। तदर्थ हस्ताक्षरित कोड के उपयोग पर महत्वपूर्ण प्रतिबंध लागू होते हैं; उपयोग करने से पहले प्रलेखन से परामर्श करें।

(मेरे द्वारा जोर दिया गया)

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

ये "महत्वपूर्ण प्रतिबंध" क्या हैं और वे कहाँ प्रलेखित हैं?

जवाबों:


9

मूल रूप से इस संदर्भ में हस्ताक्षर करने का अर्थ है कि बाइनरी को बिना किसी क्रिप्टोग्राफ़िक प्रमाण के बिना हस्ताक्षरित किया गया है।

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

प्रोग्राम चलाते समय, macOS सिस्टम यह सत्यापित कर सकता है कि ये हस्ताक्षर मान्य हैं, और यह हस्ताक्षर की पहचान पर भरोसा करता है - और यदि ऐसा होता है, तो प्रोग्राम को चलाएं। यह गेटकीपर की कार्यक्षमता की मूल बातें है।

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

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

क्रिप्टोग्राफिक सबूत के बिना यह "अनमैपरेड" चेक सामान्य तरीके से नहीं किया जा सकता है।

इसके बजाय तदर्थ हस्ताक्षरित बायनेरिज़ को कर्नेल के अंदर स्थिर ट्रस्ट कैश में संग्रहीत "ज्ञात अच्छा" हैश मानों की सूची के खिलाफ SHA-1 हैश मान की तुलना करके चेक किया जाता है।

संक्षेप में इसका मतलब यह है कि आपके द्वारा किसी भी आवेदन पर दिए गए "महत्वपूर्ण प्रतिबंध" का संकेत यह है कि यह कहीं भी किसी भी प्रकार का सत्यापन नहीं करेगा। यह मूल रूप से एक गैर-हस्ताक्षरित बाइनरी के समान है।

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

व्यवहारिक रूप से एड-हॉक पर हस्ताक्षरित बायनेरिज़ केवल ऐप्पल डेवलपर्स के लिए व्यावहारिक मूल्य है।

आप एप्पल के डेवलपर सेक्शन में तदर्थ हस्ताक्षर पर मामूली दस्तावेज पा सकते हैं। उदाहरण के लिए:

https://developer.apple.com/documentation/security/seccodesignatureflags/kseccodesignatureadhoc

लेकिन आप स्वयं कोडसाइन यूटिलिटी के लिए स्रोत कोड में दस्तावेज़ों के स्निपेट भी पा सकते हैं और स्रोत कोड में libsecurity के लिए।


क्या "केवल ऐप्पल डेवलपर्स के लिए व्यावहारिक मूल्य" का अर्थ है, "केवल ऐप्पल पर काम करने वाले डेवलपर्स के लिए" या "केवल ऐप्पल प्लेटफार्मों पर काम करने वाले डेवलपर्स के लिए"? वास्तव में जिज्ञासु, जैसा कि हमने कुछ नया मुद्दा प्राप्त करना शुरू कर दिया है, जहां किचेन को नाम सही होने पर भी कुंजी नहीं मिल सकती है, और हम गैर-रिलीज़ बिल्ड के लिए हाइफ़न पर स्विच करने पर विचार कर रहे हैं।
तड़काज

1
केवल ऐप्पल में काम करने वाले डेवलपर्स के लिए इसका मतलब है।
jksoegaard

ध्यान दें कि iOS सिम्युलेटर एडहॉक साइनिंग का भी उपयोग करता है। Adhoc हस्ताक्षर ऐप्लिकेशंस के बाहर डेवलपर्स के लिए कुछ उपयोग हो सकते हैं, जिससे एप्लिकेशन को एंटाइटेलमेंट का अनुरोध करने में सक्षम किया जा सकता है, जो मुझे यकीन नहीं है कि कोड हस्ताक्षर के बिना संभव है (सभी डॉक्स मैंने बिना किसी बिंदु के देखा है)। मैक पर यह आमतौर पर एक मुद्दा नहीं है, लेकिन iOS पर कई सुविधाओं को एंटाइटेलमेंट के पीछे रखा गया है, इसलिए यह परीक्षण सही ढंग से काम करता है कि iOS डेवलपर्स के लिए वांछनीय है।
दुग्ध

@milch आप दो असंबंधित अवधारणाओं का मिश्रण कर रहे हैं - "एडहॉक साइनिंग" (जो कि यह प्रश्न था, उसके बारे में), और "एडहॉक वितरण" (जो कि iOS डेवलपर अक्सर उपयोग और चिंता के
पात्र

मुझे पूरा यकीन है कि सिम्युलेटर बिल्ड एडहॉक साइन (वितरित नहीं) हैं। आप सिम्युलेटर के लिए निर्मित एक iOS ऐप का निरीक्षण करके देख सकते हैं codesign -dv --verbose=4 /path/to/the.app। आपको एक पंक्ति यह कहते हुए वापस मिल जाएगी Signature=adhoc, जो एडहॉक हस्ताक्षर इंगित करता है। विशेष रूप से अनुपस्थित जैसे अन्य कुंजियों कि आम तौर पर एक नियमित रूप से हस्ताक्षर किए आईओएस आवेदन में मौजूद हैं, कर रहे हैं AuthorityऔरTeamIdentifier
दुधारू
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.