إحياء^cc
revive^CC هي أداة تحليل ثابت للعقود الذكية من Hyperledger Fabric (ChainCode) التي تهدف إلى اكتشاف نقاط الضعف في الأمن المتعلقة بـ blockchain لمساعدة المطورين على كتابة عقود ذكية نظيفة وآمنة. revive^CC هي واحدة من أدوات التحليل الثابتة الموجودة لرمز سلسلة النسيج Hyperledger ، حيث كانت الأداة الأخرى هي الماسح الضوئي لسلسلة ChainSecurity التي يمكنها تحليل ملفات ChainCode التي تلبي متطلبات معينة. ما يجعل revive^CC Special هو أن الأداة قد جلبت إمكانية الوصول إلى تحليل الأمان إلى أي ملف ChainCode . هذا شيء لم يكن متاحًا حتى الآن.
الأداة هي امتداد لأداة التحليل الثابت مفتوح المصدر GO Revive وتم تصميمها باستخدام إطار Revive. لذلك يحتوي على جميع الفوائد والشيكات من الإحياء لمساعدة المطورين على كتابة رمز GO Clean. تم بناء revive^CC كجزء من مشروع أطروحة الخاص بي حول "تحليل العقود الذكية" في جامعة شيفيلد.
تثبيت
1. Place folder in the your $GOPATH/src/github.com/youraccount
2. Go into directory sivachokkapu/revive-cc
3. $ make install
4. $ make build
5. Move the revive file into $GOPATH/bin
6. You should now be able to use revive commands
الاستخدام
$ revive {chaincodefilename.go} - will analyse the file
$ revive -formatter stylish {chaincodefilename.go} - better output format
$ revive - on a directory will analyse all files if from the same package

باستخدام $ Revive على دليل
أداء

لتقييم أداء Revive^cc ، تم العثور على مجموعة متنوعة من ملفات سلسلة الحالات الحقيقية التي تحتوي كل منها على نقاط الضعف. تم الحصول على ما مجموعه 20 ملفًا متسلسلًا عامًا للتقييم من مستودعات GitHub. تم التحقق من كل هذه الملفات وتم الإبلاغ عن نقاط الضعف التالية. ثم تمت مقارنة الأداء مع الماسح الضوئي لسلسلة ChainSecurity التي لم يكن قادرًا إلا على التحقق من 13 من أصل 20 ملفًا. بشكل عام ، تمكنت Revive^cc من اكتشاف المزيد من نقاط الضعف (يرجى ملاحظة أن Revive^cc قادر على اكتشاف المزيد من الإيجابيات الحقيقية ، كما يكتشف إيجابيات أكثر كاذبة).
نقاط الضعف القابلة للاكتشاف
واردات السلسلة المدرجة في القائمة السوداء

مثال على ثغرة استيراد ترابط السلسلة في القائمة السوداء في Chaincode
قد يؤدي استيراد بعض المكتبات إلى عدم وجود إجماع بين أقرانهم. وذلك لأن بعض المكتبات ستسمح بالتواصل مع العالم الخارجي ، وإنشاء منحة ملفات ، ويمكنها حتى تقديم سلوك غير محدد في ChainCode. يمكن أن يؤدي كل هذا إلى حساب غير متناسق بين أقرانهم مما يؤدي إلى عدم وجود إجماع. مكتبة واحدة مدرجة في القائمة السوداء هي مكتبة "الوقت". تتيح هذه المكتبة أقرانهم الحصول على الطابع الزمني الحالي في وقت معين ، ومع ذلك ، فمن غير المرجح أن يقوم كل نظير بإنشاء نفس الطابع الزمني خلال معاملة تؤدي إلى تباين بين الأقران. يمكن أن يؤدي ذلك إلى سلوك غير محدد بين الأقران ، مما يؤدي إلى حساب غير متناسق.
متغيرات الدولة العالمية

مثال على الضعف العالمي للدولة المتغيرة في Chaincode
تعد المتغيرات العالمية عالمية فقط لنظير واحد حيث لا يتم تتبع المتغيرات العالمية على دفتر الأستاذ. لن يقوم الأقران بالضرورة بتنفيذ كل معاملة ، وبما أن نطاق المتغير العالمي يقتصر على نظير واحد ، فقد تتباعد حالاتها. لا يجب أن تعتمد أي بيانات يتم قراءتها أو كتابتها إلى متغيرات الحالة العالمية هذه لأن ذلك يمكن أن يؤدي إلى حساب بمجموعات قراءة وكتابة مختلفة. سيؤدي هذا الحساب غير المتناسق إلى عدم وجود توافق في الآراء بين أقرانه ، وبالتالي سيتم تمييز جميع المعاملات على أنها غير صالحة.
goroutines

مثال على الضعف في غوروتين في Chaincode
Goroutines إدخال التزامن في Chaincode. والتي يمكن أن تؤدي بعد ذلك إلى سلوك غير حتمي. يمكن أن يؤدي ذلك إلى حساب غير متسق بين أقرانهم بسبب عدم حساب نفس مجموعات القراءة والكتابة. سيؤدي ذلك إلى عدم وجود إجماع بين أقرانهم على الشبكة مما يؤدي إلى تمييز جميع المعاملات على أنها غير صالحة. لذلك من المحبط للغاية استخدام goroutines.
القراءة الوهمية ليدجر

مثال على قراءة الفانتوم عن قابلية دعم دفتر الأستاذ في Chaincode
الحصول على بيانات من دفتر الأستاذ باستخدام gethistoryofkey أو getQueryResult لا يمرر التحكم في الإصدار للنظام. هذا يعني أنه لا ينبغي استخدام البيانات التي تم استردادها باستخدام هذه الطرق لكتابة أي بيانات جديدة أو تحديث بيانات على دفتر الأستاذ. قد يؤدي ذلك إلى سلوك غير متوقع قد يؤثر على تنفيذ المعاملات ويسبب نتائج غير مقصودة.
المدى فوق الخريطة

مثال على النطاق على ضعف الخريطة في Chaincode
تتيح الكلمة الرئيسية للنطاق القدرة على التكرار من خلال كل عنصر في هياكل البيانات المختلفة في GO. ومع ذلك ، عندما يتم تطبيق النطاق على الخريطة ، سيتم اختيار أمر التكرار في GO. هذا يعني أن استخدام النطاق للتكرار من خلال عناصر الخريطة ليس حتميًا لأن ترتيب التكرار يمكن أن يتغير بين كل تنفيذ. لذلك لن يكون الحساب بين أقرانهم متسقًا وسيكون من المستحيل على أقران الشبكة التوصل إلى توافق في الآراء.
اقرأ بعد الكتابة

مثال على القراءة بعد كتابة الضعف في Chaincode
لكي تكتب بيان دفتر الأستاذ ، يجب أن تُرتكب المعاملة أولاً وكتابتها إلى دفتر الأستاذ. حتى ذلك الحين ، ستحتفظ القيمة التي تمت كتابتها إلى قيمتها القديمة. مما يعني أن قراءة هذه القيمة من دفتر الأستاذ ستعيد فقط القيمة القديمة والتي من المحتمل ألا تكون المقصود بها رمز السلسلة. سيؤدي ذلك إلى سلوك غير متوقع قد يؤثر على تنفيذ المعاملات ويسبب نتائج غير مقصودة.
رخصة
معهد ماساتشوستس للتكنولوجيا