Аудит был. В границы он не входил

Заголовок обещает 885 млн потерь вне границ аудита. В самом исследовании этого числа нет, а на двух инцидентах держится весь вывод. Разбираем, что осталось.

В первой половине 2026 года у DeFi-протоколов, прошедших аудит, украли 885 миллионов долларов — и всё это через дыры, которых в границах аудита не было.

Так говорит заголовок разбора, разошедшегося по отраслевым лентам на прошлой неделе. Числа в нём нет. Ни в исследовании, на которое он ссылается, ни в теле самой статьи — только в заголовке.

Разберём, что под ним лежит: там есть и настоящая находка, и способ её испортить, и оба стоят внимания больше, чем сама цифра.

Что в препринте

Первоисточник — препринт на arXiv, поданный 13 августа 2026 года: «The ack3 H1 2026 DeFi Incident Dataset: Audit Scope Across 135 Security Incidents». Авторы — Йозеф Гаттермайер, Ян Каливода и Арман Башович.

Их цифры:

  • 135 инцидентов с 1 января по 29 июня 2026 года, суммарно 939,86 млн долларов;
  • у 68 из них нашлась история аудита, потери в этом подмножестве — 721,24 млн;
  • 46 инцидентов из 68 прошли вне границ аудита: 67,6% по количеству и 94,4% по деньгам — 680,97 млн из 721,24 млн.

Ни одно из этих чисел не равно 885 миллионам. Максимум, который можно приписать «протоколам с аудитом», — 721 миллион, это все их потери, и в границах, и вне. Заголовок называет сумму, которая больше всего разбираемого объёма.

Откуда она взялась, точно сказать нельзя, но арифметика подсказывает: 94,4% от 939,86 млн — это 887 млн. Похоже, долю, посчитанную на подмножестве из 68 инцидентов, умножили на общую сумму всех 135. Так проценты и превращаются в деньги, которых не было.

Два инцидента, на которых держится вывод

Дальше интереснее. 94,4% — это почти всё, и звучит как приговор индустрии аудитов. Но посмотрите, из чего эта сумма сложена.

Из 680,97 млн долларов «вне границ» 577 миллионов — это два случая:

  • Kelp DAO, 18 апреля, 292 млн. Атакующий прошёл через мост: за проверку межцепочечных сообщений перед выдачей средств отвечал один-единственный узел, конфигурация «1 из 1».
  • Drift Protocol, 1 апреля, 285 млн. Три вектора подряд: выпуск фальшивого токена, манипуляция оракулом и скомпрометированный админский ключ. Двенадцать минут, 31 вывод.

Оба инцидента специалисты по отслеживанию связали с одной и той же группой, работающей на КНДР.

Авторы препринта честно проверили, что будет без этих двух, — и сами напечатали результат: доля падает с 94,4% до 72,1%. Но упала не только доля. Упало основание: 103,97 млн из 144,24 млн вместо 680,97 из 721,24. Пять шестых денег ушло вместе с двумя строками.

Когда доля держится на паре наблюдений, это не статистика по отрасли, а два случая с процентом сбоку. Проверять такое просто: уберите верхние строки и посмотрите, осталось ли утверждение.

«Вне границ» — не то же самое, что «не проверили»

И вот к чему приводит взгляд на эти два случая вблизи.

Конфигурация верификатора «1 из 1» — это не баг в коде контракта. Это параметр развёртывания. Скомпрометированный админский ключ — это вообще не про код, это про то, где лежал ключ и кто им мог воспользоваться.

Оба случая действительно вне границ типового аудита смарт-контракта, и это не упущение аудитора: он смотрел на то, о чём договаривались. Просто периметр договора не совпал с периметром того, что может разорить протокол.

Отсюда вывод, который авторы и формулируют — единственный, на который данные дают право:

Исследование поддерживает ограниченное заключение: история аудита и границы аудита — разные переменные.

Это очень скромно сказано по сравнению с заголовком. И это правда: наличие отчёта не говорит вам, что именно проверяли.

Кто считал

Ещё одна деталь, без которой картина неполная: двое из трёх авторов работают в ack3 — компании, которая продаёт аудиты безопасности.

Это не дисквалифицирует работу. Датасет выложен открыто, ограничения перечислены самими авторами, и перечислены добросовестно: контрольной группы нет, причинность не устанавливается, непубличные аудиты и незарегистрированные инциденты в выборку не попали, а цифры потерь из разных источников «не вполне сопоставимы».

Но вывод «аудит покрывает меньше, чем вам кажется» для продавца аудитов коммерчески удобен: он не отменяет покупку, а увеличивает её объём. Держать это в голове при чтении стоит — ровно так же, как читать замеры производительности базы данных, опубликованные вендором этой базы.

Что с этим делать

Настоящая находка исследования полезна, и она не про то, что аудиты бесполезны. Она про то, что «прошёл аудит» — не свойство протокола, а свойство куска кода в конкретных границах на конкретную дату. Практически это значит вот что.

Спрашивайте границы, а не факт аудита. У отчёта есть раздел scope. Если вы выбираете, чем пользоваться, или проверяете подрядчика — читайте его первым, до выводов. Вопрос «что вы не смотрели» информативнее вопроса «что вы нашли».

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

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

Не переносите долю с подмножества на целое. Это не про блокчейн, это про чтение любых цифр. 94,4% были посчитаны на 68 инцидентах из 135; применённые ко всем 135, они дали 200 лишних миллионов долларов, которых не существует. Каждый раз, когда видите процент и сумму рядом, спрашивайте, от чего именно этот процент.

Мы писали раньше, что аудитору стоит отдавать контекст заранее, чтобы не платить за его восстановление. Здесь — обратная сторона того же стола: договариваясь о границах, вы решаете не только сколько заплатите, но и что останется вашей проблемой после того, как отчёт придёт.

Сергей Палий

Основатель, Sepia Software

Обо мне

Читать дальше

Все статьи