در این مطلب از کیف پول، قرار است بررسی کنیم که حمله فینی چیست، چگونه رخ میدهد، چه کسانی بیشتر در تیررس این خطر هستند و مهمتر از همه، چطور میتوان با چند راهکار ساده اما کلیدی، امنیت داراییها را در برابر این تهدید تضمین کرد تا هرگز قربانی این تله هوشمندانه نشوید.
ماهیت و تعریف حمله فینی در دنیای ارزهای دیجیتال
برای درک امنیت در بازارهای مالی جدید، ابتدا باید با روشهایی که ممکن است امنیت سرمایهی شما را تهدید کنند، آشنا شوید. حمله فینی یکی از قدیمیترین و جالبترین این تهدیدهاست که ماهیت آن با درک نحوه کارکرد بلاکچین گره خورده است.
حمله فینی یا Finney Attack چیست؟
حمله فینی یک نوع خاص از حمله در شبکهی ارزهای دیجیتال است که در آن، یک ماینر (استخراجکننده) تلاش میکند تا با سوءاستفاده از قدرت خود، یک تراکنش را به نفع خودش دستکاری کند. برخلاف هکهای رایج که معمولاً شامل دزدی مستقیم از کیف پول یا نفوذ به سرور صرافیها میشوند، حمله فینی یک فریب تکنیکی است. در این سناریو، مهاجم حتماً باید یک ماینر باشد.
او یک بلاک (Block) را استخراج میکند. بلاک در واقع بستهای از اطلاعات تراکنشهاست که در دفترکل شبکه ثبت میشود. اما نکته اینجاست که ماینر این بلاک را به شبکه اعلام نمیکند و آن را پیش خود نگه میدارد. سپس تراکنشی را با یک فروشنده انجام میدهد و پس از دریافت کالا، بلاک مخفیشدهی خود را منتشر میکند تا تراکنش قبلی را بیاعتبار سازد. به زبان ساده، این حمله نوعی تردستی دیجیتال است که در آن مهاجم پول را پرداخت میکند، کالا را میگیرد و سپس پول را دوباره به جیب خودش باز میگرداند.
خالق حمله فینی مفهوم کیست؟
نام این حمله از هال فینی (Hal Finney) گرفته شده است. او یکی از اولین و تاثیرگذارترین افراد در تاریخ بیتکوین و نخستین دریافتکنندهی تراکنش بیتکوین از ساتوشی ناکاموتو بود. هال فینی در سال 2011، یعنی زمانی که بیتکوین هنوز بسیار جوان بود، متوجه این آسیبپذیری شد.
او در یک انجمن اینترنتی توضیح داد که چگونه یک ماینر میتواند از فاصله زمانی بین ایجاد یک تراکنش و تایید نهایی آن در شبکه، سوءاستفاده کند. پیشبینی دقیق او باعث شد تا جامعهی ارزهای دیجیتال از همان ابتدا نسبت به پذیرش تراکنشهای تایید نشده محتاطتر عمل کنند.
رابطه حمله فینی با مشکل دوبار خرج کردن (Double Spending)
حمله فینی در واقع یکی از روشهای اجرای دوبار خرج کردن یا Double Spending است. برای اینکه این مفهوم را بهتر درک کنید، بیایید یک مثال ساده در دنیای واقعی و دیجیتال را مقایسه کنیم:
- در دنیای فیزیکی: اگر شما یک اسکناس 100 هزار تومانی به فروشنده بدهید، دیگر آن اسکناس را در جیب خود ندارید و نمیتوانید با همان اسکناس از مغازهی دیگری خرید کنید.
- در دنیای دیجیتال: ارز دیجیتال در واقع یک فایل یا کد کامپیوتری است. اگر سیستم امنیتی قوی نباشد، ممکن است فردی بتواند آن فایل را کپی کند و همزمان به دو نفر متفاوت پول بفرستد.
حمله فینی دقیقاً همین کار را انجام میدهد. این حمله به ماینر اجازه میدهد که یک واحد پول دیجیتال را در یک تراکنش به فروشنده بفرستد تا کالا را دریافت کند، و سپس با انتشار بلاک مخفی شده، همان پول را در شبکهی اصلی به کیف پول دیگری (که متعلق به خودش است) منتقل کند. در نتیجه، شبکه تراکنش دوم (انتقال به خود) را قبول کرده و تراکنش فروشنده را رد میکند. به این ترتیب، مشکل دوبار خرج کردن رخ میدهد و فروشنده بدون اینکه پولی دریافت کرده باشد، کالای خود را از دست میدهد.
پیشنیازهای فنی؛ چرا حمله Finney رخ میدهد؟
برای اینکه بدانیم اصلاً چرا چنین حملهای امکانپذیر است، باید کمی عمیقتر به زیرساختهای شبکهی بلاکچین نگاه کنیم. نگران نباشید، این موضوع پیچیده نیست. در واقع، حمله فینی به دلیل وجود یک باگ یا ایراد در نرمافزار اتفاق نمیافتد؛ بلکه این حمله نتیجهی نحوهی طراحی سیستم تایید تراکنشها و اعتماد بیشازحد کاربران به سرعت عمل است. در ادامه سه دلیل فنی اصلی را بررسی میکنیم.
نقش تراکنشهای تایید نشده در آسیبپذیری شبکه
پاشنهی آشیل یا همان نقطهی ضعف اصلی که راه را برای حمله فینی باز میکند، مفهومی به نام تراکنشهای تایید نشده (Zero-Confirmation) است. وقتی شما قبلا خرید بیت کوین انجام داده اید و حالا می خواهید مقداری از آن برای دوستتان ارسال میکنید، این درخواست بلافاصله وارد بلاکچین نمیشود. ابتدا وارد فضایی به نام ممپول (Mempool) میشود که شبیه به یک اتاق انتظار برای تراکنشهاست. در این مرحله، تراکنش شما در شبکه پخش شده و همه میتوانند آن را ببینند، اما هنوز توسط ماینرها در یک بلاک قرار نگرفته و نهایی نشده است.
مشکل از جایی شروع میشود که برخی از فروشندگان یا صرافیها، برای سرعت بخشیدن به کار مشتری، همین وضعیت "در انتظار" را به عنوان پرداخت موفق قبول میکنند. در حمله فینی، مهاجم دقیقاً روی همین موضوع حساب باز میکند: اینکه فروشنده صبر نکند تا تراکنش از اتاق انتظار خارج شده و در دفتر کل ثبت نهایی شود. اگر همه صبر میکردند تا تراکنش حداقل یک تایید (Confirmation) بگیرد، این حمله عملاً غیرممکن میشد.
تفاوت حمله فینی با حمله 51 درصد
بسیاری از کاربران تازهکار، حمله فینی را با حمله 51 درصد اشتباه میگیرند. اگرچه هر دو باعث "دوبار خرج کردن" پول میشوند، اما روش اجرا و پیشنیازهای آنها کاملاً متفاوت است. برای درک بهتر، به جدول زیر دقت کنید:
|
ویژگی
|
حمله فینی (Finney Attack)
|
حمله 51 درصد (51% Attack)
|
|
نیازمندی اصلی
|
نیاز به شانس و زمانبندی دقیق دارد (مهاجم باید یک ماینر باشد).
|
نیاز به در اختیار داشتن بیش از نیمی از کل قدرت پردازش شبکه دارد.
|
|
هزینه اجرا
|
نسبتاً کمهزینه است و توسط یک ماینر تنها هم قابل اجراست.
|
بسیار پرهزینه و برای شبکهای مثل بیتکوین تقریباً غیرممکن است.
|
|
هدف حمله
|
معمولاً فروشندگان و صرافیهایی که تراکنش تایید نشده را میپذیرند.
|
کل امنیت شبکه و بازنویسی تاریخچهی بلاکچین.
|
|
راه مقابله
|
صبر کردن برای حداقل 1 تایید (Confirmation).
|
صبر کردن برای تعداد تاییدهای بالا (مثلاً 6 تایید).
|
به طور خلاصه، حمله فینی مثل یک جیببری سریع و هوشمندانه است که از غفلت لحظهای فروشنده استفاده میکند، اما حمله 51 درصد شبیه به یک سرقت مسلحانه تمامعیار است که کنترل کل بانک را به دست میگیرد.
بررسی حمله؛ مراحل اجرای گامبهگام Finney Attack
تا اینجا با مفاهیم فنی آشنا شدیم، اما برای اینکه دقیقا متوجه شوید در لحظهی حمله چه اتفاقی میافتد، بیایید از زبان تئوری فاصله بگیریم و یک داستان واقعی را مرور کنیم. تصور کنید یک هکر قصد دارد از یک فروشگاه آنلاین که کارت هدیه (Gift Card) میفروشد و تحویل آنی دارد، دزدی کند. این حمله دقیقاً شبیه به یک شعبدهبازی است که در سه پرده اجرا میشود. بیایید این سه مرحله را با هم دنبال کنیم.
گام اول: استخراج پنهانی و آمادهسازی تله (Pre-mining)
همه چیز قبل از ورود به فروشگاه شروع میشود. هکر که خودش یک ماینر است، دستگاههای قدرتمندش را روشن میکند تا یک بلاک جدید در شبکه پیدا کند. به محض اینکه او موفق میشود جواب ریاضی بلاک را پیدا کند، برخلاف روال عادی، آن را به بقیهی اعضای شبکه اعلام نمیکند. او این بلاک را مثل یک کارت برنده در آستین خود پنهان میکند.
اما نکتهی مهم داخل این بلاک مخفی است. هکر در این بلاک، یک تراکنش ثبت کرده است که تمام پول موجود در کیف پولش را به یک کیف پول دیگر (که باز هم متعلق به خودش است) منتقل میکند. پس در این بلاک مخفی، حساب اصلی هکر خالی شده است، اما چون بلاک هنوز منتشر نشده، هیچکس جز خود هکر از این ماجرا خبر ندارد.
گام دوم: انجام معامله واقعی و فریب فروشنده
حالا هکر وارد سایت فروشگاه میشود. او یک گیفت کارت 100 دلاری انتخاب میکند و دکمهی خرید را میزند. برای پرداخت، او از همان کیف پول اصلی استفاده میکند که در مرحلهی قبل (در بلاک مخفی) آن را خالی کرده بود. از نظر فروشگاه و سایر اعضای شبکه، این کیف پول هنوز پر از پول است (چون آن بلاک مخفی هنوز رو نشده است). فروشگاه تراکنش را میبیند که وارد شبکه شده اما هنوز تایید نهایی نگرفته است.
چون سیستم فروشگاه برای سرعت بیشتر تنظیم شده، به محض دیدن تراکنش، کد گیفت کارت را به هکر تحویل میدهد. در این لحظه، هکر هم کد گیفت کارت را دارد و هم هنوز پولی از حسابش بهطور رسمی کم نشده است.
گام سوم: انتشار بلاک استخراج شده و بیاعتبار کردن تراکنش فروشنده
به محض اینکه هکر کد گیفت کارت را دریافت کرد، کارت برندهی خود را از آستین بیرون میکشد. او بلاک مخفی شده را که در مرحلهی اول ساخته بود، حالا به کل شبکه مخابره یا برودکست (Broadcast) میکند.
قانون شبکه این است که هر بلاکی زودتر استخراج شده باشد و معتبر باشد، برنده است. چون بلاک هکر تمام مراحل قانونی را طی کرده، شبکه آن را میپذیرد. وقتی شبکه محتویات این بلاک را چک میکند، میبیند که موجودی هکر قبلاً به کیف پول دومش منتقل شده است.
بنابراین، وقتی نوبت به بررسی تراکنش فروشگاه میرسد، شبکه اعلام میکند که این کیف پول موجودی کافی ندارد (چون قبلاً در بلاک هکر خرج شده است). در نتیجه، تراکنش فروشگاه رد یا باطل میشود. نتیجه نهایی:
- هکر کد گیفت کارت را گرفته و استفاده میکند.
- پولی که قرار بود به فروشگاه برسد، هرگز تایید نمیشود و در واقع به جیب دیگر هکر رفته است.
- فروشگاه میماند و یک کالای از دست رفته بدون دریافت هیچ پولی.
چه کسانی و چه کسبوکارهایی در تیررس خطر حمله فینی هستند؟
حالا که با مکانیزم پیچیده و هوشمندانهی این حمله آشنا شدید، ممکن است کمی نگران شده باشید. اما خبر خوب این است که حملهی فینی یک تهدید عمومی برای همه نیست. این حمله ویژگیهای خاصی دارد که باعث میشود فقط گروه مشخصی از فعالان بازار ارزهای دیجیتال در سیبل هدف آن قرار بگیرند. بیایید ببینیم چه کسانی باید سپرهای امنیتی خود را محکمتر کنند.
صرافیها و پلتفرمهای با واریز آنی
اولین و جذابترین طعمه برای مهاجمان، صرافیها و پلتفرمهای تبادل ارزی هستند که قابلیت واریز آنی (Instant Deposit) را برای کاربرانشان فراهم کردهاند. واریز آنی یعنی سیستم به گونهای تنظیم شده که به محض دیدن تراکنش در شبکه و قبل از تایید نهایی آن توسط ماینرها، موجودی حساب کاربر را شارژ میکند.
این ویژگی برای تجربه کاربری عالی است چون معاملهگر معطل نمیشود، اما برای امنیت یک کابوس است. هکرها عاشق این صرافیها هستند؛ آنها ارز دیجیتال را واریز میکنند، بلافاصله آن را به یک ارز دیگر یا پول نقد تبدیل کرده و خارج میکنند. وقتی حمله فینی تکمیل شود و تراکنش اولیه بیاعتبار گردد، صرافی میماند و حسابی که خالی شده است.
فروشندگان کالا و خدمات با سیستم تحویل سریع
گروه دوم که ریسک بالایی را متحمل میشوند، فروشگاههای اینترنتی هستند که کالاهای دیجیتال یا خدمات فوری میفروشند. این دسته شامل موارد زیر میشود:
- فروشندگان گیفت کارت و ووچر: چون کد کارت بلافاصله پس از پرداخت روی صفحه نمایش داده یا ایمیل میشود.
- سایتهای فروش آیتم بازی: که ارزهای درون بازی یا آیتمها را به صورت اتوماتیک به اکانت گیمر واریز میکنند.
- خدمات آنلاین فوری: مثل خرید اشتراک سایتهای فیلم یا موسیقی که بلافاصله فعال میشوند.
دلیل آسیبپذیری این کسبوکارها سرعت است. چون کالای دیجیتال ماهیت فیزیکی ندارد و ارسال آن لحظهای است، اگر فروشنده برای تایید تراکنش صبر نکند، کالا را تحویل داده در حالی که پولی دریافت نکرده است. در مقابل، فروشندگانی که کالای فیزیکی (مثل لباس یا موبایل) میفروشند، چون فرآیند بستهبندی و پست زمانبر است، معمولاً تا آن زمان تراکنش تایید شده و خطر رفع میشود.
چرا کاربران عادی کمتر در معرض این نوع حمله هستند؟
اگر شما یک کاربر معمولی هستید که از ارزهای دیجیتال برای سرمایهگذاری (HODL) یا خریدهای عادی استفاده میکنید، میتوانید نفس راحتی بکشید. شما به دلایل زیر معمولاً هدف حملهی فینی نیستید:
- هزینهی بالای حمله: انجام این حمله نیازمند تجهیزات پیشرفتهی ماینینگ و مصرف برق زیاد است. برای یک هکر صرف نمیکند که اینهمه هزینه کند تا موجودی اندک کیف پول یک کاربر عادی را هدف بگیرد. این حمله فقط برای مبالغ کلان توجیه اقتصادی دارد.
- نقش شما در تراکنش: حمله فینی علیه دریافتکننده پول اجرا میشود، نه فرستنده. خطر زمانی وجود دارد که شما بخواهید کالا یا خدماتی را در ازای دریافت ارز دیجیتال بفروشید. اگر شما فقط خرید ارز دیجیتال انجام می دهید یا ارزهایتان در کیف پول شخصی (مانند تراستولت یا لجر) نگهداری میشود، خطری متوجه دارایی شما نیست.
استراتژیهای دفاعی؛ چگونه از دارایی خود محافظت کنیم؟
شنیدن دربارهی روشهای سرقت و حملات سایبری ممکن است کمی ترسناک باشد، اما نکتهی امیدبخش اینجاست که راهکارهای مقابله با حمله فینی بسیار ساده و در دسترس هستند. در واقع، امنیت در برابر این حمله نیاز به ابزارهای پیچیده ندارد، بلکه نیازمند کمی صبر و تنظیمات درست است. در اینجا یاد میگیریم که چطور دژ دفاعی خود را در برابر این تردستی دیجیتال محکم کنیم.
قانون طلایی صبر؛ اهمیت انتظار برای تایید تراکنشها (Confirmations)
قویترین سلاح شما در برابر حمله فینی، صبر است. همانطور که گفتیم، تمام قدرت مانور مهاجم در لحظاتی است که تراکنش هنوز تایید نشده و در وضعیت انتظار قرار دارد. وقتی یک تراکنش در بلاکچین انجام میشود، ماینرها آن را در بلاکها قرار میدهند. هر بلاک جدیدی که بعد از بلاک حاوی تراکنش شما ساخته میشود، حکم یک لایهی سیمانی جدید را دارد که روی تراکنش شما ریخته میشود و آن را سفتتر و تغییرناپذیرتر میکند. به این لایهها در اصطلاح تایید یا Confirmation میگویند.
- تایید صفر (0-Conf): خطرناکترین وضعیت است. یعنی تراکنش فقط پخش شده و هنوز در هیچ بلاکی ثبت نشده است. حمله فینی فقط در این حالت ممکن است.
- یک تایید (1-Conf): یعنی تراکنش در یک بلاک ثبت شده است. در این حالت خطر حمله فینی تقریباً به صفر میرسد، زیرا مهاجم دیگر نمیتواند با یک بلاک مخفی تراکنش را تغییر دهد.
- شش تایید (6-Conf): این استاندارد طلایی امنیت در بیتکوین است. وقتی 6 بلاک روی تراکنش شما قرار بگیرد، تغییر آن حتی برای ابرقدرتهای محاسباتی هم غیرممکن میشود.
بنابراین، اگر فروشنده هستید، قانون ساده است: تا زمانی که حداقل 1 تایید (حدود 10 دقیقه در شبکه بیتکوین) دریافت نکردهاید، کالا را تحویل ندهید.
تنظیمات امنیتی برای پذیرندگان کریپتو (Merchants)
اگر شما صاحب یک کسبوکار آنلاین هستید که درگاه پرداخت ارز دیجیتال دارید (به اصطلاح مرچنت یا Merchant هستید)، نباید تنظیمات درگاه را روی حالت پیشفرض رها کنید. بسیاری از درگاهها برای جلب رضایت مشتری، گزینهی تایید آنی را فعال میکنند که دقیقاً همان چیزی است که هکرها میخواهند. برای ایمنسازی کسبوکارتان، میتوانید این اقدامات را انجام دهید:
- غیرفعال کردن تایید آنی: در تنظیمات درگاه پرداخت خود، گزینهی پذیرش تراکنشهای تایید نشده (Zero-Confirmation) را خاموش کنید.
- تعیین سطح حساسیت بر اساس مبلغ: اگر فروشندهی کالاهای ارزانقیمت هستید، شاید انتظار 10 دقیقهای برای مشتری کلافهکننده باشد. میتوانید سیستم را طوری تنظیم کنید که برای مبالغ کم (مثلاً زیر 50 دلار) ریسک را بپذیرید و تحویل آنی داشته باشید، اما برای مبالغ سنگین، سیستم به صورت خودکار تا دریافت حداقل 2 یا 3 تایید صبر کند.
- بررسی دستی تراکنشهای مشکوک: اگر تراکنشی با مبلغ بالا و از یک آدرس ناشناس انجام شد، بهتر است قبل از ارسال کالا، وضعیت آن را در مرورگر بلاکچین (Blockchain Explorer) چک کنید.
احتمال وقوع حمله فینی در شبکه بیت کوین امروزی چقدر است؟
شاید بپرسید الان چقدر باید نگران این موضوع باشیم؟ واقعیت این است که در شبکهی مدرن و گستردهای مثل بیتکوین، احتمال وقوع حمله فینی بسیار کم است. اجرای این حمله برای هکر ریسک مالی بزرگی دارد. ماینر باید بین دو گزینه انتخاب کند:
- گزینه اول: بلاک را صادقانه به شبکه اعلام کند و پاداش استخراج (که در حال حاضر مبلغ قابل توجهی است) را بگیرد.
- گزینه دوم: بلاک را مخفی کند تا شاید بتواند یک فروشنده را گول بزند. در این حالت، اگر یک ماینر دیگر زودتر از او بلاکی را پیدا کند، بلاک مخفی هکر بیارزش میشود و او هم پاداش شبکه را از دست میدهد و هم هزینهی برقی که مصرف کرده به هدر میرود.
بنابراین، برای یک ماینر عقلانی نیست که پاداش قطعی چند هزار دلاری بلاکچین را به خاطر دزدیدن یک کالای چند صد دلاری به خطر بیندازد. به همین دلیل، حمله فینی امروزه بیشتر یک بحث تئوری جذاب است تا یک تهدید روزمره؛ اما رعایت احتیاط و صبر کردن برای تایید تراکنش، همچنان شرط عقل است.
منابع:
Academy.Bit2me
Bitcoin.Stackexchange
Wallstreet Mojo