स्मार्ट अनुबंध सुरक्षा उपकरणों के लिए एक गाइड
हम तीन विशिष्ट परीक्षण और प्रोग्राम विश्लेषण तकनीकों का उपयोग करने जा रहे हैं:
- स्लिदर के साथ स्थैतिक विश्लेषण। प्रोग्राम के सभी पथों का अनुमान लगाया जाता है और विभिन्न प्रोग्राम प्रस्तुतियों (जैसे, नियंत्रण-प्रवाह-ग्राफ) के माध्यम से एक ही समय में विश्लेषण किया जाता है।
- एकिड्ना के साथ फ़ज़िंग। कोड को लेनदेन की छद्म-यादृच्छिक पीढ़ी के साथ निष्पादित किया जाता है। फ़ज़र दी गई संपत्ति का उल्लंघन करने के लिए लेनदेन का एक क्रम खोजने का प्रयास करेगा।
- मैंटिकोर के साथ प्रतीकात्मक निष्पादन। एक औपचारिक सत्यापन तकनीक, जो प्रत्येक निष्पादन पथ को एक गणितीय सूत्र में अनुवादित करती है, जिस पर शीर्ष बाधाओं की जाँच की जा सकती है।
प्रत्येक तकनीक के फायदे और नुकसान हैं, और यह विशिष्ट मामलों में उपयोगी होगी:
| तकनीक | उपकरण | उपयोग | गति | चूके हुए बग | झूठे अलार्म |
|---|---|---|---|---|---|
| स्थैतिक विश्लेषण | स्लिदर | CLI और स्क्रिप्ट | सेकंड | मध्यम | कम |
| फ़ज़िंग | एकिड्ना | सॉलिडिटी गुण | मिनट | कम | कोई नहीं |
| प्रतीकात्मक निष्पादन | मैंटिकोर | सॉलिडिटी गुण और स्क्रिप्ट | घंटे | कोई नहीं* | कोई नहीं |
* यदि सभी पथ बिना टाइमआउट के खोजे जाते हैं
स्लिदर सेकंड के भीतर अनुबंधों का विश्लेषण करता है, हालांकि, स्थैतिक विश्लेषण से झूठे अलार्म हो सकते हैं और जटिल जांच (जैसे, अंकगणितीय जांच) के लिए कम उपयुक्त होगा। बिल्ट-इन डिटेक्टरों तक पुश-बटन पहुंच के लिए API के माध्यम से या उपयोगकर्ता-परिभाषित जांच के लिए API के माध्यम से स्लिदर चलाएं।
एकिड्ना को कई मिनट तक चलने की आवश्यकता है और यह केवल सही सकारात्मक परिणाम देगा। एकिड्ना सॉलिडिटी में लिखे गए उपयोगकर्ता-प्रदत्त सुरक्षा गुणों की जाँच करता है। यह बग्स को छोड़ सकता है क्योंकि यह यादृच्छिक अन्वेषण पर आधारित है।
मैंटिकोर "सबसे भारी वजन" विश्लेषण करता है। एकिड्ना की तरह, मैंटिकोर उपयोगकर्ता-प्रदत्त गुणों को सत्यापित करता है। इसे चलाने में अधिक समय लगेगा, लेकिन यह किसी संपत्ति की वैधता साबित कर सकता है और झूठे अलार्म की रिपोर्ट नहीं करेगा।
सुझाया गया वर्कफ़्लो
यह सुनिश्चित करने के लिए कि अब कोई साधारण बग मौजूद नहीं है या बाद में पेश किया जाएगा, स्लिदर के अंतर्निहित डिटेक्टरों से शुरू करें। विरासत, चर निर्भरता और संरचनात्मक मुद्दों से संबंधित गुणों की जांच के लिए स्लिदर का उपयोग करें। जैसे-जैसे कोडबेस बढ़ता है, स्टेट मशीन के अधिक जटिल गुणों का परीक्षण करने के लिए एकिड्ना का उपयोग करें। सॉलिडिटी से अनुपलब्ध सुरक्षा के लिए कस्टम चेक विकसित करने के लिए स्लिदर पर फिर से जाएं, जैसे कि किसी फ़ंक्शन को ओवरराइड करने से बचाना। अंत में, महत्वपूर्ण सुरक्षा गुणों के लक्षित सत्यापन के लिए मैंटिकोर का उपयोग करें, जैसे, अंकगणितीय संचालन।
- सामान्य समस्याओं को पकड़ने के लिए स्लिदर के CLI का उपयोग करें
- अपने अनुबंध के उच्च-स्तरीय सुरक्षा गुणों का परीक्षण करने के लिए एकिड्ना का उपयोग करें
- कस्टम स्थैतिक जांच लिखने के लिए स्लिदर का उपयोग करें
- एक बार जब आप महत्वपूर्ण सुरक्षा गुणों का गहन आश्वासन चाहते हैं तो मैंटिकोर का उपयोग करें
इकाई परीक्षणों पर एक नोट। उच्च-गुणवत्ता वाले सॉफ्टवेयर बनाने के लिए इकाई परीक्षण आवश्यक हैं। हालांकि, ये तकनीकें सुरक्षा खामियों को खोजने के लिए सबसे उपयुक्त नहीं हैं। वे आम तौर पर कोड के सकारात्मक व्यवहार का परीक्षण करने के लिए उपयोग किए जाते हैं (यानी, कोड सामान्य संदर्भ में अपेक्षा के अनुरूप काम करता है), जबकि सुरक्षा खामियां उन मामलों में रहती हैं जिन पर डेवलपर्स ने विचार नहीं किया। दर्जनों स्मार्ट अनुबंध सुरक्षा समीक्षाओं के हमारे अध्ययन में, इकाई परीक्षण कवरेज का हमारे क्लाइंट के कोड में पाई गई सुरक्षा खामियों की संख्या या गंभीरता पर कोई प्रभाव नहीं पड़ा (opens in a new tab)।
सुरक्षा गुणों का निर्धारण
अपने कोड का प्रभावी ढंग से परीक्षण और सत्यापन करने के लिए, आपको उन क्षेत्रों की पहचान करनी होगी जिन पर ध्यान देने की आवश्यकता है। चूंकि सुरक्षा पर खर्च किए गए आपके संसाधन सीमित हैं, इसलिए अपने प्रयास को अनुकूलित करने के लिए अपने कोडबेस के कमजोर या उच्च-मूल्य वाले हिस्सों को निर्धारित करना महत्वपूर्ण है। खतरा मॉडलिंग मदद कर सकता है। समीक्षा करने पर विचार करें:
- रैपिड रिस्क असेसमेंट (opens in a new tab) (समय कम होने पर हमारा पसंदीदा दृष्टिकोण)
- डेटा-केंद्रित सिस्टम थ्रेट मॉडलिंग के लिए गाइड (opens in a new tab) (उर्फ NIST 800-154)
- Shostack थ्रेट मॉडलिंग (opens in a new tab)
- STRIDE (opens in a new tab) / DREAD (opens in a new tab)
- PASTA (opens in a new tab)
- दावों का उपयोग (opens in a new tab)
घटक
यह जानना कि आप क्या जाँचना चाहते हैं, आपको सही उपकरण चुनने में भी मदद करेगा।
स्मार्ट अनुबंधों के लिए अक्सर प्रासंगिक व्यापक क्षेत्रों में शामिल हैं:
-
स्टेट मशीन। अधिकांश अनुबंधों को स्टेट मशीन के रूप में दर्शाया जा सकता है। यह जांचने पर विचार करें कि (1) कोई अमान्य स्थिति तक नहीं पहुंचा जा सकता है, (2) यदि कोई स्थिति मान्य है तो उस तक पहुंचा जा सकता है, और (3) कोई भी स्थिति अनुबंध को फंसाती नहीं है।
- एकिड्ना और मैंटिकोर स्टेट-मशीन विनिर्देशों का परीक्षण करने के लिए पसंदीदा उपकरण हैं।
-
एक्सेस कंट्रोल। यदि आपके सिस्टम में विशेषाधिकार प्राप्त उपयोगकर्ता हैं (उदाहरण के लिए, एक मालिक, नियंत्रक, ...) आपको यह सुनिश्चित करना होगा कि (1) प्रत्येक उपयोगकर्ता केवल अधिकृत कार्य कर सकता है और (2) कोई भी उपयोगकर्ता अधिक विशेषाधिकार प्राप्त उपयोगकर्ता से कार्यों को ब्लॉक नहीं कर सकता है।
- स्लिदर, एकिड्ना और मैंटिकोर सही एक्सेस कंट्रोल की जांच कर सकते हैं। उदाहरण के लिए, स्लिदर यह जांच सकता है कि केवल श्वेतसूचीबद्ध फ़ंक्शन में onlyOwner संशोधक की कमी है। एकिड्ना और मैंटिकोर अधिक जटिल एक्सेस कंट्रोल के लिए उपयोगी हैं, जैसे कि केवल तभी अनुमति दी जाती है जब अनुबंध किसी दी गई स्थिति में पहुंचता है।
-
अंकगणितीय संचालन। अंकगणितीय संचालन की सुदृढ़ता की जाँच करना महत्वपूर्ण है।
SafeMathका हर जगह उपयोग करना ओवरफ़्लो/अंडरफ़्लो को रोकने के लिए एक अच्छा कदम है, हालांकि, आपको अभी भी अन्य अंकगणितीय खामियों पर विचार करना चाहिए, जिसमें राउंडिंग मुद्दे और अनुबंध को फंसाने वाली खामियां शामिल हैं।- मैंटिकोर यहाँ सबसे अच्छा विकल्प है। एकिड्ना का उपयोग तब किया जा सकता है जब अंकगणित SMT सॉल्वर के दायरे से बाहर हो।
-
विरासत की शुद्धता। सॉलिडिटी अनुबंध कई विरासतों पर बहुत अधिक निर्भर करते हैं।
superकॉल से गायब शैडोइंग फ़ंक्शन और गलत व्याख्या किए गए c3 रैखिककरण क्रम जैसी गलतियाँ आसानी से पेश की जा सकती हैं।- स्लिदर इन मुद्दों का पता लगाने को सुनिश्चित करने वाला उपकरण है।
-
बाहरी इंटरैक्शन। अनुबंध एक दूसरे के साथ इंटरैक्ट करते हैं, और कुछ बाहरी अनुबंधों पर भरोसा नहीं किया जाना चाहिए। उदाहरण के लिए, यदि आपका अनुबंध बाहरी ओरेकल पर निर्भर करता है, तो क्या यह सुरक्षित रहेगा यदि आधे उपलब्ध ओरेकल से समझौता किया जाता है?
- मैंटिकोर और एकिड्ना आपके अनुबंधों के साथ बाहरी इंटरैक्शन का परीक्षण करने के लिए सबसे अच्छा विकल्प हैं। मैंटिकोर में बाहरी अनुबंधों को स्टब करने के लिए एक अंतर्निहित तंत्र है।
-
मानक अनुरूपता। एथेरियम मानकों (उदाहरण के लिए, ERC20) के डिजाइन में खामियों का इतिहास है। जिस मानक पर आप निर्माण कर रहे हैं, उसकी सीमाओं से अवगत रहें।
- स्लिदर, एकिड्ना और मैंटिकोर आपको किसी दिए गए मानक से विचलन का पता लगाने में मदद करेंगे।
उपकरण चयन चीटशीट
| घटक | उपकरण | उदाहरण |
|---|---|---|
| स्टेट मशीन | एकिड्ना, मैंटिकोर | |
| एक्सेस कंट्रोल | स्लिदर, एकिड्ना, मैंटिकोर | स्लिदर अभ्यास 2 (opens in a new tab), एकिड्ना अभ्यास 2 (opens in a new tab) |
| अंकगणितीय संचालन | मैंटिकोर, एकिड्ना | एकिड्ना अभ्यास 1 (opens in a new tab), मैंटिकोर अभ्यास 1 - 3 (opens in a new tab) |
| विरासत की शुद्धता | स्लिदर | स्लिदर अभ्यास 1 (opens in a new tab) |
| बाहरी इंटरैक्शन | मैंटिकोर, एकिड्ना | |
| मानक अनुरूपता | स्लिदर, एकिड्ना, मैंटिकोर | slither-erc (opens in a new tab) |
आपके लक्ष्यों के आधार पर अन्य क्षेत्रों की जाँच करने की आवश्यकता होगी, लेकिन फोकस के ये मोटे-दाने वाले क्षेत्र किसी भी स्मार्ट अनुबंध प्रणाली के लिए एक अच्छी शुरुआत हैं।
हमारे सार्वजनिक ऑडिट में सत्यापित या परीक्षण किए गए गुणों के उदाहरण हैं। वास्तविक दुनिया की सुरक्षा संपत्तियों की समीक्षा करने के लिए निम्नलिखित रिपोर्टों के स्वचालित परीक्षण और सत्यापन अनुभागों को पढ़ने पर विचार करें:
पेज का अंतिम अपडेट: 22 अक्टूबर 2025