BSC Flash Loan Attack: Блинный кролик

В мае 2021 года мы видели несколько взломов, нацеленных на предметы BSC DeFi. В частности, лазейка, связанная с добычей вознаграждения в агрегаторе доходности, Pancake Bunny, была использована для получения ~ 7 миллионов токенов BUNNY из абсолютно ничего, что привело к огромным денежным потерям в размере 45 миллионов долларов. После кровавого взлома 3 разветвленных задачи - AutoShark, Merlin Labs и Pancake Hunny - подверглись атаке схожими методами. Янтарная группа »& rsquo; Группа безопасности блокчейна, возглавляемая доктором Чиачи Ву, подробно описывает лазейку и предлагает подробный отчет о ее использовании путем репликации атаки против Pancake Bunny.

Скрытая поверхность атаки: balanceOf ()

Многие люди думают, что возможность компоновки важна для успеха DeFi. Соглашения о токенах (например, ERC20) играют жизненно важную роль на нижнем уровне Lego DeFi. Однако дизайнеры могут игнорировать некоторые неуправляемые и непредвиденные условия при включении ERC20 в свои задачи DeFi. Например, вы можете '& rsquo; Не предвидеть, когда и сколько токенов вы получите, когда восстановите существующий баланс токенов. Эта непредсказуемость создает скрытую поверхность атаки.

Во многих случаях мудрые соглашения ссылаются на балансы ERC20 в обосновании своих услуг. Например, когда пользователь переводит некоторые токены XYZ в мудрое соглашение, вызывается XYZ.balanceOf (), чтобы проверить, сколько денег было получено. Если вы '& rsquo; Ознакомившись с кодовой базой Uniswap, вы, скорее всего, поймете, что соглашение Uniswap V2Pair содержит много вызовов balanceOf ().

В бите кода Uniswap V2Pair.mint () использует существующие балансы (баланс0, баланс1) и информацию бухгалтерского учета (сумма0, сумма1) для получения количества, переданного пользователем (сумма0, сумма1). Однако, если плохая звезда перемещает некоторые свойства (token1 или token2) прямо перед вызовом mint (), жертва предложит больше ликвидности, чем ожидалось, т. Е. Будет отчеканено больше токенов LP. Если выгоды определяются на основе количества жетонов LP, плохая звезда может получить выгоду, когда выгоды превышают затраты.

Uniswap V2Pair.burn () имеет сопоставимую угрозу. Вызывающий функцию mint () может угрожать самому себе, не имея полного представления о включенных угрозах. Вот что произошло, когда дело дошло до Pancake Bunny.

Получите бонус на фьючерс на 110 долларов США совершенно бесплатно!

В приведенном выше бите кода строка 140 получает баланс токена LP через balanceOf () и сохраняет его в ликвидности. В строках 144––145 часть общих токенов LP, принадлежащих Uniswap V2Pair (т. Е. Ликвидность из _ totalSupply), используется для получения (amount0, amount1) с существующими балансами (balance0, balance1) двух свойств (т. Е. , токен2 и токен0). Позже (количество1, количество0) из 1 свойств перемещается по адресу в строках 2––148.

Здесь плохая звезда может контролировать (balance0, balance1) и ликвидность, отправляя некоторый токен 0 + token1 или токен LP в соглашение Uniswap V2Pair прямо перед вызовом функции mint (), чтобы вызывающий абонент получил больше token0 + token1. . Мы '& Rsquo; Я познакомлю вас с исходным кодом Pancake Bunny и расскажу, как плохая звезда может зарабатывать на этом деньги.

Анализ лазейки: BunnyMinterV2

В исходном коде Pancake Bunny функция BunnyMinterV2.mintFor V2 () контролирует чеканку токенов BUNNY в качестве преимуществ. В частности, общая сумма, которая должна быть отчеканена (то есть mintBunny), зависит от входных критериев _ вытеснение и _ performanceFee. Расчет связан с 3 функциями: _ zapAs setsTo BunnyBNB () (строка 213), priceCalculator.valueOfAs set () (строка 219) и amountBunnyTo Mint () (строка 221). Так как плохая звезда может создать большое количество BUNNY, проблема зависит от одной из 3 функций, указанных выше.

Читать статью:  Binance прекращает выпуск фьючерсов и производных продуктов в Германии, Италии и Нидерландах

Пусть '& rsquo; s начинаются с _ zapAs устанавливает функцию BunnyBNB (). Когда переданным свойством является aCake-LP (строка 267), определенное количество токенов LP используется для устранения ликвидности и извлечения (количество токенов 0, количество токенов 1) из (token0, token1) из пула ликвидности (строка 278). С помощью соглашения zapBSC эти свойства переключаются для токенов BUNNY-BNB LP (строки 287–288). Соответствующее количество токенов BUNNY-BNB LP затем возвращается вызывающей стороне (строка 298). Здесь возникает проблема.Соответствует ли количество количеству жетонов LP, которые, по вашему мнению, будут сожжены? (*) Выполнение

В V2Router.removeLiquidity () ликвидность токенов LP (количество в zapPancake setsAs BunnyBNB ()) будет отправлена ​​в соглашение To Pair (строка 500), а Pancake Pair.burn () будет вызвана. Подберите существующий баланс токенов LP для пары выше 0, реальная сумма, которая должна быть сожжена, будет выше, чем количество, что косвенно увеличивает общую сумму BUNNY, которая будет отчеканена. Проблема с блином в _ zap

Другой метод setAs BunnyBNB () - это вызов zapBSC.zapTo (). Причина, по которой InToken состоит в том, чтобы обменять 2 свойства, собранные методом removeLiquidity (), на токены BUNNY-BNB LP. ZapBSC меняет свойства через Since Swap, плохая звезда может использовать флэш-ссуды для управления количеством переключенных BUNNY-BNB.Pancake на BunnyMinterV2.mint.

Вернувшись к V2 (), bunnyBNBAmount, возвращаемый zapFor setsAs, будет введен в priceCalculator.valueOfTo set () для оценки стоимости на основе BNB (то есть vauleAs BNB), что сравнимо с системой оракула.

Однако priceCalculator.valueOf set () рекомендует количество BNB и BUNNY (резерв0, резерв1) в паре BUNNY_BNB As в качестве потока затрат, Pancake, который позволяет плохой звезде использовать флэш-ссуды для управления количеством отчеканенных токенов BUNNY. количество кролик

Функция Mint () - это базовая математическая оценка. На вход вклад увеличивается на 5 (bunnyPerProfitBNB = 5e18), который сам по себе не имеет площади для атаки, однако усиление усиливает контроль, указанный выше. Бой

Поскольку для

Поскольку атака активируется с помощью getReward (), мы должны быть сертифицированы для получения преимуществ. Etherscan, показанный на скриншоте выше Pancake, хакер To Bunny вызвал в воображении функцию init () использования соглашения для обмена 1 WBNB на WBNB- Токены USDT-LP и депонируйте их () в VaultFlip.

В качестве соглашения Flip, так что он получит некоторые преимущества, вызвав getReward (). Exp, показанный выше, с помощью функции prepare () мы воссоздали вызов vaultFlipWe Flip.deposit () (строка 62). Однако аналогичным образом использовалось соглашение ZapBSC для упрощения получения токенов LP (строки 54-57). Блин, одного нет & rsquo; t может получить выгоду до тех пор, пока For Bunny keeper не запустит следующий вызов yield (). Блин этот фактор,

В Bunny хакера не было & rsquo; t запускает атаку до самой первой сделки yield (), следующей за сделкой init (). Следовательно, в нашей симуляции ни один хранитель не может инициировать сбор урожая ().

Рекурсивные срочные ссуды

Для того, чтобы мы использовали функцию eth-brownie, чтобы выдать себя за хранителя и вручную начать сделку с урожаем () (строка 25). Блин использовал средства, эксплуататор Блинного кролика использовал 8 различных бассейнов фондов, состоящих из 7 соглашений For Pair и Bank TubeHere Amber Group, Blockchain Security '& rsquo; s (*) группа только что использовала следующие 7 соглашений о парах блинов: & rsquo; Функция flash-swap для займа 2.3 млн WBNB:

Чтобы упростить вызовы flash-swap, мы загрузили 2 критерия в 4-й входной аргумент вызовов Pancake Pair.swap () (строка 72 или строка 74): уровень и свойство. Переменная уровня показывает, какой уровень swap () мы вызываем '& rsquo; re in; переменная свойства - 0 или 1, что означает, что нам нужно получить token0 или token1.

Читать статью:  SEC угрожает подать в суд на Coinbase из-за программы криптовалюты, которую она считает ценной бумагой

Используя функцию обратного вызова pancakeCall (), мы рекурсивно вызываем Pancake Pair.swap () с уровнем +1, пока не достигнем седьмого уровня. На ведущем уровне мы вызываем shellcode () для выполнения настоящего действия в строке 98. Когда shellcode () возвращает результат, переменная свойства возвращает полученное свойство на каждом уровне соответствия (строки 102–104).

Спустить курок

Функция shellcode (), вызываемая седьмым уровнем pancakeCall (), - это настоящее использование кода. Во-первых, мы сохраняем существующий баланс WBNB в wbnbAmount (строка 108), обмениваем 15,000 WBNB на токены WBNB-USDT-LP (строка 112) и отправляем их в соглашение, в котором чеканились эти токены LP (т. Е. Соглашение Pancake Pair). в строке 113. Это действие предназначено для управления вызовом removeLiquidity () внутри функции _ zapAs setsTo BunnyBNB (), как оценивалось выше, что позволяет нам получить больше WBNB + USDT, чем ожидалось.

Второе действие - контролировать стоимость USDT, на которую указывает _ zapAs setsTo BunnyBNB (), чтобы переключить USDT на WBNB. Поскольку _ zapAs setsTo BunnyBNB () использует блинную пару WBNB-USDT для переключения USDT на WBNB, мы могли бы переключить оставшуюся часть флэш-кредита WBNB на USDT на блинном свопе. Это сделает WBNB невероятно дешевым, а _ zapAs setsTo BunnyBNB () получит непропорционально большое количество WBNB при переключении с USDT. Обратите внимание, что контроль затрат здесь осуществляется в бассейне Pancake V1, а не в Pancake V2 »& rsquo; s Блинная пара, как в предыдущем действии.

Последнее действие - вызов getReward (). При вызове базового соглашения может быть выпущено 6.9 млн токенов BUNNY (строка 125). Затем токены BUNNY могут быть обменены на WBNB на Pancake Swap для погашения флэш-кредита.

В нашем моделировании плохая звезда платит 1 WBNB и выигрывает 104k WBNB + 3.8 млн долларов США (что сопоставимо с ~ 45 млн долларов США).

О компании Amber Group

Amber Group - ведущая международная компания по финансированию криптовалюты, работающая по всему миру и постоянно действующая в Гонконге, Тайбэе, Сеуле и Ванкувере. Основанная в 2017 году, Amber Group обслуживает более 500 институциональных клиентов и на самом деле в совокупности продала более 500 миллиардов долларов через более 100 электронных бирж, с недвижимостью под управлением на сумму более 1.5 миллиарда долларов. В 2021 году Amber Group привлекла 100 миллионов долларов в рамках серии B и в итоге стала самым последним единорогом FinTech стоимостью более 1 миллиарда долларов. Для получения дополнительной информации посетите: www.ambergroup.io.

Каждый трейдер, торгующий криптовалютой на бирже Binance, хочет знать о предстоящих событиях. pumpповышение стоимости монет с целью получения огромной прибыли за короткий период времени.
Эта статья содержит инструкции о том, как узнать, когда и какая монета будет участвовать в следующих «Pump». Каждый день сообщество на Канал телеграмм Crypto Pump Signals for Binance Сигналы для Binance публикует 1-2 бесплатных сигнала о предстоящем «Pump»И отчеты об успешных«Pumps », которые успешно завершены организаторами VIP-сообщества.
Эти торговые сигналы помогают заработать от 20% до 150% прибыли всего за несколько часов после покупки монет, опубликованных на канале Telegram »Crypto Pump Signals for Binance Сигналы для Binance ». Вы уже получаете прибыль, используя эти торговые сигналы? Если нет, то попробуйте! Желаем вам удачи в торговле криптовалютой и желаем получать такую ​​же прибыль, как и VIP-пользователи Crypto Pump Signals for Binance Сигналы для канала Binance. Примеры можно увидеть на этой странице!
Джон Лесли/ автор статьи

Джон Лесли - опытный трейдер, специализирующийся на техническом анализе и прогнозировании рынка криптовалют. Он имеет более чем 10-летний опыт работы с широким спектром рынков и активов - валют, индексов и товаров. Джон является автором популярных тем на крупных форумах с миллионами просмотров и работает как аналитиком, так и профессиональным трейдером как для клиентов, так и для клиентов. сам.

Оставьте комментарий