Про модель безпеки програмних гаманців | Леджер

Про модель безпеки програмних гаманців | Леджер

Вихідний вузол: 2671485

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

Два тижні тому, Заборонені історії оприлюднив цілеспрямовану атаку на тисячі людей по всьому світу. Ця атака використовувала вразливості на Android та iOS для встановлення шпигунського програмного забезпечення, розробленого NSO Group: Pegasus. Це зловмисне програмне забезпечення здатне відстежувати всю діяльність пристрою та викрадати особисту інформацію: SMS, розмови WhatsApp і Signal, телефонні дзвінки тощо. У цій статті пояснюється, як за цих умов таке зловмисне програмне забезпечення зможе витягти всі секрети програмних гаманців і відмінності з точки зору безпеки між програмними гаманцями на мобільних телефонах і настільних комп’ютерах.

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

Захист секретів

Що зберігається в крипто-гаманці?

Гаманці насправді не зберігають криптовалюти користувачів: вони лише зберігають секрети, зокрема закриті ключі, які дозволяють отримати доступ до криптовалют і можливість їх витрачати. Ці особисті ключі здебільшого є закритими ключами ECC (криптографії на основі еліптичної кривої) на різних кривих залежно від блокчейну. Найпоширеніші криві: secp256k1 (Bitcoin, Ethereum…), Ed25519 (Monero) або BLS12-381 (Ethereum 2).

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

Зберігання цих ключів залежить від типу гаманця: детермінований чи ні. Ієрархічний детермінований (HD) гаманець дозволяє створити дерево ключів з єдиного головного секрету, що називається початковим (див. BIP44). Це початкове число часто походить від мнемонічної послідовності з 12, 18 або 24 слів, випадково згенерованих або вибраних користувачем (див.BIP39). Ці мнемоніки дозволяють обмежити кількість ключів, які потрібно зберегти: їх можна будь-коли перерахувати з вихідного коду. HD-гаманці зберігають лише цю мнемоніку або початковий код.

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

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

  • Захист від атак «злих служниць»: Зловмисник, який має тимчасовий доступ до гаманця, не повинен мати можливість додати бекдор всередину гаманця, що дозволяє викрасти PIN-код або секрети захисту пароля.
  • Захищений криптографічний матеріал: Ключі та nonce, згенеровані гаманцем, ніколи не повинні бути передбачуваними. Крім того, знання секретів (окрім насіннєвого коду), згенерованих у певний момент часу, не дозволяє передбачити секрет, який буде згенерований у майбутньому.
  • Захист у стані спокою: Якщо зловмисник отримує постійні дані програмного гаманця, він не повинен мати змоги отримати ключі.
  • Захист під час таємного використання: Коли гаманець розблоковано, ключі не повинні бути доступні для зловмисників або шкідливих програм.
Апаратні кошельки

Модель безпеки апаратного гаманця спрямована на уникнення цих загроз безпеці. Апаратні гаманці захищають від зловмисного програмного забезпечення. Це незалежні пристрої, які підписують транзакції самостійно. Криптографічні матеріали завжди залишаються всередині пристрою й ніколи не надсилаються до програми, з якою вони обмінюються даними. Інтерфейс зв’язку завжди простий, що значно зменшує поверхню атаки. Це може бути USB, Micro SD або камера + екран (через QR-код), або Bluetooth Low Energy.

Крім того, апаратні гаманці вбудовують екран безпосередньо в пристрій, що дозволяє користувачеві перевіряти дії, які він збирається виконати, коли він взаємодіє зі своїми секретними ключами. Ці ручні перевірки пристроїв є дуже ефективним засобом протидії зловмисному програмному забезпеченню на комп’ютері/мобільному пристрої. Там, де зловмисне програмне забезпечення на комп’ютері/мобільному пристрої може отримати доступ до секретів (початковий чи закритий ключ) або навіть поміняти/змінити адреси чи суми, коли користувач виконує транзакцію, це неможливо з апаратним гаманцем.

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

Кошельки програмного забезпечення

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

Далі розглядаються гаманці для настільних ПК (Windows, macOS, Linux) і мобільні гаманці. Основні відмінності між ними здебільшого залежать від механізмів безпеки, які пропонує операційна система.

Програмні гаманці на комп'ютер

Кілька популярних гаманців, таких як Electrum, Exodus, Atomic або Bitcoin core, працюють на комп’ютерах.

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

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

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

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

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

Два основні принципи безпеки для захисту ваших паролів — використання менеджера паролів і ніколи не використовуйте свій пароль повторно для різних цілей.

Найбільшу загрозу для програмних гаманців становлять спеціалізовані зловмисне програмне забезпечення та викрадачі, розроблені спеціально для викачування ваших коштів. Такі шкідливі програми, як KPOT або ЕлектроРАТ, навіть не потрібно підбирати ваш пароль: вони можуть безпосередньо перехопити його, коли ви його вводите, розшифрувати конфігураційні дані гаманця та вилучити початковий код.

Ось програма-іграшка, розроблена для цієї статті, яка націлена на гаманець Electrum (хоча це міг бути гаманець іншого програмного забезпечення). Він імітує шкідливе програмне забезпечення, яке викрадає пароль користувача, коли його вводить жертва. Потім пароль використовується для розшифровки даних гаманця та відображення початкового коду:

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

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

Щоб зробити висновок про програмні гаманці, які працюють на комп’ютерах:

  • У більшості випадків програмні гаманці, запущені на комп’ютерах, захищають початкове значення користувача за допомогою пароля.
  • Контроль доступу до цих файлів гаманця в основному залежить від безпеки комп’ютера. На практиці важко захистити комп’ютери від зловмисного програмного забезпечення, і оскільки криптовалюти стають мейнстрімом, атаки на гаманці ставатимуть все більш витонченими.
  • Використання таких програмних гаманців для захисту цифрових активів не є гарною ідеєю. Будь-яке спеціалізоване шкідливе програмне забезпечення зможе отримати файли гаманця та знайти паролі в автономному режимі або отримати пароль через кейлоггер.
Програмні гаманці на смартфон

Смартфони Android та iOS за замовчуванням пропонують функції безпеки, які рідко використовуються в настільних операційних системах.

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

Отже, шкідлива програма не може читати дані з іншої програми, за винятком випадків, коли:

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

На жаль, такі напади є. Вони набагато простіші на застарілих версіях Android та iOS, а також на старих або дешевих пристроях, де код сторонніх розробників часто менш безпечний.

На сучасній ОС ці атаки є складнішими, але не зовсім неможливими. Наприклад, Ян Бір показав надзвичайно вражаюча атака без кліків на iOS 13.5 у грудні 2020 року. Guang Gong представив використовувати ланцюг для віддаленого рутування широкого спектру пристроїв Android на базі Qualcomm у червні 2020 року. А два тижні тому Заборонені історії показали, що NSO Group використовувала ланцюжок експлойтів для націлювання на останні пристрої iOS і Android за допомогою 0-денних уразливостей.

Менш досвідчені зловмисники можуть використовувати локальні вразливості, що дозволяє їм витягувати дані гаманця зі шкідливої ​​програми. Посередники з уразливості, такі як Zerodium, платять до $ 200,000 для ескалації привілеїв для рутування на Android та iOS, але до 1,500,000 XNUMX XNUMX доларів США за віддалені атаки.

Ми вивчили кілька гаманців Android/iOS. Їхня безпека залежить від самої програми, а також від функцій безпеки основної ОС. Звичайно, коли безпека операційної системи порушена, програма більше не захищена

Зазвичай використовують два методи захисту насіння:

  • Захист паролем – дані гаманця захищені паролем, який вводить користувач. Дизайн такий же, як у настільних гаманців. На практиці отримати дані важче, ніж із комп’ютера, оскільки отримати дані програми зі зловмисної програми технічно складніше з причин, описаних вище. Однак відновити пароль після викрадення даних на практиці простіше: вводити складні паролі на мобільних телефонах утомливо, тому користувачі, як правило, вибирають простіші. Крім того, механізми виведення ключів (які використовуються для створення ключа з пароля) на мобільних пристроях зазвичай легше зламати, оскільки вони часто легші з міркувань продуктивності.
  • Coinomi і Metamask є прикладами таких гаманців.

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

Цей спосіб не є специфічним для гаманця. Його можна (більш-менш) легко адаптувати до будь-якого гаманця, захищеного паролем. Ось той же приклад із гаманцем Coinbase:

[Вбудоване вміст]

  • Безпека на основі Android Keystore (або iOS Keychain) – У цьому випадку дані гаманця шифруються за допомогою ключа шифрування, який зберігається в Android Keystore (iOS Keychain). Ці служби спочатку були розроблені для безпечного зберігання ключів шифрування, і багато програм використовують їх для створення ключа, який шифруватиме всі конфіденційні дані користувача. Програми, які використовують Keystore, реалізують такий механізм:
    • Програма просить сховище ключів створити ключ шифрування для заданого ідентифікатора. Keystore генерує ключ і надійно зберігає його.
    • Коли програма хоче зашифрувати або розшифрувати blob, вона надсилає blob разом із ідентифікатором ключа до сховища ключів.
    • Нарешті, сховище ключів перевіряє, чи дійсно програма має права використовувати цей ключ, і надсилає вихідні дані до програми.

У цій моделі програма не може знати значення ключа, але може його використовувати. До ключа також можна прив’язати додаткові елементи керування доступом: наприклад, доступ до ключа можна обумовити автентифікацією користувача (запит PIN-коду або шаблону розблокування).

Цей механізм може забезпечити додаткову безпеку порівняно із захистом на основі пароля. Дійсно, на останніх телефонах сховище ключів підтримується довіреним середовищем виконання (TEE) або іноді захищеним елементом.

Це означає, що зловмисник із привілеями root не зможе отримати ключі шифрування зі сховища ключів. Тим не менш, вони зможуть використовувати Keystore як оракул дешифрування, а також шифрувати або дешифрувати будь-які дані, які їм заманеться.

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

Це з простої причини: KeyStore і KeyChain пропонують стандартні служби підпису та шифрування, але не підтримують криптографію, яка використовується в криптовалютах. Наприклад, KeyStore реалізує підпис ECDSA, але лише на кривих NIST, визначених у FIPS 186-4 (P-224, P-256, P-384 і P-521). Біткойн використовує іншу криву, secp256k1, який ще не підтримується.

Підводячи підсумок, Keystore і Keychain є хорошими службами для захисту секретний і особистий ключі. Вони можуть запропонувати певну безпеку, шифруючи конфіденційні дані: деякі класи вразливостей (наприклад, читання довільного файлу) будуть прикріплені за допомогою шифрування Keystore. Однак, якщо підвищення привілеїв користувача недостатньо для вилучення значень ключів із апаратного сховища ключів, достатньо розшифрувати конфіденційні дані. Зловмисник, який може використовувати програму, може отримати її секрети.

Щоб зробити висновок щодо мобільних гаманців:

  • Механізм ізоляції між програмами, наданий iOS/Android, підвищує рівень безпеки порівняно з програмним гаманцем, запущеним на комп’ютері. Зловмиснику спочатку потрібна ескалація привілеїв, щоб отримати доступ до даних програми. Це можливо на застарілих пристроях. Досвідчені зловмисники (Ян Бір зробив це лише за 6 місяців, але… Це Ян Бір) також можуть зробити це на останніх виправлених пристроях.
  • Сервіси захисту ключів (KeyStore, KeyChain) могли б додати додатковий рівень безпеки для захисту секретів у спокої. Тим не менш, оскільки вони не підтримують криптографічні алгоритми для криптовалютних додатків, ключ все одно можна видобути.
  • У всіх випадках зловмисник із кореневим доступом може або отримати вихідний код у стані спокою, коли він використовується, або скористатися правами користувача, щоб спорожнити гаманець, використовуючи програмний гаманець як оракул.

Ось останній приклад іграшкового шпигунського ПЗ, націленого на гаманець Blockchain.com (хоча це можна так само легко виконати на багатьох інших гаманцях). Він встановлюється віддалено і стежить за гаманцем. Після автентифікації користувача за допомогою відбитка пальця ключ шифрування розблоковується, а дані гаманця розшифровуються. Шпигунське програмне забезпечення використовує програму для отримання цього ключа шифрування. Потім він передає ключ і дані гаманця на віддалений сервер:

[Вбудоване вміст]

Висновок

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

  • Механізм ізоляції між програмами, наданий iOS/Android, підвищує рівень безпеки порівняно з програмним гаманцем, запущеним на комп’ютері. Зловмиснику спочатку потрібна ескалація привілеїв, щоб отримати доступ до даних програми.
  • Сервіси захисту ключів (KeyStore, KeyChain) могли б додати додатковий рівень безпеки для захисту секретів у спокої. Тим не менш, оскільки вони не підтримують криптографічні алгоритми для криптовалютних програм, ключами потрібно маніпулювати безпосередньо з програми, тому вони пропонують обмежений захист.
  • У всіх випадках зловмисник із кореневим доступом може або отримати вихідний код у стані спокою, коли він використовується, або скористатися правами користувача, щоб спорожнити гаманець, використовуючи програмний гаманець як оракул.

Часова мітка:

Більше від Гросбух