Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Множество людей сталкиваются с обманом по жизни, и если лет 40 назад было трудно представить себе, что кто-то может лишить тебя средств, совсем не напрягаясь, на сегодняшний день это не просто возможно, теперь это необратимое сопутствие реальности. Сегодня поговорим о криптокошельках, seed-фразах и о том, как злоумышленник может лишить обычного пользователя всех его сбережений.
Эта публикация будет перегружена всякой арифметикой, механикой и принципами работы, а ещё практикой, должно быть интересно. Но прежде чем начать, позвольте предупредить.
Автор ни в коем случае не побуждает никого к злодеяниям, весь этот рассказ основывается лишь на желании проинформировать рядовых пользователей об оплошностях и ошибках, которые они могли допустить. А раз человек проинформирован, то практически защищен, такова моя логика.
Блокчейн — самая надежная в мире система, которую нельзя скомпрометировать. Так ли это на самом деле?
Безусловно, криптовалюты на данном этапе своего развития можно приравнять к самому современному сейфу внутри ещё одного такого же сейфа. Можно много разглагольствовать, задавая вопрос «почему», но давайте взглянем правде в глаза.
Как же на самом деле все это работает?
Сама технология, на которой основывается большинство криптовалют, действительно практически неузявима. Блокчейн. Работая на принципе распределенного способа знаний, основной силе криптовалюты, и будучи децентрализованным, он действует на независимых серверах и узлах по всему миру. Здесь ещё и выплывает понятие консенсуса Proof-of-Work, простыми словами, это взаимозависимость от соглашений других пользователей. У каждой валюты имеются десятки тысяч контролирующих её серверов.
Возможно ли полностью скомпрометировать криптовалюты?
Дабы подчинить себе эту сеть, нужно завладеть всем и сразу. Звучит невозможно. А кто говорил, что это нужно?
Стоит только нам вбить в поисковик, что-то типа «биткоин был скомпрометирован», и мы сразу же заметим целую тучу результатов. Дело все в том, что не так уж и однозначно обстоят дела у нас. Даже если сам по себе принцип прекрасно работает, то никто и никогда не пытался контролировать пользователей этого чудо-механизма, а как вы знаете, люди — самая эмоционально нестабильная и непредсказуемая субстанция во Вселенной. Они могут как совершать героические или гениальные поступки, так и непостижимые глупости, хотя между первым и вторым прошло не больше минуты.
Как вы уже могли понять, читатели, несмотря на высокую надежность самой технологии, нет никакой гарантии застраховаться от человеческих ошибок.
Слабая часть сознания или как жажда упростить себе жизнь губит тысячи людей
Представим себе некоего человека, для простоты дадим ему имя Аянокоджи. Этот самый Аянокоджи, создает криптокошелек, ведь ему очень хочется инвестировать туда несколько шекелей. Создает очень прочный и надежный пароль, на подбор которого уйдет несколько веков. К примеру, 4Xp0Q@43{?SqAjpCB*O47deU, здесь 24 символа, присутствуют заглавные буквы, специальные символы и числа. Идеально, могли бы вы подумать, но наш персонаж физически не способен удержать подобные значения в своей голове. Посему он создаст текстовый документ у себя на машине, где и оставит пароль, или просто сохранит его в браузере.
На дворе условный 2017 год, лето. Именно в это время свирепствовала уязвимость EternalBlue в протоколе SMB, подвержены этой напасти были практически все устройства мира. Наш персонаж — не исключение. Его пароль от кошелька оказывается у злоумышленника.
Другой возможный сценарий был бы провернут через почту. Допустим, что у Аянокоджи почтовый сервис типа Рамблер, создавал он его, когда в школе учился, и пароль там — John123. Парам-пам-пам, кошелек снова очутился у злодея в руках.
В наше время действует одна очень простая закономерность — чем больше появляется новых технологий, способов и систем, тем больше лазеек, новых способов и схем обмана. Если раньше злоумышленнику было достаточно напрямую спросить: “А какой у тебя пароль?”, то сейчас это происходит совсем иначе и зачастую жертва даже не понимает, что её обманули.
Что я могу посоветовать? Пользуйтесь пером и бумагой, самый старый и проверенный временем метод, хоть и не идеальный, но надежней, чем прочие. Совершенствует его лишь ваша бдительность.
Это была самая простая часть статьи, двигаемся дальше.
Мнемонические недочеты. Концепт не соблюден: ожидания и реальность
Итак, здесь очень будет много сложных слов и практических тестов, поэтому возьмите шапочку из фольги или приготовьте чая. Я предупредил. Поехали.
Основным вариантом доступа к криптокошелькам, даже на сегодняшний день является мнемоническая фраза.
Seed-фраза (мнемоническая) — это набор из 12 или более слов, который используется для восстановления доступа к кошельку. Имея на руках этот порядок символов, злоумышленник может привязать кошелек к практически любому сервису для менеджмента и спокойненько его опустошить.
Желание наживы всегда ведет в ловушку — или как тебя обманут, продавая скрипты для подбора мнемонических фраз
На данный момент в сети существует очень много скриптов, программ и утилит, якобы для “взлома” кошельков старого типа. Все авторы и люди, распространяющие это дело, спекулируют новостью, что таких кошельков существует около двух миллионов и застряло там больше 144 миллиардов долларов. Это действительно так, социальная инженерия, основанная на реальных фактах, во всей красе.
BitGen — один из таких репозиториев, автор на GitHub заявляет, что ему удалось словить несколько кошельков с балансом больше одного биткоина. Скачаем архив, установим Python на наше устройство. Далее переходим в директорию со скриптом, открываем CMD и запускаем скрипт, прежде установив зависимости:
cd BitGen-master
pip install -r requirements.txt
python3 main.py
И вот, как бы пошел процесс генерации кошельков и мнемонических фраз к ним, то есть те самые 12 слов, которые каждый сервис просит тебя выбрать при регистрации. Минута, вторая и… Мой айпи отлетает в бан на сервере блокчейна из-за множества исходящих запросов. А все IP VPNов уже давным давно заблокированы.
Окей, существует вторая версия, которая уже идет с TOR’ом и её даже смысла проверять нет. Ведь сама по себе сеть TOR имеет специфическую характерную черту. Зайти в неё и остаться незамеченным — запросто, а вот выходы имеют скончаемый характер, то есть их определенное число и большинство, как и в случае с VPN, уже забанены.
Самое смешное, наверное, то, что такие программы в телеграмм-каналах продаются от 200$, даже несмотря на то, что все это есть в открытом доступе. Не ведитесь на такой банальный, но почему-то рабочий, способ выкачки денег.
О генерации seed-фразы, или почему их подбор невозможен
А теперь к серьёзным вещам, заведем речь о seed-фразах или мнемонических, называйте как хотите, так как это синонимы.
О том, как они генерируются, расскажу дальше.
Генерация энтропии, то есть случайного числа.
На базе энтропия выбираются слова, то есть превращаются в мнемонику.
Из мнемонических слов создается фраза из 12 составляющих.
Пользователь определяет их порядок на свое усмотрение.
По порядку, энтропия — это невообразимо большое случайное число, которое сервер не генерировал никогда до этого и не будет генерировать в будущем. Чтобы такое число представить, хм.. Подумайте о нем, как об очень длинном порядке нулей и единиц, последовательности битов:
01010101000101011101100…
К этой энтропии применимы ещё несколько правил, одно из них — кратность 32 битам, так как в будущем она будет разделена на четыре равные части, перед преобразованием в слова.
Сама эта последовательность чисел должна быть не меньше 128 и не больше 256 бит.
Затем к энтропии добавляется контрольная сумма, чтобы легче было обнаружить ошибки. Сумма создается путем хеширования числа, в основном, через протокол SHA256, далее берется 1 бит хеша и переносится в конец каждых 32 бит энтропии. И только после этого она делится на группы по 11 битов, преобразует их в числа, а числам присваиваются слова по их номеру в словаре( о нем чуть позже).
После мнемонический код помещается в функцию PBKDF2 и создается финальная seed-фраза.
А теперь немного арифметики, возвратимся к BitGen, который до сих пор пытается перебрать все возможные фразы для кошелька.
Словарь содержит в себе 2048 слов, которые не меняются, они всем известны и есть в открытом доступе. Допустим, что фраза будет состоять из 12 слов, и в таком случае каждое из них может находиться на 12 местах.
Из этого получаем следующую формулу, это школьная программа и банальная основа комбинаторики (с учетом того, что слова могут повторяться):
А если исключить повторения, то будет выглядеть это примерно так:
Действительно, значение куда поменьше, но в расчет будем брать, что повторения могут присутствовать.
Получается, что вот это сороказначное число и есть количество вариаций мнемонической фразы для одного криптокошелька. Эта программка работала у меня целые сутки, то есть примерно 86400 секунд. Прошу заметить, что железо у меня не самое заурядное — 3080TI и I7. И ей удалось просканировать около двенадцати миллионов вариантов, точное число:
11 984 442
Давайте посмотрим, сколько за одну секунду мы перебирали вариантов:
138 вариантов за одну секунду, то есть 496800 вариантов в час.
Результат всех калькуляторов был примерно одинаковым, даже если считать не в секундах, можно сделать вывод, что времени жизни вселенной нам точно будет недостаточно с такими темпами.
И даже если запустить этот скрипт на 100 машинах аналогичных моей, то ситуация не изменится никак. Автор был бы не автор, если бы не полез дальше.
В нашем распоряжении 10 машин из Google Collab, экипированы специальными ускорителями вычислений Tesla T80. Проведя те самые расчеты и замеры, количество генерируемых фраз составляет:
99356
Умножим на 10 и получаем примерно миллион в секунду, а за один год —- 3 133 29081 6000 (три триллиона). Сейчас найду нормальный калькулятор и скажу, что получается. Нам потребуется, всего-то 1 737 6356 6501 16372 13892 754 000 лет (один октильон лет) для подбора мнемонической фразы к одному кошельку, как раз запланировал покупку машины времени на те года. Так что получается, это невозможно?
Возможно, ведь человек был бы не человек, не совершай он глупые поступки.
Технические шоколадки: небольшой перерыв от математики
Прежде чем вернуться к этой всей возне с сид-фразами, давайте ещё расскажу об одной очень занятной уязвимости, которая была недавно выявлена в популярных сервисах. Она была обнаружена ещё в сентябре 2021 года, но почему-то широкую огласку получила лишь сейчас, её идентификатор - CVE-2022-32969 или Demonic.
И она не совсем связана с блокчейном или кошельками, здесь дело в браузерах, которые сохраняют на диск содержимое заполненных полей для последующего восстановления сеанса. Такие популярные обозреватели, как Google Chrome и Mozila, кэшируют данные вводимых полей, не паролей, а именно простые поля. А так как большинство популярных сервисов типа Metamask, Phantom или Brave задействуют ввод seed-фразы обычным полем, естественно, пользователи будут подвержены атаке с использованием Demonic.
Но спокойствие, для эксплуатации этой уязвимости нужно иметь непосредственно физический или удаленный доступ к устройству. То есть предварительно злодею придется попотеть прежде, чем он сможет таки стащить желаемое.
Важным аспектом успешной атаки есть та самая галочка «показывать введенные слова», но это ведь не проблема, фразы длинные и, чтобы не сделать ошибку, большинство туда жмакают. Описывать подробно не стану, так как это никакой не туториал.
На данный момент практически везде эта дыра исправлена, но не стоит забывать о сервисах-ноунеймах, которые и в помине не слышали о таком, правда ими лучше и не пользоваться. Если уж что, используйте браузеры типа Opera.
Возможно ли восстановить утраченные два или три слова из фразы — альтернативный метод
Снова возвратимся к нашему Аянокоджи, допустим, что он уже усвоил урок с паролями и как делать не нужно. Но, к его сожалению и на радость злодеям, он не был осведомлен о важности seed-фразы, сохранив её в текстовом документе на рабочем столе.
И здесь возникает логичный вопрос, а если убрать из этой фразы одно слово и поместить его себе в память, то сможет ли злоумышленник все равно получить доступ к кошельку? Согласитесь, разница между запоминанием фразы из 12, 15 или 24 и всего одного слова — огромная.
Что ж, отвечу сразу. Если даже вы уберете одно слово, то вряд ли это чем-то сможет помочь. Стоит отметить, что очень мало комбинаций будут состоять из именно тех слов в том же порядке и с идентичной контрольной суммой.
Для примера нам понадобится конвертор Яна Колмана, объяснять заумно не буду, это конвертор мнемонической фразы по словарю BIP39.
Переходим по адресу и генерируем мнемоническую фразу на 12 слов, копируем их и вставляем в текстовый документ. Далее нам понадобится ещё и адрес с нулевым индексом, который будет расположен ниже.
И первый инструмент, о котором я хочу рассказать — это Seed Saivor, он есть в свободном доступе, как и на GitHub, так и в онлайн-версии. Основывается его работа как раз таки на конверторе Колмана.
Наша фраза выглядит вот так:
old office build post crack sudden garage cheap useful hawk indoor immense
Аянокоджи видит слово “useful” и хочет его убрать, так как легко может запомнить его, сопоставив ассоциацию с собой, мол слово “полезный”, а я — наоборот. Поэтому и ставит знак вопроса на его месте:
old office build post crack sudden garage cheap ? hawk indoor immense
Тем временем некий злоумышленник уже давным давно шерстит его устройство, мнемоническая фраза подвернулась под руку.
Идем в утилиту seed-savior и вставляем туда фразу, браузер может выдавать предупреждения, что страница зависла, но на деле это не так, просто происходят вычисления. Спустя минуту-две наблюдаем результат, скрипт вычислил все возможные значения из словаря, когда было подставлено девятое слово и контрольная сумма сошлась. Затем возьмем адрес нашего кошелька и с помощью поиска на странице найдём его.
Как видите, все работает. Пропущенное слово было определено верно. Но вот, если мы или злоумышленник захочет определить больше одного, то здесь возникают некие трудности.
Но это тоже возможно, поэтому представляю вашему вниманию репозиторий BTSRecover. Как можно понять из названия, он предназначен лишь для восстановления, но кто мешает злодею им пользоваться? Верно, никто.
В этом случае нам понадобится уже Linux, я воспользуюсь дистрибутивом Kali. Установка будет выглядеть следующим образом:
git clone https://github.com/gurnec/btcrecover.git
cd btsrecover
python3 seedrecover.py
Это очень многофункциональный инструмент и даже моей самой большой статьи будет недостаточно для того, чтобы разжевать все подробно. Нас интересует лишь восстановление seed-фразы.
Основные две опции, которые мы будем использовать, это:
-big_typos — указывающая на количество ошибок в фразе.
–mnemonic_length — указывающая на энтропию фразы, то есть количество слов.
Запуск будет выглядеть следующим образом:
python3 seedrecover.py -big_typos 2 –mnemonic_length 12
Далее скрипт попросит у нас выбрать файл, если мы используем электрум(кошелек такой), но ничего подобного у нас нет, просто пропускаем, выбираем стандартный интерфейс - bip39. XPUB ключа у нас, конечно же, нет, а дальше вводим адрес, принадлежащий нашему кошельку, индекс оставляем на нуле, это максимально сократит время работы, так как нам точно известен адрес и где он находится.
Вводим наиболее точную комбинацию с двумя пропущенными словами и все.
Этот процесс отнюдь не быстрый, на подбор двух слов ушло около 12-ти часов, но определены они были верно.
Итог этой главы один — пользуйтесь пером и бумагой.
Немного о грустном: кошельки для мобильных устройств — от худших к лучшим
Первый в нашем антирейтинге Crypto Digital Wallet. На этапе регистрации я заприметил очень интересную вещь, сид-фраза вовсе состоит из 6 слов, но даже с этим учетом понадобится 23 миллиона лет для полного перебора всех комбинаций. Затем автор решил провести множественную выборку сходств и посмотреть, насколько будут отличаться слова в следующей мнемонической фразе и сразу же обнаружил два слова из прошлой.
Таким образом, я сделал ещё несколько раз и слова постоянно повторялись. Можно предположить, что здесь явно не используется словарь из 2048 слов.
Далее, отсутствует обнаружение «скрин оверлея», это тогда, когда на вашем устройстве окно налаживается на другое и может захватывать происходящее на экране, а с учетом современных реалий, практически у каждого на устройстве находится какой-то троянчик. Во всех популярных кошельках такая опция имеется.
Что же, я составил примерный словарь, основываясь на множественной генерации сид-фраз, который состоит из самых частых вариантов повторений. Запустим перебор на адрес моего кошелька… Хотя зачем это делать, если их словарь насчитывает не больше 100 слов.
Практически аналогичные недочеты присутствуют в BeeWallet, который скачали более миллиона раз.
Особо критиковать не буду, дабы не создавать конфликтных ситуаций, но скажу, что большинство кошельков из Play маркета имеют серьезные проблемы с безопасностью. Не советую ими пользоваться вообще, но если другого выбора нет, то альтернатива существует.
Среди адекватных могу отметить приложения от популярных сервисов, типа MetaMask, TrustWallet, Exodus.
Выводы
Криптовалюта действительно могла бы быть определена как совершенно безопасная. Само её устройство ставит злодеев в тупик, возьмите, к примеру, тот самый октильон лет, необходимый для перебора seed-фразы длинной в 12 символов и это с учетом ускорителей Tesla. Пока в мире не существует квантового компьютера, а выпуск первого такого запланирован на 2023 год, кошелькам не угрожает подобного рода атака.
Если бы не одно большое но — человек. Именно присутствие живого существа полностью стирает определение безопасности, ведь люди склонны ошибаться: или из-за отсутствия требуемых знаний, или по невнимательности. Причины разные, но исход один.
Хотя присутствует ещё и технический аспект в виде уязвимостей.
Безусловно, технология работы криптовалют практически совершенна, как я уже говорил в начале, её можно приравнять к самому современному сейфу внутри ещё одного такого же сейфа. И все мошенничества зачастую основаны на человеческом факторе, не посчитаю за ошибку отнести к этому фактору и возможность наличия уязвимостей. В конечном счете, технология Blockchain была создана человеком. А теперь о том, как сохранить свои средства.
Как не стать очередной жертвой мошенников?
Используйте сложные пароли и ни в коем случае не сохраняйте их где-то на устройстве. Как уже множество раз было упомянуто, перо и бумага — лучший способ. Много людей ставят один пароль на все свои аккаунты — фатальная ошибка, ни в коем случае не делайте так. Аналогично и c мнемоническими фразами.
Пользуйтесь только проверенными сервисами, которые уже снискали свою популярность в массах.
Фраза избитая уже, но пользуйтесь антивирусом, он в 90% случаев поможет избавиться от вредоносного ПО.
Криптокошельки никогда не будут требовать от вас пройти повторную верификацию или где-то ввести свой пароль и seed-фразу. Фишинг представляет самую большую опасность.
И не пользуйтесь сомнительными приложениями из Google Play или Apple Store. Зачастую они не имеют достаточного уровня защищенности и могут компрометировать своих же пользователей. Единственный выбор — проверенные и популярные сервисы.
Мошенники могут использовать самые разнообразные методы, дабы залезть к вам в кошелек, друзья. Возьмите даже ту ситуацию, когда репозиторий, доступный всем и каждому, продавали по 200$.
И напоминаю, что это не был туториал, я лишь показал технические аспекты реализации и недочеты всех этих планов. Но основные атаки все же основываются на социальной инженерии, если хотите увидеть статью о том, как, используя хитрость и уловки, злодеи заполучат ваш баланс, не открыв ни одного скрипта, то… А я не придумал. Поставьте плюсик и напишите комментарий. А с вами был, ещё не как всегда, какой-то парень под ником DeathDay. Увидимся.
Автор статьи @DeathDay