در دنیای تکنولوژی، بلاکچین را با وعده «تغییرناپذیری» و «امنیت بینظیر» میشناسند. بسیاری تصور میکنند چون دادهها در بلاکچین رمزنگاری میشوند و هیچ نهاد مرکزی آنها را کنترل نمیکند، پس همهچیز در برابر هک مصون است. اما حقیقتِ تلخِ بازار کریپتوکارنسی و دیفای (DeFi) چیز دیگری را نشان میدهد. سالانه میلیاردها دلار دارایی دیجیتال به دلیل باگهای نرمافزاری در قراردادهای هوشمند به یغما میرود و امنیت قراردادهای هوشمند را زیر سوال میبرد.
در دنیای بلاکچین، مفهومی به نام «کد، قانون است» (Code is Law) وجود دارد. این یعنی اگر شما در کدنویسی یک قرارداد هوشمند اشتباه کنید، آن اشتباه به بخشی از قانونِ غیرقابل تغییرِ آن شبکه تبدیل میشود و هکرها میتوانند با استناد به همان کد، تمام موجودی را تخلیه کنند. در این مقاله، لایههای امنیتی بلاکچین را کالبدشکافی میکنیم، چالشهای مرگبار قراردادهای هوشمند را میبینیم و بررسی میکنیم که چگونه میتوانیم از این قلعههای دیجیتال محافظت کنیم.
تفاوت امنیت بلاکچین و امنیت قرارداد هوشمند
پیش از هر چیز، باید دو مفهوم را از هم جدا کنیم. اغلب مردم شکستِ یک پروژه را به معنای شکستِ بلاکچین میدانند، در حالی که این دو لایه کاملاً متفاوت هستند:
1. امنیت لایه شبکه (Blockchain Security): این بخش مربوط به زیرساخت است. هک کردن خودِ شبکه اتریوم یا بیتکوین تقریباً غیرممکن است، زیرا نیاز به حمله ۵۱ درصد و قدرت پردازشی عظیمی دارد.
2. امنیت لایه اپلیکیشن (Smart Contract Security): اینجاست که فاجعه رخ میدهد. قرارداد هوشمند، کدی است که روی بلاکچین اجرا میشود. اگر برنامهنویس در نوشتن این کد دقت نکند، بلاکچینِ امن، یک کدِ ناامن را با کمال میل اجرا میکند!
بیشتر هکهایی که در اخبار میشنوید، مربوط به لایه دوم است. بلاکچین مثل یک گاوصندوق فولادی است؛ اما قرارداد هوشمند، قفلی است که شما روی آن نصب میکنید. اگر قفل خراب باشد، استحکام گاوصندوق فایدهای ندارد.

بزرگترین چالشها و باگهای قراردادهای هوشمند
هکرها به دنبال پیچیدگی هستند. هرچه یک قرارداد هوشمند عملکردهای بیشتری داشته باشد، احتمال وجود حفره در آن بیشتر میشود. بیایید با هم معروفترین تکنیکهای نفوذ را بررسی کنیم:
۱. حمله بازگشتی (Reentrancy Attack)؛ کابوس همیشگی
این حمله مشهورترین روش هک در تاریخ اتریوم است که باعث فروپاشی پروژه بزرگ The DAO شد. در این روش، هکر با استفاده از یک قرارداد مخرب، تابعی را در قرارداد هدف فراخوانی میکند که وظیفه پرداخت وجه را دارد.
نکته اینجاست: قبل از اینکه قرارداد اصلی بتواند موجودی هکر را بهروزرسانی کند (کم کند)، هکر دوباره دستور برداشت را صادر میکند. این چرخه آنقدر تکرار میشود تا کیف پول قرارداد کاملاً تخلیه شود. هکر در واقع از سرعتِ پایین بهروزرسانیِ وضعیت در کد سوءاستفاده میکند.
۲. دستکاری اوراکلها (Oracle Manipulation)
قراردادهای هوشمند برای دانستن قیمت ارزها در دنیای واقعی به «اوراکل» نیاز دارند. اوراکل مثل یک پل ارتباطی است. هکرها با استفاده از «وامهای آنی» (Flash Loans)، ناگهان حجم عظیمی از یک ارز را در یک صرافی غیرمتمرکز میخرند تا قیمت را به صورت کاذب بالا ببرند. اوراکلِ سادهلوح این قیمتِ غلط را به قرارداد هوشمند گزارش میدهد و هکر با قیمت ساختگی، داراییهای دیگر را از قرارداد خارج میکند.
۳. خطاهای منطقی و دسترسی (Access Control)
گاهی برنامهنویس فراموش میکند که دسترسی به توابع حساس (مثل تغییر مالکیت قرارداد یا برداشت وجه) را فقط به «ادمین» محدود کند. در این حالت، هر کاربری در شبکه میتواند خودش را ادمین معرفی کند و کلیدهای قلعه را به دست بگیرد.
۴. سرریز اعداد (Integer Overflow & Underflow)
در نسخههای قدیمی زبان برنامهنویسی سالیدیتی (Solidity)، اگر از حداکثر ظرفیت عددی یک متغیر فراتر میرفتید، عدد به جای بزرگتر شدن، به صفر یا یک عدد بسیار کوچک برمیگشت. هکرها با محاسبات ریاضی کاری میکردند که موجودی حسابشان از نظر سیستم به بینهایت تبدیل شود یا بدهیشان صفر گردد.

چرا تأمین امنیت در بلاکچین تا این حد دشوار است؟
توسعهدهندگان نرمافزارهای معمولی (مثل اپلیکیشن موبایل) عادت کردهاند که «سریع بسازند و بعداً باگها را رفع کنند». اما در بلاکچین، این استراتژی یک خودکشی مالی است.
- برگشتناپذیری: وقتی کدی روی بلاکچین مستقر (Deploy) شد، دیگر نمیتوانید آن را به راحتی تغییر دهید یا دکمه استپ را بزنید.
- شفافیت مطلق: کد شما برای همه (از جمله هکرها) قابل مشاهده است. آنها میتوانند روزها وقت بگذارند و کد شما را خط به خط برای پیدا کردن یک روزنه اسکن کنند.
- پیچیدگی تعاملات: قراردادها با هم تعامل دارند. ممکن است قرارداد شما به تنهایی امن باشد، اما وقتی با یک قرارداد دیگر (مثل یک صرافی) ترکیب میشود، یک آسیبپذیری جدید متولد شود.

راهکارهای حفاظتی؛ چگونه امنیت قرارداد هوشمند را تضمین کنیم؟
برای داشتن یک پروژه پایدار، امنیت نباید یک بخش جانبی باشد؛ امنیت باید در قلب فرآیند توسعه قرار بگیرد. متخصصان از راهکارهای زیر برای محافظت از داراییها استفاده میکنند:
۱. حسابرسی امنیتی (Security Audit) توسط شرکتهای ثالث
هرگز نباید به چشمهای خودتان اعتماد کنید. شرکتهای تخصصی حسابرسی (مثل CertiK یا OpenZeppelin) کد شما را خط به خط بررسی میکنند. آنها با استفاده از روشهای دستی و ابزارهای خودکار، سناریوهای مختلف حمله را روی قرارداد شما شبیهسازی میکنند. داشتن گزارش حسابرسی، اولین شرط اعتماد کاربران به یک پروژه است.
۲. استفاده از کتابخانههای استاندارد
چرا چرخ را دوباره اختراع کنیم؟ مجموعههایی مثل OpenZeppelin کدهای تست شده و امنی را برای عملکردهای رایج (مثل توکنهای ERC-20) فراهم کردهاند. استفاده از این کدهای استاندارد، احتمال خطاهای ابتدایی را به شدت کاهش میدهد.
۳. اجرای برنامههای پاداش باگ (Bug Bounty)
هکرهای کلاهسفید را به خدمت بگیرید! با تعیین پاداشهای مالی بزرگ (گاهی تا چندین میلیون دلار)، هکرها را تشویق کنید که به جای دزدیدن موجودی، باگ را به شما گزارش دهند. این کار بسیار ارزانتر از یک هک واقعی تمام میشود. برای اطلاعات بیشتر مطلب «باگ بانتی چیست؟» را مطالعه کنید.
۴. استفاده از سیستمهای چندامضایی (Multi-Sig)
اجازه ندهید یک نفر به تنهایی قدرت جابهجایی مبالغ کلان را داشته باشد. با استفاده از کیف پولهای چندامضایی (مثل Gnosis Safe)، هر تراکنش حساس نیاز به تأیید چندین فرد معتبر دارد. این کار خطرِ «کلید در دست یک نفر» یا هک شدن سیستمِ ادمین را از بین میبرد.
۵. مکانیزمهای توقف اضطراری (Circuit Breakers)
در طراحی قرارداد، تابعی به نام «مکانیزم توقف» بگنجانید. اگر سیستم رفتارهای مشکوکی نشان داد (مثلاً خروج ناگهانی حجم زیادی از ارز)، ادمین یا یک سیستم خودکار بتواند فعالیتهای قرارداد را موقتاً متوقف کند تا بررسیهای لازم انجام شود.

نقش تأیید رسمی (Formal Verification) در امنیت مطلق
یکی از پیشرفتهترین متدهای امنیتی، تأیید رسمی است. در این روش، به جای اینکه فقط کد را تست کنیم، از منطق ریاضی برای اثباتِ اینکه «کد دقیقاً همان کاری را انجام میدهد که باید انجام دهد» استفاده میکنیم. این روش مشابه همان تکنولوژیهایی است که در ساخت نرمافزارهای هواپیما یا تجهیزات پزشکی حساس استفاده میشود. اگرچه این کار پرهزینه و زمانبر است، اما برای قراردادهایی که با صدها میلیون دلار سرمایه سر و کار دارند، یک ضرورت محسوب میشود.

نتیجهگیری: امنیت یک مقصد نیست، یک فرآیند است
بلاکچین دنیای وحشی و بدون قانونی است که در آن اشتباهات، تاوان سنگینی دارند. قراردادهای هوشمند پتانسیل این را دارند که سیستمهای مالی جهان را متحول کنند، اما این تنها زمانی ممکن است که امنیت بر سرعتِ توسعه غلبه کند. چالشهای امنیتی در بلاکچین مدام در حال تغییر هستند. هکرها هر روز روشهای هوشمندانهتری ابداع میکنند و ما نیز باید ابزارهای دفاعی خود را ارتقا دهیم. به عنوان یک توسعهدهنده یا سرمایهگذار، همیشه به یاد داشته باشید: در دنیای غیرمتمرکز، هیچ بانکی وجود ندارد که تراکنش اشتباه شما را برگرداند. پس قبل از هر اقدامی، امنیت را در اولویت اول، دوم و سوم قرار دهید.
آینده بلاکچین در گروِ کدهای بینقص و فرهنگِ «امنیتمحور» است. بیایید با رعایت استانداردهای جهانی، این تکنولوژی را به فضایی امن برای همه تبدیل کنیم.





