Причина этого инцидента заключалась в том, что сообщество не смогло обнаружить риски в предложении при проверке предложения и не проверило тщательно, есть ли уязвимости безопасности в коде контракта предложения.
Автор: SharkTeam
20 мая 2023 года по пекинскому времени Tornado.Cash подвергся атаке предложения, и злоумышленник получил прибыль в размере около 680 000 долларов США. SharkTeam впервые провела технический анализ этого инцидента и резюмировала меры безопасности, надеясь, что последующие проекты смогут извлечь из этого уроки и построить линию защиты безопасности для индустрии блокчейнов.
1. Анализ событий
Адрес злоумышленника:
0x092123663804f8801b9b086b03B98D706f77bD59
0x592340957eBC9e4Afb0E9Af221d06fDDDF789de9
Контракт на атаку:
0xAF54612427d97489707332efe0b6290F129DbAcb
0x03ecf0d22f9ccd21144a7d492cf63b471916497a
0x7dc86183274b28e9f1a100a0152dac975361353d (контракт на развертывание)
0xc503893b3e3c0c6b909222b45f2a3a259a52752d (контракт с поддельным предложением)
(1) Сначала злоумышленник (0x08e80ecb) инициирует предложение к атакуемому контракту (0x5efda50f), утверждая, что это предложение является дополнением к Предложению 16.
(2) Но на самом деле в предложении есть дополнительная функция самоуничтожения.
(3) К сожалению, сообщество не обнаружило никаких проблем в этом предложении, и большинство членов проголосовало за принятие этого предложения.
(4) Злоумышленник создал множество контрактов для реализации передачи токенов.
(5) Злоумышленник (0x08e80ecb) уничтожает контракт предложения (0xc503893b) и его контракт создания (0x7dc86183). Контракт атаки (0xc503893b) впоследствии был перераспределен по тому же адресу.
(6) После изменения контракта предложения злоумышленник (0x08e80ecb) выполняет предложение и изменяет сумму блокировки токена адреса контракта, находящегося под его контролем, на 10000.
(7) После выполнения предложения злоумышленник (0x08e80ecb) переводит токены на свой адрес и получает право собственности на атакованный контракт.
Анализ уязвимостей: поскольку контракт создания (0x7dc86183) контракта предложения (0xc503893b) развертывается через creat2, после уничтожения двух контрактов по тому же адресу может быть развернут новый логический контракт, а выполнение предложения вызывается в форме Атакующий контракт может произвольно изменить значение в атакуемом контракте.
Краткое описание инцидента: Причина этого инцидента заключалась в том, что сообществу не удалось обнаружить риски в предложении при проверке предложения, а также тщательно не проверить, есть ли уязвимости в системе безопасности кода контракта предложения.
2. Рекомендации по безопасности
В ответ на эту атаку мы должны соблюдать следующие меры предосторожности в процессе разработки:
При разработке предложений полностью учитывайте безопасность механизма предложения и минимизируйте риск централизованного управления предложениями Рассмотрите возможность снижения ценности атак, увеличения стоимости получения права голоса, увеличения стоимости выполнения атак и т. д.
Прежде чем голосовать за предложение, сообщество должно тщательно проверить, есть ли в коде контракта бэкдор.
Прежде чем предложение будет одобрено, можно связаться со сторонней компанией, занимающейся аудитом безопасности, для проведения аудита безопасности кода логики контракта.
Посмотреть Оригинал
Содержание носит исключительно справочный характер и не является предложением или офертой. Консультации по инвестициям, налогообложению или юридическим вопросам не предоставляются. Более подробную информацию о рисках см. в разделе «Дисклеймер».
SharkTeam: анализ принципа атаки Tornado.Cash Proposal
Автор: SharkTeam
20 мая 2023 года по пекинскому времени Tornado.Cash подвергся атаке предложения, и злоумышленник получил прибыль в размере около 680 000 долларов США. SharkTeam впервые провела технический анализ этого инцидента и резюмировала меры безопасности, надеясь, что последующие проекты смогут извлечь из этого уроки и построить линию защиты безопасности для индустрии блокчейнов.
1. Анализ событий
Адрес злоумышленника:
0x092123663804f8801b9b086b03B98D706f77bD59
0x592340957eBC9e4Afb0E9Af221d06fDDDF789de9
Контракт на атаку:
0xAF54612427d97489707332efe0b6290F129DbAcb
0x03ecf0d22f9ccd21144a7d492cf63b471916497a
0x7dc86183274b28e9f1a100a0152dac975361353d (контракт на развертывание)
0xc503893b3e3c0c6b909222b45f2a3a259a52752d (контракт с поддельным предложением)
Атакуемый контракт:
0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce
Инициировать транзакцию предложения:
0x34605f1d6463a48b818157f7b26d040f8dd329273702a0618e9e74fe350e6e0d
Атакующие транзакции:
0x3274b6090685b842aca80b304a4dcee0f61ef8b6afee10b7c7533c32fb75486d
Процесс атаки:
(1) Сначала злоумышленник (0x08e80ecb) инициирует предложение к атакуемому контракту (0x5efda50f), утверждая, что это предложение является дополнением к Предложению 16.
(2) Но на самом деле в предложении есть дополнительная функция самоуничтожения.
(3) К сожалению, сообщество не обнаружило никаких проблем в этом предложении, и большинство членов проголосовало за принятие этого предложения.
(4) Злоумышленник создал множество контрактов для реализации передачи токенов.
(5) Злоумышленник (0x08e80ecb) уничтожает контракт предложения (0xc503893b) и его контракт создания (0x7dc86183). Контракт атаки (0xc503893b) впоследствии был перераспределен по тому же адресу.
(6) После изменения контракта предложения злоумышленник (0x08e80ecb) выполняет предложение и изменяет сумму блокировки токена адреса контракта, находящегося под его контролем, на 10000.
(7) После выполнения предложения злоумышленник (0x08e80ecb) переводит токены на свой адрес и получает право собственности на атакованный контракт.
Анализ уязвимостей: поскольку контракт создания (0x7dc86183) контракта предложения (0xc503893b) развертывается через creat2, после уничтожения двух контрактов по тому же адресу может быть развернут новый логический контракт, а выполнение предложения вызывается в форме Атакующий контракт может произвольно изменить значение в атакуемом контракте.
Краткое описание инцидента: Причина этого инцидента заключалась в том, что сообществу не удалось обнаружить риски в предложении при проверке предложения, а также тщательно не проверить, есть ли уязвимости в системе безопасности кода контракта предложения.
2. Рекомендации по безопасности
В ответ на эту атаку мы должны соблюдать следующие меры предосторожности в процессе разработки: