«Бандит блокчейна»: как хакер крал Эфириум [ETH] на миллионы, угадывая слабые личные ключи

Ранее на этой неделе американская независимая консалтинговая фирма Independent Security Evaluators (ISE) опубликовала отчет о закрытых ключах для блокчейна Ethereum.
Несмотря на установление около 700 слабых закрытых ключей, которые регулярно используются множеством людей, исследователи обнаружили «бандита блокчейна», которому удалось собрать почти 45 000 эфиров (ETH), успешно угадав эти хрупкие личные ключи. Адриан Беднарек, старший аналитик по безопасности в ISE дал интервью о том, что они называют «эфирная связь».
Фон исследования и основные выводы
Online advertising service 1lx.online
Беднарек говорит, что обнаружил хакера случайно. В то время он проводил исследования для корпоративного клиента, который планировал внедрить собственный кошелек с интегрированным алгоритмом генерации ключей.
«Как аналитик по безопасности, прежде чем начинать какую-либо оценку, вы должны очень четко понимать базовые технологии — в основном так, как будто вы создаете их сами», — сказал он.
«Генерация закрытого ключа была одним из компонентов, которые мы должны были исследовать, и я изучал основы того, что такое закрытый ключ в Ethereum: насколько он велик? Как это генерируется? И как он используется для получения открытого ключа и публичного адреса?»
В Ethereum, Биткоин (BTC) или любом другом крупном блокчейне, поддерживающем протокол ECDSA (алгоритм цифровой подписи эллиптической кривой), закрытые ключи представлены 256-битными числами. ISE сузил его до восьми 32-битных «субрегионов» в 256-битном ключевом пространстве во время своих исследований, потому что грубое принуждение к закрытому ключу в более крупной области означает статистическую неправдоподобность.
Эти восемь субрегионов содержали в общей сложности 34 миллиарда более слабых ключей, которые впоследствии сканировал ISE. «Это заняло целый день, — говорит Беднарек.
Online advertising service 1lx.online
Стоит подчеркнуть, что эти ключи были сгенерированы из-за неисправного кода и неисправных генераторов случайных чисел, и исследователи были специально ориентированы на не оптимальные ключи.
«Закрытый ключ — это ваш идентификатор пользователя и ваш пароль одновременно», — объяснил аналитик по безопасности, разбивая основные механизмы. «Он отличается от вашего банковского логина, где у вас есть имя пользователя и пароль […] Поэтому, когда два отдельных человека используют один и тот же пароль для создания Brainwallet т.е. кошельков, которые влекут за собой парольные фразы как часть генерации закрытых ключей — как «password123» — они оба будут владеть одним и тем же кошельком». Как говорит Беднарек, «это все равно, что связать двух человек с одним банковским счетом».
Первоначально специалист ISE обнаружил, что закрытый ключ «1» *, выбранный потому, что он является нижней границей возможного закрытого ключа, фактически использовался в блокчейне. Кроме того, он участвовал в нескольких тысячах сделок.
* — (0x0000000000000000000000000000000000000000000000000000000000000000000000000001, если записать с использованием 256-битного кода)
[irp]
Online advertising service 1lx.online
«Это был красный флаг», — вспоминает Беднарек. «Почему люди используют закрытый ключ 1? Это не должно быть возможно».
Его команда начала сканировать больше ключей, чтобы увидеть, насколько широка была проблема. Хотя исследователи ISE установили, что эта проблема не особенно вездесуща, они обнаружили целых 732 слабых закрытых ключа, связанных с общим количеством 49 060 транзакций.
«Примерно 50 миллионов ключей были использованы в Ethereum блокчейне, и мы обнаружили только 732 из них».
Блокчейн бандит
Как упомянуто выше, в ходе своего исследования команда ISE заметила, что некоторые кошельки, связанные с закрытыми ключами — найденные с помощью их неоптимальных методов — имели много транзакций, идущих по определенному адресу, и деньги не возвращались. Как сказал Беднарек в пояснительном видео, размещенном на сайте ISE:
«Был парень, у которого был адрес, который ходил и выкачивал деньги из некоторых ключей, к которым у нас был доступ. Мы нашли 735 закрытых ключа, он взял деньги с 12 из тех ключей, к которым у нас тоже был доступ. Статистически невероятно, что он угадал бы эти ключи случайно, поэтому он, вероятно, делал то же самое. […] Он в основном крал фонды, как только они приходили в кошельки людей ».
В разговоре Беднарек объяснил, что хакер (или группа хакеров) настроил узел для автоматического считывания средств с адресов со слабыми ключами. Чтобы убедиться в этом, исследователи использовали приманку: они послали доллар, используя слабый закрытый ключ, который, как они знали, знал хакер, чтобы увидеть, как быстро это будет сделано. Деньги исчезли в считанные секунды, сотрудник ISE сказал:
«Если бы это было ручное занятие, возможно, это было бы принято в течение дня или чего-то еще. Но как только мы отправили его, мы обратились к исследователю блокчейна и увидели, что передача произошла немедленно, через несколько секунд. В общем, у хакера есть блокчейн-узел, который является частью сети транзакций, установленной где-то. Как только он видит транзакции с закрытым ключом, о котором он знает, он немедленно отправляет запрос на перевод денег».
Согласно данным, полученным от Etherscan, кошелек хакера содержит около 45 000 ETH (на момент написания статьи более $7,3 миллионов). По оценкам, в разгар высокой ценности эфира добыча бандита могла быть продана более чем за $50 миллионов.
Согласно разделу комментариев для адреса кошелька мошенника, он воровал средства в течение нескольких лет. В одном из комментариев, предположительно представленных крупным провайдером кошелька ETH, MyEtherWallet (MEW) есть ссылка на ветку Reddit 2016 года под названием “Узлы Ethereum с небезопасными настройками RPC активно используются» . В нем реддитор описал настройку узла Ethereum «с помощью его HTTP RPC API, доступный для Интернета», и его атакуют через несколько минут после выхода в эфир.
«Если вы загуглите адрес хакера, обнаружите, что многие люди жалуются на него», — подтверждает Беднарек, признавая, что действия мошенника оказались весьма успешными:
«Этот парень использовал многоплановый подход к краже денег».
Затем аналитик по безопасности более подробно описал метод мошенника: «Раз — он смотрит на плохие закрытые ключи. Два — он смотрит на слабые кошельки на основе парольной фразы и неправильно настроенные RPC. На самом деле вы не должны раскрывать RPC вашего узла Ethereum, но иногда это делают люди, и если у вас не установлен пароль, кто-то может в принципе очистить кошелек по умолчанию, связанный с вашим узлом».
[irp]
Но такой захват активов не является проблемой, которая является исключительной для блокчейна Ethereum, предупреждает исследователь безопасности ISE.
«Блокчейн работает так, как задумано, просто так люди его используют», — сказал он, описав проблему, связанную с этикой, с которой столкнулась его команда во время исследования:
«Перед тем, как мы начали это исследование, у нас была этическая дилемма — что если мы найдем кошелек с ключом, в котором миллион долларов? Мы просто оставим это там? Но если мы оставим его там, мы знаем, что у него плохой закрытый ключ, и он может быть украден, поэтому мы будем нести ответственность за кражу этих денег, потому что мы могли бы кого-то уведомить. Но тогда вторая проблема — кого мы уведомляем? Нет простого способа определить владельца закрытого ключа. Может быть, мы могли бы временно взять деньги, пока кто-нибудь не докажет, что они принадлежат ему? Но тогда это создает много юридических проблем. Поэтому генеральный директор компании, для которой они проводили исследование, связался с IFS для получения юридической консультации, и они в основном сказали: «Если что-нибудь найдете, оставьте это там. Не делайте никаких переводов.”
Советы по безопасности и дальнейшие исследования
Поэтому, согласно Беднареку, закрытые ключи, как правило, уязвимы из-за двух основных факторов. Первый — это ошибки кодирования в программном обеспечении, ответственном за их генерацию. Во-вторых, некоторые владельцы криптовалют имеют тенденцию получать идентичные закрытые ключи с помощью слабых парольных фраз, таких как «abc123», или даже оставляя их пустыми.
Например, в отчете ISE установлено, что одним из самых популярных слабых закрытых ключей является ключ, сгенерированный из пустой фразы восстановления — то есть «» — с использованием кошелька Parity. По сообщениям, по этому адресу было совершено 8 772 транзакции, из которых было передано 5 215 586 ETH.
«Некоторое время Parity позволяет вам использовать пароль по умолчанию, который ничего не значит, и он будет генерировать закрытый ключ на основе этого», — объясняет Беднарек, добавляя, что разработчик кошелька якобы решил проблему в какой-то момент. «Я думаю, что они ввели минимальные требования к паролю в то время. Это мог быть просто один символ, но вы не можете использовать пустые пароли в Parity прямо сейчас, если вы используете последнюю версию их программного обеспечения ».
По словам Беднарека, создатели кошельков еще не связывались с ISE:
«Это интересная проблема, потому что трудно сказать, какой кошелек был ответственным, если вообще был кошелек — это могли быть просто люди, вводящие неправильные закрытые ключи, это могли быть ранние версии отладочных кошельков, это могли быть сами разработчики. Трудно сказать, почему это существует и какой кошелек виноват. Это то, что я не думаю, что мы когда-либо узнаем.”
Главный совет Беднарека для тех, кто не разбирается в компьютерах, — это использовать хорошо известные и надежные кошельки, возможно, переходя на аппаратные или бумажные кошельки, если речь идет о криптовалютах большого объема. Он сказал:
«Если будет торговля или хранение большого количества валюты, тогда используйте аппаратный кошелек, где закрытый ключ никогда не будет раскрыт. Многие мои друзья, которые являются долгосрочными владельцами, используют бумажные кошельки, где они генерируют случайный ключ и хранят его на бумаге, чтобы он никогда не касался компьютера».
[irp]
Тем не менее, всегда существует некоторый риск, даже когда речь идет о популярном программном обеспечении, предупредил Беднарек, приводя пример взлома кошелька Iota разработчиком из Оксфорда, который был арестован и обвинен в краже около 10 миллионов евро в прошлом месяце .
Учитывая, что кошелек Iota является открытым исходным кодом, его код был опубликован на Github. В какой-то момент мошенник изменил генератор случайных чисел, отправив изменение в код.
«Это было сделано очень запутанно», — сказал Беднарек. «Хотя многие могли пересмотреть код, они просто предполагали, что он так и должен работать, по его словам.
Таким образом, хакер смог увидеть, как были сгенерированы закрытые ключи, и воспроизвести их, используя введенный код”, пояснил специалист ISE.
«После того, как многие люди потеряли много денег, кто-то наконец-то пересмотрел свои модификации генератора случайных чисел, и они смогли увидеть, что он создает последовательные числа в пределах определенного диапазона пространства клавиш».
Что касается будущего, ISE планирует продолжить мониторинг блокчейнов и слабых закрытых ключей в более широком масштабе.
«Мы переместим наш метод сканирования на использование графических процессоров, где мы сможем сканировать 38 миллиардов ключей в течение нескольких секунд», — сказал Беднарек в интервью.
«Поскольку мы сделаем сканирование более эффективным, мы сможем сделать некоторые сумасшедшие вещи, такие как поиск мозговых кошельков или другие алгоритмы генерации ключей, которые могут быть неисправны. Так что мы расширимся в разные области, чтобы определить больше ключей».
Более того, исследовательская группа по безопасности собирается публиковать больше информации — в том числе о неисправных открытых ключах — чтобы люди могли проводить собственные исследования и получать предупреждения о возможных нарушениях безопасности.
«Возможно, это превратится в совместные усилия, чтобы помочь найти некоторые причины для этого», предложил Беднарек.