Как устроен Blockd — система, делающая взлом кошелька невозможным
3 января, в день рождения генезис-блока сети Bitcoin, создатель сервиса Blockd, Роберт М.С. Форстер, решил доказать криптосообществу надежность своего проекта. Для этого он опубликовал в Reddit приватный ключ от кошелька с одним ЕТН и предложил пользователям попробовать вывести средства. Однако ни у кого это не получилось, и весь эфир Форстера был перемещен на другой кошелек. Чудо в том, что система защищает средства в блокчейн-кошельках, даже если приватные ключи становятся общедоступными, так как транзакция предполагаемого хакера заменяется авторизованной транзакцией с более высоким приоритетом. Как устроен Blockd, какова дорожная карта проекта и каковы недостатки системы, разобрался DeCenter.
Никто не смог вывести себе 1 ЕТН Форстера
Конечно, Форстер рисковал небольшими деньгами — на момент ставки 1 ЕТН стоил $136. Но на первый взгляд кажется, что он гарантированно должен был их потерять. Ведь каждому криптопользователю известно, что если посторонний узнает приватный ключ от кошелька, он получит доступ ко всем средствам на нем. Но разработанный Форстером сервис Blockd как раз должен предотвращать, казалось бы, неизбежную кражу.
Однако когда сторонний юзер пытался использовать закрытый ключ для взлома кошелька Форстера, его встречало сообщение «Blockd» («Заблокировано»). В это же время система перенаправляла средства в скомпрометированном кошельке на другой кошелек, приватный ключ которого известен только Форстеру.
Отследить движение средств в кошельке можно с помощью сервиса Etherscan — https://etherscan.io/address/0xa5653e88D9c352387deDdC79bcf99f0ada62e9c6.
Адрес кошелька Форстера: 0xa5653e88D9c352387deDdC79bcf99f0ada62e9c6
Приватный ключ: ca9a3a3d4026e6228713e683a9c45ef65a538b2f9336813bd597f5effa38668d
Резервный кошелек, на который пересылались ЕНТ: 0x25eE1E352892Bc4f036F25441E6CEE84f5e06729
Как мы видим, примерно через 20 минут после публикации со скомпрометированного кошелька была совершена первая транзакция на резервный кошелек. Вскоре туда переместились все средства, за исключением комиссионного «газа».
Имплементация протокола Replace-By-Fee
Blockd использует блокчейн-протокол Replace-By-Fee (RBF), позволяющий заменить неподтвержденную транзакцию на другую, с более высокой транзакционной комиссией. Чаще всего RBF используется, если биткоин-транзакции застряли в сети, ведь протокол позволяет пользователю, заплатившему низкую комиссию, заменить транзакцию на другую, с более высоким сбором, чтобы ускорить подтверждение.
Но протокол можно также использовать и для отмены транзакций хакеров. Если успеть заменить транзакцию злоумышленника на новую, с более высокой комиссией и отправляющую средства на резервный кошелек, то все похищенные деньги перейдут на него, а злоумышленник ничего не получит.
Можно, конечно, попытаться заменить транзакции вручную, но это редко осуществимо на практике. Так, среднее время майнинга нового блока в сети Ethereum — 17 секунд. А значит на подтверждение транзакции злоумышленника уйдет около 30 секунд (конечно, если сеть не будет перегружена). Оперативно заметить новую исходящую транзакцию с вашего кошелька, успеть создать конкурентную ей с большей комиссией и указать в качестве адресата резервный кошелек — не получится. Кроме того, в случае с ЕТН понадобится еще и использовать web3.js (библиотека для взаимодействия с Ethereum-нодой), чтобы у вашей транзакции был тот же nonce (порядковый номер), что и у транзакции злоумышленника.
Blockd, как заявляется, делает все это автоматически, без участия пользователя. Если с вашего кошелька будет совершена транзакция на неизвестный кошелек или она не будет подтверждена через сервис, он создаст конкурентную транзакцию на резервный кошелек.
Пользователь заранее одобряет транзакцию с более высокой комиссией
Переводить средства без участия пользователей Blockd можно благодаря тому, что те предварительно одобряют конкурентную транзакцию, которая будет заменять хакерскую. Пользователь заранее генерирует и подписывает транзакцию, но сервис не транслирует ее в сеть, а сохраняет в качестве резервной копии, чтобы использовать при взломе. Если захотите проверить работу Blockd, вот подробная инструкция о том, как это сделать. А ниже коротко о том, как работает система Роберта Форстера:
Сначала пользователь подписывает транзакции, отправляя все средства с баланса кошелька на резервный, а затем отправляет эти транзакции в Blockd. Эти транзакции еще не переданы в блокчейн.
Когда пользователь Blockd подписывает транзакцию, он также выбирает критерии, по которым сервис должен блокировать подозрительные операции. Например, он может создать список «белых» адресов, перевод на которые система не заблокирует. Далее он выбирает цену на «газ».
Если транзакция не проходит проверку Blockd, система проверяет, по каким ценам на «газ» подтверждены предварительно одобренные транзакции. Это важно, потому что блокирующая транзакция должна быть отправлена с более высокой ценой «газа», чем ожидающая подтверждения транзакция злоумышленника. Сервис может рекомендовать ту или иную цену, но пользователь должен настраивать ее самостоятельно. Если предварительно подписанная транзакция с более высокой ценой на «газ» найдена, система немедленно передает ее в сеть. Затем она непрерывно проверяет, была ли эта транзакция успешной, или же требуется больше действий.
Каждая цена на «газ» — это одна транзакция. Если юзер использует аппаратный кошелек, ему придется подписать отдельную транзакцию для каждой выбираемой цены на «газ». И хотя он подписывает несколько транзакций, только одна из них может когда-либо попасть в блокчейн, потому что все они имеют один и тот же nonce. По умолчанию Blockd будет использовать самую низкую цену на «газ», которая все равно будет выше, чем та, что у мошенников. На аппаратных кошельках это потребует подтверждения на вашем устройстве подписываемых транзакций, но в будущем это планируется исправить.
Чтобы перевести средства, пользователь должен либо заранее добавить адрес кошелька в список разрешенных, либо провести транзакцию через сервис. Все остальные операции будут заблокированы.
Blockd мониторит мемпул блокчейна, отслеживая отложенные операции, исходящие из вашего кошелька. При обнаружении отложенной транзакции сервис проверяет, соответствует ли она одобренным критериям разрешенных транзакций. Если это не так, Blockd блокирует ее, выводя в сеть подтвержденную ранее пользователем транзакцию и тем самым переводя средства на резервный кошелек.
При этом Blockd, как утверждается, не получает контроль над кошельком пользователя и его приватными ключами — все транзакции подписываются через клиента на Javascript. Сервис не сможет отправлять транзакции, которые не одобрил и не подписал пользователь — подписанные транзакции нельзя изменить, поэтому средства могут уйти только на запасной адрес. Даже если Blockd взломают, то худшее, что может произойти — средства пользователя переведут на резервный кошелек без необходимости. Также сервис можно использовать совместно с multisig-кошельками и другими уровнями защиты.
В чем уязвимости Blockd?
В комментариях под постом Форстера пользователи Reddit вместе с разработчиком обсудили основные уязвимости Blockd.
Главная из них — хакер может поставить цену на «газ» выше пользовательской. Тогда велика вероятность, что средства получится вывести. Если злоумышленник точно знает, что может сорвать крупный куш, вряд ли он пожадничает, чтобы не назначить максимальную цену. Форстер предлагает бороться с этим, также выставляя среди вариантов цены на «газ» самую высокую цену. Так, например, для своего кошелька с одним ЕТН он сам поставил комиссию в 45 000 gwei. В любом случае, сервис не гарантирует полную защиту средств — он обещает стать лишь еще одним уровнем защиты. По мнению разработчика, с большой долей вероятности система сможет перебить ставку хакера.
Форстер полагает, что сервис может отбить у хакеров охоту воровать средства с адресов, чьи приватные ключи скомпрометированы. Ведь если злоумышленник не знает наверняка, что кошелек защищен с помощью Blockd, ему придется потратить какую-то сумму, чтобы проверить это, а повторить попытку вывода с новой ценой «газа» не удастся — средства будут уже на другом кошельке.
Другая проблема — хакер может провернуть с транзакцией пользователя то же самое и перебить ее своей новой, более высокой ставкой. Так как злоумышленнику нечего терять, он вполне может потратить на комиссию хоть все средства в кошельке — в проигрыше останется пользователь Blockd. Форстер пообещал, что в скором времени выпустит обновление, которое решит проблему. Тогда средства пользователей будут храниться в кошельке с помощью смарт-контрактов, что даст Blockd большую гибкость в борьбе с хакерами, сделает потенциальный взлом еще дороже и вообще лишит его смысла. Также Форстер намекнул, что сервис готов платить майнерам, чтобы они приоритезировали именно его транзакции, независимо от цены «газа», которую платит злоумышленник.
Blockd бесполезен, если злоумышленник, получив приватный ключ от основного кошелька, узнает и приватный ключ от резервного. От этого сценария у сервиса нет спасения — такому пользователю просто не повезло.
Конечно, проблемы могут быть и в самом Blockd. Форстер честно признается, что если в компании окажется недобросовестный сотрудник, он сможет провести транзакцию пользователя без необходимости или сжечь средства, выделенные на комиссию.
Планы по развитию Blockd и аналоги на рынке
Сейчас Blockd работает с блокчейном Ethereum, токенами ERC20 и несколькими неназванными блокчейнами. Вскоре планируется адаптация протокола для Bitcoin и других блокчейнов. В документации сказано, что сервис совместим с большинством существующих блокчейнов и несовместим лишь с несколькими, но не указано с какими именно.
Blockd планирует добавить способ отправки предварительно одобренных транзакций без посещения сайта сервиса, заключить партнерство с кошельками MEW или MyCrypto (команды обоих проектов ничего об этом пока не заявляли), усовершенствовать систему блокировки и запустить мониторинг для защиты смарт-контрактов и dApps. Сейчас Blockd бесплатен, но с 1 февраля 2020 года будет введена комиссия за пользование, однако дальнейшая его стоимость пока неизвестна.
Рынок давно ждал такой сервис, как Blockd. Прямых его аналогов на рынке нет, но есть способы мониторить мемпул блокчейна, чтобы отслеживать зависшие транзакции. Например, можно самостоятельно поднять свою geth-ноду, написав скрипт на Node.js и web3.js. Это ресурсоемко и будет стоить до сотни долларов в месяц. Также можно настроить авто-уведомления в мессенджере на любые изменения баланса в кошельке (например, с помощью сервиса myeth.io и Telegram-бота @myeth_bot).
Однако все эти решения, конечно, уступают Blockd в удобстве, да и вряд ли получится успеть отменить транзакцию злоумышленника вручную, как DeCenter писал выше. Думаем, скоро на рынке появятся аналоги Blockd от известных разработчиков, но, вероятнее всего, что подобные сервисы встроят сами биржи и кошельки.
Тестировать, но не рисковать крупной суммой
Советы вроде «Никому не сообщайте свои приватные ключи, делайте бэкапы и будьте осторожны» банальны, но ничего вернее еще не придумали — скорее всего, вы так и делаете. Но даже самому бдительному пользователю не помешает еще один, дополнительный уровень защиты, позволяющий спасти деньги в непосредственный момент кражи.
Однако, несмотря на все преимущества, которые предлагает Blockd, пока к нему надо отнестись настороженно. О команде проекта известно мало — на сайте сервиса не указано никаких контактов, кроме адреса электронной почты и ссылки на то, что проект — детище компании Rojax, занимающейся разработкой блокчейн-систем. Компания зарегистрирована в Палмдейле в Калифорнии, а Роберт Форстер — ее исполнительный директор. Среди проектов Rojax разработка ICO, игр, обменников и токенов, в том числе монет Minerva.
Так стоит иметь в виду, что первое описание Blockd появилось только в октябре 2019 года, но мы не смогли найти в сети отзывы пользователей об использовании сервиса. О самом Форстере тоже нет данных. Примечательно и то, что он рискнул всего лишь одним эфиром — небольшая сумма для уверенного в своем сервисе разработчика. Пользователи Reddit призвали Форстера сделать код сервиса общедоступным, чтобы убедиться в его благонадежности. Он заявил, что это отличная, но пока преждевременная идея.
Blockd — интересная, нужная и перспективная инициатива. Но DeCenter не советует рисковать своими деньгами и слепо доверять сервису все средства. Если проект стоящий, скоро о нем будут говорить часто. Пока же разумнее ограничиться тестами.
Как вам идея Blockd? Доверяете ли вы сервису? Воспользуетесь им, чтобы защитить свои средства? Если вы готовы рискнуть небольшой суммой и протестировать сервис, поделитесь своим опытом в комментариях ниже!