Хакер #305. Многошаговые SQL-инъекции
Чуть больше недели назад исследователь, скрывающийся под никами team-periwinkle и GeoCold (в честь известного хакера Джорджа «geohot» Хоца), пообещал на Reddit, что он проведет атаку 51% на криптовалюту Einsteinium (EMC2) и будет транслировать происходящее в прямом эфире.
GeoCold сдержал свое обещание, хотя он атаковал не Einsteinium, а криптовалюту Bitcoin Private (BTCP), но о возможной смене токена-жертвы хакер предупреждал заранее. Как и планировалось, исследователь демонстрировал свою атаку в прямом эфире, сначала через Twitch, затем через StreamMe. В конечном счете, он был забанен на обеих платформах.
Update on the stream. Got banned from two streaming platforms fairly quickly. I'm going to try to find a platform where I can be assured report spamming won't work. If not I'll just post a video on youtube. But attack wise: We got ~70% of BTCP's network and I was about to fork it
— GeoCold "Mischief-Maker" (@geocold51) October 13, 2018
Тем не менее, атака удалась и GeoCold доказал свою точку зрения – провести атаку 51% на криптовлюту с небольшой рыночной капитализацией не так уж трудно. Хакер рассказал изданию BleepingComputer, что это далеко не первая подобная атака на его счету, и перечислил девять шагов, необходимых для реализации подобной схемы:
- Понадобится два сервера с одним кошельком, запущенным на них.
- На одном из серверов настраиваем майнинговый пул, назовем этот сервер оффлайновым.
- Отключим кошелек этого сервера от всех пиров в сети.
- Осуществим транзакцию с адреса А (который актуален для обоих кошельков/серверов) на адрес B – любой произвольный адрес, так же принадлежащий нам.
- Теперь начинаем майнить с хешрейтом выше 50% от общего хешрейта коина, чтобы мы могли стабильно получать более длинный блокчейн, чем нормальная сеть.
- Теперь к онлайновому кошельку/серверу, мы отправляем деньги, которые только что передали с оффлайнового сервера, в обменник. Дожидаемся, пока они поступят на депозит, обмениваем на любую другую криптовалюту, к примеру, Bitcoin, и выводим их.
- К этому моменту у нас на оффлайновом сервере будет более длинный блокчейн, содержащий транзакцию, которая конфликтует с той, которую мы только что направили обменнику.
- Мы выводим оффлайновый сервер в онлайн, и мир узнает о нашем новом, более длинном блокчейне, и все начинают его использовать, потому что он длиннее. Они сливают свои чейны с нашим и обнаруживают конфликтующие транзакции (ту, что мы послали с адреса A на адрес B, и ту, что была адресована обменнику). Они выбирают транзакцию с адреса A на адрес B, потому как она является частью более длинной цепочки.
- Бум! Готово, вы удвоили свои деньги с помощью криптомагии.
Атакуя BTCP, GeoCold успел осуществить первые шесть шагов из данного списка перед аудиторией своих стримов. Седьмой шаг он завершил в оффлайне, но не стал доводить атаку до конца без зрителей, ведь идея заключалась в демонстрации проблемы, а не в осуществлении бездумных финансовых махинаций.
«Я считаю, что мир должен знать, как легко это провернуть. Когда говоришь людям об атаке 51%, они отвечают, что это невозможно по причинам X,Y,Z, а я хотел показать им, что это возможно, и разработчикам нужно пофиксить их коин», — говорит GeoCold.
Защититься от подобных атак, по мнению исследователя, не так сложно. Достаточно использовать чекпойнтинг или гибридный Proof of Stake, что позволит осуществлять валидацию транзакций и майнить, опираясь на количество коинов, имеющих в распоряжении пользователя.