📑 Безпечність апаратних гаманців, та густий туман навколо закритого початкового коду.

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

 

То чи справді апаратні гаманці є найліпшими у контексті безпеки ❓
Ми вирішили провести власне розслідування на цю тему, адже хакери виявились спроможними до крадіжок криптовалют навіть з апаратних гаманців. З цього ми й почнемо серію постів, присвячених темі безпеки коштів у різних гаманцях та закритості коду.

Почнемо з того, що відкритий код — це одна з головних вимог до всіх без виключення криптовалютних гаманців, що розміщені на сайті bitcoin.org у розділі «Гаманці». Жоден з апаратних та програмних гаманців, що має закритий код, не зʼявився на «головному сайті» спільноти Bitcoin за майже 10 років його існування. Команда Bitcoin Core не довіряє криптогаманцям, що використовують закритий код, те саме роблять і майже всі «ветерани» індустрії.

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

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

 

Якою є думка спеціалістів стосовно створення апаратних гаманців ❓

Щоб з’ясувати відповідь на це питання, ми звернулись до одного з розробників апаратного криптогаманця Satochip. Цей гаманець взагалі не має власного софту (firmware), та працює через сімейство Electrum гаманців на відкритому коді.

Розробника з котрим ми спілкувалися звуть Бастієн. Він надав декілька коментарів стосовно відкритого та закритого коду в апаратних пристроях. Отримана нами інформація допоможе вам підвищити шанси у процесі зберігання вашого “цифрового чеддеру”.

▪️ Kuna: «Чи я прав у своєму припущенні, що технічно можливо вкрасти фразу відновлення користувача на віддалений сервер, у разі якщо гаманець (як програмний, так і апаратний) працює на закритому коді?»

▫️ Бастієн: «Для кастодіального рішення − так, завжди є ризик. Тому що фраза зберігається у третьої сторони. Ось чому вам треба завжди самому зберігати свої приватні ключі! Не ваші ключі − не ваші коїни.»

▪️ Kuna: «Але, якщо вони кажуть про себе, що це некастодіальне рішення, але код всередині гаманця є закритим?»

▫️ Бастієн: «Якщо в них закритий код всередині апаратного пристрою, не обовʼязково, що це призведе до зловмисної атаки, чи щось таке. Але, ви не можете перевірити, як саме створюється фраза відновлення, чи який тип ентропії використовується. Так, у цьому може бути ризик.»

❗️ Важливим аспектом у цій темі також є вивчення репутації засновників, а також відгуки на незалежних форумах.

 

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

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

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

Ledger Wallet — чи варто купляти ❓ (1/3)

Сергій Лаппо з команди «Mycelium» 21 лютого 2019 року описав баг, що він разом з Лео Вандерслебом знайшов у Ledger. Шкідливий софт може змусити Ledger відправити усі ваші гроші на сторонню адресу, контрольовану хакером.

Згідно з його дослідження, можна змусити Ledger Wallet вислати решту з транзакції на адресу хакера. Аналогічну проблему було знайдено (та виправлено) в TREZOR та KeepKey, але більше за них вона проявила себе у Ledger Blue та Ledger Nano S. Ledger дуже легко приймає команду на надсилання решти на сторонню адресу та навіть не надає користувачу можливість підтвердити чи перевірити правильність надсилання решти. З дослідження:

«Ми були трохи шоковані та вирішити перевірити, який шлях деривації буде прийнято гаманцем без попередження для користувача, з огляду на те, що у ньому є деякий захист задля протидії тому, що ось цей pull request начебто виправляє. Однак, правда виявилась ще цікавішою за нашу теорію: гаманцю взагалі було все одно, чи пішла решта на “адресу для решти” чи ні!»

 

Чи траплялися випадки скаму з Ledger Wallet ❓

На початку 2020 року зʼявилась фейкова версія софту для Ledger Wallet під назвою Ledger Secure

Цей софт було створено та викладено зловмисником, який не мав відношення до офіційного застосунку від Ledger. Біткоїн ентузіаст та програміст, відомий під ніком @WizardofAus, 2 лютого 2020 надіслав твіт з попередженням користувачам, в якому розповів про крадіжку 600 коїнів Zcash (ZEC) у свого друга. Монети щезли саме через фейковий софт, який зʼєднався з апаратним гаманцем та “обчистив” його. Дивно, що у гаманця не було ніякої системи перевірки, чи зʼєднується користувач через офіційний застосунок, або ж застосовує сторонню програму.

Масивну історію про Ledger розповів 2 роки тому користувач Reddit під нікнеймом bcaic22, він виклав усі деталі на DocDroid. 

Він описує, як його коїни зникли внаслідок автоматизованої атаки після чергового апдейту фірмового софту (firmware) Ledger. Клієнт Ledger вказав, що не був жертвою скаму, зламу, або фішингу, а також наголосив, що ніхто не бачив його секретну фразу відновлення, що складається з 24 англійських слів. Він ніколи не показував її стороннім особам, не зберігав у електронному вигляді на девайсах тощо. Його аналіз зникнення коїнів містить багато скриншотів, деталей спілкування з підтримкою Ledger і власних коментарів.

У випадку bcaic22 крадіжка монет почалася миттєво. Тобто, саме після того, як він встановив нову версію прошивки Ledger, софт для доступу до монети TRON, а також монет, що базуються на блокчейні TRON, почав процес «розморозки», який триває 2 дні. Через 2 дні, коли монети стали доступні для витрачання, їх було викрадено.

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

 

Ось чим закінчилося довге листування, де йому обіцяли допомогу технічного та юридичного відділів:

«Ані технічна команда, ані юридичний департамент так і не вийшли на звʼязок зі мною. Я сумніваюся, чи вони взагалі колись напишуть. Також вони декілька разів проігнорували мою пропозицію отримати інформацію про інцидент та провести власне розслідування.»

 

На форумі Reddit ми побачили, що, наприклад, підтримка Trezor у випадку викрадення монет у користувача одразу ж пропонує провести розслідування.

«Наші агенти перевірять це та запропонують подальші кроки».

 

Випадок, коли гроші зникають саме після встановлення свіжої версії firmware — не єдиний. На Reddit є ще як мінімум дві скарги на те, що кошти з гаманця зникли одразу ж після оновлення firmware «Ledger Live», з офіційного репозиторію Ledger (дивіться тут і тут).

Ledger Wallet — чи варто купляти❓ (2/3)

Ще один баг у гаманці Ledger було описано виданням TheNextWeb. Діра в безпеці дозволяла шкідливому софту змусити графічний інтерфейс гаманця показувати “адресу для отримання” хакера замість тієї, що згенерована приватним ключем з гаманця.

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

Це означає, що софт Ledger може бути замінено навіть на вірус, який не має адміністративних прав. З документа:

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

 

Після численних скарг на крадіжку коштів компанія додала можливість перевірити цю адресу в ручному режимі, для чого потрібно щоразу викликати на екран «адресу отримання» за допомогою кнопки на девайсі. Але вразливість так і не було виправлено повністю. Замість її знешкодження шляхом оновлення софту, Ledger запропонувала користувачам вручну перевіряти адресу, та звітувала, що цей баг «взагалі не може бути вирішено»:

Інші вектори атаки показані у 2018 році пʼятнадцятирічним (на момент публікації звіту) дослідником Салемом Рашидом:

Згідно з його інформацією, гаманець Ledger дуже вразливий до хакерських атак, які дозволяють викрасти кошти, якщо хтось мав короткочасний фізичний доступ до пристрою під час його транспортування, або вже під час використання. Також хакер може отримати доступ до сектору памʼяті завантажувача (bootloader) пристрою навіть без фізичного доступу. Салем так і не отримав винагороду за знайдені вразливості від компанії Ledger, бо згідно з їхнім договором відповідального розкриття, він не мав права опублікувати свій технічний звіт.

Салем пише, що вирішив викласти свої знахідки у вільний доступ в інтернеті з огляду на чисельні повідомлення Генерального директора Ledger на форумі Reddit, які «були сповнені технічного невігластва». Як наслідок, Салем «став хвилюватись, що ці вразливості не буде правильно пояснено користувачам».

Зі звіту Рашида: 

«Вразливості зʼявилися тому, що Ledger використовує штучну архітектуру для обходу обмежень їхнього Елементу Безпеки (Secure Element). Хакер може використовувати цю вразливість для злому пристрою до його отримання користувачем, або для крадіжки приватних ключів фізичним методом чи навіть віддалено.»

 

Не слід забувати про випадок із крадіжкою бази персональних даних клієнтів у компанії Ledger, що стався у липні 2020 року. Тоді у публічному доступі опинився 1 мільйон облікових записів клієнтів із зазначенням справжніх імен, номерів телефонів та емейл скриньок. Також стали відомими домашні адреси 200000 клієнтів компанії.

❗️Слід зазначити, що під час пошуку у Google за запитами «KeepKey hacked reddit» або «Trezor hacked reddit» кількість створених на цю тему сторінок та обговорень значно менша у Trezor, аніж у Ledger. 

 

При цьому, якщо ви виділите час на вивчення обговорень англійською, у більшості випадків виявляється, що користувач Trezor або KeepKey став жертвою фішингової атаки та сам віддав хакеру свою секретну фразу (а це дає повний контроль над грошима у гаманці). У той самий час, переважна більшість жертв зламу гаманця Ledger стверджують, що гроші пропали за «містичних» обставин, де користувач не робив дій, які можна було б визначити як фішингові атаки чи критичну недбалість.

Ledger Wallet — чи варто купляти ❓ (3/3)

Не буде зайвим розглянути відношення співзасновника Ledger до закритості коду у розмовах з клієнтами на Reddit. Так, у травні 2021 року користувач DoplyGame запитує, чому вони не роблять код відкритим.

Ghostislav: «Як ми можемо бути впевнені, що Ledger не передає секретну фразу на якийсь зовнішній сервер?»

btchip (співзасновник Ledger): «Клієнтські застосунки мають відкритий код» (прим. – клієнтський застосунок та firmware — не одне й те саме)

Ghostislav: «Тобто, ми можемо перевірити, що клієнтські застосунки цього не роблять, але стосовно коду, на якому працює сам Ledger… Як ми можемо пересвідчитись, що Ledger цього не робить? Чи є спосіб підтвердити це, зважаючи на те, що код закритий?»

btchip: «Ви можете перевірити кожен застосунок для Ledger, а також комунікацію між застосунком та гаманцем. Наявність повністю відкритого коду не допоможе, тому що у вас немає способу перевірити, який код є всередині пристрою.»

polloponzi: «Це не правда. Якщо код був би відкритим, то його можна було б скомпілювати зусиллями користувача та встановити на пристрій як нове оновлення фірмового софту.»

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

polloponzi: «Який шматок коду залишається неперевіреним? З гаманцем Trezor це цілком можливо зробити. Та вони пішли ще далі, давши можливість користувачам продивлятись код білдів (builds): https://wiki.trezor.io/Developers_guide:Deterministic_firmware_build»

btchip: «Завантажувач (bootloader), який запускає фірмовий код, неможливо перевірити. На жаль, занадто багато людей ведуться на мантру про відкритий код без розуміння того, що вони роблять.»

aFungible: «…Питання, відповідь на яке шукає спільнота: що утримує вас від того, щоб зробити усю інформацію відкритою? Чи це страх, що хтось інший скопіює вашу роботу? Якщо так, зробіть її ліцензованою під GPL-3. …Замість захисту своєї позиції, було б непогано просто усе показати, як я вважаю.»

btchip: «Наша позиція завжди була відкритою: https://www.ledger.com/secure-hardware-and-open-source. Я сумніваюсь, що зазначений вами опитувальник є правдивим, зважаючи на те, що ми продали понад 4 мільйони пристроїв та є єдиною компанією, що показує статистику продажу.»

polloponzi: «Наявність неперевіреного завантажувача (bootloader) не є виправданням використанню закритого софту. Завантажувач є дуже простим шматочком софту. …Згідно з вашим прикладом, Windows заслуговує на такий самий рівень довіри, як Linux, тому що ви не можете перевірити завантажувач (bootloader) компʼютера.»

btchip: «А я ніколи не казав, що це виправдання. Я лише сказав, що процедура перевірки завантажувача (bootloader) ніде не описана та що більшість користувачів не розуміють, що вони роблять.»

Стосовно гаманця Trezor, що є одним з конкурентів Ledger, btchip пише:

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

 

На сайті Trezor є інформація, що може заперечувати його слова. А саме (читаймо тут):

«Захищений bootloader. Завантажувач захищено від перезапису інформації, JTAG вимкнено, тому нападник не може переписати його. 

Верифікація firmware. Завантажувач завжди перевіряє цифровий підпис firmware. Софт буде запущено лише тоді, коли його було коректно підписано у SatoshiLabs. У випадку неофіційного оновлення софту гаманця завантажувач видаляє все з памʼяті пристрою.»

 

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

Попри те, що код завантажувача не гарантує, що офіційний апдейт «не вкраде приватні ключі», він гарантує значно вищий рівень безпеки.

Кінець 1 частини

Друга частина нашої серії статей незабаром, слідкуйте! 

Автор серії матеріалів: Джефф Фокс

 

Disclaimer: Серія «Безпечність апаратних гаманців та густий туман навколо закритого початкового коду» є авторським незалежним дослідженням, та не обовʼязково показує точку зору редакції. Деякі представлені твердження належать авторові тексту та можуть згодом виявитись помилковими чи неповними. Метою цієї серії не є реклама конкретних продуктів і послуг, чи паплюження репутації певних компаній, продуктів, послуг чи осіб. Усі остаточні висновки з наведеної інформації надаються на розсуд читача. Автор тексту не має відношення до згаданих у матеріалі брендів та персон.