Что такое аудит смарт-контрактов и что он пропускает?
Аудит смарт-контракта — это проверка кода протокола специалистами по безопасности, которые ищут ошибки, недостатки в архитектуре и способы похитить средства. Аудит снижает риски, но не устраняет их полностью.
Аудит смарт-контракта — это проверка кода протокола специалистами по безопасности, которые ищут ошибки, недостатки в архитектуре и способы похитить средства. Аудит снижает риски, но не устраняет их полностью. Euler Finance неоднократно проходил аудит, прежде чем в марте 2023 года потерял около 197 миллионов долларов, а по одному исследованию, большинство взломанных контрактов были проаудированы.
Что проверяют аудиторы
Аудиторы построчно читают код, запускают автоматизированные инструменты и тестируют поведение контрактов в необычных ситуациях. Они ищут распространённые уязвимости, например возможность вывести больше средств, чем было внесено, нарушенный контроль доступа, небезопасные внешние вызовы и ошибки в финансовой логике. Результатом становится отчёт, в котором проблемы перечислены по степени серьёзности с указанием того, исправила ли их команда.
Почему проаудированные протоколы всё равно взламывают
Аудит охватывает одну версию кода. Эксплойт Euler был связан с функцией, добавленной после предыдущих проверок; аудит этого изменения в июле 2022 года уязвимость не выявил. Euler прошёл 10 аудитов у шести компаний.
Рисунок: Три крупные потери, три разные причины. Только одна была ошибкой в коде, которую аудит мог бы обнаружить.
Охват ограничен. Одна из компаний, работавших с Euler, заявила, что проверяла только интеграцию источника цен, а не код, который дал сбой.
Сложные взаимодействия. Уязвимости часто проявляются только тогда, когда протокол взаимодействует с другими, через флеш-кредиты, оракулы или другие контракты.
Ошибки конфигурации и настройки. Мост Nomad потерял около 190 миллионов долларов в 2022 году из-за неверной настройки инициализации.
Проблемы за пределами кода. Мост Ronin потерял около 625 миллионов долларов в 2022 году после того, как атакующие получили доступ к ключам валидаторов; ни один аудит кода не смог бы этого предотвратить. См. взлом моста Ronin.
Что показывают данные
Компания AnChain.ai обнаружила, что около 92% изученных ею взломанных смарт-контрактов были проаудированы. Отчасти это объясняется тем, что почти каждый серьёзный протокол проходит аудит. Halborn установила, что на проаудированные протоколы приходилось лишь около 11% потерянной в долларах стоимости, что говорит о том, что аудиты по-прежнему важны.
Что содержит отчёт об аудите
Отчёт об аудите обычно перечисляет все найденные проблемы, ранжированные по степени серьёзности: критическая, высокая, средняя, низкая и информационная. Для каждой описаны проблема, способ эксплуатации и рекомендуемое исправление, а также ответ команды: исправлено, исправлено частично или принято к сведению, но оставлено без изменений. Во многих отчётах есть примечание о том, что было вне охвата. Наиболее показательными часто оказываются разделы с принятыми к сведению проблемами и область охвата, поскольку они показывают, какие риски команда решила принять и какой код никто не проверял.
Кто платит и почему это важно
Проекты платят аудиторам, что создаёт очевидное противоречие: клиентом аудитора является команда, а не пользователи. Добросовестные компании дорожат репутацией и честно сообщают о результатах, однако ограничения по времени и бюджету определяют, насколько глубоко может быть проведена проверка. Конкурсные аудиты, в которых множество независимых исследователей изучают код за призовые деньги, и постоянные программы вознаграждения за ошибки, которые платят за уязвимости, найденные после запуска, создают иные стимулы. Протокол, сочетающий приватный аудит, публичный конкурс и крупную постоянную программу вознаграждений, привлекает гораздо более пристальное внимание, чем тот, у которого есть только один отчёт.
Безопасность помимо аудита
- Программы вознаграждения за ошибки платят исследователям, которые сообщают о недостатках вместо того, чтобы их использовать.
- Формальная верификация применяет математические методы, чтобы доказать, что определённые свойства кода всегда выполняются.
- Мониторинг отслеживает необычные транзакции и может запускать оповещения или приостановку работы.
- Таймлоки откладывают обновления, чтобы пользователи могли отреагировать до вступления изменений в силу.
- Лимиты ограничивают сумму, которую можно внести или вывести, пока новый код доказывает свою надёжность.
Признаки тщательного аудита
Качество аудитов сильно различается. Более надежными признаками являются: авторитетная компания с публичной репутацией, отчет, в котором указана точная версия проверенного кода, реалистичные сроки для объема кода, замечания всех уровней серьезности, а не подозрительно чистый результат, и повторная проверка, подтверждающая, что исправления внесены корректно. Одностраничный сертификат без замечаний или отчет, охватывающий лишь небольшую часть протокола, говорит гораздо меньше, чем предполагает значок на сайте.
Чтение аудита без чтения кода
Чтобы извлечь пользу из отчета аудита, не обязательно быть разработчиком. Проверьте, что в отчете указаны текущие контракты протокола и дата. Прочитайте сводку замечаний и подсчитайте, сколько было критических и серьезных проблем и все ли они исправлены. Обратите внимание на любые замечания, отмеченные как принятые, а не исправленные, и прочитайте, почему так. Проверьте раздел об охвате проверки на предмет важных элементов, которые были исключены. Затем сравните даты аудитов с датами последующих обновлений: код, изменённый после последней проверки, возможно, вообще не был проверен.
Как читать аудит
- Проверьте дату и версию. Совпадает ли проверенный код с кодом, который работает сейчас?
- Проверьте охват. Какие контракты были проверены, а какие нет?
- Прочитайте замечания. Были ли критические и серьезные проблемы исправлены и перепроверены?
- Ищите более одной проверки, а также публичную программу поиска уязвимостей (bug bounty) и постоянный мониторинг.
Когда аудиты действительно помогают
Несмотря на ограничения, аудиты выявляют очень многое. Многие серьезные уязвимости находят и устраняют до запуска, и о них никогда не пишут в новостях именно потому, что их заметили заранее. Протоколы, которые сочетают несколько аудитов с программами поиска уязвимостей, поэтапным ростом лимитов на депозиты и аккуратными процедурами обновления, как правило, справлялись лучше тех, кто их пропускал. Статистика, согласно которой большинство взломанных контрактов были проверены аудитом, в первую очередь отражает, насколько распространены аудиты, а не то, что они бесполезны. Для пользователей практический вывод таков: аудит следует считать необходимым минимумом, а не гарантией, и всегда искать другие уровни защиты, которые показывают, что команда относится к риску серьезно не только до запуска, но и после него.
Место аудита в общей картине
Аудит — лишь один из сигналов. Наше руководство о том, как проверить DeFi-протокол перед внесением депозита, рассматривает остальные. Для базового понимания прочитайте, что такое смарт-контракт, и что такое DeFi.
Эта статья носит образовательный характер и не является финансовой, инвестиционной, юридической или налоговой консультацией. Цифровые активы волатильны, и вы можете потерять вложенную сумму.
Часто задаваемые вопросы
Означает ли «проверен аудитом», что протокол безопасен?
Нет. Это означает, что конкретный код был проверен в определенное время определенной компанией. Аудиты снижают вероятность известных типов ошибок, но многие взломанные протоколы уже проходили аудит, а риски, не связанные с кодом, аудитом не покрываются.
Сколько времени занимает аудит?
Это зависит от размера и сложности кода: от нескольких дней для небольшого контракта до нескольких недель или месяцев для крупного протокола. Поспешные аудиты перед дедлайном запуска — распространенное слабое место.
Источники
- Криптоаудитор Sherlock выплатит 4,5 млн долларов Euler Finance (эксплойт на 197 млн долларов; охват проверки другого аудитора) — The Block, март 2023
- Команда Euler Finance блокирует уязвимый модуль (аудит июля 2022 года пропустил уязвимость) — ForkLog, март 2023
- Парадокс аудита (91,96% взломанных контрактов были проверены; на аудированные протоколы пришлось 10,8% потерянной стоимости; 10 аудитов от 6 компаний) — Zealynx Academy
- Почему некоторые смарт-контракты проходят аудит, но всё равно взламываются (инициализация Nomad; компрометация ключей Ronin) — QuillAudits