Обновлено 14 сентября 2026 г. Аудит смарт-контрактов может служить полезным доказательством, но это не сертификат безопасности. Самый важный вопрос не в том, «Был ли этот проект проверен?», а в том, «Что именно было проверено, какая версия была рассмотрена, что осталось нерешенным и соответствует ли развернутый код проверенной системе?»
В рекомендациях по безопасности Ethereum прямо указано, что аудиты не являются панацеей и не могут выявить все ошибки. Рабочий процесс аудита OpenZeppelin также рассматривает область проверки, выявленные проблемы, серьезность, статус устранения и анализ исправлений как отдельные элементы общей картины безопасности. Поэтому практическая цель для покупателя — читать отчет как документ, оценивающий риски, а не как маркетинговый инструмент.
Краткий контрольный список тревожных сигналов
| Что проверить |
Сигнал низкого риска |
Красный флаг |
| Объем |
Приведены точные репозитории, файлы, контракты, сети и исключения. |
Утверждение о том, что "проведена проверка", не содержит чёткого описания её масштабов. |
| Версия |
Определен хеш коммита, тег или точная версия кода. |
После проверки ни один коммит, ни развернутый код не изменились. |
| Критические/высокие результаты |
Проблема решена и независимо перепроверена. |
Проблема открыта, частично решена, принята без убедительных доказательств вины или не рассмотрена для исправления. |
| Административные полномочия |
Роли документированы и защищены с помощью мультиподписи/временной блокировки там, где это необходимо. |
Один кошелек позволяет мгновенно создавать новые кошельки, приостанавливать их выпуск, снимать средства, обновлять кошельки или изменять их параметры. |
| Возможность модернизации |
Модель прокси-сервера и полномочия по обновлению находятся в рамках допустимых параметров и четко задокументированы. |
Проверенную реализацию можно заменить после проверки без существенных задержек или пересмотра. |
| Зависимости и оракулы |
Выявлены предположения, основанные на доверии, и внешние системы. |
В отчете не учтены компоненты, регулирующие ценообразование, хранение активов, мостовые операции или основные принципы работы протокола. |
| Возраст аудита |
Для текущего кода это достаточно свежая информация, и после внесения существенных изменений проводятся последующие проверки. |
Старый аудиторский отчет использован в качестве доказательства для существенно отличающегося продукта. |
Шаг 1: Убедитесь, что отчет подлинный и составлен аудитором.
Заголовок: Прежде чем читать отдельные выводы, ознакомьтесь с идентификацией отчета, датой, аудитором и кратким описанием степени серьезности проблемы.
Подтверждено: в авторитетных аудиторских отчетах обычно указываются проект, период оценки, аудитор и проверенный код. В опубликованных отчетах OpenZeppelin и отчетах Consensys Diligence обычно содержится раздел, описывающий область проверки, и информация о внесенных изменениях в код. Например, в отчете Consensys USDKG указывается точный хэш коммита, который был проверен, в то время как в отчетах OpenZeppelin обычно указывается репозиторий и коммит или запрос на слияние, находящиеся в области проверки.
Распространенное заблуждение: PDF-файл, загруженный проектом, автоматически заслуживает доверия, если в нем присутствует логотип аудитора. Этого недостаточно. Файлы могут быть устаревшими, измененными или оторванными от своего первоначального контекста.
Действие: по возможности найдите отчет на собственном сайте или в репозитории аудитора. Сравните название проекта, дату отчета, URL-адрес и сведения о версии с копией, предоставленной командой, отвечающей за токен.
Основные источники информации: аудиторская документация OpenZeppelin и аудиторский отчет Consensys Diligence USDKG .
Шаг 2: Ознакомьтесь с планом исследования до ознакомления с результатами.
Подпись: Значок аудита менее важен, чем его объем: необходимо точно указать, какие контракты и компоненты были проверены.
Аудит охватывает только то, что входит в его сферу действия. В отчете может быть рассмотрен контракт токена, но исключены стейкинг, мосты, хранилища, управление, фронтенд-инфраструктура, внешние зависимости или последующее обновление.
Подтверждено: в отчете OpenZeppelin Panoptic указана область его действия, а также отмечается, что исправления были распространены по разным репозиториям. В другом отчете OpenZeppelin об эмуляторе EVM прямо указано, что аудиту подверглись только изменения в конкретном запросе на слияние, а не все файлы целиком. Эти примеры показывают, почему вывод «проект был проверен» может быть слишком общим.
Распространенное заблуждение: если проверен хотя бы один контракт в экосистеме, то проверен весь протокол. Это не так.
Действие: перечислите все компоненты, которые могут хранить средства, перемещать средства, устанавливать цены, изменять права доступа, выпускать токены или обновлять контракты. Затем отметьте, входит ли каждый из них в область аудита. Любое важное пустое поле является дополнительным вопросом.
Ссылки на примеры: аудит OpenZeppelin Panoptic и аудит эмулятора OpenZeppelin EVM .
Шаг 3: Сопоставьте хэш коммита с фактически развернутым кодом.
Заголовок: Отчет привязан к версии кода; убедитесь, что проверенная версия по-прежнему соответствует развернутым контрактам.
Это одна из наиболее часто упускаемых из виду проверок. Аудит мог быть проведен отлично, но после его завершения в код проекта могли внести изменения.
Подтверждено: в документации OpenZeppelin Code Inspector указано, что отчеты привязаны к конкретному коммиту, а в руководстве Ethereum по проверке контрактов поясняется, что проверенный исходный код помогает пользователям установить, что опубликованный исходный код соответствует развернутому байт-коду.
Распространенное заблуждение: фраза «проверено в прошлом месяце» означает, что проверенным является контракт, заключенный сегодня. Однако время само по себе этого не доказывает.
Действие: найдите хеш коммита, тег или запрос на слияние в отчете. Затем проверьте документацию по развертыванию проекта и проверенный исходный код в соответствующем обозревателе блоков. Если развернутая реализация новее, поищите последующий аудит или документированный анализ различий.
Основные источники информации: документация OpenZeppelin Code Inspector и руководство по проверке контрактов Ethereum.org .
Шаг 4: Относитесь к оценке статуса обнаружения так же серьезно, как и к степени тяжести обнаружения.
Подпись: «Критический», «Высокий» или «Средний» — это только половина истории; проверьте, решена ли каждая проблема, частично решена или все еще открыта.
Уровень серьезности указывает на потенциальную важность обнаружения. Статус показывает, что произошло после этого. Инструменты аудита OpenZeppelin различают такие статусы, как «решено», «частично решено», «подтверждено, но не решено» и «нет ответа».
Распространенное заблуждение: фраза «аудит завершен» означает, что проект исправил все проблемы. Это не так. Аудит может быть завершен, но выявленные недостатки могут остаться нерешенными.
Действие: составьте небольшой список всех критических и сложных проблем, затем зафиксируйте их окончательный статус и доказательства проверки исправлений. В случае проблем средней сложности обратите особое внимание на случаи, когда несколько проблем указывают на одну и ту же уязвимость в проектировании, например, контроль доступа, манипулирование ценами или бухгалтерские ошибки.
Не следует автоматически игнорировать и менее серьезные нарушения. Их значимость зависит от контекста системы, сочетания с другими проблемами и того, как привилегированные пользователи могут использовать затронутую функциональность.
Шаг 5: Ознакомьтесь с выводами, последствиями, предпосылками и решением, а не только с заголовком.
Подпись: Метки уровня серьезности — это отправная точка; необходимо понимать условия эксплуатации уязвимости, затронутые активы и обоснование аудитора.
Полезное заключение обычно объясняет, что может пойти не так, почему это важно, описывает соответствующий путь выполнения кода, предварительные условия и содержит рекомендации. Заключение категории «Высокий уровень опасности», требующее взлома администратора, может представлять собой иной практический риск, чем эксплойт без прав доступа, который может запустить любой пользователь.
Подтверждено: OpenZeppelin описывает серьезность проблемы как отражение таких факторов, как влияние, вероятность и сложность эксплуатации. Анализ 246 обнаруженных уязвимостей смарт-контрактов, проведенный Trail of Bits, также показал, что серьезные проблемы возникают в нескольких категориях — не только в известных классах ошибок, таких как реентерабельность. В их наборе данных были выделены такие важные источники риска, как контроль доступа, аутентификация, временные параметры, числовые данные, валидация и другие.
Распространенное заблуждение: реентрантность — единственная ошибка смарт-контракта, о которой стоит беспокоиться. Это не так. Бизнес-логика, контроль доступа, валидация, проектирование оракулов и учет могут быть не менее важны.
Действие: для каждого серьезного нарушения ответьте на четыре вопроса: Кто может его спровоцировать? Что они могут получить или потерять? Какие предположения необходимы? Было ли проверено конкретное решение?
Основные источники: модель анализа проблем аудита OpenZeppelin , анализ результатов аудита Trail of Bits и вопросы безопасности Solidity .
Шаг 6: Проверьте привилегированные роли, ключи администратора, права на приостановку, создание учетных записей и обновление.
Подпись: Привилегированные функции заслуживают особого внимания, поскольку защищенный путь выполнения кода все еще может нести в себе риски управления или управления ключами.
Во многих протоколах намеренно предусмотрены привилегированные роли. Это не делает их автоматически небезопасными, но меняет модель доверия.
Подтверждено: В рекомендациях Ethereum по безопасности смарт-контрактов предупреждается, что единственный владелец может стать центральной точкой отказа. В них описываются методы снижения этого риска, такие как управление доступом на основе ролей и мультиподпись. В документации OpenZeppelin по временной блокировке поясняется, что отложенное выполнение может дать пользователям время для проверки действий по техническому обслуживанию и выхода из программы при необходимости.
Распространенное заблуждение: «отсутствие критических уязвимостей» означает, что администраторы не могут причинить вред пользователям. Серьезность аудита и полномочия управления — это разные вопросы.
Действие: выполните поиск в отчете по таким терминам, как owner, admin, role, multisig, timelock, pause, mint, upgrade, blacklistи withdraw. Затем определите, кто занимает каждую из этих должностей сегодня и насколько быстро эта должность может выполнять свои обязанности.
Основные источники: руководство по безопасности смарт-контрактов Ethereum и документация OpenZeppelin по контролю доступа .
Шаг 7: Проверка возможности обновления, оракулов, мостов и других внешних предположений о доверии.
Подпись: Проверяйте границы доверия, а не только файлы Solidity — прокси, оракулы, мосты и внешние зависимости могут изменить реальный риск.
Обновляемый прокси-сервер может сохранять тот же публичный адрес, изменяя при этом логику реализации. Оракулы могут передавать цены, определяющие ликвидацию. Мосты могут вводить отдельные предположения о хранении или валидаторе. Внешние библиотеки и протоколы могут выходить из строя независимо друг от друга.
Подтверждено: В документации OpenZeppelin указано, что системы на основе прокси отделяют стабильный адрес прокси от изменяемого кода реализации. В документации также содержится предупреждение о том, что возможность обновления требует тщательной авторизации. В руководстве по безопасности Ethereum объясняется риск манипулирования оракулами и отмечается, что некорректные входные данные о ценах могут привести к исполнению контрактов на основе некорректных данных.
Распространенное заблуждение: проверенный исходный код по адресу прокси-сервера доказывает, что дальнейшее поведение системы изменить невозможно. Для систем с возможностью обновления это не всегда так.
Действие: определить, можно ли обновить контракт, кто санкционирует обновления, есть ли задержки в обновлениях и проверена ли текущая реализация. Затем составить список всех внешних систем, сбой в работе которых может повлиять на средства пользователей.
Основные источники: документация по прокси-серверу OpenZeppelin и руководство по безопасности смарт-контрактов Ethereum .
Шаг 8: Примите решение о покупке / отказе от покупки / исследовании с учетом остаточного риска.
Подпись: Окончательное решение должно отражать риски, сохраняющиеся после устранения неполадок, а не наличие сертификата о прохождении аудита.
Даже после исправлений риск сохраняется. В опубликованных отчетах об аудитах OpenZeppelin прямо указывалось, что ограниченные по времени проверки не могут гарантировать обнаружение каждой ошибки или риска. Например, в аудите Audius аудиторы рекомендовали бета-тестирование, вознаграждение за обнаружение ошибок и повторный аудит в будущем после выявления большого количества серьезных проблем. В аудите Panoptic они рекомендовали дополнительный мониторинг и еще один аудит после существенных изменений в коде.
Распространенное заблуждение: многократные аудиты сводят риск, связанный со смарт-контрактами, к нулю. Это не так. Они повышают уровень уверенности, но безопасность также зависит от точности развертывания, операционной деятельности, безопасности ключа администратора, мониторинга, реагирования на инциденты, экономических предположений и будущих обновлений.
Действие: классифицировать проект по одной из трех категорий:
- Купить/продолжить исследование: текущий развернутый код соответствует проверенной области; серьезные замечания устранены и перепроверены; привилегированные полномочия приемлемы и прозрачны; внешние зависимости понятны.
- Необходимо провести дальнейшее расследование: отсутствует ключевая информация, аудит проводился до крупных обновлений, или некоторые проблемы средней/высокой степени сложности решены или признаны лишь частично.
- Пока что следует избегать следующих случаев: критические/высокоуровневые проблемы остаются нерешенными, развертывание не соответствует проверенной версии, основные контракты вышли за рамки проекта или администраторы ненадлежащим образом раскрыли информацию об одностороннем контроле над средствами пользователей.
Как интерпретировать распространенные аудиторские фразы
| Фраза |
Что это обычно означает |
Ваше следующее действие |
| «Критических проблем не обнаружено» |
В ходе проверки в рамках ее масштаба и временных рамок не было выявлено ни одного критического нарушения. |
По-прежнему читайте разделы «Высокий», «Средний», «Предположения о доверии», «Исключения» и «Полномочия администратора». |
| «Решено» |
В рамках проекта были внесены изменения в код, и аудитор одобрил исправления, включенные в проверенный набор исправлений. |
Убедитесь, что исправление включено в развернутый код. |
| «Признано» |
Команда признает наличие проблемы, но, возможно, не внесла изменений в код. |
Ознакомьтесь с обоснованием; не следует рассматривать это как эквивалент фиксированной цены. |
| «Частично решено» |
Меры по снижению риска уменьшают его, но не устраняют полностью обнаруженную проблему. |
Разберитесь в оставшемся пути или предположении, позволяющем использовать уязвимость. |
| «Выходит за рамки темы» |
Аудитор не оценивал этот компонент. |
Не следует делать вывод о безопасности данного компонента на основании данного отчета. |
| «Предполагается, что ему доверяют» |
Модель аудита основана на предположении, что данный субъект или зависимая сторона ведут себя корректно. |
Решите, готовы ли вы принять это предположение о доверии. |
Пять тревожных сигналов, которые заслуживают немедленной остановки
- Проект не может отображать оригинальный отчет, размещенный аудитором. Скриншота или логотипа недостаточно.
- В отчете отсутствует воспроизводимая область действия или версия. Без коммита, тега или точных файлов сложно понять, что именно было проверено.
- Критические или важные вопросы остаются открытыми без убедительного, документально подтвержденного обоснования.
- Протокол допускает обновление, но в отчете практически не обсуждается вопрос о полномочиях по обновлению или привилегированных ролях.
- После проверки схема развертывания существенно изменилась, и последующий анализ недоступен.
Если что-либо из перечисленного появляется, самым безопасным следующим шагом будет не пытаться это объяснить. Приостановите принятие инвестиционного решения и запросите актуальные доказательства.
10-минутная процедура подготовки аудиторского отчета перед покупкой
- Откройте отчет на официальном сайте аудитора.
- Запишите дату отчета, репозиторий, область действия и хеш коммита.
- Подтвердите развернутые контракты и адреса внедрения.
- Ознакомьтесь со всеми критическими и серьезными заключениями.
- Проверьте окончательный статус каждого серьезного вопроса.
- Поиск привилегированных ролей и чрезвычайных полномочий.
- Определите, какие обновления прокси-сервера и кто ими управляет.
- Определите оракулы, мосты, системы хранения и внешние зависимости.
- Найдите изменения, внесенные после проверки корректностей.
- Прежде чем совершить покупку, определите, какой остаточный риск вы готовы принять на себя.
Итог
Аудит смарт-контракта — это свидетельство проверки, а не доказательство безопасности. Самый весомый сигнал — это не логотип аудитора, а цепочка доказательств, связывающая четко определенную область проверки, точную редакцию кода, серьезные замечания, проверенные исправления, развернутый байт-код и прозрачный оперативный контроль.
Самая опасная ошибка при чтении — остановиться на слове «проверено». Более полезный вопрос: что еще может пойти не так после этой проверки? Если вы можете четко ответить на этот вопрос — и вас устраивают оставшиеся риски — вы принимаете более обоснованное решение. Если объем работ, статус исправления, права администратора или развернутая версия неясны, правильным действием будет провести исследование перед покупкой.
Первичные источники
Данная статья носит исключительно информационный характер и не является финансовой рекомендацией. Аудит не может исключить риски, связанные со смарт-контрактами, управлением, оракулами, экономическими, операционными или рыночными рисками.