Аудит смарт-контрактов является важным шагом перед запуском dApp, поскольку «одна голова хорошо, а две – лучше»: сторонние аудиторы могут найти уязвимости, которые пропустила команда проекта.
Аудиты используют как автоматические инструменты, так и тщательный ручной анализ, и могут предотвратить большинство взломов.
Что такое аудит смарт-контрактов и почему это важно?
Аудит кода блокчейна или смарт-контракта — это анализ кода блокчейна или dApp либо его создателями, либо сторонним аудитором с целью поиска ошибок, уязвимостей и багов.
Безопасность блокчейна является частью знаменитой трилеммы Виталика Бутерина: безопасность, масштабируемость и децентрализация. Эти три критических аспекта сети или децентрализованного приложения должны быть сбалансированы.
Как и любой программный проект, криптодецентрализованное приложение должно работать надежно и последовательно, иначе клиенты быстро потеряют к нему доверие. Но для блокчейна ставки увеличиваются, поскольку dApp может содержать сотни миллионов долларов ликвидности — и все эти деньги способны улетучится за одну атаку, если хакер найдет лазейку в коде контракта.
Ключевым методом предотвращения такого эксплойта является аудит кода, предоставленный внешним источником. Давайте посмотрим, как устроен аудит смарт-контрактов, какие уязвимости может найти проверка, какие фирмы работают в этой области и, наконец, как отсутствие аудита может привести к катастрофическим потерям.
Аудит блокчейна за 6 шагов
1.Обзор проекта и анализ кода на высшем уровне
Команде внешнего аудита необходимо получить полное представление о проекте: его архитектуре, бизнес-логике, практическом применении и т. д.
Клиент должен описать цели аудита и указать, как должны выполняться проверки, какие варианты использования необходимо протестировать, а также дать другую ключевую информацию.
Затем команда аудита читает весь репозиторий, чтобы понять, как реализована логика dApp.
2.Автоматизированное тестирование
По-прежнему не так много программных инструментов для тестирования смарт-контрактов, и почти все они предназначены для Solidity и EVM. Они не могут найти недостатки бизнес-логики или токеномики, но экономят аудиторам много времени. Самые популярные из них:
- Mythril от ConsenSys — мощный инструмент с открытым исходным кодом, обнаруживающий множество критических ошибок; часть пакета услуг безопасности MythX.
- Manticore — инструмент командной строки, который выполняет различные сценарии атак, отправляя символические входные данные, чтобы увидеть, не приведут ли они к сбою dApp; находит входы, которые приведут к конкретной ошибке; выясняет, что вызвало конкретный сбой и т. д.
- Slither — быстрый и простой в использовании чекер, который выделяет критические уязвимости и исправляет ошибки.
- Oyente — создан в 2016 году, не обновлялся пару лет, но до сих пор получает хорошие отзывы за точность.
3.Распространенные уязвимости
Программное обеспечение для аудита смарт-контрактов может обнаруживать множество видов уязвимостей, в том числе:
- повторный вход — злоумышленник неоднократно вызывает функцию вывода средств для перевода активов из уязвимого смарт-контракта во вредоносный;
- переупорядочивание — злоумышленник выполняет свою транзакцию перед другими транзакциями в очереди, чтобы манипулировать ценой (так называемый опережающий запуск);
- переполнение и недополнение — это отправка неправильных данных с целью заставить смарт-контракт совершить ошибку расчета (результат либо больше допустимого верхнего предела, либо меньше нижнего предела). В результате злоумышленник может чеканить огромное количество токенов;
- зависимость от временной метки — злоумышленник вводит в контракт неправильную временную метку, чтобы создать впечатление, будто его транзакция произошла в определенный момент (например, для выигрыша в аукционе или лотерее);
- replay — перехват, а затем повторная отправка данных в блокчейне (может использоваться для кражи средств во время событий форка).
4. Ручной построчный анализ и тестирование кода
Этот этап помогает найти ошибки, пропущенные автоматическими инструментами. Он также выявляет ложные срабатывания: фрагменты кода, которые программное обеспечение для автоматического аудита ошибочно помечает как уязвимости.
Аудит может выявить уязвимости разного уровня серьезности: критический уровень (позволяет злоумышленнику украсть токены, взломать dApp и т. д.), средний уровень (потенциальный ущерб ограничен) и низкий уровень (содержит ошибку, но создает малый риск финансового или структурного ущерба).
Страница из построчного аудиторского отчета Hubble Protocol от Smart State
5. Экспертная оценка
В идеале для максимальной уверенности необходимо произвести несколько аудиторов. Иногда аудиторы работают в командах и вместе анализируют код, так что рецензирование происходит одновременно.
6. Аудиторский отчет
В итоге результаты компилируются в многостраничный отчет, который доставляется клиенту. Он содержит список обнаруженных ошибок, а также рекомендации по их устранению и дальнейшему повышению безопасности проекта.
Стандартной практикой в блокчейне является обнародование аудиторских отчетов: на самом деле это хороший маркетинговый инструмент для проектов, поскольку он демонстрирует как безопасность, так и прозрачность dApp. Конечно, если будут обнаружены какие-либо критические уязвимости, проект, как правило, сначала их исправит.
Раздел аудиторского отчета по протоколу Reef, подготовленный Halborn.
Проблема аудита смарт-контрактов в Move и Solidity
Смарт-контракты EVM и Solidity трудно отлаживать, и они имеют много проблем с безопасностью. Добавьте к этому доминирование EVM (9 из 10 ведущих блокчейнов по версии DeFi TVL используют EVM), и вы поймете, почему индустрия смарт-контрактов так сосредоточена на Solidity. У него есть как преимущество первопроходца, так и множество уязвимостей, требующих аудита.
Когда вы переходите от экосистемы Ethereum/EVM к альтернативной среде блокчейна, такой как Move, вы сталкиваетесь с очень интересной проблемой. С одной стороны, язык Move и Move VM намного безопаснее, чем Solidity и EVM. Например, контракты Move устойчивы к атакам с повторным входом.
С другой стороны, децентрализованные приложения на основе Move по-прежнему должны проходить аудит — и пока не так много специалистов по безопасности блокчейнов, которые работают с этим языком. Аудиторы Pontem Wallet OtterSec и Halborn являются одними из первопроходцев, а сам Pontem Wallet является одним из первых децентрализованных приложений Aptos, полностью прошедших аудит.
Лучшие компании по аудиту смарт-контрактов
Hacken
Созданный в 2017 году, Hacken проверяет все протоколы блокчейна, смарт-контракты и децентрализованные приложения. Фирма также курирует программы вознаграждения за ошибки для таких платформ, как CoinGecko.
Hacken работает с самыми разными блокчейнами, включая EVM, Solana, NEAR, Cosmos, Polkadot.
Его клиентами являются FTX, Gate.io, Crypto.com, KuCoin, Huobi, Ellipsis, IoTex, 1inch, Aurora, Klaytn, Cirus, Victoria VR, WAX, TrustSwap и десятки других проектов DeFi, GameFi, инфраструктуры и NFT.
OtterSec
OtterSec — ведущий поставщик аудита блокчейна в экосистеме Solana. Его впечатляющее портфолио включает Wormhole, Serum, Sabre, Raydium, Solend, Socean, а также Anchor, LayerZero и Proximity на NEAR.
Это одна из немногих фирм, занимающихся аудитом блокчейна, которая работает с новым языком программирования Move, используемым Aptos и Sui. Так, OtterSec провела первый аудит кошелька Pontem для Aptos, а также кошелька Hippo.
У OtterSec также есть отличный блог с экспертными советами по безопасности смарт-контрактов, особенно на Solana.
CertiK
CertiK известен прежде всего своей таблицей лидеров безопасности блокчейнов, где более 3000 проектов оцениваются по их рейтингу доверия. Аудит безопасности — это дополнительная область знаний CertiK, наряду с тестированием на проникновение (испытание любых и всех методов для проникновения в части системы, к которым не должно быть доступа), KYC, наградами за обнаружение ошибок, мониторингом в сети и отслеживанием кошелька.
CertiK провел более 1800 аудитов протоколов Ethereum, Avalanche, BNB Chain, Solana, Algorand, NEAR и Cosmos. Это надежный поставщик услуг аудита для Binance, The Sandbox, Huobi и OKex.
Halborn
Halborn был создан белыми хакерами в 2019 году и сейчас включает более 50 специалистов по безопасности блокчейнов. Помимо аудита смарт-контрактов, он специализируется на консультировании по вопросам безопасности, тестировании на проникновение и автоматизации безопасности.
Halborn работал с такими популярными проектами, как Polygon, Solana, Thorchain, Bancor, Pangolin, Reef, Sushi, BlockFi, Polkadex и даже с яхт-клубом Bored Apes.
В блоге Halborn представлены пост-мортемы недавних взломов DeFi и подробные сведения о наиболее распространенных типах атак на блокчейн.
ConsenSys Diligence
ConsenSys — компания, стоящая за MetaMask, Truffle и Infura — ключевыми инструментами для разработчиков Web3. Его подразделение по аудиту смарт-контрактов ConsenSys Diligence работало с более чем 100 командами, включая Aave, OmiseGo, 0x, Aragon и Horizon.
Помимо аудита, ConsenSys Diligence предоставляет такие услуги, как моделирование угроз, постоянная проверка уязвимостей, планирование реагирования на атаки.
Quantstamp
Quantstamp работал с более чем 250 проектами, обеспечив активы на сумму более 200 миллиардов долларов и заблокировав ликвидность. В его портфолио входят OpenSea, Curve, Maker DAO, Compound, NBA TopShot, Lido, SuperRare, Decentraland, Aave и Axie Infinity.
Фирма работает со многими блокчейн-экосистемами, такими как Solana, Ethereum, BNB Chain, Cardano, Flow, Near, Tezos и Hedera Hashgraph. Он также защищает клиентов Teku и Prysm для Ethereum 2.0.
Три приложения DeFi dApp, рухнувших из-за того, что не провели аудит смарт-контрактов
Неаудированное приложение DeFi dApp с заблокированными в нем миллионами долларов, по сути, имеет цель, нарисованную на нем, представляет собой мишень с надписью «Взломай меня». Даже если повезет, и хакер пройдет мимо такого вызова, проект может стать жертвой внутренней проблемы с кодом.
Вот три истории, которые показывают последствия пропуска аудита.
Nomad: 200 миллионов долларов потрачено впустую
Nomad — это мост, соединяющий Ethereum, Evmos, Moonbeam, Avalanche и протокол Milkomeda. По словам главы службы безопасности Paradigm @samczsun, эксплойт от 2 августа был нацелен на недавнее обновление Nomad, которое не подвергалось аудиту.
Ошибка в контракте позволяла пользователям отправлять небольшие суммы WBTC с Moonbeam и получать в 10 000 раз больше WBTC обратно на Ethereum. Не нужно было быть кодером: достаточно было скопировать-вставить.
По мере того, как новости о лазейке распространялись, все больше и больше людей присоединялись к бесплатному доступу. Это был не взлом со стороны одного человека, а скорее хаотичная оппортунистическая атака с 41 адреса. В общей сложности было потеряно около 200 миллионов долларов — вся ликвидность, удерживаемая мостом.
Nomad заявил, что будет работать с фирмами, занимающимися безопасностью блокчейна, чтобы отследить и вернуть деньги. Лучше бы он привлек специалистов по безопасности блокчейна до того, как стал продвигать неаудированное обновление контракта в основной сети!
Beanstalk: взломан на 180 миллионов долларов с помощью мгновенного кредита
Beanstalk — децентрализованный стейблкоин на Ethereum. Вместо того, чтобы использовать обеспечение для поддержания привязки BEAN, он использует кредит, побуждая держателей ссужать свои токены в обмен на проценты.
17 апреля 2022 года хакер воспользовался ошибкой в коде управления Beanstalk. Он взял быстрые кредиты на Uniswap, SushiSwap и Aave, заняв около 1 миллиарда долларов в DAI, USDC, USDT и BEAN, и поместил эту ликвидность в пулы BEAN на Curve, получив достаточно токенов LP, чтобы дать им большинство голосов в Beanstalk DAO.
Затем злоумышленник представил новое предложение по улучшению Beanstalk (BIP) для перевода всех средств из протокола на свой адрес — и сам проголосовал за него, так что оно было автоматически принято. Всего злоумышленник получил до $182 млн в токенах BEAN, ETH и Curve LP.
Смарт-контракты Beanstalk были проверены Omnicia. Но код, содержащий уязвимость flash-кредита, был добавлен позже – уже без проверки. Урок здесь заключается в том, что аудит смарт-контрактов — это непрерывный процесс: каждую новую функцию необходимо проверять.
Yam Finance: падение на 99% из-за ошибки
Yam Finance (YAM = YFI + Ampleforth, два протокола DeFI, чьи идеи позаимствовал Yam Finance), запущенный в августе 2020 года, был ранним экспериментом по перебазированию: предложение YAM увеличивалось или сокращалось в зависимости от цены. Проект выплачивал высокодоходные фарминговые вознаграждения, но что действительно привлекало пользователей, так это симпатичные смайлики и мемы.
Весь проект собрался всего за 10 дней, представлял собой всего лишь эксперимент, и поэтому команда внедрила Yam Finance без аудита. Ко всеобщему удивлению, всего за один день в протокол влились 400 миллионов долларов TVL.
Но бравурная музыка играла недолго: всего через два дня после запуска Yam Finance рухнул. Причиной стала ошибка в функции перебазирования: контракт отчеканил слишком много YAM для определенного пула на Uniswap. Большая часть этого YAM была отправлена в казну, что, в свою очередь, сделало модуль управления непригодным для использования, потому что количество YAM, хранившееся у пользователей, теперь было недостаточным для достижения кворума для любого голоса.
Было подготовлено исправление, но его нужно было провести через голосование DAO. Команда сплотила сообщество, чтобы делегировать все свои YAM на голосование, но результата все равно не хватило.
Теперь Yam Finance живет всего на 200 тысяч долларов в TVL. Эта история показывает, что протокол DeFi может стать вирусным настолько быстро, что не будет времени искать ошибки и исправлять их. Аудит необходимо провести перед запуском.
Аудит не является гарантией безопасности
Единичный аудит смарт-контракта никогда не является 100% гарантией того, что проект не будет взломан — по нескольким причинам:
- Например, Grim Finance потерял 30 миллионов долларов из-за хакера в декабре 2021 года, несмотря на то, что он был проверен Solidity Finance. Выяснилось, что аналитик, ответственный за аудит, был новым; в то время как аудиторы обычно проверяют работу друг друга, команда была «перегружена», и процесс рецензирования не прошел должным образом. К чести Solidity, это был лишь второй эксплойт среди более чем 900 проверенных ими проектов.
- Злоумышленник может украсть/фишировать ключ кошелька вместо взлома контракта. Именно это произошло с bZX (и привело к потере 55 миллионов долларов) и EasyFi (результат – утрата 90 миллионов долларов). В последнем случае преступник получил доступ к кошельку MetaMask самого CEO протокола.
- Некоторые эксплойты используют дыры в стороннем dApp (непроверенном) для атаки на другой интегрированный с ним протокол.
- Будущие изменения в блокчейне. По мере того, как блокчейн, в которой работает dApp, обновляется, могут возникать новые векторы атак.
По всем этим причинам аудиторские соглашения и отчеты всегда включают заявление об отказе от ответственности. С точки зрения команды dApp, лучший способ минимизировать эти риски — пройти несколько независимых аудитов — если хотите, иметь «избыточность аудита».
Такова, например, стратегия Pontem Network: команда проекта хочет, чтобы ее dApps для Aptos были самыми безопасными в экосистеме. Несмотря на то, что аудиторы в Ottersec не обнаружили никаких уязвимостей в Pontem Wallet, сейчас свою проверку проводит еще и Halborn. Конечно, это несколько замедляет процесс масштабирования, но безопасность пользователей важнее, чем быстрый рост.
«В конце концов, мы создаем набор базовых dApps для экосистемы, которая может подключить первый миллиард пользователей блокчейна, а сам Aptos является самым безопасным блокчейном L1 в мире, – говорят разработчики Pontem. – Поэтому вполне уместно, что мы уделяем внимание в первую очередь безопасности».