Как защитить свой криптокошелек от продвинутого скама
Криптовалюты — это всё еще дикий запад: за 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
В результате все средства владельца кошелька начинают выводиться на подставные адреса. Кто-то даже заморочился, чтобы переименовать адреса мошенника и подписать их как «воришка» и «мошенник».
Как выглядит результат атаки через setApprovalForAll() в блокчейне. Источник: Etherscan.io
Почему это работает?
Метод довольно популярен. В апреле 2022 года им обчистили пользователей Bored Ape Yacht Club. Тогда злоумышленник взломал Инстаграм проекта и выложил ссылку на поддельный сайт с эйрдропом. Конечный сайт предлагал подписать контракт с функцией setApprovalForAll(), что не вызвало подозрений, поскольку она нужна для корректной передачи созданных NFT.
Взлом BAYC при помощи setApprovalForAll(). Источник: X.com/BoredApeYC
Чтобы избежать взлома, проверяйте окно подписи смарт-контракта: если увидите setApprovalForAll в окошке транзакции — вас скамят. Аналогичный совет и для появления функции SafeTransferFrom в подписи перевода.
Пример необратимой атаки на кошелек
После подписания контракта в список владельцев и доверенных лиц кошелька добавляется новый адрес. Этот адрес получает право одобрять или отклонять транзакции, что делает кошелек мультисигнатурным — таким, в котором владельцев больше, чем 1.
После того как кошелёк подвергнут такому нападению, его невозможно восстановить. Но существует способ предотвращения подобной атаки. Для этого достаточно добавить в свой кошелек один из собственных адресов в качестве добавочного владельца. Да, это потребует дополнительных подписей во время работы с адресом, но сделает невозможным его кражу в будущем.
Конечно, всегда следует держать сид-фразу при себе. Неважно, под каким предлогом у вас ее просят: «не твой сид — не твоя крипта».
Храните крипту в разных кошельках
Банальный, но действенный совет. Используйте разные кошельки, когда работаете с dApps и распределяете средства. Таким образом, у вас всегда будет адрес для проверки рискованных проектов и работы с предположительно опасными сайтами. Если все безопасно и с вашим проверочным кошельком ничего не произойдет, то можно использовать основной.
Что делать, если ваш криптокошелек обокрали
Первые 24 часа после кражи самые важные: за это время еще можно успеть отследить передвижение токенов по блокчейну и задействовать поддержку площадок, через которые они пройдут.
Для этого необходимо собрать доказательства кражи: фото переписок с нападавшим, адреса задействованных смарт-контрактов и свидетельство вывода монет с кошелька. Также следует получить хеш каждой транзакции, выполненной мошенником, и задокументировать хеш токенов, которые в ней участвовали.
При помощи эксплорера отследите путь токенов самостоятельно. Если они проходят через сваперы или обменные площадки со службой поддержки — немедленно обратитесь к ним, прикрепите к письму доказательства кражи и попросите пометить токены как подозрительные со своей стороны. В дальнейшем это поможет при вероятных судебных разбирательствах и ускорит процедуру блокировки криптовалют, если речь о стейблкоинах.
В случаях вывода средств через USDT — вы можете заблокировать их в кошельке мошенника, вовремя обратившись к Tether. На практике разрешение этого вопроса без вашего активного участия может занять больше месяца. Частные специалисты способны выполнить задачу за меньшее время, но будут сотрудничать только в случаях, когда сумма ущерба будет достаточной для получения комиссии за оказание услуги.