Как защитить свой криптокошелек от продвинутого скама

Фото - Как защитить свой криптокошелек от продвинутого скама
Криптовалюты — это всё еще дикий запад: за 2022 год было украдено больше $20 млрд в токенах и монетах. Чтобы вас не ограбили, как дилижанс с золотом, следует соблюдать ряд не совсем очевидных правил, которые помогут сберечь деньги.
Согласно статистике Chainalysis, 89% всех атак приходится на DeFi-протоколы, в особенности на кроссчейн-приложения, при помощи которых пользователи торгуют криптой в нескольких блокчейнах одновременно. Чтобы не стать частью этой грустной статистики, следуйте ряду простых правил. 

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

Внимательно изучайте смарт-контракты перед подписанием. Некоторые криптовалютные кошельки, вроде TronLink, попросят вас прочесть ключевые пункты смарт-контракта, который вы собираетесь подписать. 

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

Проверьте смарт-контракт через сервис аудита. Имея публичный адрес смарт-контракта в блокчейне, вы можете проверить его через независимый сервис аудита. Например, через Certik Skynet — агрегатор аналитики, связанной со смарт-контрактами проектов. 

Этот эксплорер собирает в одном месте все метрики, связанные с безопасностью кода, наличием аудитов, их результатами, динамикой влияния обновления GitHub-библиотеки на активность сообщества. Если показатели «безопасности» смарт-контракта находятся в красной зоне, то лучше не иметь с ним дела. 

Проверяйте dApp, с которыми работаете. Этот пункт решает ⅓ проблемы, связанной со взломом кошельков и кражей криптовалюты. 

Разница между подключением и выдачей привилегий при подсоединении криптокошелька к dApp:

  • подключение кошелька через Wallet Connect: не подразумевает перевод токенов без вашего согласия, вы одобряете или отклоняете транзакции от dApp самостоятельно; 
  • выдача привилегий (Approvals): эта часть операций подразумевает передачу права отправки токенов стороннему приложению. Когда в окошке кошелька есть слово, похожее на Approve, — остановитесь и подумайте, кому и для чего вы даете эти права. 

Перед одобрением смарт-контракта задайтесь рядом вопросов:

  1. Разрешение, которое вы даете, необходимо для работы приложения? 
  2. Совпадает ли токен в запросе с токеном проекта?
  3. Количество токенов совпадает с вашим запросом?
  4. Отличается ли тип вашего запроса? Например, вы собирались обменять монету, но контракт предполагает передачу прав на что-то. 

Пример того, как выглядит код «обворовывающего» смарт-контракта с комментариями

Обычно, подобная операция выполняется при помощи функции vestingGrant(), через которую прописываются адреса получателя и отправителя. Согласовывая подпись такого смарт-контракта, пользователь по сути одобряет вывод своей крипты на чужой адрес. 
Подмена понятий через функцию vestingGrant. Источник: Etherscan.io

Подмена понятий через функцию vestingGrant. Источник: Etherscan.io

Есть и другие более коварные способы атаковать кошелек через смарт-контракт. 

Самый базовый способ избежать взлома — погуглить адрес смарт-контракта, с которым вы собираетесь работать. Логика очень проста — если вы не находите вайтпейпер, домашнюю страницу проекта или документации с объяснением токеномики, то, скорее всего, это скам. 
Пример отслеживания адреса токена. Источник: Google.com

Пример отслеживания адреса токена. Источник: Google.com

Второй шаг — проверить код токена. Обычно, эксплореры вроде Etherscan отображают, верифицирован ли код токена. Если такой опции нет и сайт предлагает вам сделать это — скорее всего, это скам. Код скамерских токенов не верифицируют, чтобы избежать их пометки как опасных. 
Пример неверифицированного кода токена. Источник: Etherscan.io

Пример неверифицированного кода токена. Источник: Etherscan.io

Перед работой с подозрительным токеном убедитесь, что он вообще существует. Проверьте, есть ли монета на CoinGecko, в списке dApp Radar, на TronScan или поищите в нескольких блокчейнах через Blockchair. 

Проверьте, не находится ли адрес, с которым вы работаете, в черных списках. Сделать это можно используя открытый репозиторий GitHub, на основе которого фильтрует свои проекты dApp Radar: 

Воспользуйтесь сервисами автоматической проверки токенов

Например, TokenSniffer — это автоматизированный сервис экспресс-анализа токенов на предмет большинства известных атак. Он интегрирован в пакет обслуживания WEB3 AML от Solidus Labs и остается полностью публичным и бесплатным для использования. Если рейтинг токена ниже 50 — скорее всего, вы имеете дело со скамом, но некоторые срабатывания еще можно списать на огрехи проекта, с которым вы работаете. 

Другой популярный инструмент — honeypot.is. Он позволяет проверить токен на наличие заранее заложенных уязвимостей, при помощи которых мошенник украдет вашу крипту. Похожий функционал предоставляет набор инструментов от DEXTools, который выстраивает метрики доверия к проекту на основе скрытых проверок. 

Атака с использованием setApprovalForAll()

Обычно, эта функция используется, когда вы создаете свой NFT на маркетплейсе или аутентифицируетесь через кошелек на OpenSea или Blur. В этих случаях функция используется NFT-маркетплейсом, чтобы переместить токены из вашего кошелька в кошелек покупателя после их продажи. Когда функция задействована, вы передаете смарт-контракту право отправки любого количества определенного токена куда угодно. 

Если площадка, к которой вы подключаетесь при помощи кошелька, заражена — нападающий сможет вывести монеты сразу же. Чаще всего эта атака распространена среди приложений, площадок и dApp, связанных с NFT. 

Вот как выглядит сообщение о задействовании функции setApprovalForAll(). Когда в окне смарт-контракта указан только знакомый вам NFT-маркетплейс, то все безопасно. Однако если название веб-сайта в этом поле будет содержать опечатки, то высока вероятность, что вас пытаются обмануть. 
Пример окна с правильным использованием setApprovalForAll(). Источник: Coinsbench.com

Пример окна с правильным использованием setApprovalForAll(). Источник: Coinsbench.com

Как выглядит взлом кошелька через setApprovalForAll() в блокчейне? 

Возьмем в качестве примера адрес 0xAa8A064f79a75F91B5aF5Ba75bD5382d1185F1F7, который спустя 5 неудачных попыток подписал транзакцию через фейковый веб-сайт пре-минта NFT. 
Пример подписи смарт-контракта, который передает право владения кошельком. Источник: Etherscan.io

Пример подписи смарт-контракта, который передает право владения кошельком. Источник: Etherscan.io

В результате все средства владельца кошелька начинают выводиться на подставные адреса. Кто-то даже заморочился, чтобы переименовать адреса мошенника и подписать их как «воришка» и «мошенник». 
Как выглядит результат атаки через setApprovalForAll() в блокчейне. Источник: Etherscan.io

Как выглядит результат атаки через setApprovalForAll() в блокчейне. Источник: Etherscan.io

Почему это работает?

Метод довольно популярен. В апреле 2022 года им обчистили пользователей Bored Ape Yacht Club. Тогда злоумышленник взломал Инстаграм проекта и выложил ссылку на поддельный сайт с эйрдропом. Конечный сайт предлагал подписать контракт с функцией setApprovalForAll(), что не вызвало подозрений, поскольку она нужна для корректной передачи созданных NFT. 
Взлом BAYC при помощи setApprovalForAll(). Источник: X.com/BoredApeYC

Взлом BAYC при помощи setApprovalForAll(). Источник: X.com/BoredApeYC

Чтобы избежать взлома, проверяйте окно подписи смарт-контракта: если увидите setApprovalForAll в окошке транзакции — вас скамят. Аналогичный совет и для появления функции SafeTransferFrom в подписи перевода. 

Пример необратимой атаки на кошелек

После подписания контракта в список владельцев и доверенных лиц кошелька добавляется новый адрес. Этот адрес получает право одобрять или отклонять транзакции, что делает кошелек мультисигнатурным — таким, в котором владельцев больше, чем 1. 

После того как кошелёк подвергнут такому нападению, его невозможно восстановить. Но существует способ предотвращения подобной атаки. Для этого достаточно добавить в свой кошелек один из собственных адресов в качестве добавочного владельца. Да, это потребует дополнительных подписей во время работы с адресом, но сделает невозможным его кражу в будущем. 

Конечно, всегда следует держать сид-фразу при себе. Неважно, под каким предлогом у вас ее просят: «не твой сид — не твоя крипта». 

Храните крипту в разных кошельках

Банальный, но действенный совет. Используйте разные кошельки, когда работаете с dApps и распределяете средства. Таким образом, у вас всегда будет адрес для проверки рискованных проектов и работы с предположительно опасными сайтами. Если все безопасно и с вашим проверочным кошельком ничего не произойдет, то можно использовать основной. 

Что делать, если ваш криптокошелек обокрали

Первые 24 часа после кражи самые важные: за это время еще можно успеть отследить передвижение токенов по блокчейну и задействовать поддержку площадок, через которые они пройдут. 

Для этого необходимо собрать доказательства кражи: фото переписок с нападавшим, адреса задействованных смарт-контрактов и свидетельство вывода монет с кошелька. Также следует получить хеш каждой транзакции, выполненной мошенником, и задокументировать хеш токенов, которые в ней участвовали. 

При помощи эксплорера отследите путь токенов самостоятельно. Если они проходят через сваперы или обменные площадки со службой поддержки — немедленно обратитесь к ним, прикрепите к письму доказательства кражи и попросите пометить токены как подозрительные со своей стороны. В дальнейшем это поможет при вероятных судебных разбирательствах и ускорит процедуру блокировки криптовалют, если речь о стейблкоинах. 

В случаях вывода средств через USDT — вы можете заблокировать их в кошельке мошенника, вовремя обратившись к Tether. На практике разрешение этого вопроса без вашего активного участия может занять больше месяца. Частные специалисты способны выполнить задачу за меньшее время, но будут сотрудничать только в случаях, когда сумма ущерба будет достаточной для получения комиссии за оказание услуги.