15 мая 2024 года Sonne Finance подверглась атаке, в результате чего проект потерял более 20 миллионов долларов США.
SharkTeam немедленно провела технический анализ этого инцидента и обобщила меры безопасности. Мы надеемся, что последующие проекты смогут извлечь из этого уроки и совместно построить линию защиты для индустрии блокчейнов.
1. Анализ транзакций атаки
Злоумышленник: 0xae4a7cde7c99fb98b0d5fa414aa40f0300531f43
Контракт атаки: 0x02fa2625825917e9b1f8346a465de1bbc150c5b9
Целевой контракт: 0xe3b81318b1b6776f0877c3770afddff97b9f5fe5.
Атакующая транзакция: 0x9312ae377d7ebdf3c7c3a86f80514878deb5df51aad38b6191d55db53e42b7f0
Процесс атаки выглядит следующим образом:
1. Быстрый кредит 35, 569, 150 VELO и перевод этих токенов VELO в контракт soVELO.
Поскольку это прямой перевод (пожертвование), токен VELO не чеканится. Таким образом, в контракте soVELO totalCash увеличился на 35, 569, 150 VELO, а totalSupply soVELO остался неизменным.
2. Злоумышленник создает новый контракт 0xa16388a6210545b27f669d5189648c1722300b8b и запускает атаку на целевой контракт в новом контракте. Процесс атаки выглядит следующим образом:
(1) Перевести 2 соВело на новый контракт
(2) Объявить soWETH и soVELO залогом.
(3) Одолжить 265, 842, 857, 910, 985, 546, 929 WETH у soWETH.
В процессе выполнения вышеупомянутой функции заимствования на основе возвращаемого значения функции getAccountSnapshot мы обнаружили:
Для контракта soWETH баланс нового контракта равен 0, сумма кредита равна 0, а обменный курс (exchangeRate) равен 208, 504, 036, 856, 714, 856, 032, 085, 073.
Для контракта soVELO баланс нового контракта равен 2, то есть заложено 2 wei soVELO, сумма кредита равна 0, а курс обмена (exchangeRate) равен 17 735 851 964 756 377 265, 143, 988, 000, 000, 000, 000, 000, 000
ExchangeRate рассчитывается следующим образом:
Имея в залоге 1 wei soVELO, вы можете взять в долг не более 17 735, 851, 964, 756, 377, 265, 143, 988 VELO, а взять в долг 265 842, 857, 910, 985, 546, 929 WETH, вам необходимо заложить как минимум 265, 842, 857, 910, 985, 546, 929 soWETH,
Цена soWETH: soWETHPrice = 2, 892, 868, 789, 980, 000, 000, 000,
Цена соВЕЛО: soVELOPprice = 124, 601, 260, 000, 000, 000
Сумма WETH, которую soVELO может взять взаймы при ипотеке в размере 1 wei, следующая:
1 * обменный курс * soVELOPrice / soWETHPrice = 763, 916, 258, 364, 900, 996, 923
Примерно 763 ВЕТ. Для поддержки этого кредита достаточно всего 1 вэй ипотеки soVELO.
Заем в размере 265, 842, 857, 910, 985, 546, 929 WETH (приблизительно 265 WETH) конвертируется в залог soVELO. Минимальная сумма soVELO, необходимая для залога, составляет:
265, 842, 857, 910, 985, 546, 929 * soWETHPrice / soVELOPrice / ExchangeRate = 0,348
То есть 1 вэй залога soVELO вполне достаточно.
Фактически, 2 Wei залога soVELO были использованы для заимствования только 1 Wei.
(4) Выкупить базовые активы, а именно 35, 471, 603, 929, 512, 754, 530, 287, 976 VELO.
ExchangeRate = 17, 735, 851, 964, 756, 377, 265, 143, 988, 000, 000, 000, 000, 000, 000
Сумма залога soVELO, необходимая для выкупа 35, 471, 603, 929, 512, 754, 530, 287, 976 VELO, составляет
35, 471, 603, 929, 512, 754, 530, 287, 976 * 1 e 18 / ExchangeRate = 1,99999436
При расчете, поскольку при расчете используется усечение вместо округления, фактическое расчетное необходимое обеспечение составляет 1 wei от soVELO.
Фактический залог составляет 2 Wei в SoVELO, из которых 1 Wei используется для вышеупомянутого кредита в размере 265 Wei, а оставшийся 1 Wei используется для погашения 35 M VELO.
(5) Перевести взятые в аренду 265 WETH и выкупленные 35 M VELO в контракт на атаку.
3. Повторите 3 раза (всего 4 раза), чтобы создать новый контракт, и повторите атаку.
4. Наконец, погасите мгновенный кредит.
2. Анализ уязвимостей
В ходе вышеуказанной атаки были использованы две уязвимости:
(1) Атака с пожертвованием: прямая передача (пожертвование) токена VELO в контракт soVELO, изменение обменного курса, позволяющее злоумышленнику одолжить около 265 WETH, имея только 1 wei soVELO в качестве залога.
(2) Проблема с точностью расчета: используя потерю точности в процессе расчета и измененный обменный курс, 35 M VELO можно выкупить, если заложен только 1 wei soVELO.
3. Рекомендации по безопасности
В ответ на эту атаку нам следует соблюдать следующие меры предосторожности в процессе разработки:
(1) В процессе проектирования и разработки проекта необходимо поддерживать целостность и строгость логики, особенно вопросы депозита, залога, обновления переменных состояния, а также компромисса результатов вычислений умножения и деления во время В процессе расчета необходимо учитывать как можно больше ситуаций, чтобы логика была полной и не было лазеек.
(2) Прежде чем проект будет запущен в эксплуатацию, аудит смарт-контракта должен быть проведен сторонней профессиональной аудиторской компанией.
О нас
Цель SharkTeam — обеспечить безопасность мира Web3. Команда состоит из опытных специалистов по безопасности и старших исследователей со всего мира, которые владеют базовой теорией блокчейна и смарт-контрактов. Он предоставляет услуги, включая выявление и блокировку рисков, аудит смарт-контрактов, KYT/AML, сетевой анализ и другие услуги, а также создал внутрисетевую интеллектуальную платформу идентификации и блокировки рисков ChainAegis, которая может эффективно бороться с Advanced Persistent Threat (Advanced Persistent Threat (Advanced Persistent Threat)). Постоянная угроза) в мире Web3, APT). Он установил долгосрочные отношения сотрудничества с ключевыми игроками в различных областях экосистемы Web3, такими как Polkadot, Moonbeam, Polygon, Sui, OKX, imToken, Collab.Land, TinTinLand и т. д.
Официальный сайт: https://www.sharkteam.org.
Твиттер: https://twitter.com/sharkteamorg
Телеграмма: https://t.me/sharkteamorg
Дискорд: https://discord.gg/jGH9xXCjDZ