Уразливість у гаманці Coldcard щодо випадковості виявляє слабке місце у безпеці апаратних гаманців

iconTechFlow
Поділитися
AI summary iconКороткий зміст
Недавній звіт про вразливість підкреслює критичний дефект випадковості у апаратних гаманцях Coldcard. Проблема, яка є порушенням безпеки, що впливає на кілька моделей, виникла через оновлення прошивки в березні 2021 року. Замість використання апаратного генератора випадкових чисел, гаманець застосовував слабкий детермінований алгоритм. Це зменшило ентропію seed-фраз, збільшивши вразливість до атак методом перебору. Coinkite та Block виявили, що скомпрометовані seed-фрази мали простір пошуку від 40 до 72 біт. Користувачам рекомендується створювати нові seed-фрази вручну та здійснювати переказ коштів. Вже було переміщено понад 77 402 BTC з уразливих адрес.

Автор: Ліам «Акіба» Райт

Переклад: Saoirse, Foresight News

Ще до підключення апаратного гаманця до мережі його безпека може бути порушена. Апаратний гаманець із повною ізоляцією може тримати приватний ключ поза інтернетом роками, але ризик уже закладено з моменту створення мнемонічної фрази.

Вразливість у генераторі випадкових чисел, недавно розкрита Coldcard, ідеально підтверджує цю безпекову пастку. Гаманці, що постраждали від цієї вразливості, можуть генерувати набір з 12 або 24 слів, які виглядають абсолютно нормальними, і користувачі можуть безпечно зберігати ці відновлювальні фрази та підписувати транзакції в автономному режимі. Проте діапазон можливих значень у нижчому рівні генератора випадкових чисел насправді значно зменшений. Зловмисники можуть перебрати всі можливі комбінації насіння на інших пристроях, щоб відновити кандидатські насіння, а потім зіставити їх із відкритим балансом Bitcoin, щоб відібрати ті насіння, які відповідають реальним адресам.

На мою думку, безпека гаманця вирішується в момент створення семені. Перш ніж діють заходи захисту, такі як PIN-код, стальні плати для резервного копіювання мнемонічної фрази, герметичні пломби та повітряна ізоляція, сем'я повинна бути сгенерована справжнім надійним джерелом випадковості.

Якісний сучасний генератор випадкових чисел може виводити достатню кількість ентропії. Але якщо атакувач отримає доступ до логіки роботи генератора випадкових чисел, він може зворотно відтворити весь процес генерації.

Ручне кидання кубиків надає користувачам джерело випадковості, яке є інтуїтивно зрозумілим і контролюваним, а також незалежним від коду, написаного виробником.

Слабкі місця безпеки біткоїн-гаманця

Генерація сімени Coldcard містить приховані безпекові ризики. Зловмисники можуть генерувати кандидати на сім'я ззовні пристрою, перетворювати їх у публічні адреси та проводити перевірку з записами транзакцій на публічному біткоїн-реєстрі, щоб здійснити атаку.

Технічна причина вразливості настільки мала, що викликає тривогу. 1 березня 2021 року зміна коду перемістила функцію генерації сімени Coldcard до нової кодової бази. У масовому прошивці параметр MICROPY_HW_ENABLE_RNG був встановлений на 0, що означало вимкнення апаратного генератора випадкових чисел; однак логіка інтеграції коду перевіряла лише наявність цього параметра, а не його значення. Якщо параметр існував, система відмовлялася від апаратного генератора випадкових чисел і переключалася на детермінований алгоритм Yasmarang у MicroPython як запасний варіант. За звітом спільного аналізу Block, ця несправна логіка була випущена у версії прошивки 4.0.0 17 березня.

Згенеровані мнемонічні фрази виглядають абсолютно нормально, але за ними прихований пошуковий простір, який був різко скорочений. За попередніми розрахунками Coinkite, ефективний пошуковий простір для вразливих моделей Mk2 і Mk3 становить лише близько 40 біт; для вразливих моделей Mk4, Mk5 та серії Q — приблизно 72 біт.

Команда Block встановила окремі обмеження для наступних моделей: коли стан запасного алгоритму та історія викликів фіксовані, існує не більше 2^32 різних випадкових потоків. Дані Coinkite оцінюють ефективний діапазон пошуку, який може перебрати атакувальник.

Обидва аналітичні звіти підтверджують, що всі пізні моделі, які були випущені до виправлення прошивки, перебували в межах ризику. У безпековому повідомленні Coinkite зазначено, що під впливом перебувають прошивки Mk4 і Mk5 до стандартної версії 5.6.0 та Edge 6.6.0X; прошивки серії Q до стандартної версії 1.5.0Q та Edge 6.6.0QX. Для Mk2 і Mk3 Coinkite вказує ризиковані версії з 4.0.1 по 4.1.9, тоді як команда Block вважає, що вразливість існувала з версії 4.0.0. Щодо цієї суперечливої межі версій, користувачам рекомендується дотримуватися обережного підходу.

Цей інцидент чітко демонструє: встановлення нової версії прошивки не виправляє існуючі проблеми безпеки гаманця. Оновлення до виправленої версії забезпечує безпеку лише нових сідів, що будуть створені пізніше; усі раніше створені старі сіди зберігають лише ентропію, отриману на момент створення, і всі адреси, похідні від цих сідів, ділять одну й ту ж базову ключову пару.

Усі користувачі, які використовують відому з ризиком версію прошивки, повинні ознайомитися з офіційним безпечним оголошенням. Якщо ви не можете підтвердити, що посів був створений достатньою кількістю ручних кидків кубиків, ви повинні використовувати виправлену прошивку, згенерувати новий посів за допомогою надійного джерела випадковості та перевести кошти на новий гаманець. Якщо ви просто використовуєте старий мнемонічний код для генерації нового адреси, існуючі безпекові недоліки залишаться незмінними.

Bitcoin Optech опублікував оцінку станом на 31 липня, згідно з якою обсяг під загрозою активів перевищує 1000 біткойнів. Станом на 2 серпня Galaxy Research оцінив, що приблизно 1367 біткойнів знаходяться під загрозою в 4585 адресах. Користувач X-платформи з ніком Graham_Quantum заявив, що 29 липня відповідні гаманці вивели 18,25245043 біткойни.

Після розголошення повідомлення велика кількість користувачів перевела активи з метою захисту, що призвело до значно більшого обсягу капіталу. Після розголошення інформації про вразливість 77 402 біткойни було переведено зі старого пулу незатрачених вихідних транзакцій (UTXO).

Потрібно розрізняти два типи даних:

Ця безпекова інцидент викликала два величезні наслідки: по-перше, хакери вкрадли активи, а по-друге — масштабна хвиля добровільного переміщення користувачів для захисту себе.

Вразливість гаманця Coldcard на суму близько 89 мільйонів доларів США спричинила найбільший за масштабом переказ біткойнів у блокчейні з часів краху FTX і серйозно ускладнила інтерпретацію ринкових сигналів. Десятки тисяч користувачів терміново перевели біткойни зі старих гаманців, що зробило важким визначення достовірності медведячих сигналів, що виходять із ключових показників блокчейну.

Які зміни може принести ручне кидання кубиків?

Офіційні документи Coldcard з кубиками: справедливий шестигранний кубик при кожному незалежному киданні генерує приблизно 2,585 біт ентропії. 50 кидань дають приблизно 129,25 біт початкової ентропії, що відповідає стандартній безпеці 128 біт; 99 кидань дають приблизно 255,91 біт початкової ентропії, що майже досягає стандарту безпеки 256 біт (ця величина ще не пройшла перетворення за допомогою вбудованого алгоритму гаманця).

Ці значення відповідають загальноприйнятому стандарту BIP-39 для мнемонічних фраз: 12 слів мнемонічної фрази кодують 128 біт ентропії плюс 4 біти контрольної суми; 24 слова мнемонічної фрази кодують 256 біт ентропії плюс 8 біт контрольної суми.

Офлайн-ізоляційний механізм апаратного гаманця може захистити лише сгенеровані мнемонічні фрази, але не виправити слабкі випадкові уразливості під час генерації. Для створення безпечних BIP-39 мнемонічних фраз потрібно використовувати приватний кидок кубиків для отримання незалежної ентропії.

Контрольна сума використовується лише для виявлення помилок при переписуванні мнемонічної фрази. Справжню безпеку визначає нижчележачі вихідні випадкові дані. Хешування та нормативне форматування можуть покращити вхідні дані з низькою ентропією, але загальний простір всіх можливих ключів не збільшується. Ті 12 слів, що виглядають впевнено, можуть походити з дуже малого випадкового пулу.

Умова ефективності ручного кидання кубиків як захисту: вбудований у гаманець процес має правильно приймати випадкові дані, згенеровані кубиками. Сам кубик має бути придатним, кожен кидок — справжнім і незалежним від інших, а послідовність кидків — повністю конфіденційною. Повторне використання шаблонів кидків, фотографування записів, зберігання послідовностей у хмарі або введення результатів на підключеному до інтернету комп’ютера порушать незалежність і конфіденційність випадковості.

Щодо цієї події з безпекою Coldcard, Coinkite заявляє: лише користувачі, які можуть підтвердити, що під час створення остаточного сіяня було здійснено щонайменше 50 чесних, незалежних і конфіденційних кидків кубиків, можуть не переносити активи; у будь-якому випадку невизначеності офіційно рекомендується перенести кошти.

Для мене ключова цінність ручного кубика полягає в тому, що використання вбудованого в пристрій випадкового числа означає, що ви повинні сліпо довіряти всьому ланцюжку: апаратному забезпеченню, прошивці, процесу компіляції та інтегрованому коду.

Правильний процес введення кубиків дозволяє ввести ентропію, яка виходить за межі цієї ланцюжка довіри і перебуває під повним контролем користувача. Приблизно 50 справедливих кидків кубика відповідають рівню безпеки 128 біт, а 99 — рівню безпеки 256 біт. Проте користувач обов’язково має дотримуватися офіційної інструкції пристрою і не вигадувати власних схем перетворення випадкових чисел.

Налаштуйте потужний, унікальний BIP-39 пароль, щоб підвищити рівень захисту на іншому рівні. Пароль діє як окремий ключ; навіть якщо зловмисник отримає мнемонічну фразу, йому все одно потрібно зламати пароль, щоб отримати доступ до активів. Зверніть увагу: сама ентропія мнемонічної фрази не збільшується через додавання пароля. Будь-який пароль (навіть якщо ви помилилися на один символ) створює набір дійсних адрес гаманця; якщо пароль втрачено, активи залишаться назавжди заблокованими. PIN-код апаратного гаманця має зовсім інше призначення, ніж пароль.

Увімкнення пароля доступу супроводжується певними компромісами: якщо ви зможете надійно зберігати та точно відтворювати пароль доступу, він створить потужну другу лінію захисту; але якщо ваша схема резервного копіювання не досконала, ця функція може призвести до повної втрати доступу до ваших активів.

Проблеми зі слабкою випадковістю повторюються

Вразливість Coldcard знову нагадує всім: основою безпеки біткоін-гаманця є достатня сила випадковості в момент генерації сімени. Подібні базові недоліки раніше послідовно виявлялися в багатьох різних гаманцях.

У 2023 році Ledger Donjon оприлюднив, що певні версії розширення Trust Wallet у веб-переглядачі використовували в генераторі випадкових насіння алгоритм Мерсенна-Твіст з 32-бітною арифметикою. Такі виглядаючі нормально мнемонічні фрази походять лише з приблизно 4 мільярдів початкових значень. Діапазон ризику чітко визначений: розширення версій 0.0.172–0.0.182 з Trust Wallet Core версії раніше 3.1.1. У Національній базі даних про вразливості США ця вразливість була використана у грудні 2022 року та у березні 2023 року.

Подія «вразливість Milk Sad» наочно демонструє подібні ризики. Команда bx seed у Libbitcoin Explorer 3.x використовує 32-бітний алгоритм Мерсенна Твіст з посівом на основі системного часу; за однакових умов годинника програмне забезпечення може генерувати абсолютно однакові мнемонічні фрази. Атакувальнику, який приблизно знає час створення посіву, діапазон перебору буде значно меншим, ніж простір, який здається прихованим у мнемонічній фразі.

Дослідники виявили понад 2600 активних біткоїн-гаманців у межах ризикового діапазону; за курсом на серпень 2023 року пов’язані вкрадені активи на кількох блокчейнах оцінюються в понад 900 тис. доларів США. Більше 2550 гаманців демонструють ознаки автоматизованих операцій і, найімовірніше, належать одному власнику. Дослідники також зазначили, що деякі випадки крадіжки активів, ймовірно, поєднувалися з іншими безпековими уразливостями.

Ці вразливості кожного разу з’являються під різними масками: Coldcard випадково активує запасний алгоритм випадкових чисел у прошивці; розширення браузера Trust Wallet та командний інструмент Libbitcoin генерують слабкі випадкові числа через залежність від системного годинника. Остаточні ключі гаманця виглядають ідеально, але розмір набору ключів, які можна перебрати, настільки малий, що створює смертельний ризик.

Більшість рекомендацій щодо зберігання біткойнів у світі розгортаються після генерації сім’я: зберігання на відключених від мережі носіях, використання міцних носіїв для резервного копіювання, ізоляція прав доступу, тестування процесу відновлення. Ці заходи все ще мають цінність. Але інцидент із Coldcard нагадує нам, що лінії безпеки потрібно зсунути трохи далі.

Повітряна ізоляція може захистити лише ті ключі, які ви вже ввели в пристрій. Саме тому безпека біткоїн-гаманця має починатися з надійного джерела випадковості.

Відмова від відповідальності: Інформація на цій сторінці може бути отримана від третіх осіб і не обов'язково відображає погляди або думки KuCoin. Цей контент надається лише для загального інформування, без будь-яких запевнень або гарантій, а також не може розглядатися як фінансова або інвестиційна порада. KuCoin не несе відповідальності за будь-які помилки або упущення, а також за будь-які результати, отримані в результаті використання цієї інформації. Інвестиції в цифрові активи можуть бути ризикованими. Будь ласка, ретельно оцініть ризики продукту та свою толерантність до ризику, виходячи з ваших власних фінансових обставин. Для отримання додаткової інформації, будь ласка, зверніться до наших Умов використання та Розкриття інформації про ризики.