دنیای ارزهای دیجیتال، با وجود تمام مزایا و نوآوریهایی که بههمراه دارد، همواره با چالشهای امنیتی جدیدی روبرو است. با افزایش پذیرش و ارزش این داراییها، مجرمان سایبری نیز روشهای خود را برای سرقت از کاربران پیچیدهتر کردهاند. دو مورد از جدیدترین و موذیانهترین این روشها، حمله انتقال صفر (Zero-Transfer Attack) و مسمومیت آدرس (Address Poisoning) هستند.
اگرچه این دو حمله در نگاه اول شباهتهایی با یکدیگر دارند و هر دو از بیدقتی و عادتهای کاربران در کپی و پیست کردن آدرسهای کیف پول سوءاستفاده میکنند، اما در مکانیزم اجرا و هدف نهایی تفاوتهای کلیدی با یکدیگر دارند. در این مقاله از میهن بلاکچین به بررسی عمیق حمله انتقال صفر، تشریح جزئیات فنی آن، مقایسه دقیق با مسمومیت آدرس و ارائه راهکارهای مقابلهای برای حفظ امنیت داراییهای دیجیتال میپردازیم.
حمله انتقال صفر (Zero-Transfer Attack) چیست؟
حمله انتقال صفر که گاهی اوقات با نام «کلاهبرداری مبلغ صفر» نیز شناخته میشود، تکنیک فریبکارانهای است که در آن هکر یک تراکنش با مبلغ صفر از توکنی خاص (معمولاً یک توکن بیارزش یا جعلی) به کیف پول قربانی ارسال میکند. هدف اصلی این حمله، فریب دادن قربانی برای کپی کردن آدرس کیف پول هکر از تاریخچه تراکنشهای خود و استفاده از آن در یک تراکنش واقعی در آینده است.
مکانیزم حمله چگونه کار میکند؟
این حمله بر یک ویژگی رایج در بسیاری از بلاکچینها و کیف پولهای دیجیتال استوار بوده که آن هم ایجاد توکنهای جدید است. هکرها با بهرهگیری از این قابلیت، مکانیزمی چند مرحلهای و هوشمندانه را برای فریب قربانی طراحی میکنند که با شناسایی هدف آغاز شده و با سوءاستفاده از یک تراکنش جعلی به اوج خود میرسد. این مکانیزم به گونهای طراحی شده که اعتماد کاربر به تاریخچه تراکنشهایش را علیه خودش به کار گیرد.
نحوه اجرای تراکنش با مبلغ صفر برای توکنهای جعلی
- شناسایی قربانی: هکرها با تحلیل بلاکچین، آدرسهای فعال و ثروتمند را شناسایی میکنند. این آدرسها معمولاً متعلق به کاربرانی هستند که تراکنشهای مکرر و با حجم بالا انجام میدهند.
- ایجاد توکن جعلی و آدرس مشابه: هکر یک آدرس کیف پول جدید ایجاد میکند که از نظر ظاهری شباهت زیادی به آدرس یکی از طرفهای معامله اخیر قربانی دارد. این شباهت معمولاً در چند کاراکتر ابتدایی (Prefix) و چند کاراکتر انتهایی (Suffix) آدرس ایجاد میشود. به این آدرسها، آدرسهای سفارشی یا «Vanity Address» گفته میشود. ابزارهای خاصی وجود دارند که میتوانند میلیونها آدرس را در ثانیه تولید کنند تا آدرسی با شباهت مورد نظر پیدا شود.
- آدرس واقعی که قربانی با آن تعامل داشته:
0xAb5801a7D398351b8bE11C439e05C5B3259aeC9B
- آدرس جعلی هکر:
0xAb5801a7... (کاراکترهای متفاوت در وسط) ...aeC9B
- آدرس واقعی که قربانی با آن تعامل داشته:
- ایجاد توکن فریبنده: هکر یک توکن جدید (مثلاً با استاندارد ERC-20) با نام و نمادی مشابه یکی از توکنهای معتبر (مانند USDT, USDC یا ETH) ایجاد میکند. این کار باعث میشود قربانی در تاریخچه تراکنشهای خود تصور کند که یک تراکنش قانونی دریافت کرده است.
- اجرای تراکنش با مبلغ صفر: هکر با استفاده از یک تابع خاص در قرارداد هوشمند توکن جعلی خود (معمولاً تابعی مانند
transferFrom
یا یک تابع دستکاری شده)، تراکنشی با مبلغ صفر از این توکن جعلی را از آدرس قربانی به آدرس دیگری (که میتواند خود هکر یا یک آدرس بیربط باشد) ثبت میکند. نکته کلیدی این است که تراکنش در بلاکچین بهگونهای ثبت میشود که گویی مبدأ آن آدرس قربانی بوده است، در حالی که در واقعیت، قربانی هیچ اقدامی انجام نداده و هیچ کلید خصوصی را امضا نکرده است. این مکانیزم از طریق دستکاری رویدادهای (Events) قرارداد هوشمند امکانپذیر است. در نتیجه، وقتی قربانی تاریخچه تراکنشهای خود را در بلاکچین اکسپلورر (مانند Etherscan) بررسی کند، یک تراکنش خروجی با مبلغ صفر از آدرس خود به آدرس جعلی هکر مشاهده میکند. - مرحله انتظار و فریب: هکر منتظر میماند تا قربانی در آینده قصد ارسال وجه به آدرسی را داشته باشد که قبلاً با آن تراکنش داشته است. بسیاری از کاربران بهجای وارد کردن دستی آدرس، به تاریخچه تراکنشهای خود مراجعه کرده و آخرین آدرس مقصد را کپی میکنند. از آنجایی که تراکنش صفر دلاری جعلی، جدیدترین تراکنش در لیست بهنظر میرسد و آدرس هکر نیز بسیار شبیه به آدرس واقعی است، قربانی بدون بررسی دقیق، آدرس جعلی را کپی کرده و داراییهای خود را به آن ارسال میکند.
نحوه اجرای تراکنش با مبلغ صفر برای توکنهای واقعی
این حمله با توکنهای واقعی هم قابل انجام است. چطور؟
۱. شناسایی قراردادهای دارای تابع TransferFrom
برخی قراردادهای توکن از جمله USDC دارای تابعی به نام TransferFrom
هستند که به افراد امکان میدهد توکنها را از یک آدرس دیگر به آدرس دلخواه منتقل کنند، مشروط بر آنکه صاحب آدرس، پیشتر اجازه لازم (Allowance) را به آنها داده باشد و مقدار تراکنش نیز کمتر یا مساوی Allowance تعیینشده باشد.
۲. سوءاستفاده از نوع داده uint256 در Allowance
در قراردادهای ERC20، مقدار Allowance در صورت تعیین نشدن، بهطور پیشفرض صفر در نظر گرفته میشود. بهدلیل نوع داده uint256، اگر تراکنشی با مبلغ صفر ارسال شود، شرط بررسی مقدار مجاز برقرار میماند، زیرا در این حالت Allowance برابر با صفر و مبلغ تراکنش نیز صفر است و شرط Allowance ≥ Amount برقرار خواهد بود.
۳. امکان اجرای تراکنش از هر آدرس بدون نیاز به Approval یا Private Key
مهاجم یا اسکمِر با فراخوانی تابع TransferFrom
و تعیین مبلغ صفر، میتواند تراکنشی را از هر آدرسی ثبت کند، بدون اینکه به کلید خصوصی یا Approval قبلی مالک آن آدرس نیاز داشته باشد. این تراکنش بهعنوان یک انتقال رسمی در بلاکچین ثبت میشود.
۴. ساختار کلی حمله
- مهاجم یک قرارداد هوشمند حاوی تابع
TransferFrom
را فراخوانی میکند. - پارامترهای تابع بهصورت زیر تنظیم میشوند:
- From: آدرس قربانی
- To: آدرس موردنظر مهاجم (که ظاهری شبیه به آدرس واقعی مقصد دارد)
- Amount: صفر
۵. هدف حمله
هدف اصلی این حمله، انتقال مستقیم توکنها نیست، بلکه ثبت یک تراکنش جعلی با مبلغ صفر در تاریخچه تراکنشهای قربانی است. این تراکنش به آدرسی ارسال میشود که از نظر ظاهر، شباهت زیادی به آدرس واقعی گیرنده دارد. در نتیجه، اگر قربانی برای انجام تراکنشهای بعدی به تاریخچه کیف پول یا بلاک اکسپلورر خود مراجعه کند، ممکن است آدرس جعلی را بهاشتباه کپی کرده و توکنهای خود را به آدرس مهاجم ارسال کند.
۶. نمونه شبهکد
solidityCopyEdittokenContract.transferFrom(victimAddress, fakeAddress, 0);
۷. محدودیتهای حمله
- این حمله صرفاً برای مبالغ صفر قابل اجرا است.
- امکان انتقال واقعی توکنها بدون Allowance وجود ندارد.
- بهدلیل طراحی استاندارد ERC20، اکثر توکنها در برابر این حمله آسیبپذیر هستند؛ مگر آنکه بررسیهای اضافی روی تراکنشهای مبلغ صفر در کد قرارداد اعمال شده باشد.
چرا این حمله مؤثر است؟
اثربخشی این حمله از ترکیبی از عوامل فنی و روانشناختی نشأت میگیرد که اعتماد کاربر را هدف قرار میدهد. هکر با درک عادات رایج کاربران و بهرهبرداری از پیچیدگیهای فنی بلاکچین، شرایطی را فراهم میکند که قربانی ناخواسته در دام او گرفتار شود.
- اعتماد به تاریخچه تراکنش: کاربران بهطور طبیعی به تاریخچه ثبت شده در کیف پول یا بلاکچین اکسپلورر خود اعتماد میکنند.
- عجله و بیدقتی: در دنیای رمزارزها، بسیاری از کاربران آدرسها را بهطور کامل بررسی نمیکنند و تنها به چند کاراکتر اول و آخر نگاهی میاندازند.
- پیچیدگی فنی: درک اینکه چگونه یک تراکنش میتواند بدون امضای کاربر از طرف او ثبت شود (از طریق دستکاری رویدادهای قرارداد هوشمند) برای بسیاری از کاربران دشوار است و باعث میشود آن را یک تراکنش عادی تلقی کنند.
مسمومیت آدرس (Address Poisoning) چیست؟
مسمومیت آدرس یک روش مشابه اما با مکانیزمی سادهتر است. در این حمله، هکر یک تراکنش با مبلغ بسیار ناچیز، نه لزوماً صفر از یک ارز دیجیتال واقعی (مانند ۰.۰۰۰۱ اتر) به کیف پول قربانی ارسال میکند. هدف این حمله نیز مانند حمله انتقال صفر است، یعنی وارد کردن آدرس هکر در تاریخچه تراکنشهای قربانی تا در آینده به اشتباه مورد استفاده قرار گیرد.
مکانیزم حمله چگونه کار میکند؟
برخلاف حمله انتقال صفر که از قراردادهای هوشمند پیچیده برای جعل تراکنش خروجی استفاده میکند، مکانیزم مسمومیت آدرس مستقیمتر است. این حمله شامل یک تراکنش ورودی ساده است که تاریخچه کیف پول قربانی را با یک آدرس مخرب «مسموم» یا آلوده میسازد.
- شناسایی و ایجاد آدرس مشابه: این مرحله دقیقاً مشابه حمله انتقال صفر است. هکر یک آدرس «سفارشی» با ابتدا و انتهای مشابه آدرسهایی که قربانی با آنها تعامل دارد، ایجاد میکند.
- ارسال تراکنش با مبلغ ناچیز: هکر از کیف پول خود (آدرس جعلی) یک تراکنش بسیار کوچک از یک ارز معتبر (مانند اتریوم یا یک استیبلکوین) به آدرس قربانی ارسال میکند.
- آلوده کردن تاریخچه: این تراکنش در تاریخچه کیف پول قربانی بهعنوان یک تراکنش ورودی ثبت میشود. حال، لیست تراکنشهای قربانی شامل آدرسهای قانونی و همچنین آدرس جعلی هکر است.
- فریب و سرقت: زمانی که قربانی قصد دارد مبلغی را به یکی از آدرسهای قبلی خود ارسال کند، به تاریخچه مراجعه میکند. با دیدن آدرس مشابه هکر که بهدلیل شباهت ظاهری به راحتی با آدرس اصلی اشتباه گرفته میشود، آن را کپی کرده و داراییها را به مقصد اشتباهی میفرستد.
مقایسه دقیق: حمله انتقال صفر در برابر مسمومیت آدرس
اگرچه هدف نهایی هر دو حمله یکسان است (فریب کاربر برای ارسال دارایی به آدرس اشتباه)، تفاوتهای اساسی در مکانیزم اجرا و ظاهر آنها وجود دارد که درک آنها برای مقابله مؤثر ضروری است. این دو رویکرد، با وجود شباهت در هدف، از دو مسیر متفاوت برای رسیدن به آن استفاده میکنند.
ویژگی حمله انتقال صفر (Zero-Transfer Attack) مسمومیت آدرس (Address Poisoning) مبلغ تراکنش دقیقاً صفر مبلغ بسیار ناچیز اما غیر صفر
(مثلاً ۰.۰۰۰۱ اتر)نوع توکن معمولاً یک توکن جعلی و بیارزش که توسط هکر ایجاد شده است. معمولاً یک ارز دیجیتال واقعی و معتبر
(مانند ETH, BNB, MATIC)جهت تراکنش (در دید قربانی) یک تراکنش خروجی (OUT) از کیف پول قربانی به آدرس هکر به نظر میرسد. یک تراکنش ورودی (IN) از آدرس هکر به کیف پول قربانی است. مکانیزم فنی پیچیدهتر؛ با استفاده از دستکاری رویدادهای قرارداد هوشمند برای جعل مبدأ تراکنش.
قربانی هیچ تراکنشی را امضا نمیکند.سادهتر؛ یک تراکنش استاندارد و مستقیم از کیف پول هکر به کیف پول قربانی. هزینه برای هکر بسیار کم؛ فقط هزینه گس (Gas Fee) برای اجرای تابع قرارداد هوشمند. کمی بیشتر؛ هزینه گس به علاوه مبلغ ناچیزی که به قربانی ارسال میشود. ردیابی در بلاکچین اکسپلورر ممکن است پیچیدهتر باشد زیرا توکن به نحوی منتقل شده که باید جزئیات توابع قرارداد هوشمند بررسی شود. کاملاً شفاف؛ یک تراکنش ساده و قابل ردیابی است. تأثیر روانی میتواند ترسناکتر باشد، زیرا کاربر یک تراکنش خروجی از حساب خود میبیند که آن را انجام نداده و ممکن است فکر کند کیف پولش هک شده است. کمتر نگرانکننده است، زیرا دریافت مبالغ ناچیز (Dust) در کیف پولها امری نسبتاً رایج است.
جدول خلاصه تفاوتها:
بهطور خلاصه، تفاوت اصلی در فریب بصری و مکانیزم فنی است.
- حمله انتقال صفر قربانی را فریب میدهد تا فکر کند او یک تراکنش به آدرس هکر انجام داده است.
- مسمومیت آدرس تاریخچه تراکنشهای ورودی قربانی را با یک آدرس مخرب «مسموم» میکند.
این تفاوت ظریف اما مهم است، زیرا حمله انتقال صفر بهدلیل نمایش یک تراکنش «خروجی» که کاربر به خاطر نمیآورد، میتواند منجر به وحشت و تصمیمگیری عجولانهتر شود.
چگونه از خود در برابر این حملات محافظت کنیم؟
امنیت در دنیای کریپتو یک مسئولیت مشترک بین پلتفرمها و کاربران است. در حالی که کیف پولها و بلاکچین اکسپلوررها در تلاشند تا با برچسبگذاری آدرسهای مشکوک و توکنهای جعلی به کاربران کمک کنند، مسئولیت نهایی بر عهده خود کاربر است. با اتخاذ چند رویه امنیتی ساده اما حیاتی، میتوان بهطور چشمگیری ریسک قربانی شدن در برابر این حملات مهندسی اجتماعی را کاهش داد.
- بررسی دقیق و کامل آدرسها:
- هرگز و هرگز تنها به چند کاراکتر اول و آخر آدرس اکتفا نکنید. قبل از تأیید نهایی هر تراکنش، تمام کاراکترهای آدرس را بهدقت با آدرس مقصد اصلی مقایسه کنید. این مهمترین و مؤثرترین راه مقابله است.
- از ابزارهای مقایسه متن (Text Comparison Tools) آنلاین برای اطمینان از تطابق صد درصدی دو آدرس استفاده کنید.
- استفاده از دفترچه آدرس (Address Book):
- تقریباً تمام کیف پولهای معتبر (مانند MetaMask, Trust Wallet, Ledger Live) دارای قابلیت دفترچه آدرس هستند. آدرسهایی را که بهطور مکرر با آنها کار میکنید، با یک نام مشخص، مثلاً «صرافی بایننس من» یا «کیف پول سختافزاری دوستم» ذخیره کنید.
- هنگام ارسال وجه، بهجای کپی کردن از تاریخچه، آدرس را از دفترچه آدرس ذخیره شده خود انتخاب کنید. این کار احتمال خطا را بهشدت کاهش میدهد.
- انجام یک تراکنش آزمایشی (Test Transaction):
- برای تراکنشهای بزرگ و مهم، ابتدا یک مبلغ بسیار کوچک (مثلاً ۲ دلار) به آدرس مقصد ارسال کنید. پس از اطمینان از دریافت موفقیتآمیز آن توسط گیرنده، با خیال راحت مبلغ اصلی را ارسال کنید. این کار اگرچه کمی هزینه گس اضافی دارد، اما امنیت سرمایه شما را تضمین میکند.
- احتیاط در برابر توکنهای ناشناس:
- اگر توکن ناشناس یا عجیبی در کیف پول خود مشاهده کردید، با آن تعامل نداشته باشید. سعی نکنید آن را بفروشید یا انتقال دهید. بسیاری از این توکنها دارای قراردادهای هوشمند مخربی هستند که تعامل با آنها میتواند منجر به خالی شدن کیف پول شما (Approval Scam) شود. بهترین کار نادیده گرفتن آنهاست.
- استفاده از کیف پول سختافزاری (Hardware Wallet):
- کیف پولهای سختافزاری (مانند Ledger یا Trezor) یک لایه امنیتی فیزیکی اضافه میکنند. هر تراکنش باید بهصورت فیزیکی روی دستگاه تأیید شود و شما میتوانید آدرس کامل را روی صفحه نمایش امن دستگاه بررسی کنید. این مکانیزم، کپی و پیست کردن آدرس اشتباه را بسیار دشوارتر میکند.
- استفاده از سرویس نام اتریوم (ENS – Ethereum Name Service):
- سرویسهایی مانند ENS به کاربران اجازه میدهند تا بهجای آدرسهای طولانی و پیچیده هگزادسیمال، از نامهای دامنه قابل خواندن (مانند
vitalik.eth
) استفاده کنند. ارسال وجه به یک نام خوانا و به یاد ماندنی بسیار امنتر از کار با رشتههای طولانی از کاراکترها است.
- سرویسهایی مانند ENS به کاربران اجازه میدهند تا بهجای آدرسهای طولانی و پیچیده هگزادسیمال، از نامهای دامنه قابل خواندن (مانند
نتیجهگیری
حملات انتقال صفر و مسمومیت آدرس، نمونههای بارزی از تکامل تهدیدات در اکوسیستم ارزهای دیجیتال هستند. این حملات نه بر پایه شکستن الگوریتمهای رمزنگاری، بلکه بر اساس مهندسی اجتماعی و سوءاستفاده از روانشناسی و عادات انسانی بنا شدهاند. آنها به ما یادآوری میکنند که در دنیای غیرمتمرکز، مسئولیت امنیت داراییها بیش از هر زمان دیگری بر عهده خود ماست.
با افزایش آگاهی، رعایت بهداشت دیجیتال و استفاده از ابزارهای امنیتی موجود، میتوان بهطور مؤثری از این نوع کلاهبرداریها جلوگیری کرد. بهخاطر داشته باشید، در دنیای کریپتو، یک لحظه بیدقتی میتواند به قیمت از دست رفتن تمام سرمایه شما تمام شود. همیشه قبل از فشردن دکمه «تأیید»، بار دیگر همه چیز را بررسی کنید. تأیید کنید، سپس اعتماد کنید. این شعار باید سرلوحه تمام فعالیتهای شما در این فضای هیجانانگیز اما پرخطر باشد.