Взлом с проникновением: как увели $1M в биткойнах у Primedice

1-X-OUfIp7B-dpfF6whZr4GQ

Это история о том, как мы потеряли примерно 1 млн. долларов в биткойнах из-за хакера, воспользовавшегося уязвимостью в ГСЧ (генератор случайных чисел) нашего казино.

Это случилось в прошлом году, но сегодня мы решили поделиться своим опытом ради прозрачности, и чтобы другие смогли научиться на наших ошибках.

Август 2014

Сразу после того, как мы запустили третью версию Primedice, наша команда столкнулась c неприятелем, который поставил существование нашего сайта под угрозу. На тот момент у нашей команды был уже стаж около двух лет в создании Биткойн игровых сайтов. Тем не менее, лично мой опыт программирования был весьма ограниченным. Нас сильно поджимали сроки, мы старались избежать дальнейших задержек и выпустились после короткой недели закрытого бета-тестирования.

Ограбление началось незамедлительно после запуска двумя подозрительными игроками с никами Nappa и Kane. Мы отмечали необычные схемы ставок с обеих учётных записей. Kane обналичился автоматически, а за ставками Nappa мы какое-то время наблюдали: они были очень необычными, но мы не обнаружили ничего, что делалось бы не по правилам и позволили обналичить выигрыш и ему после небольшой паузы и короткой переписки.

Сентябрь 2014

После того, как мы спугнули Nappa задержкой обналички, злоумышленник подождал ещё несколько недель и создал новую учётную запись Hufflepuff. Hufflepuff стал игроком, который делал самые крупные ставки за всю историю Primedice. Он часто делал ставки по $8000 в биткойнах каждую секунду несколько часов подряд. Вся наша команда была шокирована тем, как Hufflepuff бесцеремонно рушил нашу бизнес-модель (основанную на том, что казино имеет преимущество в 1%), и с течением времени становился всё более и более прибыльным.

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

Открытие

Через пару дней после того, как мы отправили последний вывод порядка 2037 биткойнов на учётную запись Hufflepuff, наш главный разработчик наконец нашёл уязвимость. Это произошло после того, как мы обнаружили горстку учётных записей с тем же серверным зерном (далее будет объяснено, что это такое).

Чтобы понять, как Hufflepuff умудрился обдурить нашу систему, нужно сначала понять, как работает наша доказуемо-честная система (ГСЧ) Пользователю даётся зашифрованное случайное число (зерно сервера) до того, как он делает ставку (зерно клиента). Эти два случайных значения неким образом комбинируются и результ определяет, выиграл пользователь или нет. Случайно зашифрованное случайное число используется для совершения ставки, затем оно демонстрируется пользователю после совершения ставки, чтобы гарантированть, что результат не подтасован. Здесь можно почитать более глубокое объяснение того, как работает доказуемая честность: https://primedice.com/verify и http://dicesites.com/provably-fair.

Часть  функциональности нашего сайта отвечает за то, чтобы обязательно отдавать пользователям дешифрованные серверные зёрна (чтобы пользователи могли удостовериться в отсутствии манипуляций со ставками) и создать новое случайное зерно, при этом удаляя старое, раскрытое зерно. Hufflepuff нашёл способ “ввести в заблуждение” наш сервер, и заставить его отправить расшифрованное серверное зерно, которое является текущим зерном. Это было реализовано отправкой большего количества запросов, чем тот может обработать за малый отрезок времени, порядка сотен запросов менее, чем за секунду. В результате, у злоумышленника была вся необходимая информация, чтобы предсказать выигрышность ставки, а значит, мог в зависимости от этого делать “правильные” ставки.

Мы выявили это, как только нас осенило и мы попробовали закидать сервер запросами. Мы подозревали, что что-то подобное происходит и внезапно осознали возможность тайминг-атаки, описанной выше. В нашей базе данных хранились одновременно и те зёрна, которые были уже неактивными, и те, которые использовались в данный момент. Вместе с этим “зёрна Шрёдингера” существовало множество по-видимому не использовавшихся зёрен, подключённых к тем же учётным записям, на что и указала лавина запросов, как раз необходимых для реализации подобной атаки.

Дежа-вю

К сожалению, мы обнаружили эту уязвимость уже после того, как позволили Hufflepuff вывести его 2400+ монет  (примерно 1 мегадоллар на тот момент). По природе Биткойна мы с этим уже ничего не могли сделать, кроме как извлечь горький урок. Мы связались с Hufflepuff через его аккаунт на форуме Bitcointalk и потребовали вернуть монеты, но в ответ был невероятно жесток. По-видимому, наш разработчик не совсем правильно залатал этот глюк. В ответ на наш запрос, Hufflepuff создал ещё один аккаунт Robinhood и по-быстрому выиграл ещё более 2000 монет, обойдя заплатку. Правда, на этот раз он не смог вывести более 50 или 60 биткойнов, поскольку горячий кошелёк нашего сайта был пуст.

Через некоторое время он написал нам сообщение, которое обнаружил в документах один из наших сотрудников:

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

Да, это был явно не наш день…

Адрес депонирования Hufflepuff’а:
https://blockchain.info/address/1BiPXmDrHm7VXZnWy6NnW1ZbPc4dcpfkH5

Его основной адрес обналичивания:
https://blockchain.info/address/14iS2UvcLK33xkC1K1qL1dhEbp49aiNfNp

Обналичка RobbinHood:
https://blockchain.info/address/14HQ67ZhmATviHi9RdYhbUriAGSFmJpYoB

Примечание: Nappa/Kane – 2 из ранее использованных имён пользователей среди многих других.

Адрес вывода Kane:
https://blockchain.info/address/18dMBap634aESPTeD3FGcAgJ2S9n4qtBTZ

Адрес депонирования Nappa:
https://blockchain.info/address/16h9ggSzUWdvagEJdNvWVYiUkytw6SJgiB

Все вышеперечисленные доказательства доступны в блокчейне, а более чувствительную информацию (email/ip) мы не раскрываем.

Также важно отметить, что этот инцидент доказывает целостность и доказанную честность нашей системы. Если бы мы попытались что-то сделать со ставками Hufflepuff, то мы быстро бы поняли, что он читер и были бы богаче на 2400+ биткойнов. Hufflepuff сделал всего лишь небольшую передышку после того, как мы уполовинили максимальную ставку, и я уверен, что он бы обчистил нас, а мы бы так и не поняли, что произошло. Мы внесли свои личные средства, так что в результате никто из наших пользователей не пострадал.

Оригинальный пост: medium.com

 



Categories: Безопасность, Бизнес, Криминал, Происшествия

Tags: ,

13 replies

  1. так вам, это казино во все щели чтоб и сатошика у них не осталось)))

  2. Че опять ломают? Недоступен сайт((

  3. Красавчик))
    Красиво написал под конец))

  4. лохотрон проклятый

  5. Это казино основной мировой биткоин грабитель, 90% его игроков с огромными минусами до минус 160 битков доходит. Т.к. резкое повышение ставки сразу ведет тебя в минус как по волшебству. Со счетов игроков периодически пропадают деньги, в том числе модераторы переводят иногда в открытую на свои аккаунты. При жалобах администрация ничего не собирается возвращать. Игроки, кто проиграл там более месяца, в большинстве своем сходятся во мнении что данное казино просто наглый мошенник. При этом даже если ты вносил большие суммы и проигрывал их, а потом некоторое время играл на бесплатные сатоши – тебя забанят на раз назвав ботом.

  6. Внимательно вчитайтесь и вдумайтесь – “Мы отмечали необычные схемы ставок с обеих учётных записей. Kane обналичился автоматически, а за ставками Nappa мы какое-то время наблюдали: они были очень необычными, но мы не обнаружили ничего”

    Из этой фразы видно, что они следят постоянно за игроками, за их ставками. И какое это уже честное казино? Очередной развод на тему мы такие хорошие, а нас вот так плохо

  7. Хотели побрить людей, сами оказались побритыми- так вам и надо!!!

  8. Биткоин тут не причем, а новость явно вирусная реклама. Объяснение того что сервер отправлял незашифрованное число игроку нелепо. Хакер оставлял им сообщения в их же документах! Похоже на полный контроль хакером ПО казино но он делает ставки и ждет добровольного вывода средств казино))) Ну и конечно впечатляет преданность сотрудников “волновавшихся” за клиента и скинувшихся 2400BTC чтобы хакер мог зайти к ним еще разок

  9. Это не уязвимость генератора случайных чисел. Это баг сервера, который отправлял незашифрованные данные.

  10. быдлокодеры, таких не жалко )))
    только лохи могут отдать 2000 btc

  11. а был ли мальчик? 🙂

  12. Сомнительно, насчет потери 1кк. Судя по всему, потеряли недозаработанный 1% от этой суммы.

  13. Честное казино )))
    Пацан всё правильно сделал, так их.

Поделитесь своими мыслями

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s