4 марта 2014 года было похищено около 12,3% от BTC на Poloniex.
Как это произошло?
Хакер обнаружил уязвимость в коде, который принимает снятия. Вот что происходит, когда вы размещаете вывод:
1. Ввод проверки.
2. Ваш баланс проверяется, чтобы увидеть, если у вас есть достаточно средств.
3. Если вы это сделаете, ваш баланс вычитается.
4. Вывод вставляется в базу данных.
5. подтверждение по электронной почте отправляется.
6. После того, как вы подтвердите вывод, вывод демон поднимает его и обрабатывает вывод.
Хакер обнаружил, что если вы поместите несколько изъятий все практически тот же самый момент, они будут обработаны на более или менее одновременно. Это приведет к отрицательному балансу, но действительные вставки в базу данных, которая затем получить подхвачена вывод демоном.
Что ли Poloniex неправильно?
Основная проблема здесь в том, что снятие должно быть поставлено в очередь на каждом этапе пути. Это не могло бы произойти, если запросы на снятие были обработаны последовательно, а не одновременно.
Кроме того, аудит и функции безопасности были явно не ищут отрицательные остатки. Они добавляют депозиты и снятие денег и проверить, что счета находятся в равновесии. Если у вас есть 2 BTC, вывести 10 BTC, и остается -8 BTC, программа будет видеть, что вы пополняли 2, снял 10, и есть именно то, что вам необходимо: -8.
Что ли Poloniex Do Right?
Существующие функции безопасности заметили необычное снятие активности и заморозили БТД. То есть, как была обнаружена активность.
Что происходит сейчас?
Я беру на себя полную ответственность за это, и я привержен погашением долга BTC. Обменные фонды 12,3% коротки. Потому что не хватает BTC, чтобы покрыть баланс каждый, все остатки временно будут списаны на 12,3%. Пожалуйста, обратите внимание, что это абсолютная необходимость - если бы я не делал эту настройку, люди, скорее всего, вывести все свои BTC как можно скорее для того, чтобы убедиться, что они не были оставлены в том, что оставшиеся 12,3%. Помимо очевидного недостатка большинства БТД выводили обмена, это не было бы справедливо - некоторые люди получат все свои деньги сразу, а некоторые из них не получил бы ни сразу.
Сумма вычитается из остатков у всех будет записана, и средства, привлеченные от биржевых сборов, а также пожертвования от своего собственного кармана (что не очень глубоко, я боюсь), будет равномерно распределен по всем пользователям, у которых были BTC удержанными ,
Если у меня были деньги, чтобы покрыть весь долг прямо сейчас, я бы покрыть ее в сердце. Я просто нет, и я не могу просто вытащить его из воздуха.
Что будет сделано, чтобы предотвратить дальнейшие подвиги?
Снятие и создание заказа были включены в очереди методы, где первым шагом является добавление задачи в глобальную очередь выполнения, которая обрабатывается последовательно. Каждый шаг критических операций базы данных проверяются, прежде чем продолжить, и такие операции в процессе преобразования в транзакции. Я нанял дополнительных разработчиков, чтобы помочь с ужесточением безопасности на Poloniex, а также создана ошибка щедрот.
-----
В заключение...
Я искренне прошу прощения за это, и я очень благодарен многим людям, которые уже выразили свою поддержку и веру в моем характере. Я беру на себя полную ответственность; Я буду жертвовать некоторые из моих собственных денег, и я не буду брать прибыль до долг будет погашен.
Я приветствую ваше мнение о том, как действовать, но, пожалуйста быть конструктивной. У меня нет денег, чтобы отмахиваться долг, поэтому мы должны работать вместе.