در ماههای اخیر، حملات فیشینگ با استفاده از تکنیک انتقال با ارزش صفر (Zero-Value Transfer) افزایش چشمگیری داشته است. این روش پیچیده، کاربران را فریب میدهد تا میلیونها دلار ارز دیجیتال را به آدرسهای کلاهبرداران ارسال کنند. در یکی از آخرین موارد، یک سرمایهگذار ۲.۵ میلیون دلار USDT را در کمتر از ۳ ساعت از دست داد.
در این مقاله، به بررسی چگونگی عملکرد این حمله، نمونههای واقعی و راهکارهای محافظت از خود میپردازیم.
🔍 حملات انتقال با ارزش صفر در کریپتو چیست؟
این نوع حمله، یک فیشینگ روی زنجیره (on-chain phishing) است که در آن کلاهبرداران از یک ترفند هوشمندانه برای فریب کاربران استفاده میکنند تا تایید قربانیان خود را با یک تراکنش به ارزش 0 بگیرند.
یک حمله فیشینگ موفق با انتقال صفر در 5 مرحله اتفاق میافتد:
- حمله کننده تراکنشهای روی زنجیره را زیر نظر میگیرد و یک قربانی انتخاب میکند.
- حمله کننده تراکنشهای ERC20 قربانی را تحلیل کرده و یک آدرس گیرنده از میان آنها انتخاب میکند.
- حمله کننده یک آدرس جعلی مشابه آدرس گیرنده تراکنش قبلی قربانی ایجاد میکند.
- حمله کننده یک تراکنش ویژه از طرف قربانی به آن آدرس جعلی منتشر میکند.
- قربانی آدرس جعلی را از طریق اکسپلورر بلاکچین یا کیف پول خود مشاهده میکند.
چرا این حمله کار میکند؟
متد transferFrom
در قراردادهای هوشمند ERC20 این امکان را فراهم میکند که یک آدرس دلخواه به عنوان فرستنده و گیرنده مشخص شود، به شرطی که فرستنده پیشتر اجازه (allowance) لازم را به حمله کننده داده باشد.
از آنجا که فرستنده واقعی (owner) هیچگاه به حمله کننده اجازه انتقال توکن نداده است، مقدار allowed[owner][msg.sender]
به صورت پیشفرض صفر خواهد بود.
تنها راهی که حمله کننده میتواند شرط require
را برآورده کند، تنظیم مقدار numTokens
به صفر است، که در نتیجه هیچ توکنی منتقل نمیشود، اما تراکنش در تاریخچه قربانی ثبت میگردد.
این تراکنش بیخطر به نظر میرسد، اما در واقع یک حملۀ فیشینگ هوشمندانه است که قربانی را فریب میدهد تا در آینده دارایی واقعی خود را به آدرس مهاجم ارسال کند.

کلاهبرداری فیشینگ انتقال با ارزش صفر معمولا روی چه شبکه های بلاکچینی اتفاق می افتد؟
این نوع کلاهبرداری بهطور گستردهای در شبکههای بلاکچینی که با ماشین مجازی اتریوم (EVM) سازگار هستند، مانند پالیگان و BSC (BEP-20) رخ میدهد.
📌 نمونه واقعی ضرر مالی به وسیله فیشینگ انتقال با ارزش صفر: از دست دادن ۲.۵ میلیون دلار در ۳ ساعت!
در یک مورد اخیر، یک سرمایهگذار ابتدا ۸۴۳,۰۰۰ دلار USDT و سپس ۱.۶ میلیون دلار دیگر را به آدرس کلاهبردار ارسال کرد، چون آدرس مهاجم در تاریخچه تراکنشهای او وجود داشت و آن را معتبر پنداشت.
یک قربانی در عرض تنها ۳ ساعت، با فریب دو حمله فیشینگ از نوع انتقال با ارزش صفر، ۲.۵ میلیون دلار استیبلکوین (USDT) از دست داد. این اتفاق نگرانیها درباره تکنیک مسمومسازی آدرس را افزایش داده است. طبق گزارش Cyvers، قربانی ابتدا ۸۴۳,۰۰۰ دلار USDT و سپس ۲.۶ میلیون دلار USDT را به آدرس کلاهبرداران ارسال کرد. این حملات با استفاده از روشی به نام انتقال با ارزش صفر انجام شد که نوعی فیشینگ پیشرفته در فضای بلاکچین محسوب میشود.
🛡️ چگونه از خود در برابر این حملات محافظت کنیم؟
برای جلوگیری از قربانی شدن در این کلاهبرداریها، این راهکارهای امنیتی را دنبال کنید:
۱. همیشه آدرس مقصد را دقیق بررسی کنید
- آدرسهای بلاکچین حساس به حروف بزرگ و کوچک هستند. حتی یک کاراکتر تغییر کرده میتواند به معنای از دست رفتن دارایی شما باشد.
- از ابزارهایی مانند Etherscan’s Inspector یا Tenderly برای تحلیل تراکنشهای مشکوک استفاده کنید.
۲. از لیست سفید آدرسها (Whitelist) استفاده کنید
- بسیاری از کیف پولها و صرافیها امکان ثبت آدرسهای مورد اعتماد را فراهم میکنند. با فعال کردن این قابلیت، فقط به آدرسهای تأییدشده میتوانید ارسال کنید.
۳. تراکنشهای با ارزش صفر را نادیده بگیرید
- اگر تراکنشی با مقدار ۰ توکن در تاریخچه خود دیدید، آن را نادیده بگیرید و هرگز به آن آدرس وجوه ارسال نکنید.
۴. از کیف پولهای با قابلیت تأیید تراکنش استفاده کنید
- برخی کیف پولها مانند MetaMask یا Ledger امکان نمایش کامل آدرس مقصد را دارند. همیشه قبل از تأیید نهایی، آدرس را چک کنید.
۵. هوشیاری در تعامل با قراردادهای هوشمند
- اگر یک DApp یا قرارداد هوشمند از شما خواست دسترسی نامحدود (Unlimited Approval) به کیف پول بدهید، بلافاصله رد کنید، چون ممکن است برای تخلیه داراییهای شما استفاده شود.
امنیت اولین اولویت است!
حملات انتقال با ارزش صفر، یکی از پیشرفتهترین روشهای فیشینگ در دنیای ارزهای دیجیتال است. با رعایت نکات امنیتی و دقت در هر تراکنش، میتوانید از داراییهای خود محافظت کنید.
🔹 هشدار: هرگز به تراکنشهای غیرمنتظره اعتماد نکنید و همیشه آدرسها را دوباره بررسی کنید!