মূল কন্টেন্টে যান

স্মার্ট কন্ট্রাক্ট সিকিউরিটি টুলের একটি গাইড

Solidity
স্মার্ট কন্ট্রাক্ট
সিকিউরিটি
ইন্টারমিডিয়েট
ট্রেইলঅফবিটস
৭ সেপ্টেম্বর, ২০২০
6 মিনিট পড়া

আমরা তিনটি স্বতন্ত্র টেস্টিং এবং প্রোগ্রাম অ্যানালাইসিস টেকনিক ব্যবহার করতে যাচ্ছি:

  • Slither-এর সাহায্যে স্ট্যাটিক অ্যানালাইসিস। প্রোগ্রামের সমস্ত পাথ একই সাথে বিভিন্ন প্রোগ্রাম প্রেজেন্টেশনের (যেমন, কন্ট্রোল-ফ্লো-গ্রাফ) মাধ্যমে অনুমান এবং বিশ্লেষণ করা হয়।
  • Echidna-এর সাহায্যে ফাজিং। কোডটি লেনদেনের একটি সিউডো-র‍্যান্ডম জেনারেশনের সাথে এক্সিকিউট করা হয়। ফাজার একটি নির্দিষ্ট প্রপার্টি লঙ্ঘন করার জন্য লেনদেনের একটি সিকোয়েন্স খুঁজে বের করার চেষ্টা করবে।
  • Manticore-এর সাহায্যে সিম্বলিক এক্সিকিউশন। এটি একটি ফর্মাল ভেরিফিকেশন টেকনিক, যা প্রতিটি এক্সিকিউশন পাথকে একটি গাণিতিক সূত্রে রূপান্তর করে, যার উপর ভিত্তি করে কনস্ট্রেইন্টগুলো চেক করা যায়।

প্রতিটি টেকনিকের সুবিধা এবং অসুবিধা রয়েছে এবং এগুলো নির্দিষ্ট ক্ষেত্রে কার্যকর হবে:

টেকনিকটুলব্যবহারগতিমিস হওয়া বাগফলস অ্যালার্ম
স্ট্যাটিক অ্যানালাইসিসSlitherCLI এবং স্ক্রিপ্টসেকেন্ডমাঝারিকম
ফাজিংEchidnaSolidity প্রপার্টিমিনিটকমনেই
সিম্বলিক এক্সিকিউশনManticoreSolidity প্রপার্টি এবং স্ক্রিপ্টঘণ্টানেই*নেই

* যদি টাইমআউট ছাড়াই সমস্ত পাথ এক্সপ্লোর করা হয়

Slither কয়েক সেকেন্ডের মধ্যে কন্ট্রাক্ট বিশ্লেষণ করে, তবে স্ট্যাটিক অ্যানালাইসিস ফলস অ্যালার্ম তৈরি করতে পারে এবং জটিল চেকের (যেমন, গাণিতিক চেক) জন্য কম উপযুক্ত হতে পারে। বিল্ট-ইন ডিটেক্টরগুলোতে পুশ-বাটন অ্যাক্সেসের জন্য API-এর মাধ্যমে অথবা ব্যবহারকারী-নির্ধারিত চেকের জন্য API-এর মাধ্যমে Slither রান করুন।

Echidna কয়েক মিনিট ধরে রান করতে হয় এবং এটি শুধুমাত্র ট্রু পজিটিভ তৈরি করবে। Echidna ব্যবহারকারীর দেওয়া সিকিউরিটি প্রপার্টি চেক করে, যা Solidity-তে লেখা থাকে। এটি বাগ মিস করতে পারে কারণ এটি র‍্যান্ডম এক্সপ্লোরেশনের উপর ভিত্তি করে কাজ করে।

Manticore সবচেয়ে "ভারী" বিশ্লেষণ করে। Echidna-এর মতো, Manticore ব্যবহারকারীর দেওয়া প্রপার্টি ভেরিফাই করে। এটি রান করতে বেশি সময় নেবে, তবে এটি একটি প্রপার্টির বৈধতা প্রমাণ করতে পারে এবং কোনো ফলস অ্যালার্ম রিপোর্ট করবে না।

প্রস্তাবিত ওয়ার্কফ্লো

বর্তমানে কোনো সাধারণ বাগ নেই বা পরে তৈরি হবে না তা নিশ্চিত করতে Slither-এর বিল্ট-ইন ডিটেক্টর দিয়ে শুরু করুন। ইনহেরিটেন্স, ভেরিয়েবল ডিপেন্ডেন্সি এবং স্ট্রাকচারাল সমস্যা সম্পর্কিত প্রপার্টি চেক করতে Slither ব্যবহার করুন। কোডবেস বড় হওয়ার সাথে সাথে স্টেট মেশিনের আরও জটিল প্রপার্টি টেস্ট করতে Echidna ব্যবহার করুন। Solidity থেকে পাওয়া যায় না এমন সুরক্ষাগুলোর জন্য কাস্টম চেক তৈরি করতে (যেমন, কোনো ফাংশন ওভাররাইড হওয়া থেকে রক্ষা করা) আবার Slither ব্যবহার করুন। সবশেষে, গুরুত্বপূর্ণ সিকিউরিটি প্রপার্টির (যেমন, গাণিতিক অপারেশন) টার্গেটেড ভেরিফিকেশন করতে Manticore ব্যবহার করুন।

  • সাধারণ সমস্যাগুলো ধরতে Slither-এর CLI ব্যবহার করুন
  • আপনার কন্ট্রাক্টের হাই-লেভেল সিকিউরিটি প্রপার্টি টেস্ট করতে Echidna ব্যবহার করুন
  • কাস্টম স্ট্যাটিক চেক লিখতে Slither ব্যবহার করুন
  • আপনি যখন গুরুত্বপূর্ণ সিকিউরিটি প্রপার্টির ইন-ডেপথ নিশ্চয়তা চান তখন Manticore ব্যবহার করুন

ইউনিট টেস্ট সম্পর্কে একটি নোট। উচ্চ-মানের সফটওয়্যার তৈরি করতে ইউনিট টেস্ট প্রয়োজনীয়। তবে, সিকিউরিটি ত্রুটি খুঁজে বের করার জন্য এই টেকনিকগুলো সবচেয়ে উপযুক্ত নয়। এগুলো সাধারণত কোডের পজিটিভ আচরণ টেস্ট করতে ব্যবহৃত হয় (অর্থাৎ, কোডটি সাধারণ প্রেক্ষাপটে প্রত্যাশা অনুযায়ী কাজ করে), যেখানে সিকিউরিটি ত্রুটিগুলো সাধারণত এমন এজ কেসগুলোতে থাকে যা ডেভেলপাররা বিবেচনা করেননি। কয়েক ডজন স্মার্ট কন্ট্রাক্ট সিকিউরিটি রিভিউ নিয়ে আমাদের গবেষণায়, আমাদের ক্লায়েন্টের কোডে পাওয়া সিকিউরিটি ত্রুটির সংখ্যা বা তীব্রতার উপর ইউনিট টেস্ট কভারেজের কোনো প্রভাব ছিল না (opens in a new tab)

সিকিউরিটি প্রপার্টি নির্ধারণ করা

আপনার কোড কার্যকরভাবে টেস্ট এবং ভেরিফাই করতে, আপনাকে অবশ্যই সেই জায়গাগুলো চিহ্নিত করতে হবে যেখানে মনোযোগ দেওয়া প্রয়োজন। যেহেতু সিকিউরিটির পিছনে ব্যয় করা আপনার রিসোর্স সীমিত, তাই আপনার প্রচেষ্টাকে অপ্টিমাইজ করার জন্য আপনার কোডবেসের দুর্বল বা উচ্চ-মূল্যের অংশগুলো স্কোপ করা গুরুত্বপূর্ণ। থ্রেট মডেলিং এতে সাহায্য করতে পারে। নিচের বিষয়গুলো রিভিউ করার কথা বিবেচনা করুন:

কম্পোনেন্ট

আপনি কী চেক করতে চান তা জানা আপনাকে সঠিক টুল নির্বাচন করতেও সাহায্য করবে।

স্মার্ট কন্ট্রাক্ট-এর জন্য প্রায়শই প্রাসঙ্গিক বিস্তৃত ক্ষেত্রগুলোর মধ্যে রয়েছে:

  • স্টেট মেশিন। বেশিরভাগ কন্ট্রাক্টকে একটি স্টেট মেশিন হিসেবে উপস্থাপন করা যেতে পারে। চেক করার কথা বিবেচনা করুন যে (1) কোনো ইনভ্যালিড স্টেটে পৌঁছানো যাবে না, (2) যদি কোনো স্টেট ভ্যালিড হয় তবে সেখানে পৌঁছানো যাবে, এবং (3) কোনো স্টেট কন্ট্রাক্টকে ট্র্যাপ করবে না।

    • স্টেট-মেশিন স্পেসিফিকেশন টেস্ট করার জন্য Echidna এবং Manticore হলো পছন্দের টুল।
  • অ্যাক্সেস কন্ট্রোল। যদি আপনার সিস্টেমে প্রিভিলেজড ব্যবহারকারী (যেমন, একজন মালিক, কন্ট্রোলার, ...) থাকে তবে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে (1) প্রতিটি ব্যবহারকারী কেবল অনুমোদিত কাজগুলোই করতে পারে এবং (2) কোনো ব্যবহারকারী বেশি প্রিভিলেজড ব্যবহারকারীর কাজ ব্লক করতে পারবে না।

    • Slither, Echidna এবং Manticore সঠিক অ্যাক্সেস কন্ট্রোল চেক করতে পারে। উদাহরণস্বরূপ, Slither চেক করতে পারে যে শুধুমাত্র হোয়াইটলিস্টেড ফাংশনগুলোতে onlyOwner মডিফায়ার নেই। Echidna এবং Manticore আরও জটিল অ্যাক্সেস কন্ট্রোলের জন্য দরকারী, যেমন কোনো পারমিশন কেবল তখনই দেওয়া হয় যদি কন্ট্রাক্ট একটি নির্দিষ্ট স্টেটে পৌঁছায়।
  • গাণিতিক অপারেশন। গাণিতিক অপারেশনগুলোর সঠিকতা চেক করা অত্যন্ত গুরুত্বপূর্ণ। ওভারফ্লো/আন্ডারফ্লো প্রতিরোধ করার জন্য সব জায়গায় SafeMath ব্যবহার করা একটি ভালো পদক্ষেপ, তবে আপনাকে অবশ্যই রাউন্ডিং সমস্যা এবং কন্ট্রাক্টকে ট্র্যাপ করে এমন ত্রুটিসহ অন্যান্য গাণিতিক ত্রুটিগুলো বিবেচনা করতে হবে।

    • এখানে Manticore হলো সেরা পছন্দ। যদি গাণিতিক হিসাব SMT সলভারের আওতার বাইরে হয় তবে Echidna ব্যবহার করা যেতে পারে।
  • ইনহেরিটেন্সের সঠিকতা। Solidity কন্ট্রাক্টগুলো মাল্টিপল ইনহেরিটেন্সের উপর ব্যাপকভাবে নির্ভর করে। super কল মিস করা শ্যাডোইং ফাংশন এবং ভুলভাবে ব্যাখ্যা করা c3 লিনিয়ারাইজেশন অর্ডারের মতো ভুলগুলো সহজেই তৈরি হতে পারে।

    • এই সমস্যাগুলো শনাক্ত করা নিশ্চিত করার জন্য Slither হলো উপযুক্ত টুল।
  • এক্সটার্নাল ইন্টারঅ্যাকশন। কন্ট্রাক্টগুলো একে অপরের সাথে ইন্টারঅ্যাক্ট করে এবং কিছু এক্সটার্নাল কন্ট্রাক্টকে বিশ্বাস করা উচিত নয়। উদাহরণস্বরূপ, যদি আপনার কন্ট্রাক্ট এক্সটার্নাল ওরাকল-এর উপর নির্ভর করে, তবে উপলব্ধ ওরাকলগুলোর অর্ধেক আপস করা হলে এটি কি সুরক্ষিত থাকবে?

    • আপনার কন্ট্রাক্টের সাথে এক্সটার্নাল ইন্টারঅ্যাকশন টেস্ট করার জন্য Manticore এবং Echidna হলো সেরা পছন্দ। এক্সটার্নাল কন্ট্রাক্ট স্টাব করার জন্য Manticore-এর একটি বিল্ট-ইন মেকানিজম রয়েছে।
  • স্ট্যান্ডার্ড কনফরমেন্স। ইথিরিয়াম স্ট্যান্ডার্ডগুলোর (যেমন, ERC20) ডিজাইনে ত্রুটির ইতিহাস রয়েছে। আপনি যে স্ট্যান্ডার্ডের উপর ভিত্তি করে তৈরি করছেন তার সীমাবদ্ধতা সম্পর্কে সচেতন থাকুন।

    • Slither, Echidna এবং Manticore আপনাকে একটি নির্দিষ্ট স্ট্যান্ডার্ড থেকে বিচ্যুতি শনাক্ত করতে সাহায্য করবে।

টুল নির্বাচনের চিটশিট

কম্পোনেন্টটুলউদাহরণ
স্টেট মেশিনEchidna, Manticore
অ্যাক্সেস কন্ট্রোলSlither, Echidna, ManticoreSlither অনুশীলন ২ (opens in a new tab), Echidna অনুশীলন ২ (opens in a new tab)
গাণিতিক অপারেশনManticore, EchidnaEchidna অনুশীলন ১ (opens in a new tab), Manticore অনুশীলন ১ - ৩ (opens in a new tab)
ইনহেরিটেন্সের সঠিকতাSlitherSlither অনুশীলন ১ (opens in a new tab)
এক্সটার্নাল ইন্টারঅ্যাকশনManticore, Echidna
স্ট্যান্ডার্ড কনফরমেন্সSlither, Echidna, Manticoreslither-erc (opens in a new tab)

আপনার লক্ষ্যের উপর নির্ভর করে অন্যান্য ক্ষেত্রগুলো চেক করার প্রয়োজন হবে, তবে ফোকাস করার এই মূল ক্ষেত্রগুলো যেকোনো স্মার্ট কন্ট্রাক্ট সিস্টেমের জন্য একটি ভালো শুরু।

আমাদের পাবলিক অডিটগুলোতে ভেরিফাইড বা টেস্ট করা প্রপার্টির উদাহরণ রয়েছে। বাস্তব-বিশ্বের সিকিউরিটি প্রপার্টিগুলো রিভিউ করতে নিচের রিপোর্টগুলোর Automated Testing and Verification সেকশনগুলো পড়ার কথা বিবেচনা করুন:

পেজ সর্বশেষ আপডেট: ২২ অক্টোবর, ২০২৫

এই টিউটোরিয়ালটি কি সহায়ক ছিল?