Як захистити свій криптогаманець від просунутого скаму
Криптовалюти — це все ще дикий захід: упродовж 2022 року було вкрадено понад $20 млрд у токенах та монетах. Щоб вас не пограбували, як диліжанс із золотом, слід дотримуватися низки не зовсім очевидних правил, які допоможуть зберегти гроші.
Згідно зі статистикою Chainalysis, 89% всіх атак припадають на DeFi-протоколи, особливо на кросчейн-застосунки, за допомогою яких користувачі торгують криптою в кількох блокчейнах одночасно. Щоб не стати частиною цієї сумної статистики, дотримуйтесь простих правил.
Тримайте адресу гаманця в таємниці. Розкриття адреси гаманця у публічному просторі неминуче призводить до деанонімізації: отримавши адресу гаманця, зловмисник може відстежувати рух коштів, пов’язати з іншими адресами та спостерігати за вашою діяльністю у режимі реального часу, щоб мати можливість продумати план атаки. І хоч не можна зламати гаманець, маючи лише публічну адресу, але, тримаючи в таємниці зміст адреси, ви уникнете зайвої публічності та спроб атаки за допомогою соціального інжинірингу.
Уважно вивчайте смартконтракти перед підписанням. Деякі криптовалютні гаманці, як-от TronLink, попросять вас прочитати ключові пункти смартконтракту, який ви збираєтеся підписати.
Серія атак використовує видавання контракту обміну криптовалюти на відправку всієї кількості випадкових монет на адресу нападника. Помітити це нескладно: у промті смартконтракту будуть розбіжності між монетами, що відправляються і обмінюються, як і в сумі відправлення.
Перевірте смартконтракт через сервіс аудиту. Маючи публічну адресу смартконтракту у блокчейні, ви можете перевірити його через незалежний сервіс аудиту. Наприклад, через Certik Skynet — агрегатор аналітики, пов’язаної зі смартконтрактами проєктів.
Цей експлорер збирає в одному місці всі метрики, пов’язані з безпекою коду, наявністю аудитів, їх результатами, динамікою впливу оновлення GitHub-бібліотеки на активність спільноти. Якщо показники «безпеки» смартконтракту перебувають у червоній зоні, то краще не мати з ним справи.
Перевіряйте dApp, з якими працюєте. Цей пункт розв’язує третину проблем, пов’язаних зі зламом гаманців та крадіжкою криптовалюти.
Різниця між підключенням та наданням привілеїв при під’єднанні криптогаманця до dApp:
- під’єднання гаманця через Wallet Connect: не надсилає токени без вашої згоди, ви схвалюєте або відхиляєте транзакції від dApp самостійно;
- надання привілеїв (Approvals): ця частина операцій передає право відправлення токенів сторонньому застосунку. Коли у віконці гаманця є слово, що схоже на Approve, — зупиніться й подумайте, кому і для чого ви надаєте ці права.
Перед схваленням смартконтракту поставте собі такі запитання:
- Дозвіл, який ви надаєте, необхідний для роботи застосунку?
- Чи збігається токен у запиті з токеном проєкту?
- Кількість токенів відповідає вашому запиту?
- Чи відрізняється тип вашого запиту? Наприклад, ви збиралися обміняти монету, а контракт пропонує передання прав на щось.
Приклад того, який вигляд має код смартконтракту, що «обкрадає», з коментарями
Зазвичай така операція виконується за допомогою функції vestingGrant(), через яку прописуються адреси одержувача і відправника. Узгоджуючи підпис такого смартконтракту, користувач фактично схвалює виведення своєї крипти на чужу адресу.
Підміна понять через функцію vestingGrant. Джерело: Etherscan.io
Є й інші підступніші способи атакувати гаманець через смартконтракт.
Базовий спосіб уникнути зламу — погуглити адресу смартконтракту, з яким ви збираєтеся працювати. Логіка тут очевидна — якщо ви не знаходите вайтпейпер, домашню сторінку проєкту або документацію з поясненням токеноміки, то, найімовірніше, це скам.
Приклад відстежування адреси токена. Джерело: Google.com
Другий крок — перевірити код токена. Зазвичай експлорери типу Etherscan відображають, чи верифікований код токена. Якщо такої опції немає й сайт пропонує вам зробити це — найімовірніше, це скам. Код скамерських токенів не верифікують, щоб уникнути їх позначення як небезпечних.
Приклад неверифікованого коду токена. Джерело: Etherscan.io
Перед роботою з підозрілим токеном переконайтеся, що він існує. Перевірте, чи є монета на CoinGecko, у списку dApp Radar, на TronScan або пошукайте у кількох блокчейнах через Blockchair.
Перевірте, чи не значиться адреса, з якою ви працюєте, в чорних списках. Зробити це можна використовуючи відкритий репозиторій GitHub, на основі якого фільтрує свої проєкти dApp Radar:
- відомі підозрілі адреси у блокчейні Binance;
- скам-токени в мережі Ethereum;
- адреси підозрілих монет на Polygon.
Скористайтеся сервісами автоматичної перевірки токенів
Наприклад, TokenSniffer — це автоматизований сервіс експрес-аналізу токенів щодо більшості відомих атак. Він інтегрований у пакет обслуговування WEB3 AML від Solidus Labs та залишається повністю публічним і безкоштовним для використання. Якщо рейтинг токена нижчий за 50 — найімовірніше, ви маєте справу зі скамом, але деякі спрацьовування ще можна списати на огріхи проєкту, з яким ви працюєте.
Інший популярний інструмент — honeypot.is. Він дає змогу перевірити токен на наявність заздалегідь закладених уразливостей, за допомогою яких шахраї можуть вкрасти вашу крипту. Схожий функціонал надає набір інструментів від DEXTools, який вибудовує метрики довіри до проєкту на основі прихованих перевірок.
Атака з використанням setApprovalForAll()
Зазвичай ця функція використовується, коли ви створюєте свій NFT на маркетплейсі або автентифікуєтеся через гаманець OpenSea або Blur. У цих випадках функція використовується NFT-маркетплейсом, щоб перемістити токени з вашого гаманця в гаманець покупця після їх продажу. Коли функція введена в дію, ви передаєте смартконтракту право на відправлення будь-якої кількості певного токена куди завгодно.
Якщо майданчик, до якого ви під’єднуєтесь за допомогою гаманця, заражений — нападник зможе вивести монети одразу ж. Найбільше такий тип атаки поширений серед застосунків, майданчиків та dApp, пов’язаних з NFT.
Ось такий вигляд має повідомлення про використання функції setApprovalForAll(). Коли у вікні смартконтракту вказано лише знайомий вам NFT-маркетплейс, то все безпечно. Однак якщо назва вебсайту в цьому полі буде містити помилки, то, імовірно, вас намагаються обдурити.
Приклад вікна з правильним використанням setApprovalForAll(). Джерело: Coinsbench.com
Який вигляд має злам гаманця через setApprovalForAll() у блокчейні?
Як приклад візьмемо адресу 0xAa8A064f79a75F91B5aF5Ba75bD5382d1185F1F7, яка після 5 невдалих спроб підписала транзакцію через фейковий вебсайт пре-мінту NFT.
Приклад підпису смартконтракту, який передає право володіння гаманцем. Джерело: Etherscan.io
Зрештою, всі кошти власника гаманця починають виводитись на підставні адреси. Хтось навіть заморочився та перейменував адреси шахраїв, підписавши їх «vorishka» і «mosheinik».
Який вигляд має результат атаки через setApprovalForAll() у блокчейні. Джерело: Etherscan.io
Чому це працює?
Метод доволі популярний. У квітні 2022 року з його допомогою обікрали користувачів Bored Ape Yacht Club. Тоді зловмисник зламав інстаграм проєкту та виклав посилання на фальшивий сайт з ейрдропом. Кінцевий сайт пропонував підписати контракт з функцією setApprovalForAll(), що не викликало підозри, оскільки вона потрібна для коректного передання створених NFT.
Злам BAYC за допомогою setApprovalForAll(). Джерело: X.com/BoredApeYC
Щоб уникнути зламу, перевіряйте вікно підпису смартконтракту: якщо побачите setApprovalForAll у вікні транзакції — вас скамлять. Аналогічною буде порада, якщо з’явиться функція SafeTransferFrom у підписі переказу.
Приклад незворотної атаки на гаманець
Після підписання контракту до списку власників та довірених осіб гаманця додається нова адреса. Ця адреса отримує право схвалювати або відхиляти транзакції, що робить гаманець мультисигнатурним — таким, який має більше, ніж одного власника.
Після того як гаманець зазнав подібного нападу, його неможливо відновити. Але існує спосіб запобігання такій атаці. Для цього достатньо додати до свого гаманця одну з власних адрес в ролі додаткового власника. Так, це потребуватиме додаткових підписів під час роботи з адресою, але унеможливить її крадіжку надалі.
Ну й звісно, завжди слід тримати сід-фразу в таємниці. Неважливо, для чого у вас її просять: «не твій сід — не твоя крипта».
Зберігайте крипту в різних гаманцях
Банальна, але дієва порада. Використовуйте різні гаманці, коли працюєте з dApps та розподіляєте кошти. Тоді у вас завжди буде адреса для перевірки ризикованих проєктів та роботи з потенційно небезпечними сайтами. Якщо все безпечно і з вашим перевіряльним гаманцем нічого не сталося, то можна використовувати основний.
Що робити, якщо ваш криптогаманець спустошили
Перші 24 години після крадіжки найважливіші: протягом цього часу ще можливо встигнути відстежити пересування токенів у блокчейні і залучити підтримку майданчиків, через які вони пройдуть.
Для цього необхідно зібрати докази крадіжки: фото листування з нападником, адреси залучених смартконтрактів та підтвердження виведення монет із гаманця. Також слід отримати хеш кожної транзакції, яку виконав шахрай, та задокументувати хеш токенів, що брали в ній участь.
За допомогою експлорера самостійно відстежте шлях токенів. Якщо вони проходять через свапери чи обмінні майданчики зі службою підтримки — негайно зверніться до них, прикріпіть до листа докази крадіжки та попросіть позначити токени як підозрілі. Надалі це допоможе під час імовірних судових розглядів та пришвидшить процедуру блокування криптовалют, якщо йдеться про стейблкоїни.
У разі виведення коштів через USDT — ви можете заблокувати їх у гаманці шахрая, вчасно звернувшись до Tether. На практиці розв’язання цього питання без вашої активної участі може тривати понад місяць. Приватні спеціалісти здатні виконати завдання упродовж меншого часу, але співпрацюватимуть лише тоді, коли сума збитків буде достатньою для отримання комісії за надання послуги.