2011-02-01 7 views
5

एक मजबूत नाम (एक .snk फ़ाइल में संग्रहीत कीपैयर) के साथ साइन इन करना (अन्य उपयोगों के बीच) protect against forging assemblies के लिए है।एक मजबूत नाम के साथ हस्ताक्षर कैसे असेंबली के एक सेट फोर्जिंग के खिलाफ रक्षा करता है?

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

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

मजबूत नामों के साथ हस्ताक्षर कैसे कई असेंबली फोर्जिंग के खिलाफ सुरक्षा करता है?

+0

ठीक है, असेंबली भी मजबूत है। उस स्ट्रिंग को खींचते रहें और आप EXE पर समाप्त हो जाएंगे। यदि हमलावर भी इसे प्रतिस्थापित कर सकता है तो मजबूत नामों का उपयोग करने में कोई बिंदु नहीं बचा है। –

+0

@ हंस पासेंट: मुझे लगता है कि आप सही हैं।क्या आप इसे उत्तर के रूप में जोड़ सकते हैं? – sharptooth

उत्तर

5

असेंबली नामकरण मजबूत वास्तव में हस्ताक्षरित असेंबली की रक्षा के लिए नहीं है। यह हस्ताक्षरित असेंबली लोड करने वाली दूसरी असेंबली की रक्षा करना है।

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

लेकिन, यदि असेंबली के पूरे सेट को अलग किया गया है तो फिर से इकट्ठा किया गया है और फिर से हस्ताक्षरित किया गया है, तो हाँ, आप सही हैं कि वे कोड की रेखाओं को फिर से लिख सकते हैं जो बाकी विधानसभाओं को लोड करते हैं जैसे कि उन्हें नई (नकली) कुंजी के साथ लोड करता है।

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

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

0

मजबूत नामकरण सभी के बारे में है, अच्छी तरह से ... "नामकरण"। मैं यहां से उद्धरण: Using Strong Name Signatures

"मजबूत नाम .NET Framework असेंबली अद्वितीय पहचान देने के लिए एक शक्तिशाली तंत्र प्रदान करते हैं।"

यही वह सब कुछ है जिसे आप कभी भी इस तंत्र से प्राप्त करेंगे। इसका मतलब है कि मैं आपकी असेंबली और सभी विधानसभाओं को संदर्भित कर सकता हूं, लेकिन मैं "आपने ऐसा किया" का नाटक करने में सक्षम नहीं होगा। मैं का नाटक करने में सक्षम नहीं हूं, आप इन असेंबली के प्रकाशक हैं।

+0

मुझे जो समस्या दिखाई देती है वह यह है कि पूरे बुनियादी ढांचे में सार्वजनिक कुंजी प्रकाशित करना शामिल नहीं है। मान लीजिए कि मैं एक असेंबली डाउनलोड करता हूं और यह जानना चाहता हूं कि यह आपके से है या नहीं। मैं उसको कैसे करू? – sharptooth

+0

@sharptooh - कुछ चीजें हैं जो आप नए आईसीएलआरएसट्रोंगनाम इंटरफ़ेस (http://msdn.microsoft.com/en-us/library/dd409349.aspx) के साथ कर सकते हैं, उदाहरण के लिए StrongNameCompareAssemblies, लेकिन यदि आप उस तरह के चेक जोड़ते हैं आपके ऐप में, कॉल भी जाली जा सकते हैं :-) –

+0

हां, बिल्कुल, और समस्या यह है कि कोई केंद्रीय तरीका नहीं है जहां आप अपनी सार्वजनिक कुंजी प्रकाशित कर सकते थे। ऐसा इसलिए है क्योंकि पूरी व्यवस्था यह सत्यापित करने के लिए नहीं है कि असेंबली आपसे है - यह केवल यह सत्यापित करने के लिए है कि सभी बाद के संस्करण एक ही प्रकाशक से प्रारंभिक संस्करण के रूप में हैं। – sharptooth

संबंधित मुद्दे

 संबंधित मुद्दे