Аудиты и баг-баунти: как проверяют смарт-контракты и как читать отчёт
Как проходит аудит смарт-контракта, какие бывают уровни серьёзности, чем аудит не является, как читать отчёт, а также как устроены баг-баунти и соревнования.
В этой статье
Смарт-контракт нельзя поправить после запуска, а ошибка может стоить миллионы. Поэтому код проверяют до запуска (аудит) и после него поощряют тех, кто найдёт уязвимость (баг-баунти). Для пользователя важно понимать, что именно значит надпись «проект проаудирован» и чего она не гарантирует. Контекст - в каталоге уязвимостей и статье про тестирование.
Что такое аудит
Аудит - независимая проверка исходного кода специалистами по безопасности. Цель - найти уязвимости, ошибки логики и риски до того, как их найдут атакующие. Результат - отчёт с перечнем находок и рекомендаций.
Аудит - это:
- проверка конкретной версии кода (по хешу коммита);
- ограниченное по времени исследование (обычно 1-4 недели);
- экспертная оценка, а не математическое доказательство.
Как проходит аудит
- Определение объёма. Какие контракты, версии, внешние зависимости входят в проверку.
- Подготовка. Команда проекта даёт документацию, описание ожидаемого поведения, тесты.
- Автоматизированный анализ. Статические анализаторы (например, Slither), фаззинг, символьное исполнение.
- Ручной разбор. Эксперты читают код построчно, ищут логические ошибки, проверяют инварианты и граничные случаи, моделируют атаки.
- Отчёт и обсуждение. Находки классифицируются, команда комментирует.
- Исправления. Разработчики вносят правки.
- Повторная проверка. Аудиторы подтверждают, что исправления закрыли проблемы и не создали новых.
- Публикация. Финальный отчёт публикуется (иногда после запуска).
Уровни серьёзности
| Уровень | Смысл |
|---|---|
| Критический | прямая потеря или блокировка средств, захват контроля |
| Высокий | серьёзный ущерб при определённых условиях |
| Средний | ущерб ограничен или требует маловероятных условий |
| Низкий | небольшие риски, нарушение лучших практик |
| Информационный | рекомендации по качеству, чтению, газу |
Для каждой находки в отчёте указан статус: исправлено, признано без исправления (с обоснованием) или не исправлено.
Чем аудит не является
- Не доказательство отсутствия ошибок. Аудиторы находят то, что видят за отведённое время.
- Только эта версия кода. Любое изменение после аудита выходит за пределы проверки.
- Не проверка всей системы. Фронтенд, серверы, процессы управления ключами, поведение людей часто остаются за рамками.
- Не защита от вредительства команды. Если у команды есть возможность обновить контракт, аудит версии не защитит от будущей подмены (прокси).
- Качество различается. Репутация и опыт фирмы имеют значение.
Как читать отчёт и оценивать проект
- Совпадает ли проверенный код с развёрнутым? В отчёте указан хеш коммита или адрес; сверьте с верифицированным контрактом.
- Кто аудитор и как давно на рынке? Есть ли публичные отчёты, репутация?
- Что в объёме? Все ли контракты вошли?
- Статус находок. Исправлены ли критические и высокие? «Не исправлено» по критическим - серьёзная тревога.
- Дата. Давно ли проведён аудит и были ли изменения после.
- Допущения. Какие доверительные предположения делает система (роли, оракулы, администратор)? (права владельца)
- Несколько независимых проверок лучше одной.
Отсутствие аудита у проекта, который хранит значительные суммы, - повод для осторожности. Оценивая любой сервис, включая наш, проверяйте актуальную информацию и сверяйте адрес и исходный код самостоятельно.
Другие способы проверки
- Соревнования аудиторов. Площадки (Code4rena, Sherlock, Cantina и др.) выставляют код на публичное исследование с призовым фондом. Много независимых глаз находят разные проблемы.
- Формальная верификация. Математическое доказательство, что код соответствует спецификации. Мощно, но трудоёмко и применимо к ограниченным свойствам.
- Внутреннее ревью и тесты - Foundry, фаззинг, инварианты.
- Мониторинг после запуска. Системы, замечающие подозрительную активность и позволяющие нажать паузу.
Баг-баунти
Баг-баунти - программа вознаграждения для исследователей, которые находят уязвимости в работающем проекте и сообщают о них ответственно.
Как устроено:
- Проект публикует правила: что входит в область, какие уязвимости принимаются, размеры наград по серьёзности.
- Исследователь сообщает приватно (не публикуя) через специальную площадку или контакт безопасности.
- Команда проверяет и устраняет проблему.
- Исследователю выплачивается награда; информация раскрывается после исправления.
Награды зависят от размера рисков; для критических уязвимостей они бывают очень крупными, обычно как доля от потенциально затронутых средств. Идея проста: проекту дешевле заплатить честному исследователю, чем потерять деньги.
Ответственное раскрытие
Если вы нашли уязвимость:
- Не используйте её для получения выгоды и не демонстрируйте на реальных средствах.
- Сообщите приватно разработчикам.
- Дайте время на исправление до публикации.
- Следуйте правилам программы баунти.
Эксплуатация уязвимости - преступление, а ответственное раскрытие - легальный и часто хорошо оплачиваемый путь.
Что может сделать обычный пользователь
- Проверяйте, есть ли у проекта отчёты и программа баунти.
- Не вкладывайте больше, чем готовы потерять, пока проект молод.
- Следите за обновлениями безопасности.
- Применяйте личные меры защиты: большинство потерь происходит не из-за контрактов, а из-за людей (фишинг).
- Для сделок учитывайте, что эскроу уменьшает риск контрагента, но не отменяет риск программного кода.
Что почитать дальше
Вернитесь к практике: чек-лист безопасности или жизненный цикл сделки. Для разработчиков - оптимизация газа без ущерба для безопасности.
Читайте также
- 3 · Под капотом
Каталог уязвимостей смарт-контрактов: 12 классических ошибок и защита от них
Обзор частых уязвимостей контрактов: реентерабельность, контроль доступа, переполнение, оракулы, повтор подписей, DoS. С примерами и защитой в эскроу.
4 мин чтения - 3 · Под капотом
Тестирование смарт-контрактов: unit, fuzz, инварианты и статический анализ
Как проверяют контракты с деньгами: юнит-тесты, фаззинг, инварианты платёжеспособности, «злые» моки токенов, Slither и Mythril на примере эскроу с Foundry.
5 мин чтения
Упоминается в статьях
- Что такое смарт-контракт и почему ему можно доверять деньги
- dApp и DeFi: децентрализованные приложения и финансы без посредников
- Словарь терминов: блокчейн, кошельки, смарт-контракты и эскроу от A до Я
- Как проверить смарт-контракт перед использованием: пошаговая инструкция
- ERC-20 с нуля: пишем токен на Solidity и разбираем каждую строку
- Шаблоны контроля доступа в смарт-контрактах: owner, роли и стороны сделки
- Каталог уязвимостей смарт-контрактов: 12 классических ошибок и защита от них
- Прокси и обновляемые контракты: delegatecall, UUPS и цена гибкости
- Оптимизация газа в Solidity: 12 приёмов и когда они уместны
- Foundry для начинающих: компиляция, тесты, фаззинг и локальная сеть
- Тестирование смарт-контрактов: unit, fuzz, инварианты и статический анализ
Готовы попробовать?
Создайте первую сделку за пару минут. Деньги блокируются в смарт-контракте и выплачиваются по правилам, которые видны заранее.

