स्मार्ट कॉन्ट्रॅक्ट सुरक्षा टूल्ससाठी मार्गदर्शक
आपण तीन विशिष्ट टेस्टिंग आणि प्रोग्राम विश्लेषण तंत्रे वापरणार आहोत:
- स्लिदर सह स्टॅटिक विश्लेषण. प्रोग्रामचे सर्व मार्ग अंदाजित केले जातात आणि एकाच वेळी वेगवेगळ्या प्रोग्राम सादरीकरणांद्वारे (उदा. कंट्रोल-फ्लो-ग्राफ) विश्लेषित केले जातात.
- एकिडना सह फझिंग. ट्रान्झॅक्शन्सच्या स्यूडो-रँडम जनरेशनसह कोड कार्यान्वित केला जातो. फझर दिलेल्या गुणधर्माचे उल्लंघन करण्यासाठी ट्रान्झॅक्शन्सचा क्रम शोधण्याचा प्रयत्न करेल.
- मॅन्टिकोर सह सिम्बॉलिक एक्झिक्यूशन. एक औपचारिक पडताळणी तंत्र, जे प्रत्येक एक्झिक्यूशन मार्गाचे गणितीय सूत्रामध्ये भाषांतर करते, ज्यावर मर्यादा तपासल्या जाऊ शकतात.
प्रत्येक तंत्राचे फायदे आणि तोटे आहेत आणि ते विशिष्ट प्रकरणांमध्ये उपयुक्त ठरतील:
| तंत्र | टूल | वापर | वेग | सुटलेले बग्स | खोटे अलार्म |
|---|---|---|---|---|---|
| स्टॅटिक विश्लेषण | स्लिदर | CLI आणि स्क्रिप्ट्स | सेकंद | मध्यम | कमी |
| फझिंग | एकिडना | Solidity गुणधर्म | मिनिटे | कमी | एकही नाही |
| सिम्बॉलिक एक्झिक्यूशन | मॅन्टिकोर | Solidity गुणधर्म आणि स्क्रिप्ट्स | तास | एकही नाही* | एकही नाही |
* जर सर्व मार्ग टाइमआउटशिवाय एक्सप्लोर केले गेले असतील
स्लिदर काही सेकंदात कॉन्ट्रॅक्ट्सचे विश्लेषण करते, तथापि, स्टॅटिक विश्लेषणामुळे खोटे अलार्म येऊ शकतात आणि ते जटिल तपासण्यांसाठी (उदा. अंकगणितीय तपासणी) कमी योग्य असेल. अंगभूत डिटेक्टर्समध्ये पुश-बटण प्रवेशासाठी API द्वारे किंवा वापरकर्ता-परिभाषित तपासणीसाठी API द्वारे स्लिदर चालवा.
एकिडना ला अनेक मिनिटे चालवण्याची आवश्यकता असते आणि ते केवळ खरे पॉझिटिव्ह तयार करेल. एकिडना Solidity मध्ये लिहिलेले, वापरकर्त्याने प्रदान केलेले सुरक्षा गुणधर्म तपासते. हे रँडम एक्सप्लोरेशनवर आधारित असल्यामुळे यात बग्स सुटू शकतात.
मॅन्टिकोर "सर्वात जड" विश्लेषण करते. एकिडना प्रमाणेच, मॅन्टिकोर वापरकर्त्याने प्रदान केलेल्या गुणधर्मांची पडताळणी करते. याला चालण्यासाठी अधिक वेळ लागेल, परंतु ते एखाद्या गुणधर्माची वैधता सिद्ध करू शकते आणि खोटे अलार्म नोंदवणार नाही.
सुचवलेला वर्कफ्लो
आता कोणतेही साधे बग्स उपस्थित नाहीत किंवा नंतर सादर केले जाणार नाहीत याची खात्री करण्यासाठी स्लिदरच्या अंगभूत डिटेक्टर्ससह सुरुवात करा. इनहेरिटन्स, व्हेरिएबल अवलंबित्व आणि संरचनात्मक समस्यांशी संबंधित गुणधर्म तपासण्यासाठी स्लिदर वापरा. जसा कोडबेस वाढतो, तसतसे स्थिती मशीनचे अधिक जटिल गुणधर्म तपासण्यासाठी एकिडना वापरा. Solidity कडून उपलब्ध नसलेल्या संरक्षणांसाठी कस्टम तपासण्या विकसित करण्यासाठी स्लिदरला पुन्हा भेट द्या, जसे की फंक्शन ओव्हरराइड होण्यापासून संरक्षण करणे. शेवटी, गंभीर सुरक्षा गुणधर्मांची लक्ष्यित पडताळणी करण्यासाठी मॅन्टिकोर वापरा, उदा. अंकगणितीय ऑपरेशन्स.
- सामान्य समस्या पकडण्यासाठी स्लिदरचे CLI वापरा
- तुमच्या कॉन्ट्रॅक्टचे उच्च-स्तरीय सुरक्षा गुणधर्म तपासण्यासाठी एकिडना वापरा
- कस्टम स्टॅटिक तपासण्या लिहिण्यासाठी स्लिदर वापरा
- जेव्हा तुम्हाला गंभीर सुरक्षा गुणधर्मांची सखोल खात्री हवी असेल तेव्हा मॅन्टिकोर वापरा
युनिट टेस्ट्सवर एक टीप. उच्च-गुणवत्तेचे सॉफ्टवेअर तयार करण्यासाठी युनिट टेस्ट्स आवश्यक आहेत. तथापि, सुरक्षा त्रुटी शोधण्यासाठी ही तंत्रे सर्वोत्तम नाहीत. ते सामान्यतः कोडच्या सकारात्मक वर्तनाची चाचणी करण्यासाठी वापरले जातात (म्हणजेच, कोड सामान्य संदर्भात अपेक्षेप्रमाणे कार्य करतो), तर सुरक्षा त्रुटी अशा एज केसेसमध्ये असतात ज्यांचा विकासकांनी विचार केलेला नसतो. डझनभर स्मार्ट कॉन्ट्रॅक्ट सुरक्षा पुनरावलोकनांच्या आमच्या अभ्यासामध्ये, आम्हाला आमच्या क्लायंटच्या कोडमध्ये आढळलेल्या सुरक्षा त्रुटींच्या संख्येवर किंवा तीव्रतेवर युनिट टेस्ट कव्हरेजचा कोणताही परिणाम झाला नाही (opens in a new tab).
सुरक्षा गुणधर्म निश्चित करणे
तुमच्या कोडची प्रभावीपणे चाचणी आणि पडताळणी करण्यासाठी, तुम्हाला लक्ष देण्याची आवश्यकता असलेले क्षेत्र ओळखणे आवश्यक आहे. सुरक्षेवर खर्च केलेली तुमची संसाधने मर्यादित असल्याने, तुमचे प्रयत्न ऑप्टिमाइझ करण्यासाठी तुमच्या कोडबेसच्या कमकुवत किंवा उच्च-मूल्याच्या भागांची व्याप्ती ठरवणे महत्त्वाचे आहे. थ्रेट मॉडेलिंग मदत करू शकते. खालील गोष्टींचे पुनरावलोकन करण्याचा विचार करा:
- रॅपिड रिस्क असेसमेंट्स (opens in a new tab) (वेळ कमी असताना आमचा पसंतीचा दृष्टिकोन)
- डेटा-सेंट्रिक सिस्टम थ्रेट मॉडेलिंगसाठी मार्गदर्शक (opens in a new tab) (उर्फ NIST 800-154)
- शोस्टॅक थ्रेट मॉडेलिंग (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 सॉल्व्हरच्या कक्षेबाहेर असेल तर एकिडना वापरले जाऊ शकते.
-
इनहेरिटन्स अचूकता. Solidity कॉन्ट्रॅक्ट्स मोठ्या प्रमाणावर मल्टिपल इनहेरिटन्सवर अवलंबून असतात. शॅडोइंग फंक्शनमध्ये
superकॉल नसणे आणि c3 लिनियरायझेशन क्रमाचा चुकीचा अर्थ लावणे यासारख्या चुका सहजपणे होऊ शकतात.- या समस्या शोधून काढण्याची खात्री करण्यासाठी स्लिदर हे टूल आहे.
-
बाह्य परस्परसंवाद. कॉन्ट्रॅक्ट्स एकमेकांशी संवाद साधतात आणि काही बाह्य कॉन्ट्रॅक्ट्सवर विश्वास ठेवला जाऊ नये. उदाहरणार्थ, जर तुमचे कॉन्ट्रॅक्ट बाह्य ओरॅकल्सवर अवलंबून असेल, तर उपलब्ध अर्ध्या ओरॅकल्सशी तडजोड झाल्यास ते सुरक्षित राहील का?
- तुमच्या कॉन्ट्रॅक्ट्ससह बाह्य परस्परसंवादाची चाचणी करण्यासाठी मॅन्टिकोर आणि एकिडना हा सर्वोत्तम पर्याय आहे. मॅन्टिकोरमध्ये बाह्य कॉन्ट्रॅक्ट्स स्टब करण्यासाठी अंगभूत यंत्रणा आहे.
-
मानक अनुरूपता. इथेरियम मानकांच्या (उदा. ERC-20) डिझाइनमध्ये त्रुटींचा इतिहास आहे. तुम्ही ज्या मानकावर तयार करत आहात त्याच्या मर्यादांबद्दल जागरूक रहा.
- स्लिदर, एकिडना आणि मॅन्टिकोर तुम्हाला दिलेल्या मानकातील विचलन शोधण्यात मदत करतील.
टूल निवड चीटशीट
| घटक | टूल्स | उदाहरणे |
|---|---|---|
| स्थिती मशीन | एकिडना, मॅन्टिकोर | |
| अॅक्सेस कंट्रोल | स्लिदर, एकिडना, मॅन्टिकोर | स्लिदर व्यायाम 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) |
तुमच्या उद्दिष्टांवर अवलंबून इतर क्षेत्रे तपासण्याची आवश्यकता असेल, परंतु लक्ष केंद्रित करण्याची ही ढोबळ क्षेत्रे कोणत्याही स्मार्ट कॉन्ट्रॅक्ट सिस्टमसाठी चांगली सुरुवात आहेत.
आमच्या सार्वजनिक ऑडिट्समध्ये सत्यापित किंवा चाचणी केलेल्या गुणधर्मांची उदाहरणे आहेत. वास्तविक-जगातील सुरक्षा गुणधर्मांचे पुनरावलोकन करण्यासाठी खालील अहवालांचे Automated Testing and Verification विभाग वाचण्याचा विचार करा: