EOS ищет решение для преодоления бага через который злоумышленники используют чужую RAM
Сообщество EOS снова ищет решение найденной уязвимости, поскольку разработчики определили баг в смарт-контракте, который позволяет злоумышленникам эффективно использовать сетевые ресурсы, принадлежащие другим пользователям.
Чтобы уменьшить спам, EOS требует, чтобы пользователи покупали и торговали оперативной памятью (RAM) для развертывания смарт-контрактов и запуска децентрализованных приложений (dApps).
Недавно разработчики обнаружили, что злоумышленники могут создавать вредные смарт-контракты, которые используют функцию сообщений на языке сценариев, что позволяет одному контракту сообщать другие контракты о конкретных событиях (например, передачу входящего токена). Вредные контракты используют эту функцию для заполнения RAM других пользователей "мусорными" данными, постоянно замораживают RAM и мешают жертвам использовать их в реальных целях или продавать ресурс в сети.
Эксплойт может влиять как на обычных пользователей, так и на определенные смарт-контракты, но, что важно, их можно отследить только в том случае, если они передают токены на контракт злоумышленника.
Разработчики ищут решение
Дэн Лаример (Dan Larimer), технический директор компании-разработчика EOS, Block.one, и главный создатель криптовалюты, рассказал об этом на Medium. Он утверждает, что этот баг следует характеризовать как злоупотребление действенной функцией и назвал это "вандализмом", а не багом.
Он сказал, что, поскольку эксплойт использует "преимущество несоответствия между намерениями пользователей и фактическим эффектом кода", производители (продюсеры) блоков, согласно конституции EOS, имеют полномочия, внести в черный список контракт злоумышленника, если пораженные пользователи хешируют спор, через арбитражную процедуру сети. Он также отметил, что многие кошельки EOS предупреждают пользователей, когда транзакция может потреблять оперативную память, RAM.
Лаример также предложил модернизировать протокол только для производителей блоков, который, если он будет принят всеми производителями активных блоков, будет препятствовать получателю уведомлений неожиданно потреблять RAM отправителя.
Тем временем команда разработчиков, EOSEssentials, создала эффективный, хотя и немного сложный обходной путь для пользователей, которые обеспокоены потерей накопленной RAM.
В GitHub группы объясняется, что пользователи EOS могут отправлять токены через прокси-аккаунт, который не содержит RAM, предотвращая злонамеренным контрактам потребление оперативной памяти из фактического аккаунта пользователя. Этот аккаунт гарантирует безопасную передачу (safetransfer) и закодирован для автоматического переноса полученных токенов к любому аккаунту, который отображается как первое слово в строке напоминания транзакции.
Например, если кому-то захотелось отправить несколько токенов для Block.one (у них есть 100 млн EOS, они могли бы, пожалуй, использовать еще несколько), то нужно было бы отправить их непосредственно к "safetransfer", а затем написать "b1" (название аккаунта компании) как первое слово в строке напоминания. Заметка выглядела бы примерно так:
B1 Вот несколько токенов; надеюсь, они помогут!
Этот метод прокси также совместим с другими типами токенов, хотя это потребует некоторых ручных настроек.
Кроме того, разработчики отмечают, что пользователи не должны пытаться использовать метод прокси-токена при взаимодействии с dApps, поскольку приложения будут взаимодействовать как с прокси-контрактом, а не как с фактическим пользователем. Однако это вряд ли будет большой проблемой, поскольку слишком мало пользователей в настоящее время использует EOS dApps (или Eтереум dApps если на то пошло), хотя экосистема EOS все же является одной из немногих децентрализованных платформ, которая демонстрирует реальные результаты.