Пользователь
0,0
рейтинг
13 февраля 2014 в 15:10

Проблемы MtGox и спамбот-кузнец из песочницы

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

Следует заметить, что проблемы у MtGox начались ещё весной прошлого года, когда её расчётный счет в США был арестован в связи с расследованием незаконной деятельности по переводу денег без соответствующей лицензии. С тех пор биржа не может найти надёжных банковских партнёров, и регулярно задерживает платежи в традиционной валюте. Это привело к заметной курсовой разнице по сравнению с другими биржами, доходившей порой до 25%.

Впрочем, что касается вывода биткоинов, то и эти проблемы биржа испытывает не в первый раз. Как сообщает один из ключевых разработчиков Bitcoin Foundation Грегори Максвелл (ссылка), аналогичные проблемы биржа уже испытывала в сентябре прошлого года:

I first heard people reporting stuck transactions back in ~September. I looked into it and determined that Mtgox was spending immature coins. Freshly generated Bitcoins (from mining) can not be spend until they are at least 100 blocks deep in the blockchain. This prevents the funds from vanishing forever if the chain reorgs. I pinged magicaltux [прим.: Mark Karpelles] and after a couple tries got ahold of him. I think they also wasted some time on dead ends trying to resolve this before the actual nature of the problem was brought to their attention, e.g. raising their transaction fees with a mistaken belief that their fees weren't high enough.
Mtgox wasn't tracking if the coins were freshly generated or what their height was in their software. Including this data would apparently be a non-trivial change, and for high risk finance software even a trivial change takes a lot of work. I suggested a workaround (basically, just try to spend the oldest coins), and as far as I know they implemented it and it was effective.


MtGox не использует эталонное ПО, предоставляемое Bitcoin Foundation, для совершения операций с биткоином. Как они утверждают, эталонное ПО не подходит для их объёмов. Вместо этого они используют свой собсвтенный кошелёк, который, по слухам, был написан на PHP лично Марком Карпеллесом (aka MagicalTux) — директором биржи. При выводе криптовалюты они пытались использовать недавно сгенерированные биткоины (менее 100 подтверждений), что запрещено правилами протокола. В результате эти транзакции блокировались и не подтверждались. Чтобы радикально решить эту проблему, пришлось бы значительно переделать существующее ПО и отслеживать количество подтверждений для каждой порции монет. Вероятнее всего, MtGox не решился на радикальные изменения и вместо этого обошёл проблему, поменяв алгоритм выбора монет для исходящих транзакций — отдавая приоритет самым давним поступившим монетам.

Проблема, с которой они столкнулись на этот раз, в чём-то похожа. Начались эти проблемы, по-видимому, ещё в начале ноября, и постепенно усугублялись по мере того, как всё больше и больше биткоинов в их кошельке «застревало» в потерянных исходящих транзакциях. Более-менее нормальное объяснение того, что случилось, на русском языке уже было тут опубликовано ранее. Я лишь сделаю пару замечаний.

Во первых, malleable transactions — это не «тягучие», а «ковкие» (mallet = молот), или, если переводить по смылу, «деформируемые».

Во-вторых, многие исходящие транзакции MtGox изначально уже были не вполне корректные, и блокировались большинством узлов сети, поскольку содержали подпись в некорректном формате. Эта блокировка была добавлена в эталонную реализцию клиента относительно недавно, и, по-видимому, не все узлы и не все майнеры успели обновить своё ПО, что позволило MtGox до поры до времени продолжать посылать кривые транзакции. Кроме того, MtGox имеет прямой выход на некоторые майнерские пулы, что позволяло им обходить блокировку транзакций сетью.

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

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

О том, что на хэш нельзя полагаться для отслеживания транзакции, было известно ещё в апреле 2011 года. Чуть позже были внесены соответствующие изменения в эталонное ПО, чтобы оно не полагалось лишь на id транзакции, а отслеживало любые транзакции, расходующие соостветствующие выходы (забегая вперёд, изменения эти были недостаточными). Несмотря на это, по состоянию на конец января 2014 года разработчики в MtGox не имели ни малейшего понятия, что происходит. После нескольких дней расследования, 10 февраля MtGox наконец заблокировал все исходящие транзакции и опубликовал объявление на своём сайте. В нём они вкратце дают техническое описание проблемы и заявляют, что это критическая ошибка в протоколе, и что все биржи и оналйн кошельки могут быть подвержены атакам. О проблемах их собственной реализации клиента, которые сделали атаку легко реализуемой, в объявлении ни слова. MtGox так торопились обвинить всех и вся в своих проблемах, что даже забыли извиниться за свои собственные огрехи, нерасторопность и те, мягко говоря, неудобства, которые они доставили и продолжают доставлять своим пользователям.

После этого заявления MtGox последовал ответ сначала от некоторых ключевых разработчиков лично, зачем официальное ответное заявление Bitcoin Foundation. Все они признают, что это давно известный недостаток дизайна протокола, однако ни в коей мере не является критическим. Указывается, что эталонное ПО уже давно содержит код, позволяющий справляться с этими трудностями, и что MtGox следует исправлять их собственное ПО. У многих вызывает недоумение, почему это используется как предлог, чтобы блокировать вывод средств с биржи.

Очень многие биткойнеры сходятся на том, что главной целью этого заявления MtGox было дестабилизировать цену, чтобы покрыть потери биткоинов за счёт скупки их по низкой цене на собственной бирже и арбитража на других биржах.

Однако самое интересное началось вчера.

Некто запустил в сети биткоин узел/узлы, которые перехватывает все транзакции, и «перековывают» их в промышленных масштабах. По некоторым данным, только в течение 11 и 12 февраля было «мутировано» порядка 30000 транзакций. Протокол биткоин не позволяет украсть деньги таким образом, и единственной целью хакера, по-видимому, является атакая на биткоин в целом, с целью дальнейшей дестабилизации цены.

Как я заметил ранее, эталонная реализация протокола не полагается на tx id (хэш транзакции) для отслеживания расходования выходов. Однако он имеет одну особенность, которая не вполне совместима с «перековыванием». В настоящее время bitcoin-qt позволяет расходовать «сдачу» от транзакции немедленно, не дожидаясь подтверждений. Считалось, что это безопасная практика — поскольку сдача всегда поступает в наш собственный кошелёк. Если транзакция, создающая сдачу, будет подтверждена, то и последующая транзакция, расходующая сдачу, будет корректна, и общий баланс кошелька не нарушится. Если первая транзакция не подвтерждена, то и расходующая сдачу транзакция не будет иметь смысла. Перековывание транзакций вносит свои коррективы в это предположение, поскольку перекованная транакция, с изменённым tx id, может быть подтверждена, но транзакция, расходующая сдачу, становится некорректной из-за того, что tx id транзакции, от которой она зависит, изменился.

Таким образом, если кто-то активно расходует средства со своего кошелька, они могу столкнуться с тем, что баланс отражается некорректно, и некоторые транзакции никогда не завершаются. Биткоины при этом не теряются! Однако это вносит хаос в учёт израсходованных биткоинов, и создаёт определённые трудности, поскольку «застрявшие» транзакции непросто удалить вручную.

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

Я рекомендую не пересылать биткоины, используя эталонный bitcoin-qt, пока новый релиз не будет выпущен. Если же всё же есть крайняя необходимость это сделать, то дожидайтесь хотя бы одного подтверждения, прежде чем делать новые транзакции.

Update: Bitcoin Foundation наконец сделало новый релиз 0.9.0 эталонного по Биткоин.
Илья @il--ya
карма
11,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (37)

  • +1
    Складывается впечатление, что биржи и с этих проблем снимают сливки.
    Доказательств нет и не будет, но недавний слив — очень хорошая возможность поправить своё положение, как известно, не очень завидное.
    Точно так же поступает Bitstamp, приостанавливая кратковременно то, что ему удобно приостанавливать.
    Точно так же поступает btc-e — когда ему удобно.
    Платят, по традиции, клиенты.
    • 0
      Владельцы бирж работают ради прибыли. Это нормально. А приостановка торгов только пугает людей, так что для владельцев бирж это не выгодно.
      • 0
        Приостановка торгов? А официально её не было. Поэтому официально — биржи белые и пушистые.
        «Не виноватая я, он сам пришёл».
        Гоксу нечем платить по своим обязательствам.
        И тут он, Гокс, очень своевременно объявляет об уязвимости btc.
        А потом его (и не его) очень своевременно ддосят.
        Курс что делает? Падает.
        Гокс что делает? Приостанавливает вывод.
        Биткоины где? На Гоксе.
        Фиат где? На Гоксе.

        Профит!
        • 0
          Для биржы выгодна репутация. Люди которые переводят свои средства на биржи, своим кошельком говорят, мы им доверяем и готовы рискнуть.
        • 0
          У бирж нет «обязательств» — это не банк. Он просто помогает людям вводить и выводить деньги, а также снимает процент с торговли. Закрывать биржу невыгодно не только из-за проблем с пользователями, не только из-за того, что репутация будет ухудшена, но и из-за того, что владельцам выгодна торговля. Торговля — это хлеб для владельцев биржи.
      • +3
        Не выгодно? Приостановка торгов — это гарантированное падение курса BTC. Приостановка вывода — это изменение курса (в зависимости от того, что не выводят). Играть на значительных изменениях курса гораздо выгоднее, чем получать проценты от сделок. Тем более, проценты от сделок только вырастут, т.к. при скачках курса возрастут объемы.
  • +2
    Я правильно понимаю, что по факту кто-то нашел вариант как вывести с биржи одни и теже деньги 2 раза и биржа таким образом оказалась в минусе?
    • 0
      Да, только я очень подозреваю, что не 2 раза, а гораздо больше :)
      • 0
        Но по идее они могут проследить все транзакции по блокчейну, найти указанные дубли и таким образом проследить кто это сделал? точнее на какой счет выводились деньги с по тем скажем так двойным транзакциям
        • 0
          Могут :) И вполне вероятно, что уже нашли… тело :)
        • 0
          У них там сейчас такая катавасия, не шибко-то проследишь. Тем более что хакеры могли для заметания следов мутировать не только свои, но и чужие транзакции. Есть, конечно, ещё логи, ip-адреса, и т.д. Но всё это потребует огромных усилий, чтобы расследовать, с неясным результатом. Допустим, счёт-то они вычислят, и даже ID определят, но вот настоящее ли оно?
          • 0
            Вывели реальные деньги = есть номера счетов куда они выведены, в отличии от +- анонимного биткоина вывод денег несколько затруднен камерами у банкоматов и тп, кардеров то ловят.
            • +1
              Нет, выводили биткоины, причём MtGox этого очень долгое время не замечал. У них просто накапливались неподтверждённые транзакции, которые на самом деле были подтверждены. Они пытались заново использовать биткоины, задействованные в этих траназкциях, на что, естественно, получали отказ от сети.
              Я говорил, конечно, не о банковских счетах, а о bitcoin-адресах, просто повторил неточность за предыдущим комментатором. Теоретически биржи требуют авторизацию, скан ID документа и подтверждение адреса, в особо подозрительных случаях MtGox даже требует нотариально заверенные копии по почте. Но скан поддельных (или даже настоящих, но чужих) документов нетрудно раздобыть. И даже нотариальное заверение можно сделать поддельное — они вряд ли серьёзно проверяют эти вещи. Для них авторизация была формальностью, которая требуется в рамках AML (Anti-money laundering), а не для того, чтобы воров искать.
        • 0
          Могут.
          Могут даже опубликовать адреса.
          Но ввиду того, что биткойн находится вне правового поля, все их слова будут похожи на:
          «Вот этот парень украл у меня супер-меч 5 уровня».
          За такое дело возьмётся только Белорусское КГБ :)
          • 0
            Я бы не сказал.
            Дела по краже виртуальных вещей много где расследуют уже.
            Но результат от этого не меняется, по цене mrgox уже почти в 2 раза отличаетс от других, что говорит о возможности его восстановления.
          • 0
            Если изучить атаку, то становится ясно, что не «могут», а «должны», чтобы хотя бы попытаться не остаться крайними. Все двойные трансакции, все логи по ним, всё-всё-всё!
            Иначе, всем будет очевидно, что хозяева биржи прикарманили эти деньги под таким вот хитрым предлогом.
    • 0
      Да, именно так, так как господа разработчики ездили на своем уникальном велосипеде
      • +2
        Предлагаю вычесть из зарплаты!
        • 0
          Как я понял, велосипед пилил хозяин. Поэтому тут только уволить.
          • 0
            С учётом местной специфики я вижу только один вариант — сэппуку. :)
    • 0
      Сами они факт кражи не признают, и вряд ли когда-нибудь признают. Но это очень возможно.
  • 0
    Если бы у меня была своя биржа, я бы обязательно соорудил watchdog, который срабатывает при выводе более чем половины всех средств с биржи. Watchdog должен блокировать дальнейший вывод, и постить пресс-релиз с заранее заготовленной «ботвой». Что-нибуть этакое, глобальное. Навроде бага в протоколе. Необязательно правдоподобно, главное чтобы было побольше времени для маневра.
  • 0
    Кто-нибудь может «на пальцах» объяснить экономику биржи криптовалют? Например, у меня такое не сходится в голове:
    — на биржу ввели 1 млн долларов;
    — на бирже купили BTC на все деньги по курсу 100$;
    — курс постепенно вырос до 1000$, т.к. все спекулятивно прижали BTC в своих аккаунтах на бирже;
    — 30% пользователей захотели вывести доллары;
    — откуда биржа возьмет 2 млн долларов? продаст BTC клиентов на другой бирже?

    Я не понимаю, какой механизм мог бы плавно регулировать спрос на вывод. Только временная блокировка вывода, пока курс не изменится до подходящего значения. Похоже, нужен какой-то надежный и быстрый межбиржевой обмен, чтобы стабилизировать курс.
    • +2
      Чтобы вывести доллары, нужно сначала продать биткоины (обменять обратно на доллары). Продать биткоины на сумму большую, чем есть долларов на бирже физически невозможно. Собственно эта причина и формирует курс.
      • –3
        Как раз физически это запросто возможно, т.к. биржа может врать нам про свои валютные резервы. Я никогда не слышал, чтобы биржа сообщала «у нас нет резервов для совершения этой операции». Они просто закрывают вывод. Это значит, что «доллары» на бирже не обеспечены настоящими долларами. А теперь я подозреваю, что и «Биткойны» на бирже не обеспечены настоящими BTC. Во всяком случае, если MtGox долгое время «не замечал» неподтвержденные транзакции, то это кажется правдоподобным.
        • 0
          Я уверен, что на западе компании (биржи), что проводят подобные операции обязаны проходить аудит. Например, в Гонк Конге все компании имеют бугалтера и аудитора. Аудит, может затребовать банк. В википедии, даже написано, что хакер украл пароль аудитора мтГокса, что вызвало определенные проблемы. Трейдеры, которые вводят на биржу миллионы долларов, наверняка имеют отчеты аудиторов, они знают, где и сколько и когда у биржи было денег на счету в банках. а операции по биткоин кошельку вообще публичны. Если биржа начнет терять деньги это станет известно достаточно быстро, что приведет к ее полному банкротству
          • 0
            Если мы про государственный аудит говорим, то он возможен в той области, которая имеет какую-то законодательную базу. Не думаю, что обменники криптовалют юридически являются биржами. В реальности мы видим, что биржа сама не может отследить собственные BTC, долгое время позволяя им утекать.

            Пойду напишу на BTC-e, что хочу ввести миллион долларов по поводу предстоящего закупа. Попрошу отчет аудиторов, посмеюсь.
        • +3
          Вы же покупаете не у биржи, а на бирже. Если курс условно тысяча, значит есть желающие продать биткоины по тысяче. Значит у этих желающих есть доллары, чтобы эту операцию совершить. Если вы хотите продать много биткоинов, то желающих станет меньше и курс упадет.

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

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

          Другой вопрос, почему все стали выводить биткоины. Потому что перестали доверять гоксу, а вывести биткоины проще и быстрее, чем фиат. А почему перестали доверять — потому что гокс мухлевал, и многим это стало очевидно.

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

          А если биржа не честна, то может случится вообще все что угодно, разумеется.

          Вы ведь задавали свой вопрос про устройство абстрактной биржевой экономики, а не про устройство биржеподобной аферы, или я вас неправильно понял?
          • +1
            > Вы же покупаете не у биржи, а на бирже.

            В том-то и дело, что технологически торги на бирже проводятся таким образом, что покупка-продажа именно «у биржи»
            Условно говоря, если вы вводите на биржу 1 биткойн — то этот биткойн попадает на «кошелек биржи», а цифра на вашем личном счете увеличивается на 1. Если вы пересылаете на банковский счет биржи 500 баксов — то именно на «банковском счету» биржи цифра увеличивается на 500 баксов и в вашем личном кабинете рисуется 500 «виртуальных баксов»

            Все работает штатно, если нарисованные биржей балансы совпадают. Но в том-то и дело, что они могут перестать совпадать. Могла возникнуть недостача — хакер заказывает вывод биткойна, реально транзакция происходит (то есть цифра на кошельке биржи уменьшается), но так как «кривой софт» следил за неправильным хешом — то списание с личного счета не произошло.
          • 0
            Ну, я, скорее, про реальную «биржу», на которой приходится торговать криптовалютами. С вашим комментарием я согласен, но реальность вносит поправки. Например, игроки принимают решение не мгновенно, не доверяют бирже и подвержены панике. Кроме того, существует более одной биржи, а перевод средств между ними занимает время (разное) и стоит денег (разных). В итоге на какой-то бирже может возникать ситуация, когда все хотят купить BTC и вывести их для продажи на другой бирже.
    • 0
      биржа это только посредник.
      Биржа собирает предложения у покупателей и продавцов и берет процент от сделок.
      Биржа не рискует.

      Если я выставлю предложение о продаже биткоина за 999 а вы ставите предложение о покупке по 1001 то биржа проведет ее по 1000. Но с нас биржа возмет процент
      • –1
        Если я выставлю предложение о продаже биткоина за 999 а вы ставите предложение о покупке по 1001 то биржа проведет ее по 1000. Но с нас биржа возмет процент
        Нет. В этом случае сделка произойдет по курсу 999, а на счету покупателя останется 2 доллара минус комиссия биржи.

        Биржа собирает предложения у покупателей и продавцов и берет процент от сделок.
        Похоже, настоящие биржи активно используют резервы в своих целях.
        • 0
          а почему по 999, а не 1001? Вот я тут баловался на бирже crypsty (коинов на 2 доллара у меня). На этой бирже меняют только криптовалюты
          Вот я буду покупать биткоины за лайткоины, а вы продовать лайтконы за биткоины, так чей курс повашей логике выберет биржа? тому кто продает биткоины или лайткоины? Есть курс и я могу покупать или продовать по нему. или выставлять преложение по любому другому курсу и на покупку и на продажу. Попробуйте сами. биржа берет 0.3% это и больше им дурить незачем им главное что бы больше меняли
          • 0
            btc-e.com — на первой странице список преложений о покупке и продаже
          • +1
            Будет взят курс лучшей заявки (лучших заявок) в стакане.

            Если ваш курс хуже курса встречной очереди стакана, то ваша заявка тоже попадет в стакан, и будет реализована по той цене, которую вы указали.
  • 0
    «В настоящее время bitcoin-qt позволяет расходовать «сдачу» от транзакции немедленно, не дожидаясь подтверждений. „
    Как обычно, лучшее враг хорошего.

    Может зря Сатоши передал “управление» этим парням.
    А то ещё и не такие велосипеды могут наворотить в официальном клиенте.

    Всё больше склоняюсь к мысли, что реализация Bitcoin протокола в виде blockchain и оф. клиента
    никакой децентрализацией не пахнет.

    Вот введут штаты под угрозой уголовной ответственности какие-нибудь меры и Bitcoin Foundation
    как миленькая добавит в оф. клиент ограничение на сумму перевода в день (и в месяц) и
    залочат его на один пул.
    Все «законопослушные» граждане (те, которые ради своей безопасности готовы пожертвовать своей свободой) скачают этот клиент
    и с удовольствием будут работать с государственным пулом. Который, естественно, никакие другие транзакции принимать не будет.
    И всё.
    • 0
      Да, наверно, к тому все идёт. Будут альтернативы, но их сделают «вне закона».

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.