Что такое Race Attack и другие виды атак в криптовалюте


Race Attack – Это еще один тип возможного двойного расходования криптовалют. Злоумышленник быстро отправляет одни и те же монеты на два разных адреса: свой и продавца. Продавец отгружает товар, увидев транзакцию в эксплорере, но не не дождавшись подтверждений от сети. Средства в итоге останутся у мошенника, на его адресе, так как эта транзакция окажется первой в блокчейне.

Атака ” race attack” – это особый тип попытки двойной оплаты. Она требует, чтобы получатель принимал неподтвержденные транзакции в качестве оплаты.

Атакующий предоставляет жертве неподтвержденную транзакцию, которая оплачивает жертву. В то же время в сеть транслируется противоречивая транзакция. Поскольку торговец первым увидел свою собственную транзакцию, у него создается иллюзия, что он получит деньги, в то время как остальная часть сети преимущественно первой увидела удвоенную транзакцию, и, следовательно, есть вероятность, что торговец на самом деле не получит денег.

Эту атаку гораздо легче осуществить, когда атакующий имеет прямое соединение с узлом жертвы и, возможно, депонирует противоречивую транзакцию непосредственно майнерам.

Как не стать жертвой?

Дождаться подтверждений транзакции, желательно, не менее 6.

Поэтому рекомендуется отключать входящие соединения с узлами, используемыми для получения платежей, чтобы ваш узел искал себе подобных, и не позволять плательщику напрямую отправлять платеж получателю.

Атака Sybil еще больше усиливает информационную асимметрию, поскольку злоумышленник изолирует жертву от сети и ограничивает ее доступ к информации, одновременно осуществляя двойную оплату. Другие атаки на удвоение средств основаны на предварительном назначении транзакции для себя в блоке, хранящемся в секрете, перед тем как заплатить жертве с конфликтующей транзакцией (атака Финни), или на подавляющем хешрейте (атака большинства).

Двойная трата

На самом деле это не конкретная атака, а скорее понятие, используемое для описания различных действий, с помощью которых взломщик может использовать свои ранее потраченные деньги во второй раз (вернуть или потратить их снова). Для этого используется несколько сценариев:

Атака типа «гонки» (Race Attack). Атакующий осуществляет транзакцию A, оплачивая покупку. Одновременно он выполняет транзакцию B, переводящую эти же деньги на другой счет злоумышленника. Если магазин не дожидается денег и отгружает купленные товары, то идет на значительный риск: с вероятностью 50 % транзакция B может попасть в цепочку блоков без каких-либо усилий со стороны взломщика. Что еще хуже, он может увеличить эту вероятность, выбирая узлы сети для передачи той или иной транзакции. Расчеты для таких операций можно найти в этом документе. Именно поэтому не стоит доверять неподтвержденным транзакциям, не так ли?

Атака Финни (Finney Attack). А теперь давайте предоставим атакующему доступ к некоторой части мощностей майнинга сети. Он пытается найти обычный блок, который может содержать его транзакцию B. Суть в том, что ни транзакция A, ни транзакция B еще не отправлены. Как только блок обнаруживается (рано или поздно в зависимости от вычислительных мощностей), он отправляет… транзакцию A! Злоумышленник покупает товары в магазине. Продавец, наученный горьким опытом, ждет появления блока с транзакцией A в сети. Как только блок обнаруживается, магазин отгружает товары, и… тут-то и появляется блок с транзакцией B, найденный злоумышленником. Это приводит к так называемой развилке, когда майнеры должны выбрать один из двух блоков для продолжения цепочки.

Если выбор осуществляется неслучайным образом (что само по себе гарантирует 50 % успеха!), при некоторых обстоятельствах атакующий может увеличить свои шансы. Поэтому даже транзакция с 1 подтверждением может быть небезопасной.

Затем предоставим нашему взломщику доступ к БОЛЬШИМ, но все же не достигающим 51 %, мощностям майнинга сети. Что произойдет тогда? Он может подготовить не один блок, а сразу несколько, чтобы обогнать «честную» цепочку. Вероятность такого события не велика, но эта атака будет на 100 % успешной. Например, если у злоумышленника имеется 10 % хешрейта, на каждые 100 блоков (чаще, чем раз в сутки!) он может находить два «быстрых» блока подряд и начинать свою атаку. Теперь магазин, ожидающий двух подтверждений, снова в опасности! Так сколько же подтверждений требуется с учетом возможностей атакующего?

Атака 51 %

Первый описал “Атаку 51 %” в своей статье Сатоши Накамото, В ней рассматривается пример, когда некто (в одиночку или группой) владеет большей частью мощностей майнинга в сети.

Известно, что «криптовалюта защищена майнингом». Но что это означает? Как и от чего она защищена? Майнинг — это процесс создания новых блоков.

А зачем они нужны? С технической точки зрения они требуются для идентификации «хороших» и «плохих» транзакций. Если Элис пытается отправить одни и те же деньги Бобу и Кэрол, теоретически не имеет значения, какая из транзакций является «правильной».

Важно, что транзакция должна быть только одна. Каждый майнер должен решить, какую транзакцию выбрать — ту, которая произошла раньше, ту, за которую он получит больше, или ту, у которой лучше хеш, и т. д. Если майнеров много, имеем распределенную задачу выработки консенсуса.

Узел сети, который после временного отключения продолжает работу с небольшим опозданием, в момент подключения к сети получает историю «хороших» транзакций. Если есть альтернативные варианты, т. е. две версии цепочки блоков (блокчейна), узел выбирает ту, суммарная сложность генерации которой выше. Поэтому тот, у кого больше вычислительных мощностей, чем у всей остальной сети («владелец контрольного пакета»), может единолично решать, какие транзакции будут «приняты», а какие нет. Почти как ваш банк.

Но ведь есть и еще более неприятный сценарий: атакующий может передумать и переписать всю историю генерации блоков, начиная с некоторого момента в прошлом. Как только взломщик завладеет большей частью мощностей сети, лишь вопрос времени, как скоро он догонит и перегонит следующую цепочку. В результате «хорошая» транзакция может стать «плохой», и наоборот. Деньги, которые вы получили месяц назад, исчезнут из вашего кошелька и вернутся к их изначальному владельцу. Практически как на вашем банковском счете.

Вывод:

  • Атакующий может: «запрещать» включение отдельных (либо всех) транзакций в цепочку блоков, отменять старые транзакции (возвращать деньги) и делать отмененные транзакции действительными.
  • Атакующий не может: контролировать оборот денег других людей (перенаправлять либо перехватывать транзакции) и препятствовать обмену данными между узлами сети.

Атака Сибиллы

В целом такой тип атаки наиболее распространен в p2p-сетях. В сущности, атакующий пытается «окружить» узел жертвы, т. е. завладеть всеми соседними узлами сети. Получив доступ к узлам, он, по сути, контролирует все входящие и исходящие данные: он может передавать жертве ложную информацию или не давать ей передавать что-либо по сети. Кроме того, атакующий может идентифицировать транзакции, отправленные узлом жертвы.

Как правило, сделать это очень сложно: коды биткоина и других криптовалют написаны таким образом, что узел выбирает соединение с другими узлами практически случайно. Даже в случае, если взломщик контролирует 80 % всех узлов в сети, и нам требуется установить 8 случайных исходящих соединений, вероятность оказаться полностью окруженным составляет всего 0,8^8 = 17 %.

И все же это возможно, если знать, как работает алгоритм установления соединений, и использовать его слабые места. Но здесь мы не станем углубляться в детали, опишем лишь общий принцип. Уязвимость главным образом заключается в том, что при подключении к сети узел не знает IP-адресов доверенных узлов и не имеет иного выбора, кроме как запросить их… у доверенных узлов. По сути, имеем дилемму курицы и яйца.

Кроме того, даже если список доверенных узлов известен заранее, невозможно поддерживать соединение только с ними — это нарушает принципы децентрализованной организации сети. Если блокировать соединения с новыми узлами и запретить их добавление в список доверенных узлов, сеть будет работать очень неэффективно (с топологической точки зрения).

С технической точки зрения каждый узел хранит список всех известных IP-адресов других узлов. С ними связаны следующие данные: когда в последний раз узел был в сети, сколько успешных соединений было установлено с ним и т. д. При необходимости узлы делятся частями этого списка со своими сетями, тем самым обновляя информацию.

В начале клиент пытается расширить свой круг контактов, подключаясь как к известным узлам, так и к тем, с которыми еще не было соединений. К счастью, авторы сами дали рекомендации по устранению такой ситуации. Если используются уязвимости определенного алгоритма в коде биткоина, проблемы можно решить, обновив алгоритм.

Данный текст не следует рассматривать в качестве всеобъемлющего руководства по борьбе с атаками. Некоторые моменты мы могли забыть, а некоторые опущены намеренно. Вполне вероятно, что нам известно не все. Главное, что не существует такой разрушающей атаки, которая могла бы уничтожить нашу молодую отрасль.

Более того, любая новая (описанная) атака в действительности является выдающимся событием, поскольку способствует развитию технологий.

Эгоистичный майнинг

В некотором смысле данная атака является развитием предыдущих сценариев двойного расходования. Однако в данном случае целью взломщика является не простое мошенничество с покупками, а контроль над сетью при наличии менее чем 50 % мощностей.

Все начинается с того, что пул, которым владеет злоумышленник, заявляет, что «здесь майнинг выгоднее, чем в других пулах». Давайте предположим, что это правда. Как в таком случае поведут себя обычные майнеры? Вероятнее всего, они войдут в пул и начнут майнинг. В результате пул может получить 51 % мощностей. Конечно, каждый майнер отдает себе отчет в том, что, присоединяясь к крупному пулу, он приближает этот момент, а потому подвергает опасности систему, из которой извлекает прибыль. К сожалению, такова человеческая натура. Поэтому когда каждый «играет сам за себя», результат чаще всего оказывается плачевным.

Но тут возникает вопрос: как пул может быть более выгодным? Естественно, атакующий не станет за свой счет компенсировать разницу. Хотя это может быть дешевле, чем просто купить 51 %, все равно расходы будут весьма велики. Рассмотрим алгоритм, изложенный в указанной статье, который позволяет одному пулу регулярно получать чуть больше, чем обычным пулам.

Пул осуществляет майнинг тайно и всегда стремится продолжить свою приватную цепочку. В какой-то момент времени последние блоки приватной и публичной цепочек могут оказаться аналогичными, но такое случается крайне редко.


Читайте больше статей про криптовалюты и майнинг на CRAZY-MINING.ORG

Тебе нравится читать подобные статьи про криптовалюты и майнинг, хочешь поддержать автора или задать вопросы? Будь первым в курсе новостей, подписывайся на наш телеграмм канал: CRYPTO WIKIES | Bitcoin & Altcoins Mining