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