30 ноября наша система мониторинга инцидентов безопасности ThunderForecast обнаружила атаку на протокол Loopring (блог на EN, CN) посредством сканирования истории транзакций в сети Ethereum. В заключение, первопричиной этой атаки является отсутствие контроля доступа к функции sellTokenForLRC. Злоумышленник воспользовался преимуществом в 80,97 ETH, что эквивалентно 48 849,2 долларам США по курсу на тот момент.
11 декабря 2020 года наша система мониторинга ThunderForecast сообщила о серии транзакций с аномальным курсом обмена. Затем мы использовали систему EthScope, разработанную нашей исследовательской группой, для анализа этих транзакций и обнаружили, что это атака, использующая уязвимость протокола Seal Finance в целях арбитража.
Что такое Seal?
Упомянуто в whitepaper Seal: «SEAL — экспериментальный протокол, который служит посредником между токенами основных протоколов DeFi, создавая более глубокую ликвидность между ними». На данный момент существует более 10 пулов ликвидности, которые связывают Seal с другими известными токенами (такими как UNI, YFI, USDT, SNX и др.). Чтобы заработать бонус, инвестору необходимо внести LP-токены в контракт вознаграждения SEAL и вызвать функцию breed() в контракте Farm для создания новых токенов SEAL. Контракт Farm развернут в каждом пуле Seal, и функция breed() в этом контракте используется для выпуска новых токенов Seal. Согласно настройкам breed(), она дополнительно выпускает 1,6% токенов Seal. Кроме того, 0,8% выпущенных токенов Seal обмениваются на другой токен, который вносится в пул вместе с другими 0,8% выпущенных токенов Seal в качестве ликвидности. Однако, поскольку для функции breed() не был предусмотрен контроль доступа, любой мог вызвать эту функцию, и этот примитивный дизайн стал первопричиной данной атаки.
Ниже приведен подтвержденный исходный код функции breed():
function breed() external {
require(now / 1 days > today);
today += 1;
uint256 sealPairAmount = seal.balanceOf(address(cSeal));
uint256 tokenPairAmount = token.balanceOf(address(cSeal));
uint256 newSeal = sealPairAmount.mul(spawnRate).div(1e18);
uint256 amount = UniswapV2Library.getAmountOut(newSeal, sealPairAmount, tokenPairAmount);
seal.mint(address(cSeal), newSeal);
if(address(seal) < address(token))
cSeal.swap(0, amount, address(this), "");
else
cSeal.swap(amount, 0, address(this), "");
token.transfer(address(cSeal), amount);
seal.mint(address(cSeal), newSeal);
cSeal.mint(address(this));
}
Детали
Теперь мы раскроем больше подробностей этой атаки с помощью одной атакующей транзакции. В этой транзакции злоумышленник повторяет логику атаки для 10 пулов Seal, чтобы максимизировать прибыль. Для следующего анализа мы сосредоточимся на атаке, проведенной в пуле Seal-SNX.

Атака состоит из трех этапов:
- Шаг 1: Обмен 1 084 Seal на 2 787 SNX в пуле Seal-SNX. Курс обмена: 1 Seal = 2,57 SNX.
- Шаг 2: Вызов функции
breed()в контрактеFarm. Эта функция выпускает 13,08 Seal и обменивает их на 10,20 SNX. Курс обмена теперь составляет: 1 SNX = 0,78 Seal. Причина в том, что большая часть SNX в пуле была обменена на Seal, что вызвало огромную разницу в количестве SNX и Seal. Затем, согласно алгоритму расчета цены Uniswap, SNX стал чрезвычайно ценным (цена выросла более чем в 3 раза) в пуле. - Шаг 3: Обмен 2 787 SNX на 1 100 Seal в пуле Seal-SNX. Поскольку этот обмен еще больше увеличивает цену SNX, злоумышленник получает арбитражную прибыль в виде дополнительных токенов Seal (дополнительные 16 Seal).
Чтобы дополнительно измерить и подтвердить убытки, мы воспроизвели функцию breed() при состоянии блока, которое было до атаки, используя нашу систему EthScope. В результате контракт Farm выпустил 18 дополнительных токенов Seal по сравнению с обычным вызовом. Злоумышленник забрал 16 Seal, а в пуле осталось только 2 Seal.
Прибыль и убытки
В этой транзакции злоумышленник получил в общей сложности 175 Seal.
Масштаб атаки
По состоянию на 13 декабря 2020 года в блокчейне были развернуты 3 вредоносных контракта(0x49f93e, 0x8b3710, 0x0f20b6) и успешно проведено 22 транзакции, чтобы похитить 4 247 токенов Seal. Исходя из цены на тот момент, злоумышленник заработал около 58 467 долларов США, используя уязвимость протокола Seal. Стоит отметить, что уязвимость протокола Seal все еще подвергается атакам!
Более того, анализируя поток полученных токенов Seal, мы обнаружили, что около 900 токенов Seal были депонированы на DEX, а остальные распределены по 6 разным адресам. Как показано на рисунке ниже, эти адреса являются крупнейшими держателями токенов Seal, помимо Seal Finance и пула ликвидности Uniswap V2.

Заключение
С развитием экосистемы DeFi в Ethereum постепенно всплывают различные проблемы безопасности. Фактически, первопричина — контроль доступа — стоящая за этой атакой, привела к значительным убыткам (58 467 долларов США) для Seal в результате проведения 22 транзакций по состоянию на 13 декабря 2020 года.
Обновление (04.01.2021)
После первой атаки 30.11.2020 злоумышленник развернул третий атакующий контракт и совершил пять атак. Последняя атака была 24.12.2020, после чего полученные токены Seal были переведены на этот адрес. В ходе этого процесса злоумышленник получил 6 021 токен Seal.
Хронология:
- 11.12.2020: Обнаружены подозрительные транзакции
- 12.12.2020: Завершен анализ
- 13.12.2020: Сообщено в Seal Finance
- 03.01.2021: Опубликованы подробности
- 03.01.2021: Назначен CVE-2021-3006
О компании BlockSec
BlockSec — это передовая компания в области безопасности блокчейнов, основанная в 2021 году группой выдающихся экспертов по безопасности со всего мира. Компания стремится повысить безопасность и удобство использования развивающегося мира Web3, чтобы способствовать его массовому внедрению. С этой целью BlockSec предоставляет услуги аудита безопасности смарт-контрактов и цепочек EVM, платформу Phalcon для разработки безопасности и проактивного блокирования угроз, платформу MetaSleuth для отслеживания и расследования средств, а также расширение MetaSuites для эффективной работы разработчиков Web3 в криптомире.
На сегодняшний день компания обслужила более 300 уважаемых клиентов, таких как MetaMask, Uniswap Foundation, Compound, Forta и PancakeSwap, и получила десятки миллионов долларов США в двух раундах финансирования от выдающихся инвесторов, включая Matrix Partners, Vitalbridge Capital и Fenbushi Capital.
Официальный сайт: https://blocksec.com/
Официальный Twitter аккаунт: https://twitter.com/BlockSecTeam



