تصور کنید یک دستگاه فروش خودکار شیشه‌ای در مرکز شهر وجود دارد که داخل آن پر از شمش‌های طلاست. این دستگاه هیچ نگهبانی ندارد و تنها محافظ آن، کدهای کامپیوتری و مکانیزم‌های داخلی‌اش هستند. حال تصور کنید که دفترچه راهنمای فنی و نقشه دقیق ساخت این دستگاه نیز به صورت عمومی روی بدنه آن چسبانده شده است! هر کسی، از یک عابر کنجکاو گرفته تا یک سارق حرفه‌ای، می‌تواند ساعت‌ها به این نقشه نگاه کند تا شاید یک پیچ شل یا یک راه نفوذ پیدا کند. این دقیقاً وضعیت قرارداد هوشمند (Smart Contract) در دنیای بلاکچین است.

قراردادهای هوشمند، برنامه‌هایی هستند که روی بلاکچین اجرا می‌شوند و میلیاردها دلار سرمایه را مدیریت می‌کنند. آن‌ها قرار بود جایگزین اعتماد به انسان شوند، اما خیلی زود مشخص شد که اعتماد به کد هم خطرات خودش را دارد. اگر در یک قرارداد سنتی کاغذی اشتباهی رخ دهد، می‌توان با وکیل و دادگاه آن را حل کرد. اما در بلاکچین، وقتی هکر یک حفره امنیتی پیدا کند و پول را برداشت کند، هیچ پلیس، بانک یا دکمه بازگشتی وجود ندارد. آن پول برای همیشه رفته است.

در این مقاله، کلاه سفید هکرهای اخلاقی را بر سر می‌گذاریم و به دنیای زیرین امنیت سایبری در بلاکچین می‌رویم. بررسی می‌کنیم که چرا این قراردادها اینقدر آسیب‌پذیرند و 5 روش عملی برای جلوگیری از هک را که توسعه‌دهندگان و سرمایه‌گذاران باید بدانند، تشریح می‌کنیم. اگر نگران دارایی‌های دیجیتال خود هستید و می‌خواهید بدانید چگونه یک قرارداد هوشمند ایمن داشته باشید، این مطلب برای شماست.

آنچه باید بدانید:

  • طبیعت متن‌باز (Open Source) بودن اکثر پروژه‌های بلاکچینی مانند یک شمشیر دو لبه عمل می‌کند؛ از طرفی باعث شفافیت می‌شود و از طرف دیگر، تمام منطق و کدهای امنیتی را در اختیار هکرها قرار می‌دهد تا با حوصله به دنبال باگ بگردند.
  • گزارش‌های امنیتی نشان می‌دهند که بسیاری از سرقت‌های بزرگ نه به خاطر ضعف بلاکچین (مثل شبکه اتریوم)، بلکه به خاطر اشتباهات انسانی در کدنویسی قراردادهای هوشمند و عدم انجام تست‌های امنیتی (Audit) رخ داده‌اند.
  • استفاده از کتابخانه‌های کد استاندارد و تست‌شده (مانند OpenZeppelin) به جای نوشتن کد از صفر، یکی از موثرترین روش‌ها برای کاهش خطای انسانی و جلوگیری از حفره‌های امنیتی رایج است.
  • مفهوم «تاییدیه نامحدود» (Unlimited Allowance) در کیف پول‌ها یکی از بزرگترین ریسک‌ها برای کاربران است؛ جایی که شما ناآگاهانه به یک قرارداد اجازه می‌دهید هر زمان که خواست، تمام موجودی تتر یا ارز شما را برداشت کند.
  • ابزارهای مانیتورینگ آن‌چین می‌توانند رفتارهای مشکوک را قبل از نهایی شدن تراکنش تشخیص دهند و با سیستم‌های «توقف اضطراری»، جلوی تخلیه کامل استخرهای نقدینگی را بگیرند.

چرا قراردادهای هوشمند هدف هکرها هستند؟

برای درک خطر، ابتدا باید بدانید که چرا هکرها عاشق قرارداد هوشمند هستند. در سیستم بانکی سنتی، برای دزدی از بانک باید از سیستم‌های امنیتی فیزیکی، دوربین‌ها، نگهبانان و سیستم‌های ردیابی پلیس عبور کنید. اما در دیفای (DeFi):

  1. شفافیت کامل (Open Source): کد منبع اکثر پروژه‌ها در سایت‌هایی مثل GitHub یا Etherscan موجود است. هکر نیازی به نفوذ به سرور ندارد؛ او کد را دانلود می‌کند، در خانه قهوه می‌خورد و ماه‌ها روی پیدا کردن یک خط کد اشتباه کار می‌کند.
  2. ارزش بالا: قراردادهای هوشمند گاهی میلیاردها دلار نقدینگی را در خود قفل کرده‌اند (Total Value Locked). یک باگ کوچک می‌تواند کلید گنجینه‌ای 100 میلیون دلاری باشد.
  3. تراکنش‌های غیرقابل بازگشت: همانطور که گفتیم، در بلاکچین هیچ مدیر عاملی وجود ندارد که تراکنش دزدیده شده را برگرداند.

5 روش عملی برای جلوگیری از هک قرارداد

اگر توسعه‌دهنده هستید یا می‌خواهید پروژه‌ای را برای سرمایه‌گذاری ارزیابی کنید، این 5 ستون اصلی امنیت را باید چک کنید.

1. استفاده از قراردادهای تست شده و استاندارد

چرخ را دوباره اختراع نکنید! یکی از شایع‌ترین دلایل هک، غرور برنامه‌نویسان است که سعی می‌کنند کدهای پیچیده ریاضی را خودشان از صفر بنویسند.

  • راهکار: استفاده از کتابخانه‌های استانداردی مانند OpenZeppelin. این کدها توسط هزاران پروژه استفاده شده و بارها تست شده‌اند.
  • تشبیه: فرض کنید می‌خواهید خانه بسازید. آیا خودتان سعی می‌کنید قفل در را با ذوب کردن فلز بسازید؟ خیر، شما یک قفل استاندارد و ایمن از بازار می‌خرید. در کدنویسی هم استفاده از ماژول‌های آماده و امن، عقلانی‌تر است.

2. بازبینی کد و تست امنیتی (Audit)

هیچ پروژه جدی نباید بدون Audit (ممیزی امنیتی) راه اندازی شود. Audit یعنی یک شرکت تخصصی امنیت سایبری (مانند CertiK یا Hacken)، کد شما را خط به خط بررسی کند تا باگ‌ها را پیدا کند.

  • فرآیند: این شرکت‌ها سعی می‌کنند خودشان پروژه را هک کنند (تست نفوذ) و اگر موفق شدند، راه نفوذ را به تیم سازنده گزارش می‌دهند تا بسته شود.
داشتن تیک سبز Audit به معنای امنیت 100 درصد نیست. Audit فقط نشان می‌دهد که کدهای رایج و خطاهای شناخته شده بررسی شده‌اند. بسیاری از پروژه‌های هک شده (مانند اویلر فایننس) چندین Audit داشتند، اما هکرها روش‌های جدیدی ابداع کردند که حسابرسان ندیده بودند.

3. محدود کردن دسترسی‌ها و مجوزها

در بسیاری از قراردادها، توابعی وجود دارد که فقط مالک (Owner) باید به آن‌ها دسترسی داشته باشد (مثل تابع ضرب سکه جدید یا توقف برداشت).

  • ریسک: اگر هکر بتواند به کلید خصوصی مالک دسترسی پیدا کند (مثلاً با فیشینگ کامپیوتر سازنده)، می‌تواند پروژه را نابود کند.
  • راهکار: استفاده از کیف پول‌های چندامضایی (Multi-Sig). یعنی برای انجام کارهای حساس، به جای 1 نفر، باید مثلاً 3 نفر از 5 نفرِ تیم مدیریت امضا کنند. این کار ریسک قراردادهای هوشمند را در برابر خطای انسانی یا خیانت داخلی کاهش می‌دهد.

4. استفاده از ابزارهای مانیتورینگ و هشدار

هک معمولاً در یک لحظه اتفاق نمی‌افتد. گاهی هکر ابتدا تست‌های کوچکی انجام می‌دهد.

  • ابزارها: پلتفرم‌هایی مانند Forta یا Tenderly شبکه را 24 ساعته رصد می‌کنند. اگر یک تراکنش عجیب (مثلاً برداشت ناگهانی مقدار زیادی پول) رخ دهد، سیستم هشدار می‌دهد یا حتی می‌تواند به صورت خودکار قرارداد را متوقف (Pause) کند تا بررسی انجام شود.

5. آموزش و رعایت بهترین شیوه‌های توسعه

امنیت یک محصول نیست، یک فرآیند است. توسعه‌دهندگان باید دائماً در مورد جدیدترین روش‌های هک (مثل Reentrancy Attack یا Flash Loan Attack) مطالعه کنند.

  • مثال: حمله Reentrancy (ورود مجدد) زمانی رخ می‌دهد که هکر تابعی را صدا می‌زند که قبل از اینکه موجودی حسابش صفر شود، دوباره پول برداشت می‌کند. این قدیمی‌ترین باگ اتریوم است که هنوز هم قربانی می‌گیرد.

آناتومی حملات رایج: شناخت دشمن برای دفاع بهتر

برای اینکه بتوانید یک قلعه (قرارداد هوشمند) ایمن بسازید، باید بدانید مهاجمان از چه سلاح‌هایی استفاده می‌کنند. هکرها معمولاً از روش‌های خلاقانه و پیچیده‌ای استفاده می‌کنند که فراتر از شکستن یک رمز عبور ساده است. در اینجا 3 مورد از مخرب‌ترین و رایج‌ترین تکنیک‌های حمله در دیفای را کالبدشکافی می‌کنیم:

1. حمله وام سریع (Flash Loan Attack) و دستکاری قیمت

در بانکداری سنتی، برای وام گرفتن نیاز به وثیقه دارید. اما در دیفای، می‌توانید میلیون‌ها دلار وام بگیرید بدون اینکه حتی 1 دلار وثیقه داشته باشید، به شرطی که وام را در همان تراکنش (در چند ثانیه) پس بدهید.

  • مکانیسم حمله: هکر 100 میلیون دلار وام سریع می‌گیرد. با این پول عظیم، به یک صرافی غیرمتمرکز (DEX) کم‌حجم هجوم می‌برد و قیمت یک توکن خاص را به صورت مصنوعی بالا می‌برد. سپس به یک پلتفرم وام‌دهی دیگر می‌رود که قیمت‌ها را از همان صرافی می‌خواند. پلتفرم دوم فریب می‌خورد و فکر می‌کند آن توکن واقعاً گران شده است و به هکر اجازه می‌دهد وام سنگینی برداشت کند. هکر وام سریع اول را پس می‌دهد و با سود حاصل فرار می‌کند.
  • دفاع: استفاده از اوراکل‌های غیرمتمرکز (مانند Chainlink) که قیمت را از منابع مختلف می‌گیرند، نه فقط از یک صرافی خاص. این کار باعث می‌شود دستکاری قیمت در یک جا، کل سیستم را فریب ندهد.

2. فرانت‌رانینگ (Front-Running) و حملات ساندویچی

این حمله قبل از تأیید تراکنش رخ می‌دهد. بلاکچین عمومی است؛ یعنی وقتی شما درخواستی برای خرید می‌فرستید، این درخواست ابتدا در اتاق انتظار (Mempool) قرار می‌گیرد تا ماینرها آن را تأیید کنند.

  • مکانیسم حمله: ربات‌های هکر (MEV Bots) اتاق انتظار را رصد می‌کنند. فرض کنید شما می‌خواهید مقدار زیادی توکن X بخرید (که باعث بالا رفتن قیمت می‌شود). ربات این را می‌بیند.
    1. ربات سریعاً با پرداخت کارمزد بالاتر، قبل از شما همان توکن را می‌خرد (قیمت بالا می‌رود).
    2. سپس تراکنش شما انجام می‌شود و شما توکن را گران‌تر می‌خرید (قیمت باز هم بالاتر می‌رود).
    3. ربات بلافاصله توکن‌هایش را به شما می‌فروشد و سود می‌کند. شما در میان دو سفارش ربات ساندویچ شده‌اید و ضرر کرده‌اید.
  • دفاع: تعیین حداکثر لغزش قیمت (Slippage Tolerance) پایین در هنگام معامله و استفاده از پلتفرم‌هایی که تراکنش‌ها را خصوصی ارسال می‌کنند (Private RPCs).

3. سرریز اعداد (Integer Overflow/Underflow)

این یک باگ ریاضی کلاسیک است که در قراردادهای قدیمی‌تر بسیار رایج بود.

  • مکانیسم حمله: فرض کنید یک کیلومترشمار ماشین فقط تا عدد 999 را نشان می‌دهد. اگر 1 کیلومتر دیگر بروید، عدد به 000 برمی‌گردد. در کدنویسی، اگر متغیری نتواند عدد بزرگتر را ذخیره کند، ممکن است ریست شود. هکرها از این باگ استفاده می‌کنند تا موجودی حسابشان را که باید کم شود، به عددی نجومی تبدیل کنند (چون عدد منفی در برخی متغیرها تعریف نشده و به ماکسیمم عدد مثبت تبدیل می‌شود).
  • دفاع: استفاده از نسخه‌های جدید زبان برنامه‌نویسی Solidity (نسخه 0.8.0 به بالا) که به صورت خودکار جلوی این خطاهای ریاضی را می‌گیرد.

4. فیشینگ قرارداد

گاهی اوقات قرارداد اصلی امن است، اما هکر یک قرارداد جعلی می‌سازد که ظاهری شبیه به قرارداد اصلی دارد.

  • مکانیسم حمله: هکر یک توکن با نام مشابه (مثلاً USDT جعلی) می‌سازد و آن را برای مدیران پروژه یا کاربران ارسال می‌کند (Airdrop). کدهای مخرب در این توکن پنهان شده‌اند که اگر کاربر سعی کند آن را بفروشد یا جابجا کند، به هکر اجازه دسترسی به کل کیف پول را می‌دهد.
  • دفاع: هرگز با توکن‌های ناشناس که ناگهان در کیف پولتان ظاهر می‌شوند تعامل نکنید و آدرس قراردادها را همیشه با مراجع رسمی (مثل CoinGecko) چک کنید.

نمونه‌های واقعی هک و درس‌های آموخته شده

برای درک بهتر جلوگیری از هک قرارداد، باید تاریخچه شکست‌ها را مرور کنیم.

  1. هک The DAO (سال 2016): این معروف‌ترین هک تاریخ اتریوم است. هکرها با استفاده از باگ Reentrancy توانستند 60 میلیون دلار اتر را سرقت کنند.
  • درس: این هک باعث شد اتریوم به دو شاخه (اتریوم و اتریوم کلاسیک) تقسیم شود و اهمیت حیاتی تست کد قبل از انتشار را به همه نشان داد.
  1. هک پل رونین (Ronin Bridge – سال 2022): در این هک عظیم 625 میلیون دلاری (مربوط به بازی Axie Infinity)، هکرها کد را هک نکردند! آن‌ها با مهندسی اجتماعی (Social Engineering) و ارسال فایل آلوده برای یکی از کارمندان، به کلیدهای خصوصی دسترسی پیدا کردند.
  • درس: امنیت فقط کد نیست؛ امنیت فیزیکی و آموزش پرسنل هم جزوی از امنیت قرارداد هوشمند محسوب می‌شود.

چگونه از سرمایه خود محافظت کنیم؟ راهنمای سرمایه گذاران

شما برنامه‌نویس نیستید، اما می‌خواهید سرمایه‌گذاری کنید. چگونه قرارداد هوشمند ایمن را تشخیص دهید و محافظت از سرمایه در قراردادهای بلاکچین را انجام دهید؟

1. بررسی وضعیت Audit

قبل از واریز پول به یک استخر نقدینگی، به سایت پروژه یا CoinMarketCap بروید و ببینید آیا توسط شرکت‌های معتبر (CertiK, SlowMist, Hacken) آدیت شده است یا خیر. اگر پروژه هیچ آدیتی ندارد، فرار کنید!

2. لغو دسترسی‌های قدیمی (Revoke Permissions)

وقتی در صرافی‌های غیرمتمرکز (DEX) معامله می‌کنید، معمولاً پیامی می‌آید: Allow Protocol to spend your USDT. اگر شما این دسترسی را روی Unlimited (نامحدود) بگذارید، آن قرارداد می‌تواند حتی 2 سال بعد هم کیف پول شما را خالی کند.

  • ابزار حیاتی: مرتباً به سایت Revoke.cash بروید، کیف پول خود را وصل کنید. سپس دسترسی سایت‌هایی که دیگر با آن‌ها کار ندارید را قطع کنید.

3. تنوع در سبد دارایی

هرگز تمام تخم‌مرغ‌ها را در یک سبد نگذارید. حتی امن‌ترین قراردادها هم ممکن است هک شوند. سرمایه خود را بین چندین پروتکل معتبر و کیف پول‌های سرد (سخت‌افزاری) تقسیم کنید.

بسیاری از کاربران نمی‌دانند که هک قرارداد هوشمند می‌تواند بدون دزدیده شدن کلید خصوصی رخ دهد. اگر شما به یک قرارداد مخرب مجوز دسترسی بدهید، هکر می‌تواند بدون نیاز به رمز عبور یا کلمات بازیابی شما، توکن‌هایتان را منتقل کند. این هکِ اجازه نام دارد.

آینده قراردادهای هوشمند: امنیت در حال پیشرفت

خبر خوب این است که تکنولوژی دفاعی هم پا به پای تکنولوژی تهاجمی رشد می‌کند. مثلا ابزارهای جدید مبتنی بر AI می‌توانند کدها را با سرعتی باورنکردنی اسکن و الگوهای پیچیده‌ای که چشم انسان نمی‌بیند را شناسایی کنند.

همچنین پروژه‌هایی مثل Nexus Mutual در حال ظهور هستند که قراردادهای هوشمند را بیمه می‌کنند. اگر شما در یک پروتکل سرمایه‌گذاری کنید و آن پروتکل هک شود، بیمه خسارت شما را پرداخت می‌کند. این گام بزرگی برای پذیرش عمومی دیفای است.

در آینده نزدیک، بیمه قرارداد هوشمند به یک استاندارد اجباری تبدیل خواهد شد. درست همانطور که خودرو بدون بیمه اجازه تردد ندارد، پروژه‌های دیفای هم بدون داشتن صندوق بیمه برای جبران خسارت کاربران در صورت هک، قادر به جذب سرمایه نخواهند بود.

جمع‌بندی

امنیت در دنیای بلاکچین یک مقصد نیست، بلکه یک مسیر دائمی است. روش‌های جلوگیری از هک قراردادهای هوشمند از کدنویسی استاندارد شروع می‌شود، با تست‌های سخت‌گیرانه ادامه می‌یابد و با هوشیاری سرمایه‌گذاران تکمیل می‌شود.

به یاد داشته باشید که در این فضا، شما بانک خودتان هستید. این جمله هم آزادی‌بخش است و هم ترسناک. آزادی‌بخش چون کسی نمی‌تواند حساب شما را مسدود کند، و ترسناک چون مسئولیت حفظ امنیت تمام دارایی بر دوش خودتان است. با رعایت نکاتی مثل بررسی آدیت‌ها، استفاده از ابزارهای لغو دسترسی و دوری از پروژه‌های ناشناس، می‌توانید ریسک را به حداقل برسانید و از مزایای این تکنولوژی انقلابی لذت ببرید.