Отчёт об аудите читают не с перечня дефектов, а с раздела Scope. Там стоит список файлов и хеш коммита, по которому работал аудитор. Дальше идёт сверка: тот ли коммит развёрнут в сети, тот ли адрес, та ли сеть. Проверить каждый шаг — пройти цепочку от строки Scope до верифицированного исходника по адресу контракта. Перечень дефектов смотрят последним. Без совпадения ревизии он не значит ничего.

Scope аудита — это раздел отчёта, который фиксирует, какие файлы исходного кода и какая ревизия репозитория попали под проверку, а какие остались за её границей.

Как выглядит схема со стороны жертвы

Картина однотипная. На странице проекта висит плашка «audited by», рядом логотип известной компании и ссылка на PDF. Документ открывается, оформлен по шаблону, внутри девять закрытых замечаний и ни одного критического. Доверие складывается за полминуты, после чего человек подписывает разрешение на расходование токенов, не вчитываясь в окно кошелька.

Расхождение всплывает позже — когда с адреса уходит баланс. Выясняется, что аудит проводился по ревизии, которая в сеть так и не попала: команда переписала модуль вывода средств уже после начала проверки, собрала новый байт-код и развернула его, не заказывая повторного прохода по изменённым файлам. Отчёт настоящий, подпись настоящая, компания существует. Проверяли другой код.

Из обращений читателей складывается ещё один сюжет: аудит касался только контракта токена, а пользовательские средства лежали в стейкинг-контракте, которого в разделе Scope нет ни одной строкой, — и потому выводы отчёта к нему не относились с самого начала. Формально никто не соврал. Строка «out of scope» стояла на четвёртой странице.

Признаки, по которым распознаётся подмена

  • В Scope нет хеша коммита — только названия файлов или ссылка на ветку. Ветка движется, хеш нет.
  • Дата отчёта старше даты развёртывания контракта на месяцы, а в разделе про исправления нет ссылок на итоговую ревизию.
  • Адрес контракта в отчёте не указан ни одной строкой. Сверять нечего.
  • Исходник по адресу в обозревателе не верифицирован, видно только байт-код.
  • Проверенных файлов три, а в развёрнутой системе их двенадцать, включая прокси и хранилище.
  • Раздел с исправлениями заполнен фразами «исправлено командой» без хеша исправляющего коммита.
Логотип аудитора на сайте проекта не является подтверждением. Подтверждением является документ, лежащий на домене аудитора, с хешем коммита, который совпадает с развёрнутым байт-кодом.

Проверка за 60 секунд: что открыть и на что смотреть

Порядок короткий и повторяемый. Нужны три окна: PDF отчёта, обозреватель сети, репозиторий проекта.

  1. Откройте Scope и выпишите хеш коммита целиком, а не первые семь знаков.
  2. Найдите в отчёте адрес развёрнутого контракта и сеть. Нет адреса — отчёт не привязан к тому, чем вы пользуетесь.
  3. Вбейте адрес в обозреватель. Смотрите вкладку с исходным кодом: верифицирован или нет.
  4. Сверьте имена файлов и версию компилятора из обозревателя с перечнем в Scope.
  5. Откройте коммит из Scope в репозитории. Он должен существовать и быть предком той ревизии, из которой собран развёрнутый код.
  6. Проверьте, сколько адресов в системе. Прокси, реализация, хранилище, раздатчик награды — каждый адрес либо в Scope, либо вне проверки.
Схема из пяти шагов: читаем Scope и хеш коммита, находим адрес и сеть в отчёте, открываем адрес в обозревателе, сверяем файлы и версию компилятора, проверяем коммит в репозитории
Схема из пяти шагов: читаем Scope и хеш коммита, находим адрес и сеть в отчёте, открываем адрес в обозревателе, сверяем файлы и версию компилятора, проверяем коммит в репозитории
На 14 октября 2026 года отраслевая спецификация EEA EthTrust Security Levels актуальна в версии 3 от марта 2025 года. Она делит требования на три уровня: уровень автоматических проверок, уровень ручного аудита и уровень полного разбора логики. Отчёт, закрывающий низший уровень, не равен отчёту, закрывающему высший, хотя слово на обложке одно.

Шестой шаг люди пропускают чаще прочих. Система из одного контракта встречается нечасто: средствами обычно распоряжается связка из прокси и реализации, а права на обновление лежат у отдельного адреса, иногда вынесенного в мультиподпись, иногда оставшегося у одного ключа без всякого таймлока. Если аудит смотрел реализацию, но не смотрел, кто и как её меняет, вывод отчёта говорит о прочности замка, а не о том, у кого ключ. Отдельный разбор того, что показывает кошелёк в момент подтверждения, собран в материале про вредоносную подпись транзакции.

Пошаговые действия, если деньги уже ушли

Возврат не гарантирован никем. Дальше описан порядок, который сохраняет доказательства и даёт следствию материал.

  1. Зафиксируйте хеши транзакций, адреса отправителя и получателя, время по UTC. Скриншот без хеша бесполезен.
  2. Снимите с адреса все действующие разрешения на расходование токенов, начиная с бессрочных и неограниченных по сумме.
  3. Переведите остаток на адрес, ключ которого никогда не был на том же устройстве.
  4. Сохраните сам PDF отчёта и страницу проекта целиком: через неделю формулировки на сайте могут измениться.
  5. Подайте заявление в полицию через приёмную МВД или отделение по месту жительства; приложите распечатку транзакций и расчёт суммы в рублях на дату операции.
  6. Если деньги уходили с банковской карты на платёжный шлюз, направьте претензию в банк и параллельно жалобу в Банк России через интернет-приёмную.
За 2025 год объём операций без добровольного согласия клиентов финансовых организаций составил, по обзору Банка России, 29,3 млрд рублей — на 6,4% больше, чем годом ранее, тогда как число самих операций выросло на 31,2% и достигло 1,6 млн. Клиентам вернули 1,7 млрд рублей, то есть 5,9% похищенного, хотя в 2024 году доля возврата держалась на уровне 9,9%.

Доля возврата по банковским операциям не превышает шести процентов. В сетях без посредника возвращать нечего и некому: подтверждённая транзакция окончательна, отмена не предусмотрена протоколом, а адрес получателя не привязан к лицу, которому можно направить претензию. Поэтому порядок действий после потери — это работа с доказательствами, а не ожидание компенсации. Как выстраивается такая работа, подробно описано в разборе про движение украденных средств и остаточный риск.

Как закрыть дыру, чтобы не повторилось

Привычка одна: отчёт читается до подписи, а не после. Таблица ниже переводит каждую значимую строку документа в проверяемое действие и показывает, какой именно признак говорит о том, что проверка не прошла и выводы аудитора на развёрнутый код не переносятся.

Строка отчёта Что проверять Признак, что проверка не прошла
Scope: список файлов и хеш коммита Коммит существует в репозитории и является предком развёрнутой ревизии Указана ветка вместо хеша либо коммит в репозитории не находится
Deployed addresses: адреса и сети Адрес из отчёта совпадает с адресом, с которым работает интерфейс проекта Адресов в отчёте нет или сеть указана другая
Severity: распределение дефектов по уровням Каждый критический и высокий дефект имеет статус и хеш исправления Статус «исправлено» без ссылки на коммит с правкой
Out of scope: что не проверяли Контракты, где лежат пользовательские средства, входят в проверку Хранилище, прокси или права на обновление вынесены за границу аудита
Disclaimer: оговорки аудитора Текст не снимает ответственность за весь разобранный класс дефектов Оговорка исключает экономическую модель и права администратора целиком

Чек-лист

  • Хеш коммита из Scope выписан полностью и найден в репозитории.
  • Адрес и сеть из отчёта совпали с тем, что открывает интерфейс проекта.
  • Исходник по адресу верифицирован, имена файлов и версия компилятора сошлись.
  • Все адреса системы распределены: либо в Scope, либо честно вынесены из него.
  • Каждый критический дефект закрыт коммитом, а не фразой.
  • PDF скачан с домена аудитора и сохранён локально вместе с датой загрузки.
  • Разрешения на расходование выданы под конкретную сумму, а не бессрочно.

Частые вопросы

Если аудит прошёл без критических замечаний, контракт безопасен?

Нет. Отчёт говорит об отсутствии дефектов из проверенного списка в проверенной ревизии кода, и не более того. Экономическая модель, права администратора и внешние источники цены часто выносятся за границу аудита отдельной строкой, после чего любые претензии по этим классам риска формально к аудитору не относятся. Читайте «out of scope» раньше выводов.

Как понять, что развёрнут именно проверенный код?

Сверяйте три вещи: хеш коммита из Scope, верифицированный исходник по адресу в обозревателе и версию компилятора. Совпали имена файлов, ревизия и компилятор — проверенный код в сети. Любое расхождение означает, что аудит относится к другой версии и выводы на развёрнутый контракт не переносятся.

Отчёт лежит только на сайте проекта. Это проблема?

Это повод проверить происхождение документа. Серьёзные аудиторы публикуют отчёты в собственном репозитории или на своём домене, и копия у проекта должна совпадать с оригиналом страница в страницу. Расхождение в составе файлов или в статусах дефектов означает, что копия правилась после выдачи.

Сколько живёт результат аудита?

До следующего обновления кода. Контракт за прокси меняется без смены адреса, и отчёт месячной давности может описывать реализацию, которой уже нет. Смотрите историю обновлений по адресу прокси: дата последнего изменения реализации важнее даты на обложке документа.

Вердикт

Аудит — не печать качества, а протокол осмотра конкретной ревизии в конкретный день. Ценность отчёта определяется двумя разделами: что вошло в Scope и что из него вынесено. Сверка хеша коммита с развёрнутым байт-кодом занимает минуту и отсекает большую часть историй, которые потом приходят в редакцию. Если сверить нечего, считайте, что аудита нет, какой бы логотип ни стоял на обложке.

Разборы инцидентов и предупреждения публикуем в Telegram-канале Cryptium.