Фишинг в Web3: как защитить себя и свои активы
Спам и фишинг — две извечные беды интернета на любом этапе его развития. Web3 здесь не исключение. О том, как противостоять фишинговым атакам на ваши криптоактивы, для читателей ForkLog рассказывает Владимир Менаскоп.
Три кита: безопасность, диверсификация, кастомизация
Если для вас это просто набор слов — самое время задуматься: без этих трех шагов ваш криптомир никогда не станет прекрасным. Начнем с безопасности.
Про нее я уже рассказывал здесь и здесь, поэтому сейчас подчеркну лишь те моменты, о которых не писал ранее:
- Если вы уделяете безопасности время лишь раз в год, то вы уже потенциально взломаны. И неважно, будет это попадание вашей почты в спам-базу или слив пароля с какого-то сайта (скажем, обменника).
- Если используете только удобное, но закрытое ПО, то вы уже потенциально взломаны. OS-сообщество работает, как правило, и оперативней, и дружней, но главное — всегда, а не от случая к случаю.
- Если не пробовали работать со сложными расширениями, кошельками и другими официальным dapps вроде Bitcoin Core или Polkadot JS, то, скорее всего, вы не до конца «прощупали» процесс и потенциально — да — уже взломаны.
Конечно, все три тезиса звучат как страшилка для детей, но следующие примеры доказывают обратное.
Пример №1. Наш заклятый враг — нет, не лестница, но реклама
Однажды поздно вечером мне нужно было обменять небольшую сумму в ETH. Куда в этом случае пойдет большинство из нас? Вот и я пошел на BestChange. Но нарушив собственное правило: «Набирать адрес руками, а не через поиск».
Вбил в Google (что было роковой ошибкой, но так уж случается, что ошибки всегда следуют друг за другом) и перешел по первой ссылке.
Как нетрудно догадаться, она оказалась фишинговая. «Корпорация добра» отфильтровывала в своем поисковике криптопроекты, но только честные. А вот фишинговые сайты, подражающие самому крупному агрегатору, — нет. Да и сделана была реплика сервиса на отлично: ни багов, ни опечаток, даже SSL-сертификат стоял. И разница — в одной букве. В общем, классика, хорошо отрежисированная и нарисованная.
В итоге нашел нужное мне направление и перешел на сайт, который, конечно же, тоже был фейковым. Более того, похож как две капли воды на тот, на котором я когда-то менялся. И тут я совершил третью непростительную ошибку: не вошел в личный кабинет, так как сумма казалось небольшой и время было уже не детское.
Все. Эфир мой навсегда осел в карманах мошенников.
Как можно было этого избежать?
Вот набор простых рецептов:
- Адреса сайтов, которыми пользуетесь (DEX, кошельки, агрегаторы), надо запоминать и вводить вручную, а также добавлять в закладки: уже как минимум два источника для сверки будет. И лишь потом можно использовать поисковики как третий независимый источник: и желательно не Google, Yandex или Baidu, а что-то без рекламы и прочего спама. Несколько рабочих вариантов можно найти здесь.
- Везде, где можно что-то кастомизировать, это нужно обязательно сделать: обои в Gmail, авторизация в партнерке на BestChange, личный кабинет в обменнике и многое другое. Особенно хорошо действуют приветственные записи и внутренние названия аккаунтов: даже CEX до этого доросли и применяют, а в децентрализованном мире обходиться без этого — грех.
- И, конечно, всегда нужно проверять сами кошельки (номера): у обменников они часто индексируются.
По отдельности эти пункты работают плохо, но вместе — вполне. Фишинговая реклама до сих пор попадается в Facebook, так что мой пример будет актуален еще долго.
Пример №2. Апрувы — боль криптомира
Этот случай, в отличие от предыдущего, произошел не со мной и совсем недавно. Попробую восстановить хронологию.
Изначально у криптоэнтузиаста (назовем его для краткости Е.) был сид от аппаратного кошелька Trezor, на котором хранился BTC под passphrase, что само по себе отличный набор.
Но далее началась серия ошибок. Цитирую: «Этот сид импортировал в [мобильный кошелек]. Видимо, чтобы проверить, как работает импорт, и убедиться, что наличия биткоина в мобильном кошельке не видно. Так и было, убедился».
Импорт сид-фразы из аппаратного кошелька в мобильный — серьезная ошибка: теряется весь смысл нахождения ключей на устройстве. Но цитирую дальше:
«Осенью 2022 года сменил PC на Mac и поставил на него MetaMask как расширение Chrome, потому что без него тоже неудобно жить. [Но долгое время не] использовал его. Решив использовать этот же сид для операций с токенами BEP-20, пополнил [кошелек] 1 декабря 2022 года небольшой порцией BNB от кого-то и, видимо, стал куда-то коннектиться через Wallet Connect (куда и зачем, не помню)».
И вот здесь хорошо заметна разница: сама библиотека Wallet Connect не раз подвергалась атакам, в том числе фишинговым, и фактически средства находились уже не офлайн, а онлайн (после импорта сид-фразы). То есть опасность возросла минимум в два раза в сравнении со стандартным хранением на Trezor.
Идем далее по рассказу потерпевшего: «В процессе коннекта и [тестов] сделал апрув мошеннику на операции с BUSD (зачем, не помню), а поскольку это был Wallet Connect и интерфейс там не очень, [плюс] — торможение, [то] этого не понял или не придал значения. Важно, что апрув сделан мною на [мобильном кошельке] через Wallet Connect. Уточнил [это] у [разработчиков мобильного кошелька], скрин это показывает точно. То есть MetaMask тут ни при чем».
Важно из этой части цитаты вынести следующий факт: все в криптомире постоянно меняется. Поэтому, когда мы что-то делаем неосознанно, потом сложно восстановить полную картину и определить контролируемый уровень безопасности. Дальнейшее изложение — прямое тому свидетельство. Цитирую:
«[Позже в мобильном кошельке] не работал Wallet Connect, а мне надо было сделать SBT, и я перешел в MetaMask и [стал] делать операции в сети BSC с него, коннектиться к сайту dapps... Все было ок, а поскольку токен BUSD BEP-20 тут не участвовал, красть скамеру, у которого был доступ, было нечего, апрув ждал своего часа».
Так оно и есть. Апрув, выданный на скомпрометированный адрес или смарт-контракт, может висеть почти бесконечно. Поэтому первое, что нужно при восстановлении действий с тем или иным аккаунтом (кошельком), — это проверить выданные апрувы. Где и как? Расскажу ниже.
Идем дальше по рассказу: «На прошлой неделе прошла информация о том, что Binance будет делистить оригинальный BUSD от Paxos до 15 декабря [2023 года], и я под это дело решил избавиться от всех централизованных стейблов. Поменял крупную сумму USDT TRC-20 на биткоин (удачно, он пошел в рост), оставался BUSD BEP-20 на другом кошельке ($2640 — вся сумма). Тут коллеге в [городе] потребовалась [фиатная валюта] на карту [банка], в связи с чем я [помаялся c] MetaMask и оставил вопрос на потом, решив, что, пожалуй, обменяю таким образом часть BUSD BEP-20 на рубли в [обменнике] и переправлю человеку. В общем, BUSD в уме я решил израсходовать на текущие дела, так как избавляться от CEX-стейблов фундаментально надо. Мотив — „BUSD в расход полностью...“»
То есть, как видим, средства лежали на кошельке какое-то время, и поэтому аккаунтом человек активно не пользовался. А вот чем история закончилась:
«Сегодня ночью перед сном думаю, не поменять ли в [мобильном кошельке] BUSD на биткоин, чтобы не гонять его туда-сюда (лучше б поменял). Отказываюсь, решаю таки перекинуть BUSD BEP-20 полностью ($2640) на сид в MetaMask, чтобы потестить [обменник]... ну и вообще избавиться путем расходования. Выполняю операцию в [мобильном кошельке] из одного сида, убеждаюсь, что на второй сид (который в [мобильном кошельке] и MetaMask) токены пришли в полном объеме, и засыпаю. Ну а утром вижу уведомления на почте от BscScan, что токены списаны на левый адрес сразу после поступления вот этой транзакцией… Написал тебе, и ты выяснил, что апрув годичной давности лежал и ждал своего часа. Дождался».
История грустная. Итог плачевный. Но давайте попробуем выудить нечто позитивное.
1. Холодный кошелек и горячий на одном MetaMask быть не могут. Также нет смысла куда-то интегрировать аппаратный кошелек через сид (кроме случаев экстренного восстановления). А вот интеграция Trezor и MetaMask вполне уместна.
2. Если долго не пользовались кошельком, обязательно проверьте апрувы. Где? По ссылкам (условно можно выделить работу с аппрувами через сканеры и через специальные сервисы, но здесь будет единый перечень):
- Ethereum — etherscan.io/tokenapprovalchecker;
- Polygon — polygonscan.com/tokenapprovalchecker;
- BSC — bscscan.com/tokenapprovalchecker;
- Optimism — optimistic.etherscan.io/tokenapprovalchecker;
- Arbitrum — arbiscan.io/tokenapprovalchecker;
- approvals.xyz;
- cointool.app/approve;
- approved.zone;
- revoke.cash.
3. И, конечно, всегда надо рассчитывать не только на себя, но на выстроенную и верифицируемую (важно: кем угодно, а не единожды и вами) систему безопасности. Примеров обратного хоть отбавляй: вот один из последних, а вот еще один. Ломают всех: и если против вас еще не совершались векторные атаки, то это лишь потому, что вы как Неуловимый Джо — пока в списках не значитесь.
Нулевое правило безопасности для меня потому и звучит так: «Взломать можно любую систему». Вопрос всегда в цене и во времени. Если это слишком долго или дорого, то ломать не будут (кроме деструктивных атак, речь о которых надо вести отдельно).
Пример №3. Диверсификация работает, но требует привычки
Представим, что вы охотник за баунти, аирдропами и подобными вещами. Что именно вы делаете? Тестируете новые сервисы и системы. Сначала немного, потом больше, затем несколько сразу, и вот вы уже наловчились работать с разными стартапами: от нишевых до отраслевых.
Но в этот момент ваш базовый кошелек становится буквально переполнен апрувами для смартов и разрешениями для сервисов, а браузер — закладками сайтов и прочими атрибутами интенсивного цифрового погружения.
В этот момент на вас непременно начнут нападать:
- Через поддельные аккаунты в X. Даже если вы устоите в игре «найди 10 отличий», никто не застрахован от взлома официального аккаунта и фишинговых ссылок от него. Такое, как видимо, происходит даже с SEC или Виталиком Бутериным.
- Через электронную почту. Спамить будут много и хорошо, как через специальные сервисы, так и стандартные рассылочные, а еще через подписки. Поэтому у меня Gmail открыт как адрес для всех, а для важных сервисов есть адреса непубличные — тем более что в Web3 давно нет дефицита необходимых инструментов.
- Через Telegram, Discord и прочие мессенджеры. С этим жить вообще тяжело. Если вы активный участник криптокомьюнити, то сами замечали, что спам по группам рассылается молниеносно и параллельно.
Все это перечислил для того, чтобы вы сделали один вывод: взломать могут каждого. Но от этого есть противоядие: диверсификация.
Скажем, получили ретродпроп на кошелек, предварительно проделав все описанные выше процедуры (проверили апрувы и тому подобное). Что потом? Надо все перевести на другой кошелек, который или вообще не взаимодействует с онлайном, или делает это крайне редко. Так вы сможете оставлять на горячем кошельке только то, что готовы потерять — и не более.
Здесь стоит привести еще ряд немаловажных советов:
- Надо всегда оставаться в курсе. Читать ForkLog и другие издания — скажем, через агрегатор. Кажется, что совет так себе, но он на самом деле позволяет выявить до двух третей атак. Каким образом? Взломали чей-то сайт, протокол, подменили DNS, а вы уже в курсе и не идете на тот ресурс сегодня. Когда восстановят — пожалуйста, а сегодня — нет. Благо жизнь фишинговых сайтов крайне короткая.
- Хотя бы бегло изучать что-то по безопасности:
- Xakep.ru — мой личный гость в выходные вот уже лет 15;
- AuditDB, Dynamic и другие специализированные ресурсы;
- закрытые форумы вроде Exploit.in.
- Обязательно нужно подтверждать любые аирдропы и прочее через несколько ресурсов. Вспомните о взломе Galxe — хотя бы для предотвращения подобного. Стандартный набор: а) официальный сайт; б) социальные сети; в) СМИ.
Опять же, все по отдельности это работает плохо, а вот в совокупности дает преимущество. К перечисленному добавлю еще три эмпирических правила (читай — закона):
- Если можешь подождать — подожди. Но не слишком долго: не так давно мне удалось пропустить ретродроп, потому что просто перепутал даты.
- Если взломали кого-то из ваших знакомых, от открытого комьюнити до друзей, родственников и прочих близких — будьте на чеку.
- Если считаете, что все знаете, то вспомните про взлом через обратный апрув в BSC и забудьте об окончательности и универсальности подобных знаний. Навсегда.
Ваши ключи — ваши деньги
Многие считают: все рассказанное выше и подобные случаи — прямое свидетельство того, что абстракция аккаунта и разного рода отзывные (обратимые) транзакции решат проблему.
Я же, напротив, уверен в обратном. Если вы гуляете по темной улице в ночное время даже в спокойной Швейцарии, не обладая навыки самообороны, то рискуете нарваться на одного-единственного хулигана, который даст вам по голове «тяжелым тупым предметом» и заберет ваш кошелек, смартфон и обручальное кольцо.
Поэтому цифровая гигиена должна стать для каждого из нас такой же необходимостью, как чистить зубы по утрам или мыть руки перед едой. По другому нельзя, и это подтверждают взломы разного масштаба. Приведу еще один пример.
Пример №4. KYA, или знай с чем и кем работаешь
Случай произошел недавно. Человек торговал через CEX и решил вывести средства. Скопировал адрес и вставил в строку вывода. Нажал подтверждение и ушел пить чай.
Вернувшись, он увидел, что средства ушли не туда. Сработала стандартная система подстановки адреса. И модификаций у нее множество:
- «отравленные» транзакции и адреса, с которыми теперь приходится бороться и кошелькам, и сканерам;
- стандартные кейлогеры, трояны и прочее вредоносное ПО, которого пруд пруди в даркенте и которым могут пользоваться, что самое страшное, скрипт-кидди;
- подмена кошелька: мобильного, десктопного или в виде расширения — неважно. Скачали не тот бинарник — и все. И даже загрузка с офсайта не поможет — достаточно вспомнить случай Atomic Wallet.
Но и с этим можно бороться. Вот простые механики:
- обновляйтесь после просмотра новостей, а не до;
- если обновление не критическое, подождите несколько дней и понаблюдайте за лентой: от уязвимостей нулевого дня это не спасет, но от многих более мелких бед — вполне;
- постарайтесь изучить документацию того ПО, которым пользуетесь: почитайте гит, познакомьтесь с разработчиками (в мире OS это не так сложно), полистайте форумы, а главное — попробуйте стать хотя бы продвинутым пользователям этого софта;
- если есть возможность, а она почти всегда есть, сверять хеш-суммы, SSL-сертификаты, PGN и так далее.
Нельзя забывать, что в технологиях самое слабое звено — человек. Усталость, работа без перерывов и без жесткого финансового графика ведут в итоге к потерям, а не дополнительному заработку. Помните об этом.
Итог. Идеальная схема брони против фишинга
Ее не существует. Почему? Потому что идеальная в данном случае значит индивидуальная. Конечно, какие-то моменты игнорировать не стоит, но в остальном фантазия — лучший помощник.
Попробую собрать базовые механизмы самозащиты в виде чек-листа.
- Ограничьте себя во времени. С 9:00 до 21:00 в будние дни — вполне хватает, чтобы решать 99% задач. Но можете индивидуализировать и здесь: например, работать с активами больше определенной суммы только по выходным.
- Кастомизируйте все, что можно: от почты и мессенджеров до кошельков и личных кабинетов DEX. Чем больше деталей, о которых знаете только вы, тем сложнее будет вас подловить.
- Не гнушайтесь разного рода уведомлениями и дополнительными средствами защиты. Разграничивайте холодные и горячие кошельки, ставьте оповещения на сканерах и специальных сервисах (HAL.xyz, Cielo). Словом, учитесь создавать IFTTT-режим под себя.
- Диверсифицируйте активы хотя бы по трем категориям: базовые инвестиции, рабочие инструменты, стабилизационный фонд. И помните, что диверсификации, как и децентрализации, много не бывает.
- Будьте в курсе. Изучайте новости до того, как перевести крупную сумму денег со скомпрометированной сервиса, а не после. Помните, что уже сегодня есть видео- и голосовые дипфейк-сообщения и ищите свои способы верификации на ОТС/P2P-обменах.
- Не забывайте, что мы работаем в недоверенной среде. Спам-фильтры Gmail не идеальны, кошельки на CEX — не кошельки, ваши ERC-20 с апрувом на любом протоколе — не ваши. И если подверглись атаке, помогите другим: сообщите о фишинге в Google, Yandex и специализированные ресурсы вроде AMLBot и Chainabuse.
- Не проходите мимо новых функций кошельков. Меня, к слову, не так давно спасла вот эта наработка от MetaMask.
- Постарайтесь усложнять уровень работы с сервисами. Скажем, фишинговых токенов в Ethereum полно, но в 9 из 10 случаев сканер отображает их довольно оперативно и точно, а продвинутые инструменты — тем более.
- И главное правило безопасности: взломать можно любую систему. Исходите из этого тезиса, тогда станут понятны и объяснимы все вышеперечисленные пункты.