تُستخدم أدوات تدقيق العقود الذكية لتحديد الثغرات الأمنية في العقود الذكية . يمكن استخدام هذه الأدوات من قبل مدققي العقود الذكية أو المطورين أو أي شخص آخر يريد التأكد من أن عقودهم الذكية آمنة أو تتمتع بمستوى معين من الأمان.
سنقدم لمحة عامة عن أدوات التحليل الثابتة في هذا المقال
كما سبق و تحدثنا عن في مقالات سابقة عن أدوات اختبار الطفرات، وأدوات التشويش، وأدوات التحقق الرسمية، وأدوات التصور.
ملاحظة: تحتوي بعض هذه الأدوات على متطلبات Python غير متوافقة عند التثبيت، لذا كن حذرًا عند استخدامها على نفس الجهاز. تفترض هذه المقالة إتقان لغة Solidity.
التحليل الثابت (Static analysis)
التحليل الثابت هو عملية تحليل أو مسح كود العقد الذكي لاكتشاف الثغرات الأمنية والتأكد من صحتها دون تشغيل الكود فعليًا.
فيما يلي بعض أدوات التحللي الثابتين المشهورين.
1- Slither
Slither هي أداة تحليل ثابتة للعقود الذكية المكتوبة بلغة Python. إنها واحدة من أدوات التحليل الثابت الأكثر شيوعًا للعقود الذكية، وهي معروفة بقدرتها على العثور على مجموعة واسعة من نقاط الضعف.
يكتشف Slither كود Solidity الضعيف، ويحدد مكان حدوث حالة الخطأ في الكود المصدري للعقود الذكية ويمكنه تحليل العقود المكتوبة باستخدام Solidity >= 0.4.
التثبيت:
لتثبيت Slither، تأكد من تثبيت python3.8+ و solc (مترجم Solidity) وتشغيل الأوامر التالية:
pip3 install slither-analyzer
mukaebكيفية الاستخدام:
يمكنك استخدام Slither في مشروع Hardhat / Foundry / Dapp / Brownie عن طريق تشغيل:
slither
mukaebلاستهداف ملف واحد (يجب ألا يحتوي على عمليات استيراد)، استخدم الأمر التالي:
slither <path-to-contract>
mukaebنقاط القوة:
- يمكن لـ Slither العثور على مجموعة واسعة من الثغرات الأمنية، بما في ذلك هجمات إعادة الدخول (reentrancy attacks)، ونقاط ضعف تبعية الطابع الزمني (timestamp dependency) ، ونقاط ضعف تجاوز الرقم الصحيحة (integer overflow).
- Slither سهل الاستخدام نسبيًا.
- انه سريع.
نقاط الضعف:
- Slither يولد بعض الإيجابيات الكاذبة.
- لا يستطيع Slither العثور على الثغرات الأمنية الناتجة عن تفاعل العقود الذكية المختلفة (مكالمات العقود المتقاطعة).
2. Consensys MythX
Consensys MythX هي خدمة تحليل ثابتة قائمة على السحابة للعقود الذكية. يمكنه البحث تلقائيًا عن الثغرات الأمنية في Ethereum والعقود الذكية الأخرى المستندة إلى EVM. يمكن استخدام MythX للتحليل الثابت والتحليل الديناميكي والتنفيذ الرمزي ويمكنه اكتشاف الثغرات الأمنية لتقديم تقرير تحليلي متعمق.
التثبيت:
MythX هي خدمة قائمة على السحابة وتتطلب اشتراكًا لاستخدامها. توجه إلى https://mythx.io/ ، وأنشئ حسابًا واشترك في الخطة المطلوبة لاستخدام الخدمة.
كيفية الاستخدام:
يحتوي MythX على أربع أدوات ومكتبات رسمية يمكن التكامل معها لاستخدام الخدمة، وهي MythX CLI و Myth-JS و PythX وملحق MythX vscode .
استخدام MythX في Remix
يمكن استخدام MythX أيضًا في Remix IDE، من خلال تمكين المكون الإضافي MythX في Remix وإضافة مفتاح API.
- توجه إلى Remix وابحث عن MythX في تبويب plugin .
- انقر فوق “activate” لبدء استخدام الـ plugin .
- بعد ذلك، انقر على أيقونة MythX وانقر على الإعدادات لإضافة مفتاح MythX API الخاص بك.
- يمكنك الآن تجميع عقد ذكي من اختيارك وتحليله باستخدام MythX.
نقاط القوة:
- MythX سهل الاستخدام.
- تقدم MythX تقريرًا شاملاً.
- يمكن دمج MythX مع أدوات أخرى
نقاط الضعف :
- إنها أداة تجارية وتتطلب الاشتراك.
- لا يمكن لـ MythX العثور على ثغرة أمنية تتضمن تفاعلات مع عقود ذكية أخرى (مكالمات العقود المتقاطعة).
- إنه قائم على السحابة ولا يحب جميع المدققين أو المطورين استخدام الخدمات السحابية.
3. Rattle
Rattle عبارة عن إطار عمل تحليل EVM ثنائي ثابت ينتج رسمًا بيانيًا لتدفق التحكم بعد إزالة أكواد التشغيل DUP وSWAP وPUSH وPOP. وهذا يقلل من عدد تعليمات EVM وبالتالي يجعل الرسم البياني أكثر قابلية للقراءة.
تأخذ Rattle البايبت كود الخاص بالـ EVM وتستعيد الرسم البياني لتدفق التحكم الأصلي للعقد حتى يكون المستخدمون أكثر دراية بالعقود التي يتفاعلون معها.
التثبيت:
التبعيات المطلوبة:
- python3
- graphviz
- cbor2
- pyevmasm
لمتابعة التثبيت،
- التحقق من إصدار python (لا يوجد إصدار، قم بتثبيت Python3)
python -V
#or
python3 -V
mukaeb- تثبيت graphviz:
لينكس:
sudo apt-get install graphviz
mukaebماك:
brew install graphviz
mukaeb- استنسخ Rattle repository وأدخل المشروع:
git clone https://github.com/crytic/rattle.git
cd rattle
mukaeb
- قم بتشغيل الأوامر التالية لتثبيت التبعيات في بيئة افتراضية في Python (تأكد من تشغيل هذا الأمر في كل مرة قبل استخدام Rattle ):
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
mukaeb(الأمر أعلاه سينشئ بيئة بايثون افتراضية وهي بيئة معزولة لبايثون تستخدم لتشغيل وتثبيت حزم بايثون دون التأثير على الحزم المثبتة عالميًا، ولهذا السبب من المهم تشغيل الأمر في كل مرة نستخدم فيها Rattle).
كيفية الاستخدام:
بمجرد دخولك إلى المجلد/، قم بتشغيل الأمر التالي لاختبار Rattle على البايت كود لعقد KingOfTheEtherThrone.
python3 rattle-cli.py --input inputs/kingofether/KingOfTheEtherThrone.bin -O
mukaebيمكنك أيضًا إنشاء البايت كود لأي عقد ذكي باستخدام:
solc --bin-runtime <path-to-file> 2>/dev/null | tail -n1 > <desired-destination-path>/contract.bin
mukaebوتحليلها مع Rattle باستخدام:
#load up dependencies first
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
#run rattle
python3 rattle-cli.py --input <desired-destination-path>/contract.bin
mukaeb(لاحظ أن هذا يجب أن يكون داخل مجلد rattle repository)
على سبيل المثال، إذا قمنا بتحليل البايت كود لعقد Storage في بيئة Remix الافتراضية، فيمكننا رؤية تدفق التحكم في وظيفة “store(uint256)” أدناه:
يمكننا أن نرى تدفق وظيفة “store(uint256)”، وعدد فتحات التخزين التي تقرأ وتكتب منها (الفتحة 0 في هذه الحالة) والمناسبات التي يمكن أن تحدث فيها العودة (على سبيل المثال، وجود بيانات اتصال (calldata) أقل من المطلوب).
نقاط القوة
- تعتبر Rattle مفيدة لتصور تدفق التحكم في العقود الذكية وتتبع تنفيذ الوظيفة في العقد الذكي.
- يمكنه تتبع كل من كومة (stack ) وذاكرة العقود الذكية.
- إنه يوفر تحليلًا بسيطًا لاستدعاء الوظيفة، على سبيل المثال، يمكنه تحديد وإخطار ما إذا كان العقد يمكنه إرسال الأثير من الوظيفة أم لا.
- يستخدم نموذج تعيين ثابت واحد لجعل واجهة الرسم البياني لتدفق التحكم أكثر سهولة.
نقاط الضعف
- نظرًا لأنه يستخدم بشكل أساسي لتحليل تدفق العقود الذكية، فهو ليس مثاليًا، ويمكن أن يفوتك بعض الأخطاء ونقاط الضعف لأنه يقوم فقط بتحليل البايت كود للعقد الذكي ويمكن أن يفتقد الثغرات الأمنية التي قد تكون مرتبطة بمنطق الأعمال، والاعتماد على أوامر المعاملات، وما إلى ذلك.
- ليس من السهل دائمًا فهم نتائج التحليل.
(ملاحظة: rattle لا يعمل مع Solidity 0.8.20).
4. Mythril
Mythril هي أداة تحليل ثابتة وديناميكية لعقود Solidity الذكية. إنه مصمم لاكتشاف نقاط الضعف المحتملة ونقاط الضعف الأمنية في كود Solidity ويمكنه اكتشاف نقاط الضعف التي تتضمن تفاعلات العقد مثل إعادة الدخول. وهو يدعم العقود الذكية المصممة لـ Ethereum وHedera وQuorum وVechain وRoostock وTron وغيرها من سلاسل الكتل المتوافقة مع EVM.
التثبيت:
لتثبيت Mythril، قم بتشغيل الأوامر التالية:
لينكس:
# update packages
sudo apt update
# Install solc
sudo apt install software-properties-common
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt install solc
# Install libssl-dev, python3-dev, and python3-pip
sudo apt install libssl-dev python3-dev python3-pip
# Install mythril
pip3 install mythril
# Check version of Mythril
myth version
mukaebماك:
# Update Homebrew and packages
brew update
brew upgrade
# Install solc
brew tap ethereum/ethereum
brew install solidity
# Install mythril
pip3 install mythril
# Check version of Mythril
myth version
mukaebكيفية الاستخدام:
لاختبار عقد Solidity الذكي مع Mythril:
myth analyze <path-to-file>
mukaebتحليل الأسطورة < المسار إلى الملف > _
اختبار Mythril
لتصور كيفية عمل Mythril، قمنا بإنشاء Solidity باستخدام كود عرضة لإعادة الدخول. سنختبر هذا الكود مع Mythril لمعرفة ما إذا كان سيكتشف الثغرة الأمنية.
الصق الكود أدناه في ملف Solidity:
// SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.0;contract Vulnerable {
mapping(address => uint) public balance;
function donate(address to) public payable {
balance[to] += msg.value;
}
function withdraw(uint amount) public {
if (balance[msg.sender] >= amount) {
msg.sender.call{value: amount}("");
balance[msg.sender] -= amount;
}
}
function queryBalance(address to) public view returns (uint) {
return balance[to];
}
}
mukaebعندما نقوم بتشغيل
myth analyze <path-to-file>
mukaebنحصل على التقرير التالي: (افتح في علامة تبويب جديدة وقم بتكبير الصورة لرؤية التفاصيل).
تمكن Mythril من العثور على خمس نقاط ضعف في العقد الذكي.
يقوم Mythril عادةً بإجراء ثلاث معاملات عند إجراء التحليل.
للحصول على نتائج أفضل يمكننا زيادة عدد المعاملات باستخدام -t <tx count>.
على سبيل المثال، لتشغيل أربع معاملات أثناء اختبار ملف Solidity أعلاه، يمكننا تشغيل:
myth analyze <path-to-file> -t 4
mukaebيمكن زيادة معلمة الرقم هذه للحصول على نتائج أفضل. ومع ذلك فإنه سوف يبطئ وقت الاختبار. اقرأ المزيد عنها هنا .
نقاط القوة
- يمكن لـ Mythril العثور على مجموعة واسعة من الثغرات الأمنية بما في ذلك: هجمات إعادة الدخول، وتجاوز/تدفق الأعداد الصحيحة وبعض نقاط الضعف الأخرى ضمن سجل تصنيف ثغرات العقود الذكية.
- سهلة الاستخدام.
- إنها أداة تحليل ثابتة/ديناميكية، وبالتالي يمكنها العثور على بعض نقاط الضعف التي تتضمن تفاعلات مع العقود الذكية.
نقاط الضعف
- Mythril بطيء، وكلما زاد عدد معاملات الاختبار، كان الاختبار أبطأ.
- يمكن أن يعطي نتائج إيجابية كاذبة.
5. Securify v2.0
Securify 2.0 هو ماسح ضوئي أمني لعقود Ethereum الذكية. إنه خليفة أداة فحص الأمان Securify (المهملة).
التثبيت:
يجب تثبيت التبعيات التالية لاستخدام Securify 2.0 (لاحظ أن securify يعمل مع Python 3.7 فقط ولا يتطلب تثبيت securify السابق):
- سولك
- سوفليه
- جراففيز / دوت
لتثبيت التبعيات، اتبع التعليمات التالية:
لينكس:
# Install solc
sudo add-apt-repository ppa:ethereum/ethereum
sudo apt-get update
sudo apt-get install solc
# Install graphviz
sudo apt install graphviz
mukaebماك:
# Install solc
brew tap ethereum/ethereum
brew install solidity
# Install graphviz
brew install graphviz
mukaebقم بتثبيت Souffle من غيتهاب أو راجع تعليمات البناء هنا
بعد تنزيل جميع التبعيات، قم بتشغيل الأوامر التالية لاستنساخ مستودع securify 2.0 وتثبيته في بيئة افتراضية:
git clone https://github.com/eth-sri/securify2.git
cd securify2/securify/staticanalysis/libfunctors
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`
cd ../../../
python3 -m venv venv # Run this only if `source venv/bin/activate` fails to run
virtualenv --python=/usr/bin/python3.7 venv
source venv/bin/activate
# Run securify 2.0
securify -h
mukaebكيفية الاستخدام:
لتحليل عقد ذكي مع securify 2.0، قم بتشغيل:
تأمين < مسار إلى ملف > [ – استخدام – أنماط Pattern1 Pattern2 … ] # قم بتشغيل securify – l لرؤية جميع الأنماط المتاحة
securify <path-to-file> [--use-patterns Pattern1 Pattern2 ...] # Run securify -l to see all available patterns
mukaebنقاط القوة
- يمكن لـ Securify v2.0 العثور على مجموعة واسعة من الثغرات الأمنية، بما في ذلك تظليل الحالة (shadowing)، والتخزين غير المهيأ (uninitialized storage)، والإيثر المقفل (locked ether)، واستدعاء المندوب غير المقيد (unrestricted delegatecall )، وهجمات إعادة الدخول.
- يمكنه العثور على ما يصل إلى 37 نقطة ضعف مختلفة للعقود الذكية.
نقاط الضعف
- لا تتم صيانته بشكل نشط.
- يدعم العقود الثابتة فقط (العقود التي لا تحتوي على واردات).
- يستخدم الإصدار القديم من بيثون
- عملية التثبيت متعبه.
- يمكن أن تنتج نتائج إيجابية كاذبة.
- يمكن أن تنتج نتائج إيجابية كاذبة.
ختامًا:
في ظل التطور السريع لتكنولوجيا العقود الذكية وتزايد استخدامها في العديد من التطبيقات المختلفة، يظل الأمان أحد أبرز التحديات التي تواجه المطورين. لذا، فإن الاعتماد على أدوات تدقيق فعالة مثل التي تم تسليط الضوء عليها في هذه المقالة يُعد خطوة أساسية نحو تحقيق بيئة آمنة وموثوقة.
ومن الواضح من خلال النظرة التي قدمناها على هذه الأدوات أن كل أداة لها مميزاتها ونقاط قوتها وكذلك نقاط الضعف التي قد تواجهها. لذلك، يُفضل للمطورين والشركات المعنية الاطلاع بعمق على خصائص كل أداة واختيار الأدوات التي تتناسب مع متطلباتهم وتحقق أهدافهم الأمنية.
في النهاية، نأمل أن تكون هذه المقالة قد قدمت نظرة شاملة ومُفيدة حول أدوات تدقيق العقود الذكية، وأن تكون دافعًا للمزيد من البحث والتطوير في هذا المجال الحيوي. نتمنى لكم تطويرًا آمنًا وموثوقًا.
إطرح رأيك ؟
أظهر التعليقات / إنرك تعليق