В мае серия атак скомпрометировала несколько проектов Binance Smart Chain (BSC). После PancakeBunny три его форковых проекта - AutoShark, Merlin Labs и PancakeHunny - также подверглись атакам с использованием аналогичных методов. PancakeBunny пострадал от самой дорогостоящей атаки из четырех, в результате которой был нанесен ущерб почти в 45 миллионов долларов. В этой статье доктор Чиачи Ву, руководитель группы безопасности блокчейнов Amber Group, подробно рассказывает о деталях атак на трех подражателей.

Подражатели

AutoShark подвергся нападению через пять дней после PancakeBunny, за ним последовали Merlin Labs и PancakeHunny соответственно. Ниже приводится анализ проблем и возможных методов атаки для этих трех разветвленных проектов.

В функции SharkMinter.mintFor () количество получаемых токенов SHARK (т. Е. MintShark) выводится из sharkBNBAmount, вычисляемого функцией tokenToSharkBNB () в строке 1494. Однако tokenToSharkBNB () ссылается на текущий баланс флипа, что делает это уязвимое место. Можно предположить, что количество жетонов, полученных в строке 1492, равно сумме флип-баланса. Тем не менее, злоумышленник может манипулировать балансом переворота, просто отправив несколько токенов переворота прямо перед вызовом getReward () и косвенно нарушив логику tokenToSharkBNB ().

В базовой реализации tokenToSharkBNB () есть еще одна поверхность для атаки. Как показано в приведенном выше фрагменте кода, _flipToSharkBNBFlip () удаляет ликвидность из ApeSwap (строка 1243) или PantherSwap (строка 1262) и конвертирует токены LP в SHARK + WBNB. Позже вызывается generateFlipToken () для преобразования SHARK + WBNB в токены SHARK-BNB LP.

Внутри generateFlipToken () текущие балансы SHARK и WBNB SharkMinter (amountADesired, amountBDesired) используются для генерации токенов LP, а количество токенов LP возвращается в mintFor () как sharkBNBAmount. Исходя из этого, злоумышленник может передать SHARK + WBNB в SharkMinter, чтобы также манипулировать количеством токенов SHARK, которые будут отчеканены.

Брешь в PancakeHunny идентична той, что есть в AutoShark, в том, что злоумышленник может манипулировать монеткой награды HUNNY с помощью токенов HUNNY и WBNB.

По сравнению с AutoShark и PancakeHunny, _getReward () Merlin Labs имеет более очевидную уязвимость.
По сравнению с AutoShark и PancakeHunny, _getReward () Merlin Labs имеет более очевидную уязвимость.

Приведенный выше фрагмент кода показывает, что PerformanceFee может управляться балансом CAKE, что косвенно влияет на чеканку вознаграждений MERL. Однако модификатор nonContract избавляет от быстрых ссуд.

Даже без контракта на эксплойт злоумышленник мог получить прибыль за счет нескольких вызовов.
Даже без контракта на эксплойт злоумышленник мог получить прибыль за счет нескольких вызовов.

Воспроизведение AutoShark Attack

Чтобы воспроизвести взлом AutoShark, нам нужно сначала получить несколько токенов SHARK-BNB-LP от PantherSwap. В частности, мы меняем 0,5 WBNB на SHARK (строка 58) и переносим оставшийся WBNB с этими токенами SHARK в PantherSwap для чеканки токенов SHARK-BNB-LP (строка 64). Позже мы помещаем эти токены LP в контракт AutoShark StrategyCompoundFLIP (строка 69), чтобы претендовать на вознаграждение. Обратите внимание, что мы намеренно размещаем только половину токенов LP в строке 69.

Второй шаг - заставить getReward () войти в контракт SharkMinter. В приведенном выше фрагменте кода мы знаем, что вознаграждение может быть получено с помощью функции Earned () (строка 1658). Кроме того, 30% вознаграждения (т. Е. Плата за выполнение) должно быть больше 1000 (т. Е. DUST), чтобы вызвать SharkMinter.mintFor () в строке 1668.

Поэтому в нашем коде эксплойта мы передаем некоторые токены LP в контракт StrategyCompoundFLIP в строке 76, чтобы обойти проверку performanceFee> DUST и запустить вызов mintFor (). Поскольку нам нужно много WBNB + SHARK для управления SharkMinter, мы используем 100k WBNB PantherSwap через вызов flash-swap в строке 81.

В обратном вызове flash-swap, pancakeCall (), мы обмениваем половину WBNB на SHARK и отправляем SHARK с оставшимися 50 000 WBNB в контракт SharkMinter, чтобы управлять чеканкой вознаграждения.

Следующим шагом является запуск getReward (), когда SharkMinter получает токены WBNB + SHARK, чтобы получить большое количество SHARK для вызывающего.
Следующим шагом является запуск getReward (), когда SharkMinter получает токены WBNB + SHARK, чтобы получить большое количество SHARK для вызывающего.
Последний шаг - преобразовать SHARK в WBNB, выплатить флэш-кредит и уйти с оставшимися токенами WBNB.
Последний шаг - преобразовать SHARK в WBNB, выплатить флэш-кредит и уйти с оставшимися токенами WBNB.

В нашем эксперименте плохой актер начинается с 1 WBNB. С помощью мгновенных кредитов он получает прибыль от более чем 1000 WBNB, возвращаемых за одну транзакцию.

Воспроизведение PancakeHunny Attack

Теория атаки PancakeHunny аналогична атаке AutoShark. Короче говоря, нам нужно отправить много HUNNY + WBNB в HunnyMinter перед запуском getReward (). Однако контракт токена HUNNY имеет механизм защиты, называемый antiWhale, для предотвращения переводов больших сумм. Поэтому мгновенные кредиты здесь не работают.

Чтобы обойти antiWhale, мы создаем несколько дочерних контрактов и инициируем несколько вызовов CakeFlipVault.deposit () через указанные контракты.
Чтобы обойти antiWhale, мы создаем несколько дочерних контрактов и инициируем несколько вызовов CakeFlipVault.deposit () через указанные контракты.

В приведенном выше фрагменте кода эксплойта токены LP, собранные в строке 116, делятся на 10 частей и передаются в 10 контрактов Lib в строке 122, за которыми следуют вызовы Lib.prepare () для каждого из них.

Внутри Lib.prepare () мы утверждаем (), что CakeFlipVault расходует токены LP, и вызываем CakeFlipVault.deposit (), чтобы включить последующие вызовы getReward () для чеканки наградных токенов HUNNY.

После подготовки 10 контрактов Lib, основной контракт выполняет итерацию каждого из них, чтобы: 1) поменять WBNB на максимально допустимую сумму HUNNY; 2) передать WBNB + HUNNY на HunnyMinter; 3) вызвать getReward () через lib.trigger (); и 4) обменять HUNNY обратно на WBNB.

В конце концов, злоумышленник с 10 WBNB зарабатывает около 200 WBNB за 10 запусков 10 операций по контрактам Lib.
В конце концов, злоумышленник с 10 WBNB зарабатывает около 200 WBNB за 10 запусков 10 операций по контрактам Lib.

Воспроизведение атаки Лаборатории Мерлина

Как упоминалось ранее, в Merlin Labs есть модификатор noContract, позволяющий избавиться от атак с использованием срочных кредитов. Однако мы могли бы использовать сценарий для запуска атаки с несколькими транзакциями, инициированными с адреса EOA (внешняя учетная запись). Единственная разница в том, что кто-то может провести транзакцию злоумышленника, чтобы украсть прибыль.

Подобно атаке AutoShark, нам нужно подготовить достаточно Link и WBNB (строка 23), использовать их для чеканки токенов WBNB-Link-LP (строка 34) и внести токены LP в контракт VaultFlipCake (строка 38).

Остальные действия:
Остальные действия:
  1. Замена WBNB на CAKE (строка 42).
  2. Манипулирование чеканкой MERL путем отправки CAKE контракту VaultFlipToCake (строка 50).
  3. Запуск getReward () в строке 55 (выпущено большое количество токенов MERL).
  4. Обратный обмен MERL на WBNB и повторение вышеуказанных шагов несколько раз.

Как упоминалось ранее, если кто-то сначала выполнит шаг 3 сразу после шага 2, этот человек может удалить большое количество MERL.

В нашем эксперименте плохой актер начинает с 10 WBNB и уходит с примерно 165 WBNB, повторяя четыре шага 10 раз.

О компании Amber Group

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

Источник