Анализ безопасности NFT-контрактов: обзор событий первой половины 2022 года и обсуждение распространенных проблем
В первой половине 2022 года в области NFT произошло множество инцидентов, связанных с безопасностью, что привело к огромным экономическим потерям. Согласно статистике, за полгода произошло 10 крупных инцидентов с безопасностью NFT, общие потери составили 64,9 миллиона долларов. Основные методы атак включали использование уязвимостей контрактов, утечку приватных ключей и фишинг. Стоит отметить, что фишинговые атаки на платформе Discord были особенно распространены, почти каждый день серверы подвергались атакам, что приводило к тому, что большое количество пользователей неосмотрительно нажимали на вредоносные ссылки и несли убытки.
Анализ типичных инцидентов безопасности
Событие TreasureDAO
3 марта платформа обмена TreasureDAO подверглась атаке, в результате которой было украдено более 100 NFT. Проблема заключалась в функции buyItem контракта TreasureMarketplaceBuyer. Эта функция при расчете общей цены не проверяла тип токена и просто умножала количество на цену за единицу. Это позволило злоумышленнику вызвать функцию buyItem контракта TreasureMarketplace и купить токены, когда сумма платежа в ERC-20 токенах равнялась 0.
Основная причина заключается в логической путанице, вызванной смешиванием токенов ERC-1155 и ERC-721. Токены ERC-721 сами по себе не имеют концепции количества, но контракт использует количество для расчета цены покупки, и при окончательной передаче не было проведено логического разделения.
APE Coin воздушная акция
17 марта хакеры с помощью флеш-кредита получили более 60 000 монет APE Coin в рамкахairdrop. Проблема заключалась в контракте airdrop для GrapesToken. Контракт использовал alpha.balanceOf() и beta.balanceOf() для определения владения вызывающим BAYC/MAYC NFT, но этот метод позволяет получить только мгновенное состояние владения NFT, которое можно манипулировать с помощью флеш-кредита. Атакующие воспользовались этим уязвимостями, взяв в долг BAYC NFT через флеш-кредит и получив соответствующий airdrop.
Событие Revest Finance
27 марта проект Revest Finance подвергся атаке, убытки составили около 120 000 долларов США. Это典型ная атака повторного входа ERC-1155. Проблема заключалась в контракте Revest. Когда пользователь использует depositAdditionalToFNFT() для добавления активов в FNFT, контракт должен сначала уничтожить старый FNFT, а затем выпустить новый FNFT. Однако в процессе выпуска функция min() не проверяла, существует ли FNFT, который нужно выпустить, и переменная состояния fnftId увеличивалась после функции _mint(). В функции _min() присутствует скрытый внешний вызов ERC-1155 _doSafeTransferAcceptanceCheck(), что и стало причиной уязвимости повторного входа.
NBA хайп-скачка
21 апреля проект NBA подвергся атаке. Проблема заключалась в механизме проверки подписи контракта The_Association_Sales. Существуют два основных уязвимости в безопасности: подделка подписи и повторное использование подписи. Повторное использование подписи происходит из-за того, что контракт не хранит использованные подписи, что позволяет злоумышленнику многократно использовать одну и ту же подпись. Подделка подписи возникает из-за того, что параметр info в vData memory не проверяется на msg.sender во время передачи, что позволяет злоумышленнику подделывать подпись.
Событие Akutar
23 апреля проект NFT Akutar столкнулся с проблемой, когда контракт AkuAuction из-за уязвимости привел к блокировке 11539 ETH (около 34 миллионов долларов). В контракте были обнаружены две логические уязвимости:
Функция возврата processRefunds использует функцию call для осуществления возврата, и результат возврата используется в качестве условия проверки require. Злоумышленник может злонамеренно вызвать revert в fallback, что приведет к невозможности выполнения операции возврата всего контракта.
Условия проверки в функции возврата не учитывают возможность того, что пользователь может ставить на несколько NFT, что приводит к тому, что проектная сторона не может выполнить операции возврата в будущем.
XCarnival событие
24 июня протокол кредитования NFT XCarnival подвергся атаке, в результате которой хакеры заработали 3087 эфиров (около 3,8 миллиона долларов). Проблема заключалась в функции pledgeAndBorrow контракта XNFT. Эта функция не проверяла, находится ли переданный хакерами адрес xToken в белом списке проекта при залоге NFT, и не проверяла состояние записи залога при заимствовании, что позволило злоумышленникам многократно использовать недействительные записи залога для заимствования.
Часто задаваемые вопросы по аудиту NFT-контрактов
Подделка и повторное использование подписей:
Данные подписи не содержат проверки на повторное выполнение, так как отсутствует nonce пользователя, что приводит к возможности повторного использования данных подписи для чеканки NFT.
Проверка подписи неадекватна, так как не проверяется случай, когда подписывающий является нулевым адресом, что позволяет любому пользователю проводить чек для минтинга.
Логическая уязвимость:
Администраторы контрактов могут чеканить монеты особым способом без ограничения общего объема, что приводит к фактическому количеству NFT, превышающему ожидания.
Во время аукциона NFT победитель может использовать атаку с зависимостью от порядка транзакций для изменения цены ставки и получения NFT по низкой цене.
ERC721/ERC1155 повторная атака:
Использование функции уведомления о переводе (функция onERC721Received) может привести к атаке повторного входа, когда контракт NFT вызывает целевой контракт.
Слишком широкий объем полномочий:
При ставке или аукционе требуется авторизация _operatorApprovals, а не авторизация отдельного токена, что увеличивает риск кражи NFT.
Манипуляция ценами:
Цена NFT зависит от объема токенов, удерживаемых по определенному контракту, и злоумышленники могут использовать флеш-кредиты для повышения цены токенов, что приводит к аномальной ликвидации заложенных NFT.
Учитывая частые инциденты безопасности с NFT-контрактами и то, что уязвимости, выявленные в процессе аудита, часто соответствуют фактическим атакам, особенно важно обратиться к профессиональным компаниям по безопасности для проведения комплексного аудита NFT-контрактов.
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
16 Лайков
Награда
16
6
Репост
Поделиться
комментарий
0/400
BrokeBeans
· 23ч назад
С контрактами снова проблемы, кто еще осмелится покупать?
Посмотреть ОригиналОтветить0
CryptoNomics
· 23ч назад
*вздох* применяя анализ марковских цепей, эти взломы показывают 73,4% корреляция с плохим аудитом контрактов. статистически неизбежно.
Посмотреть ОригиналОтветить0
blockBoy
· 23ч назад
Цзэ, каждый день в уязвимостях.
Посмотреть ОригиналОтветить0
ILCollector
· 23ч назад
Эх, несколько десятков миллионов долларов так просто испарились, мне действительно жаль братка, который сокращает потери.
Анализ рисков безопасности контрактов NFT: обзор событий первой половины 2022 года и ключевые моменты аудита
Анализ безопасности NFT-контрактов: обзор событий первой половины 2022 года и обсуждение распространенных проблем
В первой половине 2022 года в области NFT произошло множество инцидентов, связанных с безопасностью, что привело к огромным экономическим потерям. Согласно статистике, за полгода произошло 10 крупных инцидентов с безопасностью NFT, общие потери составили 64,9 миллиона долларов. Основные методы атак включали использование уязвимостей контрактов, утечку приватных ключей и фишинг. Стоит отметить, что фишинговые атаки на платформе Discord были особенно распространены, почти каждый день серверы подвергались атакам, что приводило к тому, что большое количество пользователей неосмотрительно нажимали на вредоносные ссылки и несли убытки.
Анализ типичных инцидентов безопасности
Событие TreasureDAO
3 марта платформа обмена TreasureDAO подверглась атаке, в результате которой было украдено более 100 NFT. Проблема заключалась в функции buyItem контракта TreasureMarketplaceBuyer. Эта функция при расчете общей цены не проверяла тип токена и просто умножала количество на цену за единицу. Это позволило злоумышленнику вызвать функцию buyItem контракта TreasureMarketplace и купить токены, когда сумма платежа в ERC-20 токенах равнялась 0.
Основная причина заключается в логической путанице, вызванной смешиванием токенов ERC-1155 и ERC-721. Токены ERC-721 сами по себе не имеют концепции количества, но контракт использует количество для расчета цены покупки, и при окончательной передаче не было проведено логического разделения.
APE Coin воздушная акция
17 марта хакеры с помощью флеш-кредита получили более 60 000 монет APE Coin в рамкахairdrop. Проблема заключалась в контракте airdrop для GrapesToken. Контракт использовал alpha.balanceOf() и beta.balanceOf() для определения владения вызывающим BAYC/MAYC NFT, но этот метод позволяет получить только мгновенное состояние владения NFT, которое можно манипулировать с помощью флеш-кредита. Атакующие воспользовались этим уязвимостями, взяв в долг BAYC NFT через флеш-кредит и получив соответствующий airdrop.
Событие Revest Finance
27 марта проект Revest Finance подвергся атаке, убытки составили около 120 000 долларов США. Это典型ная атака повторного входа ERC-1155. Проблема заключалась в контракте Revest. Когда пользователь использует depositAdditionalToFNFT() для добавления активов в FNFT, контракт должен сначала уничтожить старый FNFT, а затем выпустить новый FNFT. Однако в процессе выпуска функция min() не проверяла, существует ли FNFT, который нужно выпустить, и переменная состояния fnftId увеличивалась после функции _mint(). В функции _min() присутствует скрытый внешний вызов ERC-1155 _doSafeTransferAcceptanceCheck(), что и стало причиной уязвимости повторного входа.
NBA хайп-скачка
21 апреля проект NBA подвергся атаке. Проблема заключалась в механизме проверки подписи контракта The_Association_Sales. Существуют два основных уязвимости в безопасности: подделка подписи и повторное использование подписи. Повторное использование подписи происходит из-за того, что контракт не хранит использованные подписи, что позволяет злоумышленнику многократно использовать одну и ту же подпись. Подделка подписи возникает из-за того, что параметр info в vData memory не проверяется на msg.sender во время передачи, что позволяет злоумышленнику подделывать подпись.
Событие Akutar
23 апреля проект NFT Akutar столкнулся с проблемой, когда контракт AkuAuction из-за уязвимости привел к блокировке 11539 ETH (около 34 миллионов долларов). В контракте были обнаружены две логические уязвимости:
XCarnival событие
24 июня протокол кредитования NFT XCarnival подвергся атаке, в результате которой хакеры заработали 3087 эфиров (около 3,8 миллиона долларов). Проблема заключалась в функции pledgeAndBorrow контракта XNFT. Эта функция не проверяла, находится ли переданный хакерами адрес xToken в белом списке проекта при залоге NFT, и не проверяла состояние записи залога при заимствовании, что позволило злоумышленникам многократно использовать недействительные записи залога для заимствования.
Часто задаваемые вопросы по аудиту NFT-контрактов
Подделка и повторное использование подписей:
Логическая уязвимость:
ERC721/ERC1155 повторная атака:
Слишком широкий объем полномочий:
Манипуляция ценами:
Учитывая частые инциденты безопасности с NFT-контрактами и то, что уязвимости, выявленные в процессе аудита, часто соответствуют фактическим атакам, особенно важно обратиться к профессиональным компаниям по безопасности для проведения комплексного аудита NFT-контрактов.