Killer Whale атака: Восстановление взломанной EOS цепочки
Оригинал: https://medium.com/@roar_65307/killer-whale-attack-recovering-a-hi-jacked-eos-chain-b61cae13cf31
ОБЗОР
Jungle testnet обвалилась, поскольку кто-то злоупотреблял нашим краном и выбрал не производящих блок-продюсеров. На самом деле, это не является угрозой для mainnet, потому что там нет крана, но восстановление было хорошей практикой, которая может использоваться в случае наихудшего сценария.
ЧТО ПРОИЗОШЛО
В пятницу, 8 сентября, незадолго до того, как команда CryptoLions села на самолет в Украину, возвращаясь из командировки из Германии и Амстердама, мы обнаружили, что Jungle Testnet не работает.
По всей видимости, несколько тысяч аккаунтов были зарегистрированы в Jungle Testnet и получили доступ к нашему крану Jungle EOS. Вероятно, они использовали скрипт. У аккаунтов были такие имена, как «msb3ddwuvbmh» и «ms5mwjpydtif». В целом, распространили около 60 миллионов Jungle EOS.
Тот, кто осуществил атаку, использовал эти Jungle EOS, чтобы проголосовать за группу не производящих блок-продюсеров. Эти блок-продюсеры были зарегистрированы, что, вероятно, было частью атаки.
Да, возможность для такой атаки была открыта, но, эй, это же testnet. Она и существует для такого рода атак и взломов. Здесь вы можете прочесть очень забавную статью от EOS Metal о том, как мы неоднократно взламывали Jungle Testnet перед запуском mainnet.
ЧТО МЫ СДЕЛАЛИ
У нас была мысль просто перезапустить jungle снова, с более чем 13 миллионами блоков. В блоке #1310498 есть странная транзакция, которая делает повторную синхронизацию раздражающей. Блок-продюсеры, которые выполняют повторную синхронизацию должны с самого начала переходить к версии 1.1.0 при добавлении этого блока. Это морока.
Это можно было бы подкорректировать через перезапуск чейна, но это действие было бы упущенной возможностью для применения своих знаний на практике.
Тристан из Block Genesys, который давно является частью сообщества Jungle Testnet, оказал огромную помощь. Это была его идея восстановить чейн с резервных копий. По сути, это была вилка, с момента резервного копирования. Насколько нам известно, это была первая такая попытка, произведенная на таком крупном testnet.
(Было бы здорово, если бы злоумышленник перезапустил не форкнутый чейн и назвал его «Jungle Classic».)
Мы сделали резервную копию для 1.2.4 перед обновлением, приблизительно за 12 часов до атаки.
Мы остановили ноды.
И создали новую пару ключей EOS, чтобы использовать их в качестве ключей для подключения других членов
В конфигурации:
peer-private-key = [“!!CREATED_PEER_PUB_KEY!!”,”!!CREATED_PEER_PRIV_KEY!!”]
# add trused peers
peer-key = “PUB_KEY”
Когда мы снова начали работу, мы старались разрешать участие только тем блок-продюсерам, которые пользовались разветвленной версией. Мы изменили список участников, и все они изменили свои файловые конфигурации:
peer-private-key = ["!!CREATED_PEER_PUB_KEY!!","!!CREATED_PEER_PRIV_KEY!!"]
peer-key = "EOS7hfccXQ8odW7VWM4YrLWENbytKf8j3yPFS8XaZepGRB4UudHpt"
peer-key = "EOS6VV8ckDAFaXQ49v46dRhSnUsJp7umg6iUaaxQM8Jx3xEn1eWWG"
peer-key = "EOS8Jz1HyztUmg5kyduaQDBqxyEHkXputrK82E6yhZ6bXQkNPZevK"
peer-key = "EOS8WEaLDWnnBbRdYdefHzqumi1Jx3NEquk7wdTkEQyfa3iJXGxqN"
peer-key = "EOS7r8AgEiiCj4DwRK5MYqkpV4AfVZJUeTkHKkQvVYcoLFLz7qPz4"
peer-key = "EOS8C1cwEe3siBCTt7DETksEErvE4R8Y39RdGuQyBv1GrufH5d5Yc"
peer-key = "EOS8k77CLBkL44g8mPmgNXa9ctAm2a4fZCtLfjYwussyLnEupK2zs"
peer-key = "EOS6JGkzhKP9tnyMiHK3u8wscNYhaNiXp8bCjBgxsL8h1kUEvDDos"
peer-key = "EOS6fLjpVkJ4o5HDQcVmJKsX3SNJzyeLjRtoTnahHwVKtoQno51Fb"
peer-key = "EOS5WKL9nsJBZy19FWbxpLq7Rpv3obNJyFJxDWKT42y8BjL86tUGb"
peer-key = "EOS6qQfLGoFoGzAmyTPyuyNrF1KjSosDpHMfjT9dwYvLRBirC4n4G"
peer-key = "EOS7vbuUkMTsn17eLSs4LQZUCr5V8H2ovFBAy2yMaFVpbHkmnmTVz"
peer-key = "EOS87gwptFFoywK3nBo2VvZLZ3a4EpryyAsigwTC4xnmaEH9FsmQm"
Также мы создали checkpoint, обозначающий блок, который является уникальным для разветвленной цепочки. Это первый блок в вилке.
checkpoint = [13433968, "00ccfc70c981d1fea9a647eb856468feaef5ff6b6b85155e22283f6d4beb8b0b"]
Синхронизация занимала от двух до пяти часов, в зависимости от блок-продюсера.
Продюсеры проводили повторную синхронизацию. Мы держали частное подключение до тех пор, пока разветвленная цепочка не оказалась выше, чем испорченная цепочка.
КЛЮЧЕВЫЕ УРОКИ
для EOS:
Восстановление чейна из резервной копии работает. Вам необходимо вручную ограничить повторную синхронизацию теми блок-продюсерами, которые стемятся к форку.
Hard Replay также сработал.
Мы поняли, что все законные транзакции, которые были осуществлены между временем резервного копирования и временем атаки, были потеряны. Хорошо, что это всего лишь testnet.
Лучший подход к форку чейна из предыдущего состояния может заключаться в том, чтобы сделать hard replay до нежелательного блока.
./start.sh --hard-replay --truncate-at-block …
Мы протестировали это с нашим history node.
для Jungle:
Вероятно, для нас это хорошая идея как ограничить доступ к нашему крану и / или созданию аккаунта. (На данный момент, мы, вероятно, просто добавим Captcha на кран).
Еще одной хорошей идеей может быть использование большего количества токенов, чтобы можно было получить еще больше от крана.
Участие остается важным. ОГРОМНОЕ спасибо Тристану из Block Genesys, Джозефу из EOS Barcelona, Ксавье из EOS Costa Rica, Барту, Алексу, Фениксу из AtticLab, Ксингу, Доминику, Нейту из Aloha EOS, Диони из EOSMetal, Тодду, Джеки из JEDA, Джону, Майклу из EOS DAC, и всем, кого мы, возможно, упустили.
ВОПРОСЫ, КОТОРЫЕ ОСТАЛИСЬ
Помимо выполнения hard replay с помощью
--truncate-at-block
, может существовать другой подход с использованием-fix-reversible-blocks flag
, который восстанавливает обратимую базу данных блока, если эта база данных находится в плохом состоянии.Часть тестовых операций - это активная коммуникация и взаимодействие со стороны менеджеров нод. Это остается одной из самых больших проблем управления testnet.
🦁🦁🦁
CryptoLions - это EOS блок-продюсер, который базируется в Украине. Мы стремимся сделать EOS более ценным, создавая проекты, которые улучшают экосистему, устанавливая стандарты прозрачности и отчетности, а также популяризируя EOS по всему миру .
website: http://cryptolions.io/
github: https://github.com/CryptoLions
telegram: https://t.me/CryptoLions_io
steemit: https://steemit.com/@cryptolions
twitter: https://twitter.com/EOS_CryptoLions
medium: https://medium.com/@roar_65307
youtube: https://www.youtube.com/channel/UCB7F-KO0mmZ1yVBCq0_1gtA