2012-10-14 24 views
5

मैंने एक टिप्पणी में देखा कि __func__ का उपयोग एक सुरक्षा जोखिम है। मुझे समझने की जरूरत है कि यह मामला कैसा है?__func__ पहचान सुरक्षा सुरक्षा जोखिम कैसे है?

+5

कहां गए आप इसे देख? – 0x90

+0

संक्षिप्त उत्तर: किसी ने टिप्पणी में कुछ बेवकूफ लिखा था। हम में से सबसे अच्छे के साथ भी होता है। – Jens

उत्तर

4

__func__ का उपयोग बाइनरी में फ़ंक्शन नाम से पता चलता है, जो बाइनरी तक पहुंचने वाले हमलावर के काम को कम करता है।

+0

लेकिन फ़ंक्शन नाम जानने से क्या होता है? यदि वह किसी फ़ंक्शन का नाम जानता है तो यह हमलावर की सहायता कैसे करता है? – dreamlax

+1

यदि फ़ंक्शन का नाम sha256 है, aes_decrypt या get_secret_key, मुझे लगता है कि यह उसकी मदद कर सकता है। – MByD

+1

'__func__' एक * मैक्रो * नहीं है। –

0

यह रिवर्स इंजीनियरिंग को आसान बनाता है। इसलिए यदि आप अपना आवेदन गुप्त तरीके से काम करना चाहते हैं, तो यह हमलावर के जीवन को आसान बनाता है।

यह डीआरएम सुविधाओं के लिए प्रासंगिक है, या यदि आप प्रतियोगी अनुप्रयोगों में अपने एल्गोरिदम की नकल करना कठिन बनाना चाहते हैं।

लेकिन यह सुरक्षा को प्रभावित नहीं करता है, क्योंकि एक आवेदन जहां रिवर्सिंग कमजोरियों को दिखाता है वह पहले स्थान पर असुरक्षित था।

0

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

0

__func__ सी 99-मानक पूर्वनिर्धारित पहचानकर्ता है जो किसी फ़ंक्शन के अंदर उपयोग किए जाने पर फ़ंक्शन नाम वाले वर्ण सरणी चर में फैला हुआ है। C99 6.4.2.2/1 से वर्णन करता है:

पहचानकर्ता __func__ परोक्ष है, तुरंत प्रत्येक कार्य परिभाषा के उद्घाटन ब्रेस निम्नलिखित के रूप में अनुवादक द्वारा घोषित किया जाता है, घोषणा

स्थिर स्थिरांक चार __func__ [ ] = "फ़ंक्शन-नाम"; दिखाई दिया, जहां फ़ंक्शन-नाम शब्दावली-संलग्न कार्य का नाम है। यह नाम फ़ंक्शन का अनौपचारिक नाम है।

ध्यान दें कि यह एक मैक्रो नहीं है और इसका प्रीप्रोसेसिंग के दौरान कोई विशेष अर्थ नहीं है।

में अधिक जानकारी के लिए इस लिंक __func__ बारे में

देखो: समाधान सुरक्षित रूप में पूर्वनिर्धारित संदर्भ के प्रति संवेदनशील निरंतर __func__, यह एक समारोह में लागू नहीं किया जा सकता है शामिल है और उपलब्ध कराने के विस्तार पर निर्भर करता है
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1642.html

हैं एक ही सुविधा।

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

फ़ंक्शन-जैसे मैक्रोज़ या __func__ पर इनलाइन या स्थैतिक फ़ंक्शंस पसंद करें।

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

अधिक विचार और उदाहरण कोड:
https://www.securecoding.cert.org/confluence/display/seccode/PRE13-C.+Avoid+changing+control+flow+in+macro+definitions

+2

यह सुनिश्चित नहीं है कि यह प्रश्न का उत्तर कैसे देता है, जो विशेष रूप से _security जोखिम_ के बारे में है और '__func__' के सामान्य संचालन/कार्यान्वयन के बारे में नहीं है। –

+0

मैंने '__func__' के उपयोग को और अधिक समझने योग्य बनाने का प्रयास किया और यह तथ्य कि ओपी के रूप में यह' मैक्रो 'नहीं है, इस सवाल में कहा गया है। "इसका आह्वान करने के प्रभाव आश्चर्यजनक हो सकते हैं और सूक्ष्म त्रुटियों का कारण बन सकते हैं।" और उत्तर में दिए गए लिंक बहुत अच्छी तरह से इंगित करते हैं कि यह अन्य निर्भर मॉड्यूल को अप्रत्याशित रूप से व्यवहार करने और इसलिए कम सुरक्षित रूप से व्यवहार करने का कारण बन सकता है। – askmish

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