اکسپلویت Coldcard: PRNG قطعی ۸۸ میلیون دلار BTC تخلیه کرد

در اول اوت ۲۰۲۶، تقریباً ۱٬۱۹۶ آدرس بیتکوین در یک عملیات هماهنگ تخلیه شدند. بدون فیشینگ. بدون PSBT مخرب امضاشده. بدون خطای کاربری به معنای سنتی آن. اکسپلویت Coldcard که تقریباً ۸۸ میلیون دلار BTC را تخلیه کرد، در لحظه سرقت به هیچ دستگاهی دست نزد، طبق گزارش CoinDesk درباره این رویداد.
علت اصلی از هر تحلیلی که در ۲۴ ساعت اول دیدم بدتر است. این یک نقص در فریمور کیف پول سختافزاری بود که در سال ۲۰۲۱ عرضه شد و بهآرامی مولد اعداد تصادفی سختافزاری واقعی را با یک روتین شبهتصادفی نرمافزاری جایگزین کرد. هر سیدی که تحت آن نسخه ساخته شد قطعی بود. هر آدرسی که از آن سیدها مشتق شد، اصولاً از پیش برای هر کسی که باگ را مهندسی معکوس میکرد قابل محاسبه بود.
این یک هک نیست. این یک فاصله پنجساله میان کامیت و عواقب است.
باگ فریمور Coinkite واقعاً چه کرد
نسخه معیوب، طبق توضیحات The Hacker News، فراخوانیهای آنتروپی را از طریق یک PRNG نرمافزاری مسیریابی میکرد که از یک حالت اولیه کوچک و قابل حدس seed میگرفت، بهجای RNG سختافزاری تراشه SE. کاربران هیچ راهی برای تشخیص این تعویض نداشتند. دستگاه بوت میشد، صفحههای راهاندازی مورد انتظار را نمایش میداد، یک سید ۲۴ کلمهای تولید میکرد، و ظاهراً با یک کیف پول بهدرستی تولیدشده هیچ تفاوتی نداشت.
سیدهایی که تولید میکرد در یک فضای قابل جستجو با شاید چند میلیارد احتمال جای میگرفتند. این کیف پول نیست. این یک بلیت بختآزمایی است.
وقتی مهاجم، یا محتملتر، محققی که این را کشف کرد و بهشکل مسئولانه افشا نکرد، در اول اوت شروع به پیمایش فضا در برابر مجموعه UTXO کرد، تخلیه ساعتها طول کشید، نه ماهها.
چرا عدد ۱٬۱۹۶ آدرس بیتکوین تخلیهشده اهمیت دارد
۱٬۱۹۶ در مقیاس مطلق عدد کوچکی است، اما از نظر اطلاعاتی عدد بزرگی است. این رقم جمعیت کاربرانی را که دقیقاً در همان بازه فریمور seed خود را تولید کرده و هرگز آن را تغییر ندادهاند محدود میکند. این ادعایی آزمونپذیر و ابطالپذیر درباره ابعاد آسیب است، و گزارش TechSpot تأیید میکند که دستگاههای آسیبدیده به یک دوره ارسال محدود بازمیگردند.
اگر seed خود را روی فریمور دیگری تولید کردهاید، یا اگر پس از بهروزرسانی فریمور آن را تغییر دادهاید، احتمالاً کاملاً در امان هستید. اگر روی آن نسخه تولید کرده و هرگز جابجا نکردهاید، پیش از این هزینه پرداخته شده بود، فقط هنوز نمیدانستید.
یک جزئیات مهم که کمتر به آن پرداخته شده: برخی از UTXOهای تخلیهشده از سال ۲۰۲۱ دستنخورده مانده بودند. پنج سال «کلید من، سکههای من»، و آن کلیدها هرگز واقعاً متعلق به شما نبودند.
مشکل PRNG قطعی در بیتکوین قدیمی است و مدام تکرار میشود
این دسته از آسیبپذیریها تاریخچهای طولانی و شرمآور دارد. SecureRandom اندروید در سال ۲۰۱۳ به همین شکل موجب از دست رفتن BTC مردم شد. باگ PRNG در OpenSSL دبیان در سال ۲۰۰۸ کلیدهای SSH را دو سال کامل تضعیف کرد، پیش از آنکه کسی متوجه شود. هر نسل از نو میآموزد که آنتروپی تنها چیزی است که با خیره شدن به خروجی نمیتوان آن را بررسی کرد.
یک عدد ۲۵۶ بیتی تصادفی خوشساخت و یک عدد ۲۵۶ بیتی قطعی در ظاهر یکسان به نظر میرسند. باید منبع را بررسی کنید، نه نمونه را. تمام ماجرا همین است.
کیف پولهای سختافزاری این را به فروش میرسانند که عنصر امن این کار را برای شما انجام میدهد. وقتی فریمور از SE عبور میکند، تمام دردسر ذخیرهسازی سرد را دارید بدون هیچکدام از تضمینهایش. بدترین حالت ممکن.
بحث self-custody در برابر ETF آن چیزی نیست که مردم فکر میکنند
نظر من این است و مسئولیتش را میپذیرم: گفتگوی self-custody در برابر ETF به عنوان یک بحث ایدئولوژیک مطرح شده، در حالی که در واقع یک سوال زنجیره تأمین است.
یک صندوق ETF بیتکوین نقدی تنها یک سطح حمله دارد که برایم مهم است: امنیت عملیاتی متولی. این سطح قابل حسابرسی توسط نهادهای نظارتی است، قابل بیمهشدن است، و توسط افرادی اداره میشود که تمام وقت کاریشان صرف این میشود که سکهها گم نشوند. وقتی شکست میخورد، کسی چک مینویسد.
نگهداری شخصی زنجیرهای طولانیتر دارد: تامینکننده تراشه، خط ساخت فریمور، امضای انتشار، مسیر تامین، امنیت عملیاتی کاربر نهایی، نگهداری مناسب پشتیبانها. هر حلقهای که خراب شود، چکی در کار نیست. تخلیه Coldcard لحظه Terra برای این تز است، نه به این دلیل که نگهداری شخصی مُرده، بلکه چون چارچوب حداکثرگرایانه "فقط کلیدهایت را خودت نگه دار" باید بالغ شود.
هر دو مدل ریسکهای واقعی دارند. وانمود کردن که یکی از آنها بدون ریسک است، همان چیزی بود که ۱٬۱۹۶ آدرس را تخلیه کرد.
آنچه واقعاً بعد از اکسپلویت Coldcard تغییر میکند
چند چیز که فکر میکنم تغییر خواهد کرد (و باید تغییر کند):
- بیلدهای فریمور بازتولیدپذیر به حداقل استاندارد تبدیل میشوند. اگر نمیتوانی باینری را از سورس کد بازسازی کنی و بایت به بایت تطبیق دهی، به یک امضا اعتماد میکنی، نه به یک کد.
- تصدیق آنتروپی پس از تولید. دستگاه باید یک اثبات امضا کند که یک سید مشخص از SE آمده، نه از نرمافزار. کار سختی نیست. Coinkite میتواند در یک فصل آن را عرضه کند.
- بررسیهای مستقل سلامت سید. ابزارهای شخص ثالث که بدون دیدن سید، میتوانند تایید کنند که مسیر مشتقسازی آن در توزیعی سازگار با تصادفی بودن واقعی قرار میگیرد.
- محصولات بیمه برای نگهداری شخصی. نه از نوع نمایشی. پذیرهنویسی واقعی که به فریمور تصدیقشده نیاز داشته باشد و پوشش را همگام با قدیمی شدن بیلدها بهروز کند.
هیچکدام از اینها کیف پولهای سختافزاری را منسوخ نمیکند. بلکه آنها را در سطح سازمانی میبرد، که همیشه ادعا میکردند همین هستند.
پیام ناخوشایند برای بقیه ما
در LCX، بخش نامتناسبی از وقت مهندسی خود را صرف چیزهایی میکنیم که برای کاربران نامرئی به نظر میرسند: مراسم کلید HSM، خطوط بیلد قطعی، حسابرسی آنتروپی روی هر مسیر کدی که به کلید خصوصی دست میزند. کار خستهکنندهای است. و همچنین تفاوت بین یک تیتر خبری و یک سهشنبه معمولی است.
ماجرای Coldcard به همان شکلی که نظرات مدیرعامل OpenZeppelin درباره حسابرسیهای DeFi در اوایل امسال تاثیر گذاشت، ضربه میزند. زیرساخت حسابرسیای که به ارث بردیم برای دنیایی طراحی شده بود که در آن کدی که منتشر میکردید، همان کدی بود که اجرا میشد. دیگر اینگونه نیست، اگر هرگز بوده باشد.
ذخیرهسازی سرد قرار بود پاسخ خستهکننده اما درست باشد. معلوم شد که خستهکننده به زیرساخت بسیار بیشتری نیاز دارد از آنچه ما اعتراف کرده بودیم.