انضم إلى Empire Hacking Slack
- المناقشات والدعم
Slither هو إطار عمل للتحليل الثابت Solidity & Vyper مكتوب بلغة Python3. فهو يدير مجموعة من أدوات الكشف عن الثغرات الأمنية، ويطبع معلومات مرئية حول تفاصيل العقد، ويوفر واجهة برمجة التطبيقات (API) لكتابة التحليلات المخصصة بسهولة. يمكّن Slither المطورين من العثور على نقاط الضعف، وتعزيز فهم التعليمات البرمجية الخاصة بهم، ووضع نماذج أولية للتحليلات المخصصة بسرعة.
قم بتشغيل Slither على تطبيق Hardhat/Foundry/Dapp/Brownie:
slither .
هذا هو الخيار المفضل إذا كان مشروعك يحتوي على تبعيات حيث يعتمد Slither على إطار عمل الترجمة الأساسي لتجميع التعليمات البرمجية المصدر.
ومع ذلك، يمكنك تشغيل Slither على ملف واحد لا يستورد التبعيات:
slither tests/uninitialized.sol
ملحوظة
يتطلب Slither إصدار Python 3.8+. إذا كنت لن تستخدم أحد أطر الترجمة المدعومة، فأنت بحاجة إلى solc، المترجم Solidity؛ نوصي باستخدام solc-select للتبديل بسهولة بين إصدارات solc.
python3 -m pip install slither-analyzer
git clone https://github.com/crytic/slither.git && cd slither
python3 -m pip install .
نوصي باستخدام بيئة Python الافتراضية، كما هو مفصل في تعليمات تثبيت المطور، إذا كنت تفضل تثبيت Slither عبر git.
استخدم صورة عامل الإرساء eth-security-toolbox
. فهو يتضمن جميع أدوات الأمان لدينا وكل إصدار رئيسي من Solidity في صورة واحدة. سيتم تركيب /home/share
على /share
في الحاوية.
docker pull trailofbits/eth-security-toolbox
لمشاركة دليل في الحاوية:
docker run -it -v /home/share:/share trailofbits/eth-security-toolbox
$GIT_TAG
بالعلامة الحقيقية) - repo : https://github.com/crytic/slither
rev : $GIT_TAG
hooks :
- id : slither
slither [target] --checklist
.slither [target] --checklist --markdown-root https://github.com/ORG/REPO/blob/COMMIT/
(استبدل ORG
، REPO
، COMMIT
) رقم | الكاشف | ما يكتشفه | تأثير | ثقة |
---|---|---|---|---|
1 | abiencoderv2-array | مجموعة تخزين abiencoderv2 | عالي | عالي |
2 | arbitrary-send-erc20 | يستخدم TransferFrom بشكل تعسفي from | عالي | عالي |
3 | array-by-reference | تعديل مجموعة التخزين حسب القيمة | عالي | عالي |
4 | encode-packed-collision | ABI ترميز الاصطدام المعبأ | عالي | عالي |
5 | incorrect-shift | ترتيب المعلمات في تعليمات التحول غير صحيح. | عالي | عالي |
6 | multiple-constructors | مخططات منشئ متعددة | عالي | عالي |
7 | name-reused | تمت إعادة استخدام اسم العقد | عالي | عالي |
8 | protected-vars | تم اكتشاف متغيرات غير محمية | عالي | عالي |
9 | public-mappings-nested | التعيينات العامة مع المتغيرات المتداخلة | عالي | عالي |
10 | rtlo | يتم استخدام حرف التحكم من اليمين إلى اليسار | عالي | عالي |
11 | shadowing-state | تظليل متغيرات الحالة | عالي | عالي |
12 | suicidal | وظائف تسمح لأي شخص بتدمير العقد | عالي | عالي |
13 | uninitialized-state | متغيرات الحالة غير المهيأة | عالي | عالي |
14 | uninitialized-storage | متغيرات التخزين غير المهيأة | عالي | عالي |
15 | unprotected-upgrade | عقد غير محمي قابل للترقية | عالي | عالي |
16 | codex | استخدم Codex للعثور على نقاط الضعف. | عالي | قليل |
17 | arbitrary-send-erc20-permit | يستخدم TransferFrom بشكل تعسفي من مع تصريح | عالي | واسطة |
18 | arbitrary-send-eth | الوظائف التي ترسل الأثير إلى وجهات عشوائية | عالي | واسطة |
19 | controlled-array-length | تعيين طول الصفيف الملوث | عالي | واسطة |
20 | controlled-delegatecall | وجهة اتصال المندوب التي يتم التحكم فيها | عالي | واسطة |
21 | delegatecall-loop | الوظائف المستحقة الدفع باستخدام delegatecall داخل الحلقة | عالي | واسطة |
22 | incorrect-exp | الأسية غير صحيحة | عالي | واسطة |
23 | incorrect-return | إذا تم استخدام return بشكل غير صحيح في وضع التجميع. | عالي | واسطة |
24 | msg-value-loop | msg.value داخل الحلقة | عالي | واسطة |
25 | reentrancy-eth | ثغرات إعادة الدخول (سرقة الإيثرات) | عالي | واسطة |
26 | return-leave | إذا تم استخدام return بدلا من leave . | عالي | واسطة |
27 | storage-array | خطأ في برنامج التحويل البرمجي لمجموعة الأعداد الصحيحة للتخزين | عالي | واسطة |
28 | unchecked-transfer | نقل الرموز المميزة غير المحددة | عالي | واسطة |
29 | weak-prng | PRNG ضعيف | عالي | واسطة |
30 | domain-separator-collision | يكتشف رموز ERC20 التي تحتوي على وظيفة يتعارض توقيعها مع DOMAIN_SEPARATOR() الخاص بـ EIP-2612 | واسطة | عالي |
31 | enum-conversion | كشف تحويل التعداد الخطير | واسطة | عالي |
32 | erc20-interface | واجهات ERC20 غير صحيحة | واسطة | عالي |
33 | erc721-interface | واجهات ERC721 غير صحيحة | واسطة | عالي |
34 | incorrect-equality | المساواة الصارمة الخطيرة | واسطة | عالي |
35 | locked-ether | العقود التي تقفل الأثير | واسطة | عالي |
36 | mapping-deletion | الحذف على الخرائط التي تحتوي على هيكل | واسطة | عالي |
37 | shadowing-abstract | متغيرات الحالة التظليل من العقود المجردة | واسطة | عالي |
38 | tautological-compare | إن مقارنة متغير بنفسه يؤدي دائمًا إلى إرجاع صحيح أو خطأ، اعتمادًا على المقارنة | واسطة | عالي |
39 | tautology | الحشو أو التناقض | واسطة | عالي |
40 | write-after-write | الكتابة غير المستخدمة | واسطة | عالي |
41 | boolean-cst | إساءة استخدام الثابت البولياني | واسطة | واسطة |
42 | constant-function-asm | وظائف ثابتة باستخدام رمز التجميع | واسطة | واسطة |
43 | constant-function-state | وظائف ثابتة تغير الحالة | واسطة | واسطة |
44 | divide-before-multiply | ترتيب العمليات الحسابية غير دقيق | واسطة | واسطة |
45 | out-of-order-retryable | المعاملات القابلة لإعادة المحاولة خارج الترتيب | واسطة | واسطة |
46 | reentrancy-no-eth | ثغرات إعادة الدخول (لا توجد سرقة للإثيرات) | واسطة | واسطة |
47 | reused-constructor | إعادة استخدام منشئ القاعدة | واسطة | واسطة |
48 | tx-origin | الاستخدام الخطير لـ tx.origin | واسطة | واسطة |
49 | unchecked-lowlevel | مكالمات منخفضة المستوى لم يتم التحقق منها | واسطة | واسطة |
50 | unchecked-send | إرسال غير محدد | واسطة | واسطة |
51 | uninitialized-local | المتغيرات المحلية غير مهيأة | واسطة | واسطة |
52 | unused-return | قيم الإرجاع غير المستخدمة | واسطة | واسطة |
53 | incorrect-modifier | المعدلات التي يمكنها إرجاع القيمة الافتراضية | قليل | عالي |
54 | shadowing-builtin | تظليل الرمز المدمج | قليل | عالي |
55 | shadowing-local | تظليل المتغيرات المحلية | قليل | عالي |
56 | uninitialized-fptr-cst | يستدعي مؤشر الوظيفة غير المهيأ المنشئين | قليل | عالي |
57 | variable-scope | المتغيرات المحلية المستخدمة قبل إعلانها | قليل | عالي |
58 | void-cst | لم يتم تنفيذ المنشئ الذي تم استدعاؤه | قليل | عالي |
59 | calls-loop | مكالمات متعددة في حلقة | قليل | واسطة |
60 | events-access | التحكم في الوصول إلى الأحداث المفقودة | قليل | واسطة |
61 | events-maths | الأحداث المفقودة الحسابية | قليل | واسطة |
62 | incorrect-unary | تعبيرات أحادية خطيرة | قليل | واسطة |
63 | missing-zero-check | التحقق من صحة العنوان صفر مفقود | قليل | واسطة |
64 | reentrancy-benign | ثغرات إعادة الدخول الحميدة | قليل | واسطة |
65 | reentrancy-events | تؤدي ثغرات إعادة الدخول إلى أحداث خارجة عن الترتيب | قليل | واسطة |
66 | return-bomb | قد يستهلك المتصل ذو المستوى المنخفض غاز جميع المتصلين بشكل غير متوقع. | قليل | واسطة |
67 | timestamp | الاستخدام الخطير لل block.timestamp | قليل | واسطة |
68 | assembly | استخدام الجمعية | إعلامية | عالي |
69 | assert-state-change | تأكيد تغيير الحالة | إعلامية | عالي |
70 | boolean-equal | مقارنة مع ثابت منطقي | إعلامية | عالي |
71 | cyclomatic-complexity | يكتشف الوظائف ذات التعقيد السيكلومي العالي (> 11). | إعلامية | عالي |
72 | deprecated-standards | معايير الصلابة المهملة | إعلامية | عالي |
73 | erc20-indexed | معلمات حدث ERC20 غير المفهرسة | إعلامية | عالي |
74 | function-init-state | وظيفة تهيئة متغيرات الحالة | إعلامية | عالي |
75 | incorrect-using-for | يكتشف استخدام عبارة use-for عندما لا تتطابق أي وظيفة من مكتبة معينة مع نوع معين | إعلامية | عالي |
76 | low-level-calls | مكالمات منخفضة المستوى | إعلامية | عالي |
77 | missing-inheritance | ميراث مفقود | إعلامية | عالي |
78 | naming-convention | التوافق مع اصطلاحات التسمية Solidity | إعلامية | عالي |
79 | pragma | إذا تم استخدام توجيهات براغما مختلفة | إعلامية | عالي |
80 | redundant-statements | تصريحات زائدة عن الحاجة | إعلامية | عالي |
81 | solc-version | نسخة صلابة غير صحيحة | إعلامية | عالي |
82 | unimplemented-functions | وظائف غير منفذة | إعلامية | عالي |
83 | unused-import | يكتشف الواردات غير المستخدمة | إعلامية | عالي |
84 | unused-state | متغيرات الحالة غير المستخدمة | إعلامية | عالي |
85 | costly-loop | عمليات مكلفة في حلقة | إعلامية | واسطة |
86 | dead-code | الوظائف التي لم يتم استخدامها | إعلامية | واسطة |
87 | reentrancy-unlimited-gas | ثغرات إعادة الدخول من خلال الإرسال والنقل | إعلامية | واسطة |
88 | too-many-digits | التوافق مع أفضل ممارسات التدوين الرقمي | إعلامية | واسطة |
89 | cache-array-length | for الحلقات التي تستخدم عضوًا length في بعض مصفوفات التخزين في حالة الحلقة الخاصة بها ولا يقوم بتعديلها. | تحسين | عالي |
90 | constable-states | متغيرات الحالة التي يمكن إعلانها ثابتة | تحسين | عالي |
91 | external-function | الوظيفة العامة التي يمكن إعلانها خارجية | تحسين | عالي |
92 | immutable-states | متغيرات الحالة التي يمكن الإعلان عنها بأنها غير قابلة للتغيير | تحسين | عالي |
93 | var-read-using-this | يقرأ العقد المتغير الخاص به باستخدام this | تحسين | عالي |
لمزيد من المعلومات، انظر
human-summary
: اطبع ملخصًا للعقود يمكن قراءته بواسطة الإنسانinheritance-graph
: قم بتصدير الرسم البياني للميراث لكل عقد إلى ملف نقطيcontract-summary
: طباعة ملخص العقودloc
: حساب إجمالي عدد أسطر التعليمات البرمجية (LOC)، وأسطر التعليمات البرمجية المصدر (SLOC)، وأسطر التعليقات من التعليمات البرمجية (CLOC) الموجودة في الملفات المصدر (SRC)، والتبعيات (DEP)، وملفات الاختبار (TEST).call-graph
: تصدير الرسم البياني للاتصال للعقود إلى ملف نقطيcfg
: تصدير CFG لكل وظيفةfunction-summary
: اطبع ملخصًا للوظائفvars-and-auth
: طباعة متغيرات الحالة المكتوبة وتفويض الوظائفnot-pausable
: وظائف الطباعة التي لا تستخدم معدل whenNotPaused
. لتشغيل الطابعة، استخدم --print
وقائمة الطابعات المفصولة بفواصل.
راجع وثائق الطابعة للحصول على القوائم الكاملة.
slither-check-upgradeability
: قم بمراجعة إمكانية الترقية المستندة إلى delegatecall
slither-prop
: اختبار الوحدة التلقائي وإنشاء الخاصيةslither-flat
: تسوية قاعدة التعليمات البرمجيةslither-check-erc
: التحقق من توافق ERCslither-format
: إنشاء التصحيح التلقائيslither-read-storage
: قراءة قيم التخزين من العقودslither-interface
: إنشاء واجهة للعقدراجع وثائق الأداة للحصول على أدوات إضافية.
اتصل بنا للحصول على مساعدة في إنشاء أدوات مخصصة.
الوثائق المتعلقة بالأجزاء الداخلية لـ Slither متاحة هنا.
لا تتردد في زيارة قناة Slack الخاصة بنا (#ethereum) للحصول على المساعدة في استخدام Slither أو توسيعه.
تصف وثائق الطابعة المعلومات التي يستطيع Slither تصورها لكل عقد.
توضح وثائق الكاشف كيفية كتابة تحليلات جديدة للثغرات الأمنية.
تصف وثائق API الأساليب والكائنات المتاحة للتحليلات المخصصة.
تصف وثائق SlithIR التمثيل الوسيط لـ SlithIR.
كيف يمكنني استبعاد المحاكاة أو الاختبارات؟
كيف أقوم بإصلاح مشكلات "الملف غير المعروف" أو التجميع؟
slither contract.sol
. بدلا من ذلك، استخدم slither .
في الدليل الأصلي contracts/
(يجب أن تشاهد contracts/
عند تشغيل ls
). إذا كان لديك مجلد node_modules/
، فيجب أن يكون في نفس الدليل مثل contracts/
. للتحقق من أن هذه المشكلة مرتبطة بـ slither، قم بتشغيل أمر التحويل البرمجي لإطار العمل الذي تستخدمه، على سبيل المثال npx hardhat compile
. ويجب أن يعمل ذلك بنجاح؛ بخلاف ذلك، لا يمكن لمحرك التحويل البرمجي الخاص بـ slither، وهو Crytic-compile، إنشاء AST. تم ترخيص Slither وتوزيعه بموجب ترخيص AGPLv3. اتصل بنا إذا كنت تبحث عن استثناء للشروط.
عنوان | الاستخدام | المؤلفون | مكان | شفرة |
---|---|---|---|---|
الرفض: طريقة الكشف عن ثغرات إعادة الدخول المستندة إلى AST | تحليل قائم على AST مبني على Slither | روي ما، زيفنغ جيان، قوانغيوان تشن، كي ما، يوجيا تشين | سي تي سي آي إس 19 | - |
MPro: الجمع بين التحليل الثابت والرمزي للاختبار القابل للتطوير للعقد الذكي | الاستفادة من تبعية البيانات من خلال Slither | ويليام تشانغ، سيباستيان بانيسكو، ليوداردو باسوس، ستيفن ستيوارت، فيجاي غانيش | إيسر 2019 | MPro |
ETHPLOIT: من التشويش إلى توليد الاستغلال الفعال مقابل العقود الذكية | الاستفادة من تبعية البيانات من خلال Slither | كينغزهاو تشانغ، ييتشو وانغ، خوانرو لي، سيكي ما | سانر 20 | - |
التحقق من العقود الذكية للإيثريوم: نهج التحقق النموذجي | التنفيذ الرمزي مبني على قمة Slither's CFG | تام بانج، هوانج إتش نجوين، دونج نجوين، توان تريو، ثو كوان | آي إم إل سي 20 | - |
إصلاح العقد الذكي | اعتمد على أدوات كشف نقاط الضعف لدى Slither | شياو ليانج يو، عمر البطاينة، ديفيد لو، أبهيك رويتشودري | توسيم 20 | SCRepair |
إزالة الغموض عن الحلقات في العقود الذكية | الاستفادة من تبعية البيانات من خلال Slither | بن ماريانو، يانجو تشين، يو فنغ، شوفيندو لاهيري، إيسيل ديليغ | بورصة عمان 20 | - |
تقدير الغاز الديناميكي القائم على التتبع للحلقات في العقود الذكية | استخدم Slither's CFG للكشف عن الحلقات | تشونمياو لي، شيجي ني، يانغ كاو، ييجون يو، تشنجيانغ هو | IEEE افتح J. حساب. شركة نفط الجنوب. 1 (2020) | - |
سمكة أبو شراع: فحص الأخطاء المتعلقة بعدم تناسق حالة العقد الذكي في ثوانٍ | اعتمد على SlithIR لإنشاء رسم بياني لتبعية التخزين | بريانكا بوس، وديبانجان داس، ويانجو تشين، ويو فنغ، وكريستوفر كروغل، وجيوفاني فيجنا | ستاندرد آند بورز 22 | سمكة ابو شراع |
SolType: أنواع التحسين للتجاوز الحسابي في الصلابة | استخدم Slither كواجهة أمامية لبناء نظام نوع التحسين | بريان تان، بنيامين ماريانو، شوفيندو ك. لاهيري، إيسيل ديليغ، يو فنغ | بوبل 22 | - |
لا تعبث معي: الاستفادة من تقنيات التعلم الآلي للكشف التلقائي عن عمليات الاحتيال | استخدم Slither لاستخراج ميزات الرموز المميزة (قابلة للتصغير، وقابلة للإيقاف المؤقت، ..) | مازورا وبرونو وفيكتور آدان وفانيسا دازا | الرياضيات 10.6 (2022) | - |
MANDO: تضمينات الرسم البياني غير المتجانسة متعددة المستويات للكشف الدقيق عن ثغرات العقود الذكية | استخدم Slither لاستخراج CFG والرسم البياني للاستدعاء | هوانغ نجوين، نهات مينه نجوين، تشونياو شيه، زهرة أحمدي، دانييل كوديندو، ثانه نام دوان، لينجشياو جيانغ | المؤتمر الدولي التاسع لـ IEEE لعلوم البيانات والتحليلات المتقدمة (DSAA، 2022) | ge-sc |
التدقيق الآلي لنقاط الضعف في التلاعب بالأسعار في العقود الذكية | استخدم Slither لاستخراج CFG وتبعيات البيانات | سيدي محمد بلاهي، إريك كيلتي، كيرثي نيلاتورو، أندرياس فينيريس، وفان لونج | مؤتمر IEEE الدولي لعام 2022 حول Blockchain والعملات المشفرة (ICBC) | إصلاح العقد الذكي |
نمذجة وإنفاذ سياسات التحكم في الوصول للعقود الذكية | قم بتوسيع تبعيات بيانات Slither | جان فيليب توبيرج، جوناس شيفل، فريدريك رايش، بيرنهارد بيكيرت، روبرت هاينريش، رالف ريوسنر | مؤتمر IEEE الدولي للتطبيقات اللامركزية والبنى التحتية (DAPPS)، 2022 | SolidityAccessControlEnforcement |
اكتشاف ثغرات العقود الذكية بناءً على التعلم العميق ودمج القرارات متعددة الوسائط | استخدم Slither لاستخراج CFG | ويشو دينغ، وهوانشون وي، وتنغ هوانغ، وكونغ كاو، ويون بينغ، وشوان هو | مجسات 2023، 23، 7246 | - |
رسم بياني معرفي للكود غني بالدلالات للكشف عن الأشياء المجهولة في إعادة استخدام كود العقد الذكي | استخدم Slither لاستخراج ميزات التعليمات البرمجية (CFG، الوظيفة، أنواع المعلمات، ..) | تشينغ هوانغ، ديانشو لياو، زينتشانغ شينغ، تشنغكانغ زو، تشانغجينغ وانغ، شين شيا | معاملات ACM حول هندسة البرمجيات ومنهجيتها، 2023 | - |
التنفيذ الموازي للعقد الذكي مع الوصول إلى الحالة الدقيقة | استخدم Slither لإنشاء رسوم بيانية للوصول إلى الحالة | شياو دونغ تشي، جياو جياو، يي لي | المؤتمر الدولي لأنظمة الحوسبة الموزعة (ICDCS)، 2023 | - |
التفاح السيئ: فهم المخاطر الأمنية المركزية في النظم البيئية اللامركزية | قم بتنفيذ تحليل داخلي على رأس Slither | كايلون يان، جيليان تشانغ، شيانغيو ليو، وينروي دياو، شانكينج جو | مؤتمر الويب ACM أبريل 2023 | - |
تحديد نقاط الضعف في العقود الذكية باستخدام تحليل الفترات | قم بإنشاء 4 أجهزة كشف أعلى Slither | ستيفان كلاوديو سوزان، أندريه أروسواي | من عام 2023 | - |
تحليل حالة التخزين واستخراج العقود الذكية لسلسلة كتل الإيثريوم (لا يوجد ملف PDF في الوصول المفتوح) | اعتمد على Slither's CFG وAST | مها أيوب، تانيا سليم، محمد جانجوا، طلحة أحمد | توسيم 2023 | SmartMuv |
إذا كنت تستخدم Slither في عمل أكاديمي، ففكر في التقدم للحصول على جائزة Crytic Research Award بقيمة 10 آلاف دولار.