
Securify 2.0 هو ماسح ضوئي للأمان لعقود Ethereum الذكية التي تدعمها مؤسسة Ethereum و Chainecurity. تم إجراء البحث الأساسي وراء Securify في مختبر الأنظمة الآمنة والموثوقة والذكية في Eth Zurich.
إنه خليفة ماسح الأمن Securify الشهير (يمكنك العثور على الإصدار القديم هنا).
لبناء الحاوية:
sudo docker build -t securify .
لتشغيل الحاوية:
sudo docker run -it -v <contract-dir-full-path>:/share securify /share/<contract>.sol
ملاحظة: لتشغيل الكود عبر Docker مع إصدار صلابة يختلف عن 0.5.12 ، ستحتاج إلى تعديل المتغير ARG SOLC=0.5.12 في الجزء العلوي من Dockerfile للإشارة إلى الإصدار الخاص بك. بعد البناء مع الإصدار الصحيح ، يجب ألا تصادف أخطاء.
تفترض التعليمات التالية أن الثعبان مثبت بالفعل. بالإضافة إلى ذلك ، يتطلب Securify تثبيت solc و souffle و graphviz على النظام:
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
اتبع الإرشادات هنا: https://souffle-lang.github.io/download.html
يرجى عدم اختيار الإصدار غير المستقر لأنه قد ينكسر في أي وقت.
sudo apt install graphviz
بعد تثبيت المتطلبات المسبقة ، يمكننا إعداد البيئة الافتراضية Python التي سنقوم بتشغيل النصوص في هذا المشروع.
في المجلد الجذر للمشروع ، قم بتنفيذ الأوامر التالية لإعداد وتنشيط البيئة الافتراضية:
virtualenv --python=/usr/bin/python3.7 venv
source venv/bin/activate
تحقق من أن إصدار python هو في الواقع 3.7 :
python --version
تعيين LD_LIBRARY_PATH :
cd <securify_root>/securify/staticanalysis/libfunctors
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`
أخيرًا ، قم بتثبيت تبعيات المشروع عن طريق تشغيل الأوامر التالية من مجلد <securify_root> :
pip install --upgrade pip
pip install -r requirements.txt
pip install -e .
أنت الآن مستعد لبدء استخدام إطار عمل Securify.
تذكر: قبل تنفيذ البرامج النصية الخاصة بالإطار ، ستحتاج إلى تنشيط البيئة الافتراضية مع الأمر التالي:
source venv/bin/activate
يدعم Securify2 حاليًا فقط العقود المسطحة ، أي العقود التي لا تحتوي على بيانات استيراد.
لتحليل العقد المحلي ببساطة تشغيل:
securify <contract_source>.sol [--use-patterns Pattern1 Pattern2 ...]
أو قم بتنزيله من blockchain باستخدام etherscan.io API:
securify <contract_address> --from-blockchain [--key <key-file>]
لاحظ أنك تحتاج إلى مفتاح API من Etherscan.io لاستخدام هذه الوظيفة.
لتحليل عقد ضد مستويات الشدة المحددة:
securify <contract_source>.sol [--include-severity Severity1 Severity2]
securify <contract_source>.sol [--exclude-severity Severity1 Severity2]
للحصول على جميع الأنماط المتاحة تشغيل:
securify --list
| بطاقة تعريف | اسم النمط | خطورة | هوية النزاهة | معرف SWC | تعليقات |
|---|---|---|---|---|---|
| 1 | تودامونت | شديد الأهمية | - | SWC-114 | |
| 2 | ToDreceiver | شديد الأهمية | - | SWC-114 | |
| 3 | Todtransfer | شديد الأهمية | - | SWC-114 | |
| 4 | غير مقيد | شديد الأهمية | - | SWC-124 | |
| 5 | RightToleftoverride | عالي | rtlo | SWC-130 | |
| 6 | ShadowedStateVariable | عالي | shadowing-state ، shadowing-abstract | SWC-119 | |
| 7 | غير مقيد | عالي | suicidal | SWC-106 | |
| 8 | غير مؤكد | عالي | uninitialized-state | SWC-109 | |
| 9 | غير مؤلف | عالي | uninitialized-storage | SWC-109 | |
| 10 | غير مقيد | عالي | controlled-delegatecall | SWC-112 | |
| 11 | داو | عالي | reentrancy-eth | SWC-107 | |
| 12 | ERC20INTFACE | واسطة | erc20-interface | - | |
| 13 | ERC721Interface | واسطة | erc721-interface | - | |
| 14 | مساواة غير صحيحة | واسطة | incorrect-equality | SWC-132 | |
| 15 | قفل | واسطة | locked-ether | - | |
| 16 | reentrancynoeth | واسطة | reentrancy-no-eth | SWC-107 | |
| 17 | txorigin | واسطة | tx-origin | SWC-115 | |
| 18 | unhandledException | واسطة | unchecked-lowlevel | - | |
| 19 | غير مقيد | واسطة | unchecked-send | SWC-105 | |
| 20 | غير محدد | واسطة | uninitialized-local | SWC-109 | |
| 21 | غير مستخدم | واسطة | unused-return | SWC-104 | |
| 22 | ShadowedBuiltin | قليل | shadowing-builtin | - | |
| 23 | Shadowedlocalvariable | قليل | shadowing-local | - | |
| 24 | CallTodeFaultConstructor؟ | قليل | void-cst | - | |
| 25 | Callinloop | قليل | calls-loop | SWC-104 | |
| 26 | reentrancybenign | قليل | reentrancy-benign | SWC-107 | |
| 27 | الطابع الزمني | قليل | timestamp | SWC-116 | |
| 28 | الجمعية | معلومات | assembly | - | |
| 29 | erc20indexed | معلومات | erc20-indexed | - | |
| 30 | lowlevelcalls | معلومات | low-level-calls | - | |
| 31 | NamingConvention | معلومات | naming-convention | - | |
| 32 | التحول | معلومات | solc-version | SWC-103 | |
| 33 | UnusedStateVariable | معلومات | unused-state | - | |
| 34 | Toomanydigits | معلومات | too-many-digits | - | |
| 35 | constablestates | معلومات | constable-states | - | |
| 36 | وظائف خارجية | معلومات | external-function | - | |
| 37 | StateVariablesDefaultVibility | معلومات | - | SWC-108 |
لا يتم فحص الأنماط التالية عن طريق Securify نظرًا لأنها تم فحصها بواسطة مترجم الصلابة (Ver. 0.5.8):
constant-functiondeprecated-standardspragmaلا تنطبق نقاط الضعف SWC التالية على عقود الصلابة مع pragma> = 5.8 وبالتالي لا يتم فحصها بواسطة Securify: