Перейти к содержимому
SaferICO SaferICOБезопасность смарт-контрактов
Открытый источник — без аккаунта, без платы

Миллиарды исчезли. Код всё ещё на месте.

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

Настоящий кодЗадокументированные источникиПуть атаки для каждого случаяОткрыто для чтения
//Что вы найдёте

Зачем читать чужую катастрофу

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

Путь атаки

От первого шага до вывода денег: что атакующий вызвал, в каком порядке и почему сработал именно этот порядок.

Уязвимый код

Функция в том виде, в каком она была в момент инцидента. Вы читаете изъян собственными глазами, а не его пересказ.

Исправление

Что изменилось после инцидента и какой безопасный шаблон предотвратил бы всё с самого начала.

Класс уязвимости

Каждый случай связан со своим классом уязвимости и с записями того же класса в нашей базе уязвимостей.

Источники

Ссылки на оригинальные постмортемы и независимые разборы безопасности. Каждое число вы проверяете сами.

Фильтр по классу

Отбирайте по году, сети или типу уязвимости — удобно, когда хочется прочитать подряд все случаи reentrancy.

Сами инструменты (сканер, панели, рабочее пространство SAFI) пока работают на английском языке. Эти страницы объясняют всё по-русски — до того, как вы туда перейдёте.

Повторяющийся урок

Инциденты различаются деталями и до неприятного схожи причинами.

⚠️ Бо́льшая часть этих проектов проходила аудит

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

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

01Самая частая ошибка — не в математике

Reentrancy и централизованный контроль над полномочиями объясняют бо́льшую часть суммарных потерь. Оба известны годами, и оба до сих пор повторяются.

Один приватный ключ, способный изменить логику контракта, — единственная точка отказа, каким бы хорошим ни был код вокруг него.

02Мосты и оракулы концентрируют риск

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

03Что с этим делать на практике

  • До запуска проверьте свой контракт на те же классы уязвимостей
  • После запуска включите непрерывный мониторинг — это быстрее, чем узнать из Twitter
  • Ограничьте то, что может сделать один ключ, и поставьте задержку по времени на опасные полномочия
//Вопросы

Об источнике

Читать можно свободно?
Да, вся галерея открыта бесплатно и без аккаунта. Это справочный источник, и прятать его за подпиской противоречило бы его смыслу.
Откуда берутся цифры?
Из опубликованных постмортемов и разборов охранных компаний; у каждого случая есть свои ссылки на источники. Когда источники расходятся в оценке ущерба, мы указываем это, а не выбираем самое крупное число.
Обновляется ли список?
Он пересматривается и расширяется, когда происходит достаточно крупный инцидент или когда выходит постмортем, меняющий наше понимание уже описанного случая.
Как убедиться, что в моём коде нет того же шаблона?
Откройте сканер и вставьте свой код или адрес контракта. На вашем коде работают те же детекторы, которые классифицируют эти инциденты, а наша база уязвимостей подробно описывает каждый класс.

Проверьте контракт до того, как отправите деньги

Вставьте адрес контракта и посмотрите полномочия владельца, ликвидность и результат симуляции продажи — прежде чем рисковать. Небольшая плата за разовую проверку показывается до подписи, а в любой подписке проверки безлимитны.